# admin Xcloud - Full Documentation # (Optional) View the Consumption Tagging App Installation Artifacts The Digital Wallet setup page indicates when you have successfully installed the Consumption Tagging app. However, you can optionally dig deeper to verify that the metadata, objects, and Tableau Next assets were installed, and where you can see them. ## View Installation Status in App Hub A green check mark in the Digital Wallet setup page indicates that you successfully installed the Consumption Tagging app. App Hub provides the status of the app installation: `Success` or `Failed`. In this example, you can see that the Consumption Tagging app installation was successful. From Setup, find and select **App Hub**. ![App Hub indicates that the installation of the Digital Wallet Consumption Tagging app was successful.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-app-hub-success.png) If the installation fails, you can view details in a log file in App Install History. See [Reinstall the Consumption Tagging App If the Installation Fails](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_tagging_app_failure_reinstall.htm&release=264.0.0&type=5 "If the app installation fails, you see a red error toast on the Setup page. You must delete the failed installation of the Consumption Tagging app before you attempt to install it again.") for details. ## View Installation Artifacts in App Install History Make sure that all the objects, metadata, data model objects (DMOs), and semantic data models (SDMs) were installed correctly. From Setup, find and select **App Install History**. ![App Install History enables you to click the App Name to view that the metadata and objects were installed.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-app-install-history.png) If you view the installation details, sometimes, you see a warning for the `readiness_dataspace_query_dmo` task that begins with `404 NOT_FOUND`. You can safely ignore this warning. The installer is checking to make sure that you don’t already have the Consumption Insights DMO installed. ![The install history shows a warning message, 404 NOT\_FOUND, which you can safely ignore.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-app-install-history-dmo-warning.png) ## View the Semantic Data Models (SDMs) in Data 360 In the Data 360 Semantic Layer tab, you can see the two SDMs that the Consumption Tagging app installs. ![In Data 360, the Semantic Layer tab enables you to view the SDMs that were installed as part of the Consumption Tagging app.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-consumption-tagging-app-sdms.png) # 2024 Salesforce Suites release notes for 2024. - **[Summer ’24 Release Notes](https://help.salesforce.com/s/articleView?id=xcloud.starter_prosuite_rn_2024_summer_release.htm&release=264.0.0&type=5)** Explore what’s new in Salesforce Starter and Pro Suite for Summer ‘24. Focus on the information that matters most to you with the enhanced Lightning user interface. Manage campaigns and create content more efficiently. These features and enhancements are available starting in May 2024. - **[Spring ’24 Release Notes](https://help.salesforce.com/s/articleView?id=xcloud.starter_prosuite_rn_2024_spring_release.htm&release=264.0.0&type=5)** Explore what’s new in Salesforce Starter and Pro Suite for Spring ’24. Spend less time searching for apps you need and explore new options that help you get to work more quickly. Analyze and optimize your marketing efforts with the new campaign layout. These features and enhancements became available starting in January 2024. - **[Earlier Starter and Pro Suite Release Notes](https://help.salesforce.com/s/articleView?id=xcloud.starter_prosuite_rn_archive.htm&release=264.0.0&type=5)** Starter and Pro Suite archives release notes older than one calendar year. Refer to the help documentation for the most accurate and current information on using Starter and Pro Suite functionality. # 2025 Salesforce Suites release notes for 2025. - **[Summer ’25 Release Notes](https://help.salesforce.com/s/articleView?id=xcloud.starter_prosuite_rn_2025_summer_release.htm&release=264.0.0&type=5)** Explore what’s new in Salesforce Starter and Pro Suite for Summer ’25. Collaborate in real-time with Slack. Send emails to an audience segment directly from any lead or contact list view. Further customize the content of your marketing emails and more easily manage the data sources powering your email personalizations. These features and enhancements are available starting in May 2025. - **[Spring '25 Release Notes](https://help.salesforce.com/s/articleView?id=xcloud.starter_prosuite_rn_2025_spring_release.htm&release=264.0.0&type=5)** Explore what’s new in Salesforce Starter and Pro Suite for Spring ’25. Find and manage your Commerce payment information faster with the refreshed Pay Now experience. Create campaign audiences more easily with quick filters and preview. These features and enhancements are available starting in January 2025. - **[Winter ’25 Release Notes](https://help.salesforce.com/s/articleView?id=xcloud.starter_prosuite_rn_2025_winter_release.htm&release=264.0.0&type=5)** Explore what’s new in Salesforce Starter and Pro Suite for Winter ‘25. Sell to shoppers by building an online commerce store with the new setup assistant. Boost your productivity with new features such as shared workspace folders and additional consent tools. These features and enhancements are available starting in September 2024. # 2026 Salesforce Suites release notes for 2026. - **[Winter ’26 Release Notes](https://help.salesforce.com/s/articleView?id=xcloud.starter_prosuite_rn_2026_winter_release.htm&release=264.0.0&type=5)** Explore what’s new in Salesforce Small Business Suites for Winter ’26. Explore the new Free Suite edition designed for small businesses. Use Salesforce Channels for Slack to connect your team across Salesforce and Slack. Easily configure forms for external sites and add necessary integrations to enhance functionality and security. Discover new capabilities that come with sending marketing emails from a list. These features and enhancements are available starting in September 2025. # 360-Degree View of Your Customers Salesforce Foundations comes with integrated applications, the ability to unify your customer data, and dashboards that provide a comprehensive view of customer interactions. So every employee gets a full picture of the customer. ### Required Editions
Available in: View supported editions.
![Sales features: Opportunity Management, Account Management, Contact Management, and Lead Management; Service features: Service Console, Knowledge Management, Omni-Channel Routing, Email-to-Case, and Macros; Data Cloud features: Segmentation and Unified Profile; Commerce features: Storefront, Pay Now, and Search + SEO; Marketing features: Campaigns, Flows + Flow Templates, Segments, and Einstein Send Time Optimization.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-base-264-0-0-production-enus/cd97a2ff-8dc4-4a9d-a8f3-2c94cb4fdc33/base/images/foundations_features.png) Already a Sales Cloud customer? Drive more revenue with sales, service, and marketing teams working in one place. Use foundational service functionality to keep opportunities on track with insights into service cases. Add relevant customers to marketing-created nurture campaigns. Already a Service Cloud customer? Use foundational sales, marketing, and commerce functionality to strengthen your relationship with customers. Add customers to marketing onboarding journeys to create higher-touch onboarding experiences. With a single view of your customer, your teams can create connected, personalized customer experiences that build stronger relationships. See [Included Features in Salesforce Foundations](https://help.salesforce.com/s/articleView?id=xcloud.base_features.htm&language=en_US) and [Supported Editions for Salesforce Foundations](https://help.salesforce.com/s/articleView?id=xcloud.base_editions.htm&language=en_US). ## Centralized Data Salesforce Foundations comes with Data Cloud running behind the scenes ‌to unify your data and get it AI-ready. Get the real-time insights you need to personalize every customer experience, at every touchpoint. #### See Also - [About Salesforce Data Cloud](https://help.salesforce.com/s/articleView?id=data.c360_a_data_cloud.htm&type=5&language=en_US) - [_Trailhead:_ Salesforce Data Cloud: Quick Look](https://trailhead.salesforce.com/content/learn/modules/salesforce-genie-quick-look) # 5 Easy Ways to Keep Your Customers Happy The MVPs of successful businesses are their loyal customers. Repeat customers are more likely to buy from your business a second time as well as spread the word about it to new customers. It also costs less to retain them than it does to acquire new customers. So here are some ways to get started. | What to Do | Details | | --- | --- | | Make communication a top priority | Customers have high expectations about the speed and frequency of communication. The first step is setting expectations for yourself or your team. Get aligned on getting back to customers within a day or less to build trust and keep customers up-to-date. Whether by tweet, text, DM, or email, keep your customers updated if they’ve asked a question or logged a case. It’s a great opportunity to turn an issue into an awesome customer experience. | | Make it easy to find help | Many customers prefer self-service solutions over speaking with support. Write knowledge articles for the features, products, or services that people often ask about to reduce inbound emails and let your customers help themselves! | | Set realistic expectations | Make claims to customers about the quality and features your product that you can deliver. Unmet expectations can break trust, so it’s key to be truthful and transparent. | | Take to your customers like real people | Skip the marketing speak and technical terms when you’re talking to customers. They appreciate your candid advice and you can resolve their questions faster. | | Create moments of connection | Whenever you can, show the customer that you care. Whether it’s a personalized message on their birthday or a coupon code around the holidays, let them know you’re grateful for their support. | # 5 Minute Upgrades Salesforce reserves just five minutes of scheduled maintenance time to roll out new major versions of our service. These upgrades to the next release occur three times per year. ### Required Editions
Available in: Salesforce Classic
Available in: All Editions
Although your organization should expect to experience a disruption of up to five minutes, the interruption is typically one minute or less. Users receive an error message letting them know that the service is unavailable during the upgrade, and are prompted to log in again when the upgrade is complete. # 5 Sales Secrets from Top Sales Execs at Salesforce Closing deals is crucial to growing your business. If you don’t have tons of experience convincing customers to sign on the dotted line, don’t worry. Here are some proven techniques from our top sellers at Salesforce. Before our sales leaders take to the phones or send out an email, Do your homework Before you reach out, have all the important details in hand and a list of questions to ask. Here are the questions our experts make sure to cover in that first call or email: - Who are the decision makers? - What is the budget? - Has the prospect used something like your product or service before? - What’s the timeline? Make sure they’re ready to have a purchasing conversation Sometimes customers are interested in learning more about your product, but aren’t ready to make a decision. Ask them upfront where they’re at in the decision making process so you know just how much effort to spend on trying to close the deal. Be up-front When you’re talk to a prospect or a customer about costs, your offerings, or what to expect, make sure to provide accurate information. Help them make well-informed decisions about your product and build trust that you will deliver what you say you can. Look for signals Do they respond to your emails? Pick up your phone calls? Are they enthusiastic? Sometimes the simplest indications of readiness are a sign for you to follow up, send a proposal, or move on to a more qualified lead. Always bring it back to the customer At every opportunity, bring the conversation back to the customer. Use their industry as an example in your demo, shape meetings around what works best for their schedule and timeline, and find ways to solve their pain points in your pitch. It shows that your product or service would provide value to the customer—the ultimate clincher in closing a deal. Use the tips from our top sales people to help you focus on what’s important to the customer, show the value of your product, and move decision makers through your pipeline. Pick up on subtle clues throughout the prospecting process so you can track your progress and decide if the deal is worth pursuing. Spend time on deals that are likely to convert to save time and keep your business growing. # About Consent Templates Create reusable templates to capture preferences based on the objects that you want to use to store the consent information. You can also structure how your preference forms collect consent based on your brands, data use purposes, and subscriptions. ### Required Editions
Available in: Lightning Experience and Salesforce Classic in Developer, Enterprise, Performance, and Unlimited Editions
Use consent templates for a streamlined approach to using consent objects, without the advanced customizations of the Apex-based method. When you create and activate a consent template, you can use it to populate a new preference form. ## Basic Consent Template This template tracks consent preferences at the field level, and it stores the preferences in standard or custom objects. To create a basic consent template, choose an object, then select up to 30 fields on that object to track. You can only include Boolean or picklist fields in basic consent templates. When used to generate forms in Experience Cloud sites, the basic template requires an associated [access token](https://help.salesforce.com/s/articleView?id=xcloud.preference_center_tokens.htm&release=264.0.0&type=5 "Create preference form access tokens in Preference Manager so that your users can view and edit your preference forms from an external site, a static web page, or an Experience Cloud site without logging in.") regardless of whether the user is logged in. The template loads values from a record that's identified by the access token. If a token isn't included in the form's URL, then the form can't load. ![Image shows how to pick fields for template](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/data_protection_and_privacy/images/pref_manager_basic_template.png) ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_example.png) Example You create a template to track fields on the Contact object that indicate how a customer wants to be contacted. When you create a form with this template, your customer chooses their preferences for the fields that you included, such as Do Not Call and Fax Opt Out. ## Channel Consent Template This template type tracks preferences for contact point types, such as phone, web, and social. Channel consent templates read and update preferences on the Contact Point Type Consent and Individual objects. To create a channel consent template, choose the brands and data use purposes that you want to track preferences for. Then select the channel types to track for each data use purpose within each brand. The bulk selection option is an easy way to select a channel type across multiple data use purposes. When a contact point type option is selected on a preference form, a record is created on the Contact Point Type Consent object. The Privacy Consent Status on the record is set to opt in. If a contact point type option isn’t selected, the Privacy Consent Status on the record is set to opt out. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_example.png) Example You create a Channel Consent Template for the marketing department of your parent org to track contact preferences across your two brands, Acme and Global Media. When you create a form with this template, your customers can select the channel types that they want both brands to contact them through. For instance, a customer can opt to receive emails from Acme and physical mail from Global Media at home. ## Detailed Consent Template This template type tracks preferences for the contact points email, phone, and address. Detailed consent templates read and update preferences on the Contact Point Consent object. Choose the brands and data use purposes that you want to track preferences for, then select the channel types to track for each data use purpose within each brand. The bulk selection option is an easy way to select a channel type across multiple data use purposes. When a contact point option is selected on a preference form, a record is created on the Contact Point Consent object with the Privacy Consent Status set to opt in. If a contact point option isn’t selected, the Privacy Consent Status on the record is set to opt out. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_example.png) Example You create a Detailed Consent Template for the marketing department of your parent organization to track contact preferences across your two brands, Acme and Global Media. When you create a form with this template, your customers can select how they want both brands to contact them by using contact details listed in their profile. For instance, a customer can choose to receive marketing emails from Acme to their personal email and physical mail from Global Media at work. ## Communication Subscription Consent Template This template type tracks preferences for contact channel types on selected communication subscriptions, so customers can opt in to recurring communications. Communication Subscription consent templates read and update preferences on the Communication Subscription Consent object. Choose the brands and communication subscriptions that you want to track preferences for, then select the channel types to track for each subscription. When a contact point option is selected on a preference form, a record is created on the Communication Subscription Consent object with the Privacy Consent Status set to opt in. If a contact point option isn’t selected, the Privacy Consent Status on the record is set to opt out. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_example.png) Example You create a Communication Subscription Consent Template for the marketing department of your parent organization to track contact preferences across your two brands, Acme and Global Media. When you create a form with this template, your customers can select which contact points listed in their profile that they want both brands to use and for which subscriptions. For instance, a customer can choose to receive weekly blog emails from Acme to their work email and monthly marketing flyers from Global Media to their residence. # About Digital Wallet Welcome! Digital Wallet is a free account management tool that's your one-stop hub for viewing and analyzing your footprint across your Salesforce product portfolio. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions
Not available in: Sandboxes
User Permissions Needed
To access the Digital Wallet home page and Consumption Cards: View Consumption
To view, manage, or assign consumption tags View Consumption Tags, Manage Consumption Tags, or Assign Consumption Tags
To access Consumption Analytics: View Consumption
To access License Utilization: View License Utilization
To use the Your Account app: Manage Billing or the Your Account App admin user permission set
To see an expanded list of required permissions, permissions sets, and licenses for Digital Wallet features, see [Digital Wallet Permissions](https://help.salesforce.com/s/articleView?id=xcloud.wallet_permissions.htm&release=264.0.0&type=5 "To access Digital Wallet and its features, users require a combination of user permissions, permission sets, and licenses. To access Digital Wallet, you must have a Data 360 license and not a Customer Data Platform (CDP) license."). ## Digital Wallet Features At a Glance
Feature For More Information
Monitor and manage your Salesforce investment from a central hub with the Digital Wallet app’s home page. Gain direct access to the tools to track and monitor daily usage, view billing information, and get immediate insights into consumption trends. See “Digital Wallet Home Page” in Access Digital Wallet.
View real-time license utilization information for your seat-based products.

View License Utilization in Digital Wallet

Manage License Utilization Threshold Alerts and Notifications

Monitor and analyze near-real-time usage for your consumption-based products.

Monitor Usage for Consumption-Based Products in Digital Wallet

Manage Consumption Threshold Alerts and Notifications

Track your product limits in Digital Wallet to stay on top of your usage and proactively plan for your organization's capacity needs.

Track Product Limits Utilization

Manage Product Limits Threshold Alerts and Notifications

View the Consumption Insights dashboard, which includes Data 360 reports that leverage standard consumption tags. Gain a granular view of your consumption by agent, action, and other consumption sources. Consumption Insights Dashboard (Data 360 Reports)
View the Consumption Analytics dashboard, which includes Tableau Next visualizations that leverage standard consumption tags. Seamlessly delve deeper to reveal underlying details and optimize business planning with consumption forecasting. Consumption Analytics Dashboard (Tableau Next)
Organize and categorize your usage data to the level of granularity you require based on your specific company business needs and internal structure by creating custom consumption tags. Manage and Report on Business-Specific Custom Tags
- **[Digital Wallet Permissions](https://help.salesforce.com/s/articleView?id=xcloud.wallet_permissions.htm&release=264.0.0&type=5)** To access Digital Wallet and its features, users require a combination of user permissions, permission sets, and licenses. To access Digital Wallet, you must have a Data 360 license and not a Customer Data Platform (CDP) license. - **[Access Digital Wallet](https://help.salesforce.com/s/articleView?id=xcloud.wallet_access.htm&release=264.0.0&type=5)** You can access Digital Wallet from the Digital Wallet app or the Your Account app. The Digital Wallet app provides access to all Digital Wallet features. - **[Digital Wallet Glossary of Terms](https://help.salesforce.com/s/articleView?id=xcloud.wallet_glossary.htm&release=264.0.0&type=5)** Review Digital Wallet’s key terms to help you understand your consumption data in Digital Wallet’s interface. - **[Get Digital Wallet Support](https://help.salesforce.com/s/articleView?id=xcloud.wallet_get_support.htm&release=264.0.0&type=5)** Learn how to get help with your Digital Wallet integration, usage data, or overages related to Digital Wallet-enabled products. - **[View License Utilization in Digital Wallet](https://help.salesforce.com/s/articleView?id=xcloud.wallet_license_utilization.htm&release=264.0.0&type=5)** License Utilization is your one-stop hub for viewing your seat-based licenses information in Digital Wallet. License Utilization provides a clear, unified picture of the products you’ve purchased and their corresponding licenses. It provides accurate, real-time data, in a single, trusted place. All license data, including metrics, percentages, and totals, pertain to the org where you’re viewing the license information. - **[Monitor Usage for Consumption-Based Products in Digital Wallet](https://help.salesforce.com/s/articleView?id=xcloud.wallet_monitor_usage.htm&release=264.0.0&type=5)** Digital Wallet Consumption Cards provides consumption information for monitoring and observing usage trends over time. It uses Data 360 core features to collect usage data from various services, process it in near real-time, and store the consumption records as data lake objects (DLOs). This architecture allows Digital Wallet to provide granular, unified tracking of consumption-based products, including Data 360, Agentforce, and more. - **[Track Product Limits Utilization](https://help.salesforce.com/s/articleView?id=xcloud.wallet_product_limits.htm&release=264.0.0&type=5)** Track your product limits in Digital Wallet to stay on top of your usage and proactively plan for your organization's capacity needs. Product Limits provides a single view of your purchased allowances and utilization, helping you manage overall product limits consumption. - **[Get Notified When You Cross Usage Thresholds](https://help.salesforce.com/s/articleView?id=xcloud.wallet_get_notified.htm&release=264.0.0&type=5)** Digital Wallet provides several flow templates that offer solutions for proactively managing your org’s resources by notifying stakeholders when specific utilization thresholds are reached. Instead of manually monitoring usage, you can establish automated guardrails by using flows to flag critical milestones, such as 80% consumption or 95% license allocation. - **[Build Custom Reports for Consumption Insights](https://help.salesforce.com/s/articleView?id=xcloud.wallet_custom_reports_build.htm&release=264.0.0&type=5)** Beyond the predefined reports, the underlying tagged data in Data 360 provides more tailored insights through the TenantEnrichedUsageEvent data lake object (DLO). You can create your own custom reports and dashboards based on your unique business needs. - **[Get Actionable Insights with Standard Consumption Tags](https://help.salesforce.com/s/articleView?id=xcloud.wallet_usage_tags_overview.htm&release=264.0.0&type=5)** Consumption tags are a framework that provides enhanced transparency into your consumption-based products. Digital Wallet provides a set of standard consumption tags, which are additional metadata alongside the standard billing metrics. These tags provide more granular data that enables you to uncover deeper insights into usage patterns. Reports built with standard consumption tags provide visual representations of what agents, usage types, features, and sources (to name a few) are driving consumption and help you determine where you want to further invest. - **[Manage and Report on Business-Specific Custom Tags](https://help.salesforce.com/s/articleView?id=xcloud.wallet_custom_tags_intro.htm&release=264.0.0&type=5)** Track and optimize your consumption through your specific business lens. Custom consumption tags empower you to gain deeper, business-specific insights by creating and managing your own tags to track consumption based on unique categories, such as department and cost center. - **[Digital Wallet FAQ](https://help.salesforce.com/s/articleView?id=xcloud.wallet_faq.htm&release=264.0.0&type=5)** Find answers to frequently asked questions about how to understand how Digital Wallet works, interpret your consumption data, and understand billing discrepancies. - **[Troubleshoot Digital Wallet](https://help.salesforce.com/s/articleView?id=xcloud.wallet_troubleshoot.htm&release=264.0.0&type=5)** Find solutions and guidance for common issues you can encounter when using Digital Wallet and its associated features. #### See Also - [Digital Wallet Glossary of Terms](https://help.salesforce.com/s/articleView?id=xcloud.wallet_glossary.htm&release=264.0.0&type=5 "Review Digital Wallet’s key terms to help you understand your consumption data in Digital Wallet’s interface.") - [Multi-Contract Consumption in Digital Wallet](https://help.salesforce.com/s/articleView?id=xcloud.wallet_multiple_contracts.htm&release=264.0.0&type=5 "A multi-contract scenario happens when your company purchases the same Digital Wallet entitlement under multiple contracts on the same org. Learn how to identify a multi-contract sceanrio in Digital Wallet.") # About Managed Packages A managed package is a container that includes the components of a Salesforce application, and it’s a mechanism for installing apps in Salesforce orgs. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_important.png) Important This topic only applies to Government Cloud customers, whose apps still use the legacy connected apps framework. The majority of Mobile Publisher customers, whose apps use the [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_eca_migration.htm&language=en_US) framework, don't need to request, install, or maintain managed packages to use Mobile Publisher. After you have a draft of the Android and iOS versions of your Mobile Publisher app, it’s time to request a managed package. Salesforce creates a managed package for each Android and iOS app. A managed package is required for the Mobile Publisher app to function correctly. The managed package includes components that help your app run properly. For example, push notifications won’t work unless you install the Mobile Publisher managed package in your Salesforce licensed orgs. # About the Migration Process The migration process uses the Omnistudio Migration Assistant to move components such as Flexcards, Omniscripts, Data Mappers, Integration Procedures, custom labels, Omni Global Auto Numbers, and related objects such as Apex classes, FlexiPages, Experience Cloud site pages, Lightning web components (LWCs), and custom labels from managed package runtime and Omnistudio Foundation package to the Omnistudio standard runtime. This makes sure that the components from industry packages such as Insurance (INS), Communications, Media, and Energy (CME), and Public Sector (PS) match the standard runtime, easing maintenance and upgrades. This process supports migration from: - Vlocity Industries managed package runtime and custom data model to the Omnistudio standard runtime and standard data model. - Vlocity Industries managed package runtime and standard data model to the Omnistudio standard runtime. - Omnistudio Foundation package runtime and standard data model to the Omnistudio standard runtime. This ensures that components align with the standard runtime for easier maintenance and upgrades. After the migration process is complete, all your applications and workflows that were built on the managed package runtime and Omnistudio Foundation package continue to work on the standard runtime. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If your org has Vlocity managed packages (vlocity\_ins, vlocity\_ps, and vlocity\_cme) or Omnistudio Foundation packages, don’t uninstall them. This is an overview of the steps for migrating to the Omnistudio standard runtime: 1. Check your Cloud compatibility: 1. Contact your Salesforce Account Executive to verify your Cloud compatibility: - Confirm whether your Industry Cloud supports the Omnistudio standard runtime. - Review and confirm that the features you require are supported in the Omnistudio standard runtime. 2. Upgrade to the Vlocity Industries managed package version Winter ‘26 or later. 2. Plan and complete your migration process in phases to avoid business disruptions. The Omnistudio Migration Assistant runs in Assess mode to help you assess the migration readiness of your components, and then in Migrate mode to perform the actual migration. 1. Prepare 1. Set up environments and licenses. 2. Select your workflows for migration, validate it, and record it so that you can compare it post migration to make sure the migration worked as expected. 2. Assess ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If your org is already on the standard data model with the Omnistudio Metadata API setting enabled, the Omnistudio Migration Assistant does not assess and generate assessment reports for the Omnistudio components such as Data Mappers, Omniscripts, Integration Procedures, and Flexcards. In this scenario, the Omnistudio Migration Assistant assesses only custom labels and the related objects such Apex, class, LWCs, and FlexiPages to resolve namespace and reference dependencies. 1. Run the Omnistudio Migration Assistant in Assess mode. 2. Review the assessment reports and fix any identified issues. 3. Migrate ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Before you run the Omnistudio Migration Assistant in Migrate mode, make sure you run it in Assess mode, review the assessment reports, and resolve any issues. 1. Run Omnistudio Migration Assistant in Migrate mode to perform the actual migration of workflows. 2. Review the migration reports. 4. Validate your flows to make sure that they are working correctly. 5. Deploy the migrated workflows to your production environment. 6. Switch to the Omnistudio standard runtime and standard designers. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important The Omnistudio migration process only migrates Omnistudio components. It does not migrate records from your Vlocity Industries managed package data model (for example: policies, accounts, or cases) or any user data displayed or managed through those Omnistudio components. ## Omnistudio Migration Assistant Supported Scenarios and Readiness This table describes the supported starting configurations for Omnistudio and explains how the Migration Assistant prepares your org for the standard runtime by migrating components, enabling required settings, and removing managed package dependencies.
Before Migration Migration Actions Performed Package Dependencies Removed Experience Sites and FlexiPages Updates After Migration
Custom Data Model + Industries managed package + Omnistudio Metadata API manually enabled Assesses and migrates these components that are on custom data model and Vlocity Industries managed package runtime (vlocity_cmt, vlocity_ins, and vlocity_ps) to standard data model and Omnistudio standard runtime: Flexcards, Omniscripts, Data Mappers, Integration Procedures, custom labels, Omni Global Auto Numbers, and related objects such as Apex classes, FlexiPages, Experience Cloud site pages, and Lightning web components (LWCs).

Removes managed package dependencies from:

  • Custom Labels
  • Global Autonumbers
  • LWCs
  • Apex classes
Replaces Vlocity wrappers with Omnistudio standard wrappers. Standard data model + Omnistudio standard runtime
Standard Data Model + Industries managed package + Omnistudio Metadata API disabled Assesses and migrates these components that are on standard data model and Vlocity Industries managed package runtime (vlocity_cmt, vlocity_ins, and vlocity_ps) to Omnistudio standard runtime and enables the Omnistudio Metadata setting: Flexcards, Omniscripts, Data Mappers, Integration Procedures, custom labels, Omni Global Auto Numbers, and related objects such as Apex classes, FlexiPages, Experience Cloud site pages, and Lightning web components (LWCs).

Removes managed package dependencies from:

  • Custom Labels
  • Global Autonumbers
  • LWCs
  • Apex classes
Replaces Vlocity wrappers with Omnistudio wrappers and updates the references automatically for Omnistudio standard wrappers. Omnistudio standard runtime + the Omnistudio Metadata setting enabled.
Standard Data Model + Industries managed package + Omnistudio Metadata API enabled Assesses and migrates these components that are on standard data model and Vlocity Industries managed package runtime (vlocity_cmt, vlocity_ins, and vlocity_ps) to Omnistudio standard runtime: Flexcards, Omniscripts, Data Mappers, Integration Procedures, custom labels, Omni Global Auto Numbers, and related objects such as Apex classes, FlexiPages, Experience Cloud site pages, and Lightning web components (LWCs).

Removes managed package dependencies from:

  • Custom Labels
  • Global Autonumbers
  • LWCs
  • Apex classes
Replaces Vlocity wrappers with Omnistudio wrappers and updates the references automatically for Omnistudio standard wrappers. Omnistudio standard runtime
Standard Data Model+Foundation Package+Metadata API disabled Assesses and migrates components on the standard data model and Omnistudio Foundation package to the Omnistudio standard runtime and enables the Omnistudio Metadata setting. The Omnistudio Migration Assistant automates record renaming to meet alphanumeric requirements and updates all internal references. It also modifies Custom Functions by updating namespace syntax and converting unsupported logic such as REPLACE into the required FUNCTION format. This includes Flexcards, Omniscripts, Data Mappers, Integration Procedures, and related objects such as Apex classes and Experience Cloud sites.

Removes managed package dependencies from:

  • Custom Labels
  • LWCs
  • Apex classes
Note
Note Unlike other scenarios, Global Auto Numbers are not supported because the corresponding custom entity does not exist in the Omnistudio namespace.
Updates the references automatically for Omnistudio standard wrappers. Omnistudio standard runtime + the Omnistudio Metadata setting enabled.
Standard Data Model+Foundation Package+Metadata API enabled Assesses and migrates components on the standard data model and Omnistudio Foundation package to the Omnistudio standard runtime. The Omnistudio Migration Assistant automates record renaming to meet alphanumeric requirements and updates all internal references. It also modifies Custom Functions by updating namespace syntax and converting unsupported logic such as REPLACE into the required FUNCTION format. This includes Flexcards, Omniscripts, Data Mappers, Integration Procedures, and related objects such as Apex classes and Experience Cloud sites.

Removes managed package dependencies from:

  • Custom Labels
  • LWCs
  • Apex classes
Note
Note Unlike other scenarios, Global Auto Numbers are not supported because the corresponding custom entity does not exist in the Omnistudio namespace.
Updates the references automatically for Omnistudio standard wrappers. Omnistudio standard runtime
# About the Omnistudio Migration Assistant The Omnistudio Migration Assistant is a Salesforce CLI plugin that helps automate the migration of Omnistudio components such as Flexcards, Omniscripts, Data Mappers, and Integration Procedures from the Vlocity Industries managed package or Omnistudio Foundation package runtime to the Omnistudio standard runtime. This process also helps you migrate custom labels, Omni Global Auto Numbers, and related objects such as Apex classes, FlexiPages, Experience Cloud site pages, Lightning web components (LWCs), and custom labels. The Omnistudio Migration Assistant CLI supports two primary modes of operation: - Assess mode: - Runs an analysis of all Omnistudio components in your org without modifying them. - Generates an assessment report based on the analysis. - Provides information about how migration impacts your Omnistudio components if you migrate them to the standard runtime, helping you assess the outcome in advance. The report provides information about the components that are ready for migration, require manual intervention, failed, and components with warnings. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Always run the Omnistudio Migration Assistant in Assess mode before running the Migrate mode. This helps you understand the impact of the migration and avoid incomplete or incorrect migrations. Review the assessment report for any failed statuses and resolve them before proceeding with migration. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If your org is already on the standard data model with the Omnistudio Metadata API setting enabled, the Omnistudio Migration Assistant does not assess and generate assessment reports for the Omnistudio components such as Data Mappers, Omniscripts, Integration Procedures, and Flexcards. In this scenario, the Omnistudio Migration Assistant assesses only the related objects such Apex, class, LWCs, FlexiPages, and Custom Labels to resolve namespace and reference dependencies. - Migrate mode: - Performs the actual migration. - Automatically migrates the components from the managed package runtime or Omnistudio Foundation package runtime to the Omnistudio standard runtime. - Generates a migration report with information about the components that are migrated, skipped, and failed. ## Benefits The Omnistudio Migration Assistant offers these key advantages for your migration process: - Time-saving: Automates the migration, significantly reducing manual effort and minimizing the risk of human error. - Standardization: Helps you align with the standard data model, enabling easier maintenance and smoother future upgrades. By leveraging the Omnistudio Migration Assistant, you can ensure a more efficient and controlled migration, making the transition to the standard runtime as seamless as possible. # About Timesheets and Labor Cost Optimization Enable mobile workers to input and manage their time, even when they are offline. Enable supervisors, time clerks, and crew leads to bulk edit and approve timesheets. Drive compliance with labor laws and union rules, flag non-compliant timesheet entries and automate meal allocations with Business Rules Engine. Gain insights into operations and costs with a unified view using data from Enterprise Resource Planning systems, fleet management systems, labor union rules, and projects. ### Required Editions
Available in: Lightning Experience
Available in: All editions of Field Service Plus for Energy & Utilities, and all editions of Asset Service Lifecycle Management
Timesheets and Labor Cost Optimization is available as an app for mobile workers in the Field Service Mobile App. The supervisor and crew lead experiences are available in the Salesforce desktop experience. To use Timesheets and Labor Cost Optimization, you must have the Field Service Mobile app set up. See [Set Up Field Service](https://help.salesforce.com/s/articleView?id=service.fs_set_up.htm&language=en_US). ## Data Model ![Timesheets and Labor Cost Optimization Data Model](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/asset_service_lifecycle_mgmt/images/energy-and-utilities-timesheets-data-model-25s.png) The Timesheets and Labor Cost Optimization datamodel uses the following objects: - [Vehicle Definition](https://developer.salesforce.com/docs/atlas.en-us.automotive_cloud.meta/automotive_cloud/sforce_api_objects_vehicledefinition.htm) - [Vehicle](https://developer.salesforce.com/docs/atlas.en-us.automotive_cloud.meta/automotive_cloud/sforce_api_objects_vehicle.htm) - [Time Sheet](https://developer.salesforce.com/docs/atlas.en-us.field_service_dev.meta/field_service_dev/sforce_api_objects_timesheet.htm) (For extended attributes, see [Timesheet](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_timesheet.htm)) - [Time Sheet Entry](https://developer.salesforce.com/docs/atlas.en-us.field_service_dev.meta/field_service_dev/sforce_api_objects_timesheetentry.htm) (For extended attributes, see [TimeSheetEntry](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_timesheetentry.htm)) - [Time Sheet Entry Item](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_timesheetentryitem.htm) - [Time Sheet Wage Type Summary](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_timesheetwagetypesummary.htm) - [Time Sheet Validation Error](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_timesheetvalidationerror.htm) - [Work Type](https://developer.salesforce.com/docs/atlas.en-us.field_service_dev.meta/field_service_dev/sforce_api_objects_worktype.htm) - [Work Order](https://developer.salesforce.com/docs/atlas.en-us.field_service_dev.meta/field_service_dev/sforce_api_objects_workorder.htm) - [Work Order Line Item](https://developer.salesforce.com/docs/atlas.en-us.field_service_dev.meta/field_service_dev/sforce_api_objects_workorderlineitem.htm) (For extended attributes, see [WorkOrderLineItem](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_workorderlineitem.htm)) - [Service Crew Member](https://developer.salesforce.com/docs/atlas.en-us.field_service_dev.meta/field_service_dev/sforce_api_objects_servicecrewmember.htm) - [Service Resource](https://developer.salesforce.com/docs/atlas.en-us.field_service_dev.meta/field_service_dev/sforce_api_objects_serviceresource.htm) (For extended attributes, see [ServiceResource](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_serviceresource.htm)) - [Service Resource Cost Rule](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_serviceresourcecostrule.htm) - [Cost Center](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_costcenter.htm) - [Job Expense Type](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_jobexpensetype.htm) - [Overtime Type](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_overtimetype.htm) - [Overtime Approver](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_overtimeapprover.htm) - [Pay Type](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_paytype.htm) - [Pay Grade](https://developer.salesforce.com/docs/atlas.en-us.psc_api.meta/psc_api/sforce_api_objects_paygrade.htm) - [Supplemental Compensation](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_supplementalcompensation.htm) - [Labor Union](https://developer.salesforce.com/docs/atlas.en-us.eu_developer_guide.meta/eu_developer_guide/sforce_api_objects_laborunion.htm) - [User](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_user.htm) ## Components in Timesheets and Labor Cost Optimization Timesheets and Labor Cost Optimization uses easily configurable components available with the Salesforce platform. For details of the components used in the app, see the [Timesheets and Labor Cost Optimization - Bill of Materials](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/Qg0000024jv3/WvX3BWWCxw5hUkSdJXw1v5xBPGYstpxhbicxTBkjLLM). - [Salesforce Field Service](https://help.salesforce.com/s/articleView?id=service.fs_overview.htm&language=en_US) - [Field Service Mobile App](https://help.salesforce.com/s/articleView?id=service.mfs_overview.htm&language=en_US) - Lightning Web Components ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note The Lightning Web Components (LWCs) listed in the bill of material are not editable. To know more about creating your own LWCs, see [Lightning Web Components Developer Guide](https://developer.salesforce.com/docs/platform/lwc/guide). - [Business Rules Engine](https://help.salesforce.com/s/articleView?id=ind.business_rules_engine.htm&type=5&language=en_US) - [Flows](https://help.salesforce.com/s/articleView?id=platform.flow.htm&type=5&language=en_US) - [Geolocation-Based Actions](https://help.salesforce.com/s/articleView?id=service.fs_glba.htm&language=en_US) - [Custom Tabs in Salesforce Field Service Mobile App](https://help.salesforce.com/s/articleView?id=service.mfs_builder.htm&language=en_US) - [Absence resource request](https://help.salesforce.com/s/articleView?id=service.mfs_resource_absence.htm&language=en_US) - **[Recommendations for Objects](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_recommendations_for_objects.htm&release=264.0.0&type=5)** When setting up Timesheets and Labor Cost Optimization objects, understand their purpose and the best practices. - **[Object Access Levels with User Permissions](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_object_access_levels_with_user_permissions.htm&release=264.0.0&type=5)** Set the access of objects based on the roles of technicians, supervisors, and admins with permission sets for Timesheets and Labor Cost Optimization. - **[Categorizing Technician Time with Time Sheet Entry Records](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_categorizing_technician_time_with_time_sheet_entry_records.htm&release=264.0.0&type=5)** The Time Sheet Entry records represent the time that a technician spends on a field service task. To ensure compliance with labor laws, use the Time Sheet Entry record to categorize the time your technician has spent on different tasks in a shift. - **[Summary View Enhancements with Pay Cycle Filtering](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_summary_view_enhancements_with_pay_cycle_filtering.htm&release=264.0.0&type=5)** Service Resources and crew leads can now filter the summary view by This Week, Last Week, Current Pay Period or , or Previous Pay Period or Cycle in addition to the existing custom date range option. The backend logic relies on the service resource's assigned Pay Group to determine pay period boundaries. Aggregated totals for regular time, time and a half, and double time update based on the selected filter. Additionally, meal counts and shift differential hours are now displayed in the aggregated summary. - **[Idle Time Entry Creation](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_idle_time_entry_creation.htm&release=264.0.0&type=5)** Administrators can configure the automatic time rounding feature to create idle time entries instead of closing gaps between consecutive timesheet entries. When enabled, gaps within the configured threshold generate a new idle time entry rather than extending the previous entry. This capability is useful for tracking breaks or transition time between tasks. The Time Gap Threshold accepts values from 0 to 480 minutes (8 hours), with validation to prevent excessively high values. - **[Mobile Crew Lead Time Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_mobile_crew_time_management.htm&release=264.0.0&type=5)** Introduces the Enable Crew Management toggle in the Advanced Timesheets and Labor Cost Optimization Settings. When enabled, crew leads can manage crew members' timesheets in the Salesforce Field Service mobile app. The crew lead's mobile timesheets landing screen lets the crew lead create, edit, and manage each service resource's time, including timesheets, timesheet entries, timesheet items, and wage type summaries. The crew lead can create time for crew members in bulk or individually. This dedicated crew lead experience, with time aggregated by crew member, is available after an admin turns on the org preference for crew lead functionality in Setup. - **[Rejected Timesheet Resubmission and Pull-Down Refresh](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_rejected_timesheet_resubmission_and_pull_down_refresh.htm&release=264.0.0&type=5)** Service Resources can now edit and resubmit rejected timesheets as if they were in the Verified state, eliminating the need to create new timesheet records after rejection. Pull-down refresh is implemented across the Timesheet History, Timesheet Details, Work Order, Meals and Gifts, and Time Off pages, providing a consistent mobile experience for viewing updated data. - **[Pay Period Date Validation](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_pay_period_date_validation.htm&release=264.0.0&type=5)** Pay Period is used in the mobile app so that the Service Resource may see their total hours over a day, week and over their personal pay period. Pay period records now include enhanced date validation that prevents saving records where the end date is before the start date. The validation message guides users to select an end date that is on or after the start date, ensuring data integrity in pay period configuration. # Accelerate Implementation with the Configuration Checklist Configure these core items before creating and assigning shifts. If you set up Workforce Management to create a capacity plan, you completed some steps already. If you completed a step, skip it and proceed to the next one. | Step | Configuration | Documentation | | --- | --- | --- | | 1 | Assign permission sets to administrative users and workers. | Manage Permission Set Assignments | | 2 | Set standard object permissions for Service Resource Preferences to View All Records. | Edit Object Permissions in Profiles | | 3 | Add related lists (Time Slots, Skill Requirements, Service Territory, Shifts, Skills, Preferences, Absences) to object layouts. | Add a Related List to an Object | | 4 | Create operating hours with time slots to represent business operating hours. | Create Operating Hours with Time Slots | | 5 | Create service territories for locations or operational territories. | Create a Service Territory | | 6 | Create a service resource record for each worker, set the Resource Type, and assign service territories. | Create Service Resources | | 7 | Create job profiles to associate with shifts. Map profiles to queues or align them with work types and skill requirements. | Create a Job Profile | | 8 | Create scheduling rules. A Match Territory rule is required. | Create a Scheduling Rule | | 9 | Create scheduling constraints, such as work limits, and attach them to service resources or service territories. | Create a Scheduling Constraint | | 10 | Create scheduling objectives, such as Balance Shifts or Maximized Preferences. | Create a Scheduling Objective | #### See Also - [Match Qualified Talent Using Skills and Certifications](https://help.salesforce.com/s/articleView?id=xcloud.shifts_create_assign_skills.htm&release=264.0.0&type=5 "Create and assign skills that represent certifications and expertise, like Electrician Certification or Tier 2 Support. Assign skills to worker records so scheduling tools match qualified candidates to shifts that require those skills.") - [Enforce Hard Boundaries with Scheduling Rules](https://help.salesforce.com/s/articleView?id=xcloud.shifts_create_sched_rule.htm&release=264.0.0&type=5 "Rules establish strict requirements that candidates must pass to be considered for a shift.") - [Control Workloads Using Scheduling Constraints](https://help.salesforce.com/s/articleView?id=xcloud.shifts_create_sched_constraint.htm&release=264.0.0&type=5 "Constraints establish maximum boundaries for work hours and shift assignments. Attach constraints directly to individual service resource records or broader service territory records.") - [Drive Strategic Goals Through Scheduling Objectives](https://help.salesforce.com/s/articleView?id=xcloud.shifts_create_sched_objective.htm&release=264.0.0&type=5 "Objectives score eligible candidates based on business priorities. Planners and administrators set scheduling objectives to optimize scheduling.") # Accelerate Meeting Follow-Ups with AI Suggested Actions After a meeting transcript is available, the Salesforce mobile app presents a meeting summary, key decisions, and contextual next steps directly on the event record. You can review follow-up recommendations such as sending requested materials, updating an opportunity, or scheduling another meeting. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Agentforce 1 Sales Editions.
## Requirements for Suggested Actions - This feature requires Einstein Conversation Insights (ECI) and the Seller-Focused Mobile Experience. ## Access Suggested Actions ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note This feature is automatically enabled if you have In-Person Meeting Assistant enabled. - Make sure that you have the In-Person Meeting Assistant enabled: - Select **Salesforce Go** from the Setup dropdown and go to the Einstein Conversation Insights feature. - Turn on the **In-Person Meetings** toggle. - Make sure that your mobile app configuration has the new Seller Experience (Sales Cloud Mobile) enabled. - From the meeting details page for the meeting you want to capture notes for, select **Suggested Actions**. # Access Actions in a Lightning Page with the Power Launcher Component (Managed Package) For the managed package runtime, access all the available Actions in a Lightning Page using the Power Launcher component's typeahead functionality. Enable Lightning Record Pages and Lightning App Pages to use the Power Launcher component by adding the Power Launcher Lightning Web Component to a Lightning Page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Navigate to the Lightning Page, and open the Lightning App Builder. 2. In the Lightning Components search field, enter powerLauncher. ![Power Launcher component](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/power_launcher_lc_search.png) 3. Drag the **powerLauncher** component into the Lightning Page. 4. If you are editing a Record Lightning Page, the powerLauncher component automatically populates the **Record Id** property with {RecordId}. The {RecordId} pulls in the Record Id from the Record Page. If you are not editing a Lightning Page that does not have a Record on it, ensure that the **RecordId** property is blank. When the RecordId property is blank, all available actions appear in the Power Launcher. ![Power Launcher record Id](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/power_launcher_record_id.png) 5. Click **Save**, and click **Back** to preview the page. 6. Click on the Power Launcher's search field, or press Command + K, to open the Power Launcher, and begin typing to view the actions available to the Lightning Page. ![Power Launcher search](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/power_launcher_search.png) # Access Agentic Mobile Apps Open Agentic Mobile Apps from Salesforce Setup. You need the Manage mySalesforce Apps permission. 1. From Setup, enter **Agentic Mobile Apps** in the Quick Find box. 2. Select **Agentic Mobile Apps**. 3. Turn on **Design, preview, publish, and analyze branded mobile apps, built with Agentforce.** The Create and Manage Apps button appears after you turn on the feature. # Access and Use the Security Health Review Tool The Security Health Review tool provides an expert-grade assessment of your org’s security posture by analyzing metadata signals directly in Salesforce Setup. Use it to identify critical security findings, track remediation progress, and maintain compliance with Salesforce security standards.
Available in: Lightning Experience in Enterprise and Unlimited editions
User Permissions Needed
To access the Security Health Review tool: Customize Application OR Modify All Data
Access to Security Health Review is limited to Signature Success customers. The Health Assessments Agent requires the Salesforce Foundations add-on. To inquire about access, contact your Salesforce account executive. Users whose profile includes the **Customize Application** or **Modify All Data** permission can access the Security Health Review tool by default, including the System Administrator profile. To grant access to users without these permissions, see [Assign Access to the Security Health Review Tool](https://help.salesforce.com/s/articleView?id=xcloud.shr_assign_tool_access.htm&release=264.0.0&type=5 "Control who can view and manage Security Health Review reports and findings using two dedicated system permissions: View Health Assessments and Manage Health Assessments."). ## Navigate to Security Health Review 1. Log in to your Salesforce org. 2. Click the gear icon in the top-right navigation bar and select **Setup**. 3. In the Quick Find box, enter health assessments. 4. Under **Health Assessments**, click **Security Health Review**. ## Understand the Report Page When you open Security Health Review, the most recent report for your org loads automatically. The page includes: - **Reports remaining this week**—shows how many reports you can still generate before the weekly limit resets. - **Viewing dropdown**—switch between previously generated reports. Each entry shows the generation timestamp and org name. The most recent report is labeled **Latest**. - **Refresh**—reloads the current report view. - **PDF** / **CSV**—download the current report as a PDF or a CSV. - **Ask Agentforce**—opens the Health Assessments Agent for an interactive analysis session. - **Generate Report**—initiates a new real-time scan of your org’s metadata. ## Generate a Report Click **\+ Generate Report**. The scan runs in real time. The page updates automatically when the report is ready. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note You can generate one report per week per org. The **reports remaining this week** counter at the top of the page tracks your usage. When you reach the report limit, the **\+ Generate Report** button is disabled until the limit resets. ## Understand Report Sections The report renders inline in Setup, organized into these sections: | Section | Description | | --- | --- | | Disclaimer | Describes the scope and limitations of the assessment. Security Health Review analyzes your org’s configuration against the Ideal Salesforce Org Security Hardening Benchmark. It isn’t a penetration test, compliance audit, or attestation. Salesforce security follows a shared responsibility model. | | Report Overview | Executive Summary summarizes the total number of critical-severity findings and identifies the security domains that require immediate executive attention, with a count of unique critical findings per domain. Findings that have been accepted as risk, mitigated, or marked not applicable are noted inline. Executive Call for Action provides a prioritized list of recommended executive sponsorship actions, mapped to the security domains with the highest critical finding counts. | | Salesforce Mandated Critical Security Controls | Lists the controls that Salesforce has identified as the mandatory baseline for all orgs. These controls can’t be dispositioned—they must be remediated. Each entry shows the finding ID, title, and instance count. Mandatory controls require remediation and can’t be accepted as risk, marked not applicable, or assigned a compensating control. | | Severity Summary Tiles | Displays finding counts across six categories: Compliant, Mandatory, Critical, High, Medium, and Low. Critical, High, and Low tiles also show a breakdown of accepted risk, mitigated, and not-applicable dispositions. | | Remediation Progress Bar | Shows the percentage of active findings currently in progress, with a breakdown of Blocked, In Progress, and Open findings. | | Findings Tabs | Provides the full detail view of all assessed controls, organized into three tabs: Findings (all active findings grouped by severity), Customized Controls (findings that have been dispositioned), and Compliant Controls (controls that passed the benchmark). For details on working with findings, see [Review and Manage Security Health Review Findings](https://help.salesforce.com/s/articleView?id=xcloud.shr_review_manage_findings.htm&release=264.0.0&type=5 "Use the Security Health Review findings view to investigate security gaps in your org, track remediation progress, and document compensating controls or risk decisions."). | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note If you fix a finding in your org, it only appears as compliant after you generate a new report. Disposition changes take effect immediately without requiring a new report. ## Analyze Your Report with the Health Assessments Agent Click **Ask Agentforce** to open the Health Assessments Agent directly in Setup. The agent can: - Generate summaries of your security findings. - Investigate critical issues within specific security domains. - Provide step-by-step remediation guidance. - Compare results across multiple scans. Start with a prompt such as “Analyze my report” and continue with suggested actions or custom queries. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note All standard actions in the Health Assessments Agent are available at no additional cost and do not consume Flex Credits. ## Monitor Activity with the User Activity Log The User Activity Log records all actions taken on the Security Health Review tool within your org, providing an audit trail for security governance and compliance purposes. 1. In Setup, enter health assessments in the Quick Find box. 2. Under **Health Assessments**, click **User Activity Log**. The **History** table shows every user action, including: | Action | Description | | --- | --- | | Report Generated | A new report was generated, with org name and Org ID. | | Disposition Added | A finding was dispositioned for the first time, including the disposition type. | | Disposition Changed | An existing disposition was updated to a new type. | | Disposition Removed | A disposition was removed, returning the finding to the active findings list. | | Remediation Status Changed | A finding’s remediation status changed (such as from Open to In Progress, or from Blocked to Open). | Each entry shows the timestamp (UTC), the user who performed the action, the action type, and the finding ID affected. To filter and search activity: - Use the **Search activity** box to search by keyword. - Use the **All Actions** dropdown to filter by action type. - Use the **Filter by Finding ID** field to view all activity for a specific finding. # Access and View the Consumption Analytics Dashboard After you install the Consumption Tagging app, you can access Consumption Analytics in Digital Wallet. Before you proceed, make sure that you have access to Digital Wallet, and the required permissions to view the dashboard and its underlying data. See Salesforce Help: [Digital Wallet Permissions](https://help.salesforce.com/s/articleView?id=xcloud.wallet_permissions.htm&release=264.0.0&type=5 "To access Digital Wallet and its features, users require a combination of user permissions, permission sets, and licenses. To access Digital Wallet, you must have a Data 360 license and not a Customer Data Platform (CDP) license.") for details. You access the dashboard from the Digital Wallet app. From App Launcher, find and select **Digital Wallet**, then select Consumption Analytics. The dashboard has two sections: - [Consumption Overview](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_analytics_overview_tab.htm&release=264.0.0&type=5 "The Consumption Analytics dashboard’s Consumption Overview section contains a metric and visualizations that give you a high-level overview of what’s driving consumption. This information includes total credits consumed, daily credits consumed by consumption card, sources and usage types that use the most consumption, as well as a consumption forecast by consumption card.") contains visualizations that provide a high-level look at what’s driving consumption and forecasting. - [Consumption Explorer](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_analytics_explorer_tab.htm&release=264.0.0&type=5 "The Consumption Analytics dashboard’s Consumption Explorer section contains visualizations that drill down deeper to show consumption based on a specific dimension, such as agent, agent action, or Data 360 source.") contains visualizations that provide deeper insights into product-specific dimensions. These dimensions include agents, agent actions, or Data Cloud sources, and forecasting for agents, if applicable. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/images/icon_note.png) Note If a forecast report indicates “we couldn’t display this content," it’s likely due to insufficient historical data based on the selected segment. After you have 3 months of historic usage data, Tableau Next can render the forecast. ## Refine Results with Dashboard Filters At the top of the dashboard are Filter By options that refine the results for the included metric and visualizations. By default, the dashboard shows all results for the filter options. Some of the filters also include the ability to use an operator to find and narrow down your choices. - Consumption Period: allows you to look back at a specific time period. - Org or Tenant ID: allows you view per sandbox org, companion org, and Marketing Cloud tenant, if applicable. - Environment Type: breaks down the data by production org, sandbox, or both. - Consumption Card: allows you filter per entitlement you’ve purchased. - Usage Type: metrics-defined resources offered by consumption-based products. This dashboard shows only usage for entitlements that use the SUM aggregation type. The MAX aggregation isn’t supported and is excluded. For example, if you select “Data Cloud Storage Card” or “Data Cloud Real-time Profile” in the Consumption Cards filter, you won’t see any data on the dashboard visualizations. ## Explore the Interactive Features of the Reports Except for the Total Consumption Over Time report, the reports are interactive, which means you can: - Hover over a specific spot in the bar chart to pop up details such as card name, event date, and credits consumed. - Click a specific segment on the bar chat to see all reports reflect consumption data specific to that segment. - From the reports dropdown menu, select Explore to view a larger version of the bar chart. When you click an element in a visualization, the other visualizations on the dashboard attempt to render data based on the selected segment. Sometimes, you see “no results to show” because the selected segment doesn’t have any data to show in the other visualization. For example, if the selected segment doesn’t contain any data services credits. ## Customize a Tableau Next Dashboard Because this Consumption Analytics dashboard is prebuilt as a Digital Wallet feature for all customers, you can’t edit it or open the edit page to see the setup of the visualization. If you have the proper license and permissions, you can clone a visualization to make a copy of it, then view the setup and modify as needed. Customizing a visualization by cloning it doesn’t incur any costs, as long as it’s based on the Digital Wallet data objects. If we modify the dashboard, your cloned versions don't get the updates. In this case, you can re-clone the updated dashboard to get the latest changes, then re-create any modifications. - **[Consumption Analytics Consumption Overview](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_analytics_overview_tab.htm&release=264.0.0&type=5)** The Consumption Analytics dashboard’s Consumption Overview section contains a metric and visualizations that give you a high-level overview of what’s driving consumption. This information includes total credits consumed, daily credits consumed by consumption card, sources and usage types that use the most consumption, as well as a consumption forecast by consumption card. - **[Consumption Analytics Consumption Explorer](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_analytics_explorer_tab.htm&release=264.0.0&type=5)** The Consumption Analytics dashboard’s Consumption Explorer section contains visualizations that drill down deeper to show consumption based on a specific dimension, such as agent, agent action, or Data 360 source. #### See Also - [Digital Wallet Permissions](https://help.salesforce.com/s/articleView?id=xcloud.wallet_permissions.htm&release=264.0.0&type=5 "To access Digital Wallet and its features, users require a combination of user permissions, permission sets, and licenses. To access Digital Wallet, you must have a Data 360 license and not a Customer Data Platform (CDP) license.") - [_Salesforce Help_: Tableau Next Permission Sets and Licenses](https://help.salesforce.com/s/articleView?id=analytics.tua_admin_permsets_licenses.htm&language=en_US) - [_Salesforce Help_: Create Visualizations and Dashboards in Tableau Next](https://help.salesforce.com/s/articleView?id=analytics.tua_create.htm&language=en_US) - [_Salesforce Help_: Simplify Dashboard Management](https://help.salesforce.com/s/articleView?id=analytics.tua_create_dashboard_manage.htm&language=en_US) # Access and View the Consumption Insights Dashboard The Digital Wallet Consumption Insights dashboard gives you an easy entry point to the out-of-the-box (predefined) reports that leverage standard consumption tags. These reports give you a granular view of your consumption by agent, action, and other consumption sources. Each dashboard widget shows a bar chart so you can quickly visualize consumption information, and has a link to its corresponding report. Ways to access the reports: - From Digital Wallet (Consumption Cards) home page, click **View Consumption Insights by Tags**. - From Dashboards, select **Digital Wallet Consumption Insights by Tags** . If you don't see the dashboard listed, you can find it in its corresponding folder. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/images/icon_note.png) Note The Digital Wallet dashboard doesn't count against your dynamic dashboard limit. You don’t incur any costs when viewing and refreshing the data associated with these reports. If you didn't add the TenantEnrichedUsageEvent data lake object (DLO) to a data space, you see blank reports when you open the dashboard. If you click to view a report, you see this error message. ``` Can't find DLO TenantEnrichedUsageEvent. To view the data in a report, verify that it exists and is added to a dataspace. ``` Add the TenantEnrichedUsageEvent DLO to a data space, as indicated in [Prepare to View Digital Wallet Out-of-the Box Reports](https://help.salesforce.com/s/articleView?id=xcloud.wallet_ootb_reports_prepare.htm&release=264.0.0&type=5 "As part of Data Cloud provisioning, the Consumption Insights dashboard is installed. This Data 360 dashboard contains several predefined (out-of-the-box) reports that were built using standard consumption tags. How you complete the configuration to view the reports depends on if you're a new or existing Data 360 customer."). ## What If the Dashboard Doesn’t Contain Any Data? In rare cases, you see that the reports don’t contain any data when you launch the View Consumption Insights by Tags dashboard. Also, you see this message in each report: `This report can no longer be edited or run. Your administrator has disabled all reports for the custom object, or its relationships have changed`. You can fix the issue by deleting the dashboard and reports so they can be reinstalled. Carefully follow the steps in Salesforce Help: [Troubleshoot Digital Wallet](https://help.salesforce.com/s/articleView?id=xcloud.wallet_troubleshoot.htm&release=264.0.0&type=5 "Find solutions and guidance for common issues you can encounter when using Digital Wallet and its associated features."). ## What If a Report Has No Data? Some widgets in the View Consumption Insight by Tags dashboard are empty if their corresponding reports contain no data. A report with no data can occur if your company isn’t using a referenced feature or product, or if you haven’t added the required DLO to a data space. When data is available, refresh the entire dashboard or a specific report. ## Can I Modify the Provided Reports? Not recommended. Instead, modify and then use Save As to create a new report. This way, when we update any of the provided reports, you receive those changes, and our changes are independent from yours. ## Filters for Time Period and Environment Type Two drop-downs at the top of the dashboard enable you to filter the dashboard and reports by time period (all, 30-, 60-, and 90-days) and environment type (production or sandbox). ## Consumption by Agent The Consumption by Agent report shows how many credits each agent is consuming. The report breaks down the data by usage type and environment type (sandbox and production). It also shows you from which consumption card usage is being drawn. The X-axis, Sum of Units Consumed, corresponds to the Credits Consumed value in the Digital Wallet Consumption Card page. The Y-axis, Root Resource ID Or API Name, corresponds to the agent (listed as the Agent API name) that is consuming the credits. The report contains these filters:
Filter Purpose
Dataspace

The data space associated with the proper DLO, usually, the TenantEnrichedUsageEvent DLO. The purpose of this filter is to ensure that you’ve associated the DLO with a data space but isn't used for reporting consumption data for the data space.

If you have multiple data spaces, the first one is listed based on alphabetical order. Click to select a different data space from the drop-down list.

To create a report that filters consumption by data space, see Create a Report on Usage by Data Space Using Our DMO and Create a Tableau Next Viz on Usage by Data Space.

Root Resource Type equals BotDefinition Shows data for Einstein Bots or Agentforce Agents.
Root Resource ID Or Api Name not equal to "" Rows without data aren't displayed.
Entitlement Org ID The 18-digit ID of the org that holds the entitlements from which the reported usage is drawn.
Click **View Report (Consumption by Agent)** to view report details. ## Flex Credits Consumption by Action The Flex Credits by Action report shows how each agent action is consuming Flex Credits. The report breaks down the data by usage type and environment type (sandbox and production). The X-axis, Sum of Units Consumed, corresponds to Credits Consumed in Digital Wallet. The Y-axis, Resource ID Or API Name, corresponds to agent actions listed on the Flex Credits consumption card in Digital Wallet. The report contains these filters:
Filter Purpose
Dataspace

The data space associated with the proper DLO, usually, the TenantEnrichedUsageEvent DLO. The purpose of this filter is to ensure that you’ve associated the DLO with a data space but isn't used for reporting consumption data for the data space.

If you have multiple data spaces, the first one is listed based on alphabetical order. Click to select a different data space from the drop-down list.

To create a report that filters consumption by data space, see Create a Report on Usage by Data Space Using Our DMO and Create a Tableau Next Viz on Usage by Data Space.

Resource Type equals GenAiFunctionDefinition Shows data for agent actions.
Resource ID Or API Name not equal to "" Rows without data aren't shown.
Entitlement Org ID The 18-digit ID of the org that holds the entitlements from which the reported usage is drawn.
Click **View Report (Credits Consumption by Action)** to view report details. ## Consumption by Feature The Consumption by Feature report shows the consumption for each feature. The report breaks down the data by usage type and environment type (sandbox and production). The X-axis, Sum of Units Consumed, corresponds to consumption used in Digital Wallet. The Y-axis represents the consumption tag value for Feature Developer Name. The report contains these filters:
Filter Purpose
Dataspace

The data space associated with the proper DLO, usually, the TenantEnrichedUsageEvent DLO. The purpose of this filter is to ensure that you’ve associated the DLO with a data space but isn't used for reporting consumption data for the data space.

If you have multiple data spaces, the first one is listed based on alphabetical order. Click to select a different data space from the drop-down list.

To create a report that filters consumption by data space, see Create a Report on Usage by Data Space Using Our DMO and Create a Tableau Next Viz on Usage by Data Space.

Feature Developer Name not equal to "" Rows without data aren't shown.
Entitlement Org ID The 18-digit ID of the org that holds the entitlements from which the reported usage is drawn.
Click **View Report (Consumption by Feature)** to view report details. ## Consumption by Sources The Consumption by Source report shows consumption levels across sources. The X-axis, Sum of Units Consumed, corresponds to Credits Consumed in Digital Wallet. The report breaks down the data by usage type and environment type (sandbox and production). The Y-axis, Resource ID Or API Name, corresponds to the resource type consuming the credits, for example, agent actions. The report contains these filters:
Filter Purpose
Dataspace

The data space associated with the proper DLO, usually, the TenantEnrichedUsageEvent DLO. The purpose of this filter is to ensure that you have associated the DLO with a data space but isn't used for reporting consumption data for the data space.

If you have multiple data spaces, the first one is listed based on alphabetical order. Click to select a different data space from the drop-down list.

To create a report that filters consumption by data space, see Create a Report on Usage by Data Space Using Our DMO and Create a Tableau Next Viz on Usage by Data Space.

RootResourceIdOrApiName not equal to "" Rows without data aren't shown.
Entitlement Org ID The 18-digit ID of the org that holds the entitlements from which the reported usage is drawn.
Click **View Report (Consumption by Sources)** to view report details. ## Consumption by Usage Type The Consumption by Usage Type report shows the consumption for each usage type across your Consumption Cards. The report breaks down the data by environment type (sandbox and production), and shows you from which consumption card usage is being drawn. The X-axis, Sum of Units Consumed, corresponds to usage consumed in Digital Wallet. The Y-axis, Usage Type Developer Name, corresponds to the usage type name listed on the Consumption Card in Digital Wallet. The report contains these filters:
Filter Purpose
Dataspace

The data space associated with the proper DLO, usually, the TenantEnrichedUsageEvent DLO. The purpose of this filter is to ensure that you’ve associated the DLO with a data space but isn't used for reporting consumption data for the data space.

If you have multiple data spaces, the first one is listed based on alphabetical order. Click to select a different data space from the drop-down list.

To create a report that filters consumption by data space, see Create a Report on Usage by Data Space Using Our DMO and Create a Tableau Next Viz on Usage by Data Space.

Entitlement Org ID The 18-digit ID of the org that holds the entitlements from which the reported usage is drawn.
Usage Type Developer Name Excludes information for usage types that don't calculate accumulated usage using the SUM aggregation type. Examples of excluded usages types include DataCloud_Storage and DataCloud_RealTimeProfiles, which are tracked using the MAX aggregation type.
Click **View Report (Consumption by Usage Type)** to view report details. #### See Also - [_Salesforce Help_: Dynamic Dashboards](https://help.salesforce.com/s/articleView?id=analytics.dashboards_dynamic_overview.htm&language=en_US) - [_Object Reference_: BotDefinition](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_botdefinition.htm) - [_Object Reference_: GenAiFunctionDefinition](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_genaifunctiondefinition.htm) - [_Salesforce Help_: Data 360 Reportable Resource References](https://help.salesforce.com/s/articleView?id=data.c360_a_data_usage_resource_references.htm&language=en_US) # Access Collections on the Salesforce Mobile App Collections enable you to curate your analytics in a customized way, and have a personalized set of CRM Analytics items, and reports and dashboards when you first open the application. Analytics can be added from different apps and folders, and they can exist in multiple collections. With collections, you’re able to quickly access data that’s relevant to your work or interests in one place. ### Required Editions
Setup for the Salesforce mobile app available in: Lightning Experience
Setup available in Lightning Experience in: Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
A CRM Analytics license is required to view and access CRM Analytics items.
1. Add a Collection to Home 1. Tap **Edit** then tap **Add Card**. 2. Tap **Collection** from the menu, and tap the collection you want. ![Sales Team collection card with Top Agents Leaderboard bar chart](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/salesforce_app/images/salesforce_app_collections.png) 2. Open an Item in a Collection 1. Scroll across the Collection card and tap the item you want to open. You can also tap **Open Collection** then locate and tap the item. 3. Add Items to a Collection 1. Tap **Open Collection** then tap ![Plus button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/salesforce_app/images/salesforce_app_unified_ios_collections_5.png). 2. Tap the available items on the page or use the search bar to locate the items to add to the collection. 3. Tap **Done**. 4. Create a Collection 1. Tap **Edit** then ![Plus button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/salesforce_app/images/salesforce_app_unified_ios_collections_5.png). 2. Give the collection a name, optional description, and color. ![New collection details](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/salesforce_app/images/salesforce_app_unified_ios_collections_2.png) 3. Tap **Save**. 4. Tap **Add Insights** then select items for the collection. ![Empty collection screen](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/salesforce_app/images/salesforce_app_unified_ios_collections_3.png) # Access Custom Labels in an Omniscript Custom Lightning Web Component Provide custom Lightning web components access to Salesforce custom labels in your Omniscript. Custom Lightning web components that extend the Omniscript Base Mixin component or an Omniscript element's Lightning web component can access both Omniscript custom labels and Salesforce custom labels. For information on custom LWCs in Omniscript, see [Create a Custom Lightning Web Component for Omniscript](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_custom_lightning_web_component_for_omniscript_17512.htm&release=264.0.0&type=5 "Add custom HTML, JavaScript, and CSS to an Omniscript by creating a custom Lightning web component. The Custom LWC element enables custom components to either interact with the Omniscript or to act as a standalone component. Standalone components do not interact with the Omniscript or the Omniscript's data JSON."). 1. In the Omniscript, click **Edit as JSON**. 2. In the JSON, add the node "moreCustomLabels": and set the node's value equal to an array of the custom labels that do not exist in the OS. ``` "moreCustomLabels" : ["myCustomLabel1","orgCustomLabel2"] ``` 3. In your custom LWC's code, add a line of code to access a map of all the custom labels using the **allCustomLabels** attribute. Each component type requires a different attribute name to access the allCustomLabels attribute.

Component Type

Syntax

Component extending the Omniscript Base Mixin component

this.omniScriptHeaderDef.allCustomLabels

Component extending an Omniscript element's LWC

this.scriptHeaderDef.allCustomLabels
4. Using dot notation, append the name of the attribute the custom LWC requires to access the label.

Component Type

Syntax

Component extending the Omniscript Base Mixin component

this.omniScriptHeaderDef.allCustomLabels.myCustomLabel

Component extending an Omniscript element's LWC

this.scriptHeaderDef.allCustomLabels.myCustomLabel
5. Deploy the custom Lightning components to a Salesforce org. 6. Activate and preview the Omniscript to ensure the label displays correctly. #### See Also - [Deploy Lightning Web Components](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_lightning_web_components_58289.htm&release=264.0.0&type=5 "Deploy new Lightning web components or change existing components from your local development environment with Visual Studio and Salesforce DX or IDX Workbench.") - [Define Custom Label Translations in Multi-Language Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_define_custom_label_translations_in_multi_language_omniscripts_20774.htm&release=264.0.0&type=5 "Define translations in various languages for custom labels in multi-language Omniscripts. Create localized content so that users see the Omniscripts in the language based on their locale. Create custom labels in English first, followed by translations for other languages.") - [Custom LWC Element](https://help.salesforce.com/s/articleView?id=xcloud.os_custom_lwc_element_17587.htm&release=264.0.0&type=5 "Add a custom Lightning web component that does not extend an Omniscript element component to an Omniscript using the Custom LWC element.") # Access Custom Labels in an Omniscript Custom Lightning Web Component (Managed Package) For the managed package runtime, provide custom Lightning web components access to Salesforce custom labels in your Omniscript. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Custom Lightning web components that extend the Omniscript Base Mixin component or an Omniscript element's Lightning web component can access both Omniscript custom labels and Salesforce custom labels. For information on custom LWCs in Omniscripts, see [Create a Custom Lightning Web Component for Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_custom_lightning_web_component_for_omniscript.htm&release=264.0.0&type=5 "For the managed package runtime, add custom HTML, JavaScript, and CSS to an Omniscript by creating a custom Lightning web component."). Before You Begin View the Omniscript's default custom labels or create custom labels in Salesforce. See [Omniscript Custom Label Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_custom_label_reference.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains tables listing the Omniscript element properties for which you must define custom labels and translations for multi-language Omniscripts, such as Omnistudio Data Mapper actions. To use a default translation, clear the property.") and [Create and Edit Custom Labels](https://help.salesforce.com/articleView?id=cl_edit.htm&language=en_US). 1. In the Omniscript's Script Configuration, click **Edit as JSON**. 2. In the JSON, add the node "moreCustomLabels": and set the node's value equal to an array of the custom labels that don’t exist in the Omniscript. ``` "moreCustomLabels" : ["myCustomLabel1","orgCustomLabel2"] ``` 3. In your custom LWC's code, add a line of code to access a map of all the custom labels using the allCustomLabels attribute. Each component type requires a different attribute name to access the allCustomLabels attribute.

Component Type

Syntax

Component extending the Omniscript Base Mixin component

this.omniScriptHeaderDef.allCustomLabels

Component extending an Omniscript element's LWC

this.scriptHeaderDef.allCustomLabels
4. Using dot notation, append the name of the attribute the custom LWC requires to access the label.

Component Type

Syntax

Component extending the Omniscript Base Mixin component

this.omniScriptHeaderDef.allCustomLabels.myCustomLabel

Component extending an Omniscript element's LWC

this.scriptHeaderDef.allCustomLabels.myCustomLabel
5. Deploy the custom Lightning web components to a Salesforce org. See [Deploy Lightning Web Components (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_lightning_web_components.htm&release=264.0.0&type=5 "For the managed package runtime, deploy new Lightning web components or change existing components from your local development environment with Visual Studio and Salesforce DX or IDX Workbench."). 6. Activate and preview the Omniscript to ensure the label displays correctly. # Access Data in a Privacy Center Retention Store To view records in a Privacy Center retention store, use the Salesforce Connect adapter for Privacy Center. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Salesforce Privacy Center license.
See [Access External Data with the Salesforce Connect Adapter for Privacy Center](https://help.salesforce.com/s/articleView?id=platform.salesforce_connect_privacy_center.htm&type=5&language=en_US). # Access Digital Wallet You can access Digital Wallet from the Digital Wallet app or the Your Account app. The Digital Wallet app provides access to all Digital Wallet features. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions
Not available in: Sandboxes
User Permissions Needed
To access License Utilization: View License Utilization
To access the Digital Wallet home page and Consumption Cards: View Consumption
To use the Your Account app: Manage Billing or the Your Account App admin user permission set
Several factors can affect your ability to open Digital Wallet and access its features. - Digital Wallet tracks sandbox usage, but you access Digital Wallet from a production environment. - If you’re having trouble accessing Digital Wallet, or don’t see any consumption cards, you’re likely missing a key requirement. See [Troubleshoot Digital Wallet](https://help.salesforce.com/s/articleView?id=xcloud.wallet_troubleshoot.htm&release=264.0.0&type=5 "Find solutions and guidance for common issues you can encounter when using Digital Wallet and its associated features.") and look for your specific scenario. - If you’re looking for a specific Digital Wallet feature and don't see it, you likely don't have the proper permissions, or the tab isn't visible for the profile to which you're assigned. See [Digital Wallet Permissions](https://help.salesforce.com/s/articleView?id=xcloud.wallet_permissions.htm&release=264.0.0&type=5 "To access Digital Wallet and its features, users require a combination of user permissions, permission sets, and licenses. To access Digital Wallet, you must have a Data 360 license and not a Customer Data Platform (CDP) license.") for more information, or contact your Salesforce admin for assistance. - Data 360 governance features are enabled by default for new orgs, but you must create policies to grant data access. Review [Data Governance Considerations](https://help.salesforce.com/s/articleView?id=data.c360_a_before_you_begin_data_gov.htm&type=5&language=en_US) to learn more. From the App Launcher, find and select **Digital Wallet**. ![Access the Digital Wallet app from the App Launcher.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-app-launcher.png) ## Digital Wallet Home Page and Left-Side Navigation Menu The Digital Wallet home page serves as your central hub to monitor and manage your Salesforce investment. Users with the View Consumption permission can view the Digital Wallet home page. The home page gives you immediate visibility into high-level summaries of your top consumed credits, assigned licenses, and product storage limits. The left-side navigation menu eliminates tab overload and groups related Digital Wallet features together so you can quickly find what you’re looking for. And it also provides direct access to view billing information, such as invoices and contracts. Which menu options appear on the left-side navigation is determined by the permissions you’re assigned to access Digital Wallet and Your Account features, and if you're granted access to view the tab (left-side menu option). If you personalize the navigation bar in the Digital Wallet app, Digital Wallet tabs appear in the left-side navigation menu, while the Digital Wallet Home tab and any non-Digital Wallet tabs appear in the navigation bar. The home page provides quick access to key Digital Wallet and Your Account features: 1. Left-Side Navigation (Digital Wallet): View and monitor your Salesforce usage, manage custom tags, and explore usage trends from the Consumption Analytics dashboard. 2. Left-Side Navigation (Your Account): Access billing management tools to view active invoices, review contracts, and explore partner offers. 3. Consumption Cards: Monitor your highest-consuming products, such as Flex Credits and Data Services, with real-time progress bars indicating remaining entitlements and usage thresholds. 4. License Utilization: Track seat distribution and remaining license percentages across user and permission set licenses to optimize allocation. 5. Consumption Analytics: Analyze historical consumption trends over time to forecast future usage. Access the metric card from the action menu, or open the Consumption Analytics dashboard. 6. Product Limits: Track critical storage capacity and platform limits to prevent service interruptions. 7. Learn about Digital Wallet: Access learning resources and best practices to help you understand and make the most of Digital Wallet features. ![The Digital Wallet app's home page.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-home-page.png) Progress bars use color coding to help you quickly gauge usage thresholds and identify metrics that require attention. Here’s a breakdown of what each color represents. | Bar Chart Color | Percentage of Entitlement Remaining | Description | | --- | --- | --- | | Green | 21% or more | You have plenty of entitlements remaining. | | Orange | 1% to 20% | You’re nearing the purchased limit. | | Red | 0% or less | You’ve consumed or exceeded your purchased entitlements. | #### See Also - [_Salesforce Help_: Manage Your Salesforce Account (Your Account app)](https://help.salesforce.com/s/articleView?id=xcloud.users_checkout.htm&language=en_US) - [_Salesforce Help_: Manage Your Contracts with the Your Account App](https://help.salesforce.com/s/articleView?id=xcloud.users_manage_contracts_subscription_management.htm&language=en_US) - [_Salesforce Help_: View and Download Invoices (Your Account App)](https://help.salesforce.com/s/articleView?id=xcloud.users_your_account_pay_invoices.htm&language=en_US) - [_Application Installation Guide_: Receive Private Offers from AgentExchange Partners](https://developer.salesforce.com/docs/platform/appexchange-install-guide/guide/appexchange-install-private-offers.html) - [_Salesforce Help_: Personalize the Navigation Bar in Lightning Experience](https://help.salesforce.com/s/articleView?id=xcloud.user_userdisplay_tabs_lex.htm&language=en_US) # Access Flexcard Data JSON with Merge Fields (Managed Package) For the managed package runtime, enable Flexcard element properties to access data JSON using merge fields. A merge field is a variable that references the value of a JSON node. Merge field syntax requires you to wrap a full JSON path with a curly bracket on both ends, such as {FirstName}. For example, if a JSON node is `"FirstName": "John"`, then the merge field `{FirstName}` returns `John`. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Only certain element properties support merge fields. ## Common Use Cases - Set the value of an element's label with data coming from the data source. For example, on a Flexcard that displays an Account's primary contact information in a Block element, set the **Title** of the collapsible Block element to {PrimaryContactName}. - Pass data from from an Action element. For example, use an Update Omniscript action to pass data, such as {Id} and {Name}, from a Flexcard to the Omniscript it's embedded inside. See [Update an Omniscript from a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_update_an_omniscript_from_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, create an action that updates an Omniscript's data JSON from the Flexcard embedded in the Omniscript. You can embed a Flexcard inside an Omniscript as a Custom LWC."). - Pass data to a child Flexcard from the parent's datasource. For example, update the contextId on a child Flexcard by passing {Id} as an attribute form the parent Flexcard. See [Embed Flexcard Inside Another Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_embed_flexcard_inside_another_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, embed a reusable Flexcard as a child inside another Flexcard. The child Flexcard can have its own data source. Or, the parent can override the child's data source with its own data source. The parent can also pass specific data to the child, such as its recordId to use as the child's contextId."). - Set the value of descriptive text for accessibility users. For example, select {AccountName} as the **Alternative Text** for an Image element that displays a company logo. - Display data as plain text with the Text element. For example, enter Hello {FirstName}! on a Contact Flexcard. ## Additional Syntax This table provides additional syntax examples for nested JSON.

JSON Node

Merge Field Syntax Example

"ContactInfo": {
    "FirstName": "Margarite",
    "LastName": "Mandela"
  }

To access a nested node, use a dot . between the parent and child node names.

{ContactInfo.FirstName}
//returns Margarite
[{
    "Account":{
        "AccRevenue":"139000000",
        "AccPrimContact":"Sean Forbes",
        "AccWebsite":"http://edgecomm.com",
        "AccPhone":"(512) 757-6000",
        "AccName":"Edge Comms",
        "AccPostal":"78767",
        "Contacts":[
            {
            "PostalCode":"78767",
            "Country":"USA",
            "State":"Texas",
            "City":"Austin",
            "Street":"313 Const Place",
            "Phone":"(512) 757-6000",
            "Name":"Rosa Gonzalez",
            "Id":"0033g00000EbAAP"
            },
            {
            "PostalCode":"78767",
            "Country":"USA",
            "State":"Texas",
            "City":"Austin",
            "Street":"312 Const Place",
            "Phone":"(512) 757-6000",
            "Name":"Sean Forbes",
            "Id":"0033g00000EXAAP"
            }
        ]
    }
}]

To access a specific item in a data field with an array, enter the number of the index surrounded by brackets, such as [0]. For example, [0] gets the first item, [1] gets the second item, and so on.

{Account.Contacts[0].Name}
//returns Rosa Gonzalez
- **[Access the Data JSON (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_access_the_data_json.htm&release=264.0.0&type=5)** For the managed package runtime, use existing data JSON in an element property by indicating the use of a merge field. # Access Integration Procedure Data JSON with Merge Fields Enable Integration Procedure elements and element properties to access data JSON using merge fields. A merge field is a variable that references the value of a JSON node. For example, if a JSON node is `"FirstName": "John"`, then the merge field `%FirstName%` returns `John`. Merge fields access data JSON using syntax to indicate to an Integration Procedure element that a merge field is present. The syntax requires you to wrap a full JSON path with a percent sign on both ends. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Only certain element properties support merge fields. Text between two percent (%) signs in a Set Values formula or text field is treated as a merge field. To represent literal percent (%) signs, use the `$Vlocity.Percent` [environment variable](https://help.salesforce.com/s/articleView?id=xcloud.os_environment_variables_in_dataraptors_and_integration_procedures_47878.htm&release=264.0.0&type=5 "You can use environment variables to define Default Values and Filter Values, and in Formulas."). ## Common Use Cases - Setting values to rename elements, access JSON nodes, run formulas, and populate elements. See [Set Values Action for Integration Procedures](https://help.salesforce.com/s/articleView?id=xcloud.os_set_values_for_integration_procedures_50310.htm&release=264.0.0&type=5 "The Set Values action sets values in the data JSON of an Integration Procedure using literal values, merge fields, or formulas."). - Access data stored in Integration Procedure elements in a formula or in a future step. - Access data returned from an action. For example, an Omnistudio Data Mapper Action or an HTTP Action returns data from Salesforce or an external source. See [Integration Procedure Actions](https://help.salesforce.com/s/articleView?id=xcloud.os_integration_procedure_actions_50165.htm&release=264.0.0&type=5 "To compose an Integration Procedure, you add actions that run sequentially. These actions can set data values, perform functions, call Omnistudio Data Mappers, invoke Apex classes, send emails, invoke REST endpoints, run other Integration Procedures, and more."). ## Access the Data JSON Use existing data JSON in an element property by indicating the use of a merge field. 1. Locate the name of the JSON node in the Integration Procedure's data JSON. 2. Enter the name of the JSON node and wrap the name in percentage signs to indicate it's a merge field. For example, a merge field accessing a JSON node named firstName must use the syntax `%firstName%`. 3. Preview the Integration Procedure to ensure the merge field works correctly. ## Additional Syntax This table provides additional syntax examples for nested JSON.

JSON Node

Merge Field Syntax Example

"ContactInfo": {
    "FirstName": "John"
  }

Use a colon symbol : to access a nested JSON node.

%ContactInfo:FirstName%
 "ContactInfo": {
    "ContactInfoList": [
      {
        "FirstName": "John"
      },
      {
        "FirstName": "Adam"
      },
      {
        "FirstName": "Steve"
      }
    ]
  }

Use |n to access a specific node in a list. This merge field returns Steve:

%ContactInfo:ContactInfoList|3:FirstName%
# Access Integration Procedure Data JSON with Merge Fields (Managed Package) For the managed package runtime, enable Integration Procedure elements and element properties to access data JSON using merge fields. A merge field is a variable that references the value of a JSON node. For example, if a JSON node is `"FirstName": "John"`, then the merge field `%FirstName%` returns `John`. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Merge fields access data JSON using syntax to indicate to an Integration Procedure element that a merge field is present. The syntax requires you to wrap a full JSON path with a percent sign on both ends. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Only certain element properties support merge fields. Text between two percent (%) signs in a Set Values formula or text field is treated as a merge field. To represent literal percent (%) signs, use the `$Vlocity.Percent` [environment variable](https://help.salesforce.com/s/articleView?id=xcloud.os_environment_variables_in_dataraptors_and_integration_procedures_1.htm&release=264.0.0&type=5 "For the managed package runtime, you can use environment variables to define Default Values and Filter Values, and in Formulas."). ## Common Use Cases - Setting values to rename elements, access JSON nodes, run formulas, and populate elements. See [Set Values for Integration Procedures (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_set_values_for_integration_procedures.htm&release=264.0.0&type=5 "For the managed package runtime, the Set Values action sets values in the data JSON of an Integration Procedure literally, using merge fields, or using formulas. This action has many uses. The example includes the most common uses."). - Access data stored in Integration Procedure elements in a formula or in a future step. - Access data returned from an action. For example, an Omnistudio **Data Mapper Action** or an **HTTP Action** returns data from Salesforce or an external source. See [Integration Procedure Actions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_integration_procedure_actions.htm&release=264.0.0&type=5 "For the managed package runtime, to compose an Integration Procedure, you add actions that run sequentially. These actions can set data values, perform functions, call Omnistudio Data Mappers, invoke Apex classes, send emails, invoke REST endpoints, run other Integration Procedures, and more."). ## Access the Data JSON Use existing data JSON in an element property by indicating the use of a merge field. 1. Locate the name of the JSON node in the Integration Procedure's data JSON. 2. Enter the name of the JSON node and wrap the name in percentage signs to indicate it's a merge field. For example, a merge field accessing a JSON node named firstName must use the syntax `%firstName%`. 3. Preview the Integration Procedure to ensure the merge field works correctly. ## Additional Syntax This table provides additional syntax examples for nested JSON.

JSON Node

Merge Field Syntax Example

"ContactInfo": {
    "FirstName": "John"
  }

Use a colon symbol : to access a nested JSON node.

%ContactInfo:FirstName%
 "ContactInfo": {
    "ContactInfoList": [
      {
        "FirstName": "John"
      },
      {
        "FirstName": "Adam"
      },
      {
        "FirstName": "Steve"
      }
    ]
  }

Use |n to access a specific node in a list. This merge field returns Steve:

%ContactInfo:ContactInfoList|3:FirstName%
# Access Level Overview Review the access level that’s required to perform various tasks in Quip. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
|   | Full Access | Editor | Commenter | View Only | | --- | --- | --- | --- | --- | | Share Document | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Change Link Settings | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Move to Folder | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Delete Document | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Lock Edits | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Mark as Template | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Connect to Slack | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Add/Edit/Remove Sections | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Change Data Formatting | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Add Integration | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Undo/Redo Edits | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Cut/Copy/Paste | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Show Outline | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Show Page Breaks | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Change Font | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Change Title | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | View Share Dialog | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Save Print Options | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | View People in Document | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | View Document History | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Restore to Previous Version | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Copy Anchor Link | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | See Conversation Pane | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Add Comments | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Add Messages | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![no (red x)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/crossmark.png) | | Copy Document | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | | Export Document | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | | Print Document | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | | Change Notification Settings | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | | Find | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | | Favorite | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | ![yes (green checkmark)](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/resources-global/_corporate/images/checkmark.png) | # Access Omniscript Data JSON with Merge Fields Enable Omniscript elements and element properties to access data JSON using merge fields. A merge field is a variable that references the value of a JSON node. For example, if a JSON node is `"FirstName": "John"`, then the merge field `%FirstName%` returns `John`. Merge fields access data JSON using syntax to indicate to an Omniscript Element that a merge field is present. The syntax requires you to wrap a full JSON path with a percent sign on both ends. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Only certain element properties support merge fields. Text between two percent (%) signs in a Set Values formula or text field is treated as a merge field. To represent literal percent (%) signs, use the `$Vlocity.Percent` [environment variable](https://help.salesforce.com/s/articleView?id=xcloud.os_environment_variables_in_dataraptors_and_integration_procedures_47878.htm&release=264.0.0&type=5 "You can use environment variables to define Default Values and Filter Values, and in Formulas."). ## Common Use Cases for Accessing JSON with Merge Fields Learn about common use cases for accessing Omniscript data JSON with merge fields. - Setting Values to rename elements, access JSON nodes, run formulas, and populate elements. For more information, see [Set Values in an Omniscript](https://help.salesforce.com/s/articleView?id=xcloud.os_set_values_in_an_omniscript_22132.htm&release=264.0.0&type=5 "Use the Set Values action to set element values in subsequent steps, rename JSON nodes, create dynamic values, and concatenate data. Set Values actions use merge fields to access JSON data in other Omniscript elements.") - Access data stored in Omniscript elements in a formula or in a future step. - Access data returned from an Action. For example, an HTTP Action or Omnistudio Data Mapper Action returns data from Salesforce or an external source. For more information on Actions, see [Omniscript Action Elements](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_action_elements_10951.htm&release=264.0.0&type=5 "Use action elements in an Omniscript for executing actions, such as get or update data from one or more Salesforce objects, call a series of actions, send emails or documents for signature, redirect to different pages. Action elements can be either rendered as a button when placed in a Step or Block or run remotely if placed between steps. In either case, you can specify a redirect page, where the user can proceed to the next step or action, or if a button, back to the source step."). - Access data passed in as a parameter from a page. ## Access the Data JSON Use existing data JSON in an element property by indicating the use of a merge field. 1. Locate the name of the JSON node in the Omniscript's data JSON. ![Example of a JSON node named firstName with a value of John](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/omniscript_merge_data_json.png) 2. Enter the name of the JSON node and wrap the name in percentage signs to indicate it is a merge field. For example, a merge field accessing a JSON node named firstName must use the syntax %firstName%. ![Merge field that refers to the firstName JSON node](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/omniscript_merge_syntax.png) 3. Preview the Omniscript to ensure the Merge field works correctly. ![Preview of the Omniscript that shows "Welcome, John!"](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/omniscript_merge_field_result.png) ## Additional Syntax Check out additional syntax examples for nested JSON.
JSON Node Merge Field Syntax Example
"ContactInfo": {
    "FirstName": "John"
  }

Use a colon symbol : to access a nested JSON node.

%ContactInfo:FirstName%
"ParentObject": {
    "NumberMap": [
      1,
      2,
      3
    ]
  }

Use a colon symbol : to access nested JSON nodes and a pipe symbol | to access the index of the array that value.

%ParentObject:NumberMap|3%
 "ContactInfoStep": {
    "ContactInfoBlock": [
      {
        "FirstName": "John"
      },
      {
        "FirstName": "Adam"
      },
      {
        "FirstName": "Steve"
      }
    ]
  }

When a formula exists within a repeatable block, use |n to access the node in which the formula exists. Depending upon which node the formula exists in, it will return the correlating value. For more information, see Access to Data Within and Outside a Repeatable Block.

%ContactInfoStep:ContactInfoBlock|n:FirstName%
# Access Omniscript Data JSON with Merge Fields (Managed Package) For the managed package runtime, enable Omniscript elements and element properties to access data JSON using merge fields. A merge field is a variable that references the value of a JSON node. For example, if a JSON node is `"FirstName": "John"`, then the merge field `%FirstName%` returns `John`. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Merge fields access data JSON using syntax to indicate to an Omniscript Element that a merge field is present. The syntax requires you to wrap a full JSON path with a percent sign on both ends. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Only certain element properties support merge fields. Text between two percent (%) signs in a Set Values formula or text field is treated as a merge field. To represent literal percent (%) signs, use the `$Vlocity.Percent` [environment variable](https://help.salesforce.com/s/articleView?id=xcloud.os_environment_variables_in_dataraptors_and_integration_procedures_1.htm&release=264.0.0&type=5 "For the managed package runtime, you can use environment variables to define Default Values and Filter Values, and in Formulas."). ## Common Use Cases (Managed Package) For the managed package runtime, learn about common use cases for accessing Omniscript data JSON with merge fields. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - Setting Values to rename elements, access JSON nodes, run formulas, and populate elements. For more information, see [Set Values in an Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_set_values_in_an_omniscript.htm&release=264.0.0&type=5 "For the managed package runtime, use the Set Values action to set element values in subsequent steps, rename JSON nodes, create dynamic values, and concatenate data. Set Values actions use merge fields to access JSON data in other Omniscript elements.") - Access data stored in Omniscript elements in a formula or in a future step. - Access data returned from an Action. For example, an HTTP Action or Omnistudio Data Mapper Action returns data from Salesforce or an external source. For more information on Actions, see [Omniscript Action Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_action_elements.htm&release=264.0.0&type=5 "For the managed package runtime, this table provides information about Omniscript action elements."). - Access data passed in as a parameter from a page. ## Access the Data JSON (Managed Package) For the managed package runtime, use existing data JSON in an element property by indicating the use of a merge field. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Locate the name of the JSON node in the Omniscript's data JSON. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/omniscript_merge_data_json.png) 2. Enter the name of the JSON node and wrap the name in percentage signs to indicate it is a merge field. For example, a merge field accessing a JSON node named firstName must use the syntax %firstName%. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/omniscript_merge_syntax.png) 3. Preview the Omniscript to ensure the Merge field works correctly. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/omniscript_merge_field_result.png) ## Additional Syntax (Managed Package) For the managed package runtime, check out additional syntax examples for nested JSON. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

JSON Node

Merge Field Syntax Example

"ContactInfo": {
    "FirstName": "John"
  }

Use a colon symbol : to access a nested JSON node.

%ContactInfo:FirstName%
"ParentObject": {
    "NumberMap": [
      1,
      2,
      3
    ]
  }

Use a colon symbol : to access nested JSON nodes and a pipe symbol | to access the index of the array that value.

%ParentObject:NumberMap|3%
 "ContactInfoStep": {
    "ContactInfoBlock": [
      {
        "FirstName": "John"
      },
      {
        "FirstName": "Adam"
      },
      {
        "FirstName": "Steve"
      }
    ]
  }

When a formula exists within a repeatable block, use |n to access the node in which the formula exists. Depending upon which node the formula exists in, it will return the correlating value. For more information, see Access to Data Within and Outside a Repeatable Block (Managed Package).

%ContactInfoStep:ContactInfoBlock|n:FirstName%
# Access Omnistudio Designer Components from the List View View your Flexcards, Omniscripts, Integration Procedures, and Data Mappers on the list view pages, and open them in the standard designer. The list view page for the standard designer offers an enhanced user experience and better performance, when compared to the managed package designer. With Summer '25, the standard designer is available by default. If you haven't upgraded to this version, you can enable the standard designer by toggling it on in Omnistudio Settings. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note You can’t import and export Omnistudio components from the list page. Use Salesforce CLI instead. 1. After enabling the standard designer, remove any duplicate components in the App Launcher by hiding the duplicate tabs for the System Administrator profile. 1. From Setup, in the Quick Find box, enter Profiles and select it. 2. Edit the System Administrator profile. 3. From Custom Tab Settings, select and hide the duplicate component tabs. 4. Save your changes. 2. To launch a list view page, from the App Launcher, find and select your component. - Flexcards - Omniscripts - Data Mappers - Integration Procedures The list view shows a maximum of 2,000 records. To view records beyond the limit, search, sort, or filter records. The list view page shows the last modified version of each record. 3. Add and save filters to view only the records that meet your criteria. 1. Click ![Filter list view](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/os_filter_list_view.png). 2. Click **Add Filter** and set the filter criteria. 3. To add logic to refine which records appear in your list view, click **Filter Logic**. To reference filters in your logic statement, use the number assigned to each filter. 4. Save the filter. To load this view as the default list, pin the list view. The view is added to the list view dropdown list. 4. To search for a record, enter the search text in the list view search box. The search goes through only the first 2,000 records in the list. If you can’t find your record, try a more specific search or modify your filters or sorting. 5. To view all versions of a record, click **Versions**. Alternatively, you can click the dropdown at the end of a row and select **Manage Versions**. The list of all versions of the record appears. You can click the component version that you want to view and open it in its designer. 6. To create and customize your list views, click ![List view controls](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/os_list_view_control.png). 7. To open a record in the standard designer in a new tab, click the record in the list view. The list view shows all the components managed either by the standard designer or the managed package designer. Check the Managed Using Standard Designer column to determine which designer is used for managing a component. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note After you open a component in the standard designer, you can no longer edit it in the managed package designer. However, you can still reference it at runtime # Access the ContextId of a Flexcard on an Experience Site Most Flexcards use a ContextId, represented by the `{recordId}` context variable in an Input Map, to retrieve data from an Apex Remote, Omnistudio Data Mapper, or Integration Procedure data source. For a Flexcard to use the `{recordId}` context variable on an Experience site, you must add and configure a RecordId property. Add this property to your Flexcard's configuration, then configure the property on the Experience page. 1. In the Flexcard Designer, select **Setup** to open the Setup panel. 2. Click **\+ Add New** next to **Exposed Attributes**, and enter the values for the following properties: - **Attribute**: Enter RecordId. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_important.png) Important From a Custom LWC or an Omniscript, reference the generated API name in kebab case, cf-record-id. - **Type**: Select **String**. - **Targets**: Select one or more page types for which this property is visible, such as **lightning\_\_RecordPage**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note To view the property in an Experience Builder site, select **lightningCommunity\_\_Default**. - **Label:** Enter the property label, such as Record ID. - **Value**: Enter {!recordId}. 3. Click **Save**. 4. **Activate** your Flexcard. 5. Add your Flexcard to your Experience site. See [Add a Flexcard to an Experience Cloud Page](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_flexcard_to_an_experience_page_25183.htm&release=264.0.0&type=5 "After creating and activating your Flexcard, publish the generated component to an Experience Cloud page from the Experience Builder."). 6. In the Experience Builder's properties panel, in the **RecordId** property field, enter {!recordId}. # Access the ContextId of a Flexcard on an Experience Site (Managed Package) For the managed package runtime, on an Experience site, to view record data on a Flexcard that uses the `{recordId}` context variable in an Input Map to pass a ContextId to an Apex Remote, Omnistudio Data Mapper, or Integration Procedure data source, you must add and configure a recordId property. Add the recordId property in your Flexcard's configuration file, then configure the property on the Experience page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From an active Flexcard in the Flexcard Designer, click the down arrow next to **Activate** in the submenu, and click **Publish Options**. 2. Under **Targets**, select the **Community Default** checkbox. 3. Click the **Editor** tab. 4. Inside the **targetConfig** tag, add a property tag with the **name** recordId and the **type** String. ``` ``` 5. Add your Flexcard to your Experience site. See [Add a Flexcard to an Experience Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_flexcard_to_an_experience_page.htm&release=264.0.0&type=5 "For the managed package runtime, after creating and activating your Flexcard, publish the generated component to an Experience page from the Experience Builder."). 6. In the **recordId** property field, enter {!recordId}. ![LWC community page record Id](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/lwc_component_community_page_recordid.png) # Access the Data JSON (Managed Package) For the managed package runtime, use existing data JSON in an element property by indicating the use of a merge field. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From Setup panel in the Flexcard Designer, configure your Flexcard's datasource, and click **Save & Fetch** to locate the name of the JSON node in the Test Results window. ![FlexCards data JSON](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_view_data_json_save_fetch.png) 2. In a supported property field, enter the name of the JSON node and wrap the name in curly brackets "{}" to indicate it is a merge field. For example, a merge field accessing a JSON node named Status must use the syntax {Status}. ![FlexCard Merge Field Used in a Supported Element](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_merge_field_use_in_supported_element.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For many property fields, clicking into the field displays a list of available merge fields. For example, click into the **Value** field of an **Attribute** in the Properties panel of a child Flexcard or Custom LWC element to view a list of merge fields to select from. 3. Click **Preview** to see the Flexcard to ensure the merge field works correctly. # Access the Layout of the Omniscript Base Mixin (Managed Package) For the managed package runtime, call the Layout for your Custom LWC by passing the data-omni-layout parameter to the `getAttribute` method. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Use this method: ``` this.getAttribute('data-omni-layout') ``` # Access the Mobile Device Calendar Create a calendar import feature to manage events from one location, use preferred calendar apps, and save time from manually maintaining events or meetings in separate calendars. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note Using the CalendarService API to create contact-based features works only in the mobile app, and not on mobile or desktop web. You can develop and implement a Lightning web component with a calendar import feature using the CalendarService API. A calendar import feature requires the use of the mobile device calendar. The user must grant your app access to the calendar. 1. Import CalendarService into your component definition. 2. Test to make sure CalendarService is available before you call calendar-related functions. 3. Use the `getCalendar()` For complete details, see [Use Mobile Device Features in Mobile Apps](https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.use_mobile_capabilities) in the Lightning Web Components Developer Guide. # Access to Data Within and Outside a Repeatable Block Suppose you place an element in a repeatable block (a Block or an Edit Block) and you want to access data that is calculated in a different element. The method that you use to access the data depends on whether the element containing the data is within or outside the same repeatable block in the Omniscript. Review guidelines and examples for the Formula element and for the Select element, which is used to add a dependent picklist to an Omniscript. - **[Guidelines for Accessing Formula Element Data in Repeatable Blocks](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks_21869_formula.htm&release=264.0.0&type=5)** When you use a Formula element within a repeatable block, review guidelines and examples for accessing data within or outside the same repeatable block. - **[Guidelines for Accessing Select Element Data in Repeatable Blocks](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks_21869_select.htm&release=264.0.0&type=5)** When you use a Select element within a repeatable block, review guidelines and examples for accessing data within or outside the same repeatable block. The Select element is used with Salesforce dependent picklists. #### See Also - [Combine Elements Logically in a Block](https://help.salesforce.com/s/articleView?id=xcloud.os_block_14180.htm&release=264.0.0&type=5 "Combine logical groups of elements in an Omniscript Step using a Block element. Blocks help to group information to create nested JSON data. Blocks are contained within steps and can be repeated to capture an array of data. For example, street, city, state, and postal code elements can be combined into an address block.") - [Manage Records with an Edit Block](https://help.salesforce.com/s/articleView?id=xcloud.os_edit_block_14256.htm&release=264.0.0&type=5 "Create, edit, and delete multiple Salesforce or external records on one page using Edit Block. For example, if you're collecting an Account's Contact information, you can add an Edit Block to your Omniscript to enable users to add a record for each Contact.") - [Using Salesforce Picklists with Omniscript Inputs](https://help.salesforce.com/s/articleView?id=xcloud.os_tie_a_picklist_to_salesforce_21624.htm&release=264.0.0&type=5 "You can dynamically populate a Select, Multi-Select, or Radio element in an Omniscript with values from a picklist in your Salesforce org or with a custom Apex class.") # Access to Data Within and Outside a Repeatable Block (Managed Package) For the managed package runtime, suppose you place an element in a repeatable block (a Block or an Edit Block) and you want to access data that is calculated in a different element. The method that you use to access the data depends on whether the element containing the data is within or outside the same repeatable block in the Omniscript. Review guidelines and examples for the Formula element and for the Select element, which is used to add a dependent picklist to an Omniscript. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Guidelines for Accessing Formula Element Data in Repeatable Blocks (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks_formula.htm&release=264.0.0&type=5)** For the managed package runtime, when you use a Formula element within a repeatable block, review guidelines and examples for accessing data within or outside the same repeatable block. - **[Guidelines for Accessing Select Element Data in Repeatable Blocks (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks_select.htm&release=264.0.0&type=5)** For the managed package runtime, when you use a Select element within a repeatable block, review guidelines and examples for accessing data within or outside the same repeatable block. The Select element is used with Salesforce dependent picklists. #### See Also - [Block (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_block.htm&release=264.0.0&type=5 "For the managed package runtime, combine logical groups of elements in an Omniscript Step using a Block element.") - [Edit Block (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_edit_block.htm&release=264.0.0&type=5 "For the managed package runtime, create, edit, and delete multiple Salesforce or external records on one page by using an Edit Block. For example, if you're collecting an Account's Contact information, you can add an Edit Block to your Omniscript to enable users to add a record for each Contact.") - [Tie a Picklist to Salesforce (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_tie_a_picklist_to_salesforce.htm&release=264.0.0&type=5 "For the managed package runtime, using Vlocity Omniscript, you can dynamically populate a Select, Multi-Select, or Radio element with values from a picklist in your Salesforce org, or using a custom Apex class.") # Access to Other Salesforce Apps Looking for a particular feature? To see all the Salesforce apps that are available to you, check out the app menu or App Launcher. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: all editions except Database.com and Starter
There are other Salesforce apps that are available to you right from within Salesforce. Other apps include the Salesforce Sales app, the Service app, and any custom apps for your organization. Any third-party apps that are connected to your Salesforce org are called connected apps. If your org has connected apps, they appear in the App Launcher. Third-party apps are productivity apps such as Gmail™ and Microsoft Office 365™. - **[Open Another App from the App Launcher in Salesforce Classic](https://help.salesforce.com/s/articleView?id=xcloud.basics_app_launcher.htm&release=264.0.0&type=5)** Navigate between your Salesforce apps and connected apps from a single menu. - **[App Switching in Lightning Experience](https://help.salesforce.com/s/articleView?id=xcloud.basics_app_launcher_lex.htm&release=264.0.0&type=5)** Use the App Launcher to navigate between your apps. You can easily switch between apps and access other Salesforce items and features. # Access Tokens Access tokens are your key to Salesforce APIs. When a client successfully completes an authorization flow, whether it’s a standard OAuth 2.0 flow or a headless identity flow, Salesforce issues an access token that can be used to access protected Salesforce data. Salesforce supports two types of access tokens: opaque tokens and JSON Web Token (JWT)-based access tokens. Each type has its own merits and limitations based on your use case. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: all editions
## Opaque Access Tokens Salesforce traditionally issues opaque access tokens during authorization flows. The hallmark of these tokens is that they’re hard to read without additional help. From the perspective of your client apps, an opaque token is an inscrutable string of random characters. Your clients can’t understand or validate the data represented by the token unless they call a Salesforce endpoint. Typically, to get information about an opaque access token, you call the Salesforce introspection or User Info endpoints. ## JWT-Based Access Tokens JWT-based access tokens are less traditional, but that doesn’t mean they’re less capable. Instead of being an opaque string, a JWT access token is formatted as a JSON object with all the information necessary to validate it. JWT-based access tokens can be introspected locally, without calling a Salesforce endpoint. ## When to Use Each Token Type If you’re only interacting with one Salesforce instance, opaque tokens are more appropriate. You can easily make calls to Salesforce endpoints without slowing performance. You can also use opaque tokens to access the Salesforce user interface, which you can’t do with JWT-based access tokens. By comparison, JWT-based access tokens are better suited for use cases where you have a wide range of third-party services and you need a Salesforce token that works with all of them. Because you can introspect the tokens locally, you can avoid multiple, repeated callouts to Salesforce endpoints, which can slow performance when you’re working with a range of APIs. ## Comparing Token Types Besides the major distinction between these token types, this table summarizes the key functional differences between opaque and JWT-based access tokens. Before using either type, make sure that you thoroughly understand their differences and their impact.
Functionality Opaque Token JWT-Based Token
Validation and introspection Can be validated and introspected only with a call to a Salesforce endpoint. As a result, they’re ideal for use cases with just one Salesforce instance but poorly suited for use cases with multiple services. Can be locally validated and introspected, making them more compatible with external services
UI access
  • Can be used to directly access the Salesforce UI
  • Can be bridged into the Salesforce UI using the services/oauth2/singleaccess endpoint
  • Can be bridged into the Salesforce UI by using the services/oauth2/singleaccess endpoint
  • Can be indirectly used to access the Salesforce UI by using a hybrid OAuth flow that generates an opaque access token. The hybrid flow returns the opaque token in the parent_sid field in the token response. You can then use this opaque token for direct UI access.
Timeout Each time the token is used, its validity is extended. The timeout value is fixed and can’t be extended.
User deactivation If the user holding the token is deactivated, the token immediately stops working because any calls to Salesforce endpoints fail. If a user is deactivated, the token is still technically valid until it times out.
Enablement Enabled by default Must be enabled on your external client app or connected app
Headless Guest User Flow and unique visitor ID (UVID) Not supported Required to use the guest user flow and UVID
- **[JWT-Based Access Tokens](https://help.salesforce.com/s/articleView?id=xcloud.jwt_access_tokens.htm&release=264.0.0&type=5)** Salesforce supports two types of access tokens: opaque tokens and JSON Web Tokens (JWT)-based access tokens. An opaque access token is formatted as a string that you can’t decode unless you call the Salesforce User Info endpoint. A JWT-based access token is formatted as a JSON object that contains all of the information required to authorize an app. This transparent format makes JWT-based access tokens easier to use for services built outside of the Salesforce platform. You can easily parse and validate JWT-based access tokens locally on your off-platform service, without calling a Salesforce endpoint. By locally introspecting tokens, you can improve the performance and efficiency of your authorization flows. - **[Issue JWT-Based Access Tokens](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_enable_jwt.htm&release=264.0.0&type=5)** Enable a Salesforce external client app or connected app to issue JSON Web Token (JWT)-based access tokens instead of opaque tokens. Unlike opaque tokens, JWT-based access tokens have a transparent format, so you can introspect them without calling a Salesforce endpoint. This functionality makes them handy for use cases where you’re calling multiple external systems. - **[Revoke All JSON Web Token (JWT)-Based Access Tokens](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_revoke_jwt.htm&release=264.0.0&type=5)** If necessary, you can revoke all JSON Web Token (JWT)-based access tokens issued by all external client apps and connected apps. Revoking JWT-based access tokens invalidates their signing keys, which makes the tokens unusable. - **[Revoke OAuth Tokens](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_revoke_token.htm&release=264.0.0&type=5)** Revoke an OAuth token if you don’t want a client to access Salesforce data or if you don’t trust the client to discontinue access on its own. # Access Your Account When You Can’t Use a Passkey Regain access to Salesforce if passkey issues prevent you from logging in. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: all editions
Use these steps when one of these passkey issues prevents you from accessing your account. - Your registered passkey isn’t working. - You can’t create a passkey. - Your registered passkey is on one device, such as your desktop computer, and you can’t use it to log in on another device, such as your phone. - You don’t have access to the device where you created your passkey. ## If a Salesforce Admin Is Available Ask your Salesforce admin for help with accessing your account. If you’re an admin, ask another admin for help. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note If you’re the only admin for your org, see [If You’re the Only Admin](https://help.salesforce.com/s/articleView?id=xcloud.mfa_passkey_account_lockout.htm&release=264.0.0&type=5 "If you’re the only Salesforce admin in your org, contact Salesforce Customer Support. Provide your org ID and the username for your admin account. Salesforce Customer Support can disconnect your existing passkey so that you can add a new one."). 1. Ask your admin to [generate a temporary verification code](https://help.salesforce.com/s/articleView?id=xcloud.security_temp_id_verification_code_generate.htm&release=264.0.0&type=5 "If a user forgets or loses the identity verification method that they use for multi-factor authentication (MFA), generate a temporary verification code so they can log in while you sort out the issue. You can control how long codes are valid, up to 24 hours. A user can log in multiple times with their code until it expires. Temporary verification codes are valid for MFA only. They can’t be used for device activation, when a user must verify their identity because they’re logging in from an unrecognized browser or app."). Temporary verification codes have these limitations. - An admin sets the expiration time for the code: between 1 and 24 hours. - You can use the same code to log in as often as needed until it expires. - You can have only one temporary verification code at a time. - If you forget or lose a code before it expires, an admin can manually expire the old code and generate a new one. An admin can generate up to six codes per hour for each user. 2. Go to your Salesforce login page. 1. Enter your username and password. 2. When prompted by Salesforce, enter the temporary verification code. ![Prompt to enter a temporary verification code](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/mfa/temporary_verification_code_enter.png) 3. To avoid another lockout, disconnect passkeys that don’t work and add a new passkey while you’re logged in. Add multiple passkeys so that you have backups. Before adding a passkey, review the considerations for your use case. See [Create a Passkey](https://help.salesforce.com/s/articleView?id=xcloud.register_built_in_authenticator.htm&language=en_US). ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_warning.png) Warning Assign the Manage MFA in User Interface permission to at least two admins. This preventive measure makes sure that another admin can manage MFA if one admin loses access. ## If You’re the Only Admin If you’re the only Salesforce admin in your org, contact Salesforce Customer Support. Provide your org ID and the username for your admin account. Salesforce Customer Support can disconnect your existing passkey so that you can add a new one. #### See Also - [Troubleshoot Passkey Issues](https://help.salesforce.com/s/articleView?id=xcloud.mfa_supported_verification_methods_bia.htm&release=264.0.0&type=5 "When employee users log in and register for multi-factor authentication (MFA), passkeys are the default option. Identify and resolve issues with passkey prompts, setup, login, and more.") # Access Your Completed Quotes with the Your Account App You can review and download your completed quotes using the Completed Quotes tab available on the updated Contract Details page in Your Account. ### Required Editions
Available in: Starter, Pro Suite, Professional, Enterprise, Unlimited, and Developer Editions
User Permissions Needed
To manage, update, and approve quotes: Manage Billing permission or Your Account App Admin permission set
1. Log in to Your Account and select **Go To Contracts**. 2. Select a contract. 3. To view a completed quote, click the Completed Quote tab and the quote number. ![Access completed quotes on the Salesforce Contract page](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/your_account_completed_quotes.png) 4. To download a PDF of a completed quote, click **Download**. ![Download quote](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/your_account_download_quote.png) # Access Your Personal Settings in Lightning Experience If you use Lightning Experience, your personal settings are located either in Personal Setup or My Settings. ### Required Editions
Available in: Lightning Experience
Available in: All editions except Database.com.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note Accessing personal settings isn’t supported on Lightning Experience on iPad Safari. We recommend that you use Lightning Experience on a desktop to access your personal settings. 1. At the top of any Salesforce page, click your image. 2. Click **Settings**. 3. On the left side of the page, click a menu item to display its submenu, then click the item you want. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_tip.png) Tip To quickly find a page, type the first few characters of its name in the **Quick Find** box. As you type, pages that match your search terms appear in the menu. For example, to find the Personal Information page, type pers in the **Quick Find** box. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note If you receive an error message regarding insufficient privileges when trying to access your personal settings, ask your Salesforce admin to enable the Improved Setup User Interface option. If you’re an admin, from Setup, enter User Interface in the Quick Find box, then select **User Interface**. Select **Improved Setup User Interface**, and click **Save**. # Access Your Personal Settings in Salesforce Classic If you use Salesforce Classic, your personal settings are located either in Personal Setup or My Settings. ### Required Editions
Available in: Salesforce Classic
Available in: All editions except Database.com.
1. At the top of any Salesforce page, click the down arrow next to your name. Depending on your organization’s user interface settings, you should see either **Setup** or **My Settings** in the menu. 2. From the menu under your name, click **Setup** or **My Settings**. If you clicked **Setup**, look on the left side of the page and click a menu item to display its sub-menu, then click the item you want. ![Navigating to Setup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/nav_personal_setup.png) If you clicked **My Settings**, look on the left side of the page and click a menu item under My Settings to display its sub-menu, then click the item you want. ![Navigating to My Settings](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/nav_my_settings.png) To quickly find a page, type the first few characters of its name in the **Quick Find** box. As you type, pages that match your search terms appear in the menu. For example, to find the Personal Information page, type pers in the **Quick Find** box. # Accessibility Mode Features Learn how accessibility mode changes your experience using Salesforce. ### Required Editions
Available in: Salesforce Classic
Available in: all editions except Database.com
## Accessibility Mode Features That Enhance Usability - Access setup pages from a Setup link at the top of the page. - Dropdown menus include a Go button that you select to navigate to the option you choose in the dropdown list. - Menu buttons are rendered as a dropdown list with a Go button. - Overlay pages are rendered as separate popup windows. - The HTML editor is replaced with a text box. This text box only accepts HTML and does not recognize plain text entries like carriage returns. To separate content, you must use paragraph or line break HTML tags. - When viewing a dashboard, the View Dashboard auto-complete filter is replaced with a standard dropdown menu. - The Edit Columns link on the Manage Members page, accessible via the Manage Members dropdown on a campaign detail page, becomes a dropdown button. The Edit Columns overlay is replaced by a standard setup page. - Clicking a requested meeting in the Open Activities related list and in some list views doesn’t open the meeting detail page. Instead, a dialog opens that instructs you to contact the meeting organizer for details about the requested meeting. - The Turn My Email On dropdown list on a Chatter group displays as a Chatter Email Settings link that opens your settings for receiving Chatter email. ## Disabled Chatter Features - Edit Chatter posts and comments ## Disabled Calendar Features - Event detail overlays in the calendar view - Drag-and-drop editing - Drag-and-drop scheduling - Click-and-create events - The New Meeting Request button on the Open Activities related list ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note As a result, you can’t request a meeting in accessibility mode, and the Requested Meetings subtab in the Calendar section of the Home tab doesn’t display any meetings. ## Disabled Report and Dashboard Features - Drag-and-drop editing in the dashboard builder - Creating and editing reports in report builder ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note Report builder is required to create or edit joined reports and reports containing cross filters or buckets. Users with accessibility mode enabled can run those reports, but can’t create or edit them. To create reports in accessibility mode, you must use the report wizard. - Drag-and-drop to move reports and dashboards between folders ## Disabled List View Features - Related list hover links - These enhanced list features: - Inline editing - Rearranging and adjusting the width of columns - Editing, deleting, or refreshing the current list view - Changing the number of records displayed per page - Jumping to a specific page of results ## Other Disabled Features - The Check Spelling button for solutions - The latest Manage Members page - The Recent Tags dropdown menu when you add the tag component to the sidebar - When finding similar opportunities, the Match Criteria sidebar on the search results page - The list of similar questions as you type a question in an answers zone ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_tip.png) Tip Users with accessibility mode enabled should use the search box on the Answers tab to see if their question has already been asked before they post their question. # Accessibility Standards Learn about the standards for low-vision users and deaf or hearing impaired users that Salesforce follows to design applications with accessibility in mind. ### Required Editions
Available in: Lightning Experience
Available in: all editions except Database.com
Salesforce is committed to providing on-demand enterprise applications accessible to all individuals, including users working with assistive devices, such as speech recognition software and screen readers. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_important.png) Important Accessibility features in Salesforce Classic are no longer maintained or enhanced. We recommend that you instead use Lightning Experience, which offers the latest accessibility features. The use of a screen reader isn’t supported in Lightning Experience on iPad Safari because Apple Safari’s screen reader, VoiceOver, doesn’t support: - Reporting detailed information in tables that use the data type, grid - Accurately reading the menu items in a dropdown list - Focus management We recommend that you use Lightning Experience on a desktop when using a screen reader. To help meet our goal of universal design, Lightning Experience follows the internationally recognized best practices in Section 508 of the Rehabilitation Act and the Web Content Accessibility Guidelines (WCAG) 2.2 Level AA to the extent possible. Find Product Accessibility Conformance Reports for specific Salesforce products on our [Product Accessibility Status page](https://www.salesforce.com/company/legal/508_accessibility/). See [Contact Salesforce About Accessibility](https://help.salesforce.com/s/articleView?id=xcloud.accessibility_contact.htm&release=264.0.0&type=5 "Have a question, need guidance, or want to report an issue regarding Salesforce accessibility? Here are some resources and links to help you navigate."). ## Recommended Screen Readers and Browsers | Operating System | Screen Reader | Recommended Browsers | | --- | --- | --- | | Windows®, latest version | NVDA, latest version | Chromium-based browsers (Google Chrome® and Microsoft Edge), latest version | | Windows, latest version | Freedom Scientific JAWS, latest version | Chromium-based browsers (Google Chrome and Microsoft Edge), latest version | | macOS, latest version | VoiceOver | Google Chrome, latest version, or Safari®, latest version | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note Salesforce pilot and beta features don’t always provide full accessibility. ## Low-Vision Users Who Require Magnification Salesforce supports standard OS-level, browser, and third-party magnification tools. Adjust the zoom setting to suit your needs. ## Considerations for List Views and Related Lists Salesforce displays records in tables called list views and related lists. When zoomed in to 200%, some column text can be truncated in list views and related lists, even if column text is wrapped. ## Deaf or Hearing Impaired Users Salesforce provides captions for videos found in product documentation. Our products aim to not use sounds as the only means of communication. # Accessibility Tips for Salesforce Classic Learn about accessibility features for sighted keyboard users and specific color users. ### Required Editions
Available in: Salesforce Classic
Available in: all editions except Database.com
## Sighted Keyboard Users - Selected areas on the screen include highlights to give you an on-screen visual indication of focus. - These elements are identified in our page markup to help you interact with them. - Headings are marked as headings rather than field set and legend elements to group form controls. - The main heading for the page (typically at the start of the main content area) is a level 1 heading. You can shift to this heading with a shortcut key. - Data tables have data table markup (except for enhanced list views in Standard Mode) to aid identification of headers for each cell. - Lists provided in the main content area are marked as lists. - A skip link (the first keyboard-focusable link on each page) allows you to shift the focus to the start of the main content area. This feature bypasses the navigational menus before the main content area and reduces the number of tab presses required to reach the main content area of the page. - Keyboard focus is placed inside dialog boxes when they open and remains locked there until the dialog is closed. - On edit pages, the keyboard focus defaults to the first editable field on the page. When creating or editing a task or event, the keyboard focus defaults to the Subject field, regardless of its location on the page. - Buttons, links, and fields that aren't currently active are labeled with a “disabled” attribute. For example, when using a wizard with multiple steps, some buttons are disabled until you select a specific option. ## Specific Color Users Browser and operating system settings don’t change the colors displayed within images. Salesforce implements many images as background images, which aren’t displayed when browser and operating system settings for color display are in effect. If you rely on browser settings and your operating system to change your display to a particular color combination, try to: - Display image text alternatives to access information provided by important images. - Override our CSS for these classes: assistiveText, zen-assistiveText. Then set your browser settings according to your preferences. In addition, - Some charts (for example, in reports and dashboards) rely on color to display information. If you have trouble interpreting the information in charts, select **Color-Blind Palette on Charts** from your personal detail page. This option sets an alternate color palette for charts that has been optimized for use by color-blind users. Dashboard emails don’t use the alternate palette. You can also click a chart to view its source report. - Dashboards contain charts and graphs that are visual in nature. To access the report data used to generate the chart or graph, select the dashboard component. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note The underlying report can contain more data than what is represented in the dashboard component. It can also contain some data that you don’t have access to due to sharing settings. # Accessing the Context Id of an LWC Card on a Community Page (Managed Package) For the managed package runtime, on a Community page, to view record data on an LWC Card that uses the `{{params.id}}` context variable in an Input Map to pass a context Id to an Apex Remote, Omnistudio Data Mapper, or Integration Procedure data source, you must add and configure a recordId property. Add the recordId property in your LWC Card's configuration file, then configure the property on the Community page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Add the recordId property to the configuration file form the Card Designer, perform the following tasks: 1. Open the Vlocity Cards tab and click a card layout to open a version in the Cards Designer. 2. Click **Show XML Interface** in the Cards pane. 3. Select the **CommunityDefault** checkbox. 4. Click the pencil icon next to **CommunityDefault**. 5. Click the **+** icon next to Add Properties. 6. Add recordId as the variable name for the **name** attribute. 7. In the **Select Property Type (Required)** section, select **String**. 8. Click **Save** to save the property. 9. Click **Save** to save changes to the Metadata Configuration file. To add the recordId property from your LWC Card's [configuration file](https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.reference_configuration_tags): 1. In your configuration file, add the **targetConfig** tag. 2. Inside the **targetConfig** tag, add a property tag with the **name** recordId and the **type** String. ``` ``` 2. Add your LWC card to your Community page. See [Adding an LWC Card to a Lightning or Community Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_an_lwc_card_to_a_lightning_or_community_page.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model."). 3. In the **recordId** property field, enter {!recordId}. ![LWC community page record Id](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/lwc_component_community_page_recordid.png) # Accordion Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains the Accordion LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _Accordion Lightning Web Component_ displays content as vertically stacked sections. Sections can embed other components. ## Available c-accordion Attributes

Attribute

Value

Type

Required

Description

theme

slds, nds (Default: slds)

string

 

Specifies which theme to use.

active-section-name

 

string or array

 

Sets the default open section.

allow-multiple-sections-open

true, false (Default: false)

boolean

 

To open multiple sections at the same time, set to true.

## Example c-accordion Component ``` activeSectionName = ["a", "b"]; allow = true; ``` ``` ... ... ... ... ... ... ``` ## Available listeners onaccordionsectionopen Triggered after a section opens. The event detail contains the name of the section and its uniqueKey which can be used to identify it using class `accordion-class_[uniqueKey]` onaccordionsectionclose Triggered after a section closes. The event detail contains the name of the section and its uniqueKey which can be used to identify it using class `accordion-class_[uniqueKey]` ``` this.template.addEventListener("onaccordionsectionclose", function(event) { console.log( "onAccordionSectionClose : ", JSON.stringify(event.detail.result) ); }); this.template.addEventListener("onaccordionsectionopen", function(event) { console.log("onAccordionSectionOpen : ", JSON.stringify(event.detail.result)); }); ``` # AccordionSection Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains the AccordionSection LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _Accordion Lightning Web Component_ is the basic element inside the _Accordion Lightning Web Component_. ## Available c-accordion-sectionAttributes

Attribute

Value

Type

Required

Description

label

 

string

 

Sets the label for the section.

name

 

string

 

Used to bind to the parent accordion component. Name must be unique for each section inside an accordion.

title

 

string

 

Sets the title of the component.

menuitem

 

array

yes (if menu size and position is given)

Defines the list of menu items.

## Example menuitems _Note_: All the keys of the menuItem array object are required. However, the value can be null or empty. For more info check the readme of the _Menu Lightning Web Component_. ``` [ { actionUrl: "javaScript:void(0);", openUrlIn: "newTab", name: "menu1", type: "action", record: { id: "001122", value: "Menu1", label: "Menu1" } }, { actionUrl: "javaScript:void(0);", openUrlIn: "newTab", name: "menu1", type: "action", record: { id: "001124", value: "Menu3", label: "Menu3" } } ]; ``` ## Example c-accordion-section Component ``` @track menuitem = [ { actionUrl: "javaScript:void(0);", openUrlIn: "newTab", name: "menu1", type: "action", record: { id: "001122", value: "Menu1", label: "Menu1" } }, { actionUrl: "javaScript:void(0);", openUrlIn: "newTab", name: "menu2", type: "action", record: { id: "001123", value: "Menu2", label: "Menu2" } }] ``` ```

This is the first accordion

.

.

.

This is the second accordion

.

.

.

This is the third accordion

.

.

.

``` # Account Account Relationships Visualize and manage multi-tier partner hierarchies using ARC to support accurate deal mapping in design registration workflows. Enable channel managers to clearly map and associate submitted designs to the correct partner accounts. Support downstream processes like deal approvals, opportunity creation, and incentive tracking by providing a structured view of partner ecosystems. To create Account Account relationships using Account Relationship Center (ARC), follow these steps: - **Go to Setup > Actionable Relationship Center**. - Create a new relationship graph using the default template for Account Account Relationships or Deal Partners. - Account Account Relationships template shows related accounts for a specific account up to five hierarchy levels. - Deal Partners template shows the deal partners involved in a specific opportunity. - Add relevant account nodes and define relationship roles (such as Distributor → Reseller). - Save and validate the graph. #### See Also - [Actionable Relationship Center (ARC)](https://help.salesforce.com/s/articleView?id=ind.fsc_admin_arc_overview.htm&language=en_US) # Account Incentives Dashboard Embed the Account Incentives dashboard on the Account page to monitor the impact of rebate programs on account revenue. The visualizations help you track account activity and identify products to upsell. ### Required Editions
Available in Developer, Enterprise, and Unlimited editions that have Manufacturing Cloud enabled
The dashboard includes: - A program timeline that highlights when each rebate program went live for the account. - A Payout section that shows the status of payouts for all accounts enrolled in the rebate programs. - A Transaction section that shows the number of transactions made, number of products sold, and the payout-to-revenue ratio. - The Program Whitespace, which highlights potential opportunities for new business. Whitespace means accounts that present an opportunity to create new business. # Account Planning with Partners Collaborate with partners on strategic customer accounts directly within Salesforce using Account Plans in PRM. Share access to account goals, metrics, and insights to create structured plans that drive growth, strengthen alignment, and build long-term customer value. This feature extends Sales Account Planning tools to the Partner Community. ### Required Editions
Available in: Lightning Experience
Available in: Sales Cloud Enterprise Edition (or above) with Partner Ecosystem Management (Member or Login), Partner Community, and External Apps licenses.
Partners can view and contribute to account strategies based on permissions set by vendor teams, making it easier to align on goals and execute collaboratively. Account Planning in PRM supports a Plan with Partners model where channel managers and partner reps co-create strategic plans. Partners can contribute insights, map customer needs, and upload supporting documentation based on permission levels. - **[Set Up Account Plans with Partners](https://help.salesforce.com/s/articleView?id=xcloud.pem_accountplan_setup.htm&release=264.0.0&type=5)** Set up account plans with partners to align on shared goals, track strategic initiatives, and drive mutual growth. This feature helps improve collaboration, visibility, and execution on key customer accounts across internal teams and partner organizations. # Accrual and Payout Engine - Delta Calculation The Delta Calculation DPE compares the current run's Rule Ingest and Tier Ingest records against records stored from the previous run. Records unchanged since the last run are marked Unmodified and not reprocessed. This prevents double-counting when the engine runs multiple times in the same period. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
For each Rule Ingest record, the DPE creates a Rule Stage record. For each Tier Ingest record, it creates a Tier Stage record that adds the cumulative qualifying quantity and the date range of contributing transactions. Tier Stage records for NovaTech, Revenue-Based — combined April quantity is 170 units (70 + 100), which crosses into Tier 2: | Member | Rebate Type | Tier | Cumulative Quantity | Rate | First Transaction | Last Transaction | | --- | --- | --- | --- | --- | --- | --- | | NovaTech | Revenue-Based | Tier 1 | 100 | 2% | Apr 1 | Apr 9 | | NovaTech | Revenue-Based | Tier 2 | 170 | 3% | Apr 9 | Apr 9 | The cumulative quantity of 170 in the Tier 2 row tells the Rule Processing DPE that NovaTech has crossed into Tier 2 for April. Tier Stage records for Rayler, Volume-Based, Radius — 70 units, stays within Tier 1: | Member | Rebate Type | Product | Tier | Cumulative Quantity | Rate | First Transaction | Last Transaction | | --- | --- | --- | --- | --- | --- | --- | --- | | Rayler | Volume-Based | Radius | Tier 1 | 70 | $2/unit | Apr 1 | Apr 1 | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note If a member has no qualifying transactions in a period, the First Transaction and Last Transaction fields in the Tier Stage record are blank. Blank date fields indicate no qualifying activity for that member in the period, not a DPE failure. # Accrual and Payout Engine - Rule Processing The Rule Processing DPE reads the Tier Stage records from Delta Calculation DPE and calculates the accrual value for each transaction against each applicable tier. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
For Retroactive rebate types, the tier reached by the highest cumulative quantity determines the rate, which then applies to all units across every transaction in the period including units from earlier transactions that initially fell within a lower tier. For Stepped rebate types, each tier's rate applies only to the units within that tier's boundary. A transaction that spans two tiers produces two separate accrual amounts. ## AMER Program, April 2026 NovaTech's combined April quantity is 170 units — 70 Radius units on April 1 and 100 Spectra units on April 9 — which crosses into Tier 2. For Volume-Based (Retroactive): NovaTech reaches Tier 2, so the $3 per unit rate applies retroactively to all 170 units. - April 1 transaction (70 units × $3) = $210 - April 9 transaction (100 units × $3) = $300 - NovaTech Volume-Based total: $510 For Revenue-Based (Stepped): The April 1 transaction fills 70 of Tier 1's 100-unit capacity at 2%. The April 9 transaction fills Tier 1's remaining 30 units at 2%, then the next 69.99 units move into Tier 2 at 3%. - April 1 in Tier 1 (70 units × 2%) = $1.40 - April 9 in Tier 1 (30 units × 2%) = $0.60 - April 9 in Tier 2 (69.99 units × 3%) = $2.10 - NovaTech Revenue-Based total: $4.10 GlobalMed has the same transaction quantities and dates as NovaTech, so the calculated amounts are identical. ## APAC Program, April 2026 — Radius Rayler's Radius quantity is 70 units (April 1 transaction only — Spectra is a separate calculation path). 70 units stays within Tier 1. - For Volume-Based (Retroactive): 70 units × $2 = $140 - For Revenue-Based (Stepped): 70 units × 2% = $1.40 SunriseRetail has the same Radius quantity, so the calculated amounts are identical. # Accrual Events Use the Accrual Events promotion template to offer rewards to members of the company’s loyalty program when they complete an eligible activity. You can add granular conditions that decide the member transactions that are for eligible for rewards. For example, if members shopping from the company’s app is an eligible activity, you can add granular conditions to reward members if they buy five items or more from the app. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
With the Accrual Events template, you can add only one rule to the promotion and the rule is eligible for only one customer activity. For example, to reward members with 100 points when they join the loyalty program and to offer customers 2X points when they shop from the shopping app, you must create two separate promotions. - **[What Members Do Section in the Accrual Events Promotion Template](https://help.salesforce.com/s/articleView?id=xcloud.global_promotions_management_design_promotion_wizard_step_four_loyalty_member_do.htm&release=264.0.0&type=5)** Select the granular details of the member transactions that are eligible for the promotion. You can also add custom conditions that are unique to your promotion’s requirements. - **[What Members Get Section in the Accrual Events Promotion Template](https://help.salesforce.com/s/articleView?id=xcloud.global_promotions_management_design_promotion_wizard_step_four_loyalty_member_get.htm&release=264.0.0&type=5)** Select the rewards that the loyalty program members are eligible for as part of the promotion. You can offer points, vouchers, and badges as promotion rewards to the members. You can specify an expiration date and the limit for each reward. # Accrual Process Accrual transactions occur when a member performs an activity that earns them points. For example, an activity can be a product purchase from a host business or partner, a bonus, or any other business interaction. The business is responsible for payment when the member redeems or makes a claim for rewards. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
In accrual processing, points are credited to the members using business flow in a batch mode. You can schedule a job to process the accrual transactions. Creating an accrual process involves these steps: - Create a flow to update data in your Salesforce org, and activate it. - Create a batch job to process the flow. - Create a scheduled flow that determines when a batch job runs, and activate it. - Based on the schedule, use Monitor Workflow Services to check the status of your batch job. If accrual processes credit qualifying points for member activities where the activity date is before members' last qualifying points reset date, the credited qualifying points are automatically expired. An Expiry-type loyalty ledger is created to expire the credited qualifying points and is associated with the activity's transaction journal. - **[Credit Points to Members Using Accrual Process (Example)](https://help.salesforce.com/s/articleView?id=xcloud.create_an_accrual_process_to_reward_points.htm&release=264.0.0&type=5)** For example, admins of an airline can set up an accrual job to credit points to loyalty program members based on the class of ticket purchased. # Accruals and Payouts Accrual is the potential financial commitment based on data projections, whereas payout is the amount that you actually pay based on the recorded transaction. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
## Accruals To accurately plan for the upcoming financial period, your finance team must estimate monetary dues against a rebate program. Calculate accruals upfront at the start of a period to verify the potential payment that is due at the end of a month or quarter. Calculate accruals by using: - Actual transaction data to get a projected accrual rate. - Account forecast data to set up benefit thresholds. If partners aren't attaining a benefit threshold during a year to be eligible for payouts for certain periods, you can still accrue based on a predefined benefit tier value. You can accordingly save the funds for payouts based on your accrual calculations. By doing so, you’ll be better prepared with your finances if partners reach the higher threshold next year and you have to pay them. ## Payouts Your account managers must know the exact amount that partners are supposed to receive as rebates for each payout period. When a partner is enrolled as a member in a rebate program, the program manager defines the eligibility criteria and benefit tiers for the applicable rebate types. The payout period is decided based on the rebate program’s duration and frequency of payouts. Rebate Management computes the payouts within that period depending on how frequently the flows run and how regularly values get updated with each run. After the latest payout data is available, account managers can have effective conversations with partners on how to increase their threshold and scale their benefits. On the payout calculation date of a period, the payout amount at that point is the reward that the member receives. #### See Also - [Calculate Accrual and Payout Amounts for a Single Payout Period (Example)](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_get_accrual_and_payout_amounts_example.htm&release=264.0.0&type=5 "This example shows how you can calculate payouts and accruals for a member. Accruals help you project an amount, whereas payouts help you track actual rewards.") # Accruals and Payouts Calculation in Rebate and Accrual Management Advanced Learn how the Advanced Rebate Engine uses Program Rebate Type configurations to process high-volume transaction data in Data Cloud. By setting independent accrual and payout bases, you can track estimated financial liabilities on a different cadence than finalized cash disbursements. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
- **[How Are Accruals Calculated?](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_adv_how_accruals_calculated.htm&release=264.0.0&type=5)** Define the calculation basis of a rebate type and add an Accrual Frequency to specify how often to track financial liabilities. In the Advanced engine, you can decouple accruals from payouts to recognize accounting liabilities more frequently than cash disbursements. - **[How Are Payouts Calculated?](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_adv_how_payouts_calculated.htm&release=264.0.0&type=5)** Define the calculation basis of a rebate type and add a payout Frequency to specify how often payouts are settled. In the Advanced engine, payouts run on Data Cloud and you can decouple payouts from accruals so that cash disbursements settle on a different cadence than the accounting liabilities you recognize. - **[Set Up Data Processing Engine (DPE) for Rebate and Accrual Management Advanced](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_adv_setup_dpe.htm&release=264.0.0&type=5)** Learn how a coordinated sequence of Data Processing Engine (DPE) definitions on Data Cloud calculates accruals and payouts. Clone and activate the standard definitions, execute them in exact sequential order, extend your aggregation model using custom anchors, and build automated flows to run the entire pipeline seamlessly. - **[Manage Advanced Rebate Payout Calculations](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_adv_manage_payout_calculations.htm&release=264.0.0&type=5)** Payouts are the actual amounts paid to members based on finalized transactions and tier attainment for a payout period. To compute payouts, run a sequence of six Data Processing Engine (DPE) definitions on Data Cloud using a payout calculation basis. The engine aggregates finalized transactions, determines each member's tier attainment, and syncs output back to Salesforce Core across three payout objects. # Act on Data Policy Scan Results After you've reviewed the Data Detect scan policy results, use them to bolster your data security and privacy strategy, especially with specific fields that have excessively sensitive data. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer editions with the Salesforce Shield or Data Detect Licenses.
## Take Action on your Scanned Data Results After Data Detect helps you identify sensitive data, use other Salesforce Guardian products or solutions to enhance your organization’s data security. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Make sure you have the correct license type for any separate products you intend to use, or contact your Salesforce representative. ## Classifying Sensitive Data Update the [data sensitivity classification](https://help.salesforce.com/s/articleView?id=xcloud.platform/help/en-us/extend_click/topics/data_classification/data_classification_intro.htm&type=5&language=en_US) and compliance categorization of fields that contain sensitive data. Apply data classification labels to fields you've identified as containing sensitive data. Examine relevant processes and procedures to identify what your team needs to know about handling sensitive data. Or help your customers understand how to manage sensitive data. ## Use Encryption to Protect Sensitive Data Using encryption protects sensitive data from unauthorized access. Revisit encryption policies for your organization by applying [Database Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_platform_encryption/security_pe_tle_set_up_database_encryption.htm&type=5&language=en_US) for your transaction database or apply [Field-Level encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_platform_encryption/security_pe_set_up_field_level_encryption.htm&type=5&language=en_US) for fields with identified sensitive data. Enable Shield Platform Encryption to encrypt the sensitive fields you have identified ## Safeguarding Data If your organization needs strict data protection requirements, there are different ways of limiting access that provide an extra layer of security. - Transaction Security policies: Consider [creating or updating your transaction policies](https://help.salesforce.com/s/articleView?id=xcloud.real_time_event_monitoring/enhanced_transaction_security_cb_examples.htm&type=5&language=en_US) to handle fields with sensitive data. For example, prevent exporting fields with sensitive data from reports. This is part of Event Monitoring. - Masking : Consider masking fields with sensitive data within both Production (with [Privacy Center](https://help.salesforce.com/s/articleView?id=xcloud.data_protection_and_privacy/topics/privacy_center/about_privacy_center.htm&type=5&language=en_US)) and Sandbox environments (with [Data Mask](https://help.salesforce.com/s/articleView?id=xcloud.deploy_sandboxes/topics/data_mask_overview.htm&type=5&language=en_US)). Keep in mind that masking fields is a permanent action, so you can't restore their original values. - Access permissions : Review access controls and permissions to fields with sensitive data with the [Control Who Sees What](https://help.salesforce.com/s/articleView?id=xcloud.platform/help/en-us/access/topics/security_data_access.htm&type=5&language=en_US) Explorer in Security Center. This makes sure that users only access the data they need to do their job. - If it’s no longer needed, delete identified sensitive data from the record. ## Audit Changes to Sensitive Data Auditing helps maintain a comprehensive historical record of field changes and establishes data integrity and compliance with industry standards. Regularly monitor [Setup Audit Trail](https://help.salesforce.com/s/articleView?id=xcloud.setup/topics/admin_monitorsetup.htm&type=5&language=en_US) for any setup or key encryption. Revisit the field history retention for fields with frequent instances of sensitive data with [Field Audit Trail](https://help.salesforce.com/s/articleView?id=xcloud.setup/field_audit_trail.htm&type=5&language=en_US). Set up Field Audit Trail to track changes to these sensitive fields. ## Event Monitoring [Event Monitoring](https://help.salesforce.com/s/articleView?id=xcloud.setup/real_time_event_monitoring/real_time_event_monitoring_overview.htm&type=5&language=en_US) supports compliance by providing detailed audit trails required by industry regulations. And it enhances security by tracking user activity, which allows for the identification of suspicious behavior like unauthorized access or data exports, thus preventing breaches. # Action Block (Managed Package) For the managed package runtime, run multiple Omniscript Actions asynchronously by grouping them in an Action Block. Actions within the Action Block run in parallel and inherit the Action Block's settings. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). View the Action Block flow chart to understand how actions in the Action Block execute. Action Block flow chart: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/action_block_flow.png) 1. Drag the **Action Block** from the element palette into the designer. Place the Action Block inside of a Step, before the first Step, or between Steps. 2. Drag up to four Actions into the Action Block. 3. Select an **Invoke Mode** to control how actions inside the Action Block run.

Property

Description

Default

The Action blocks the UI with a loading spinner.

Non-Blocking

The Action runs asynchronously, and the response applies to the UI. Pre and Post Omnistudio Data Mapper transforms, and large attachments are not supported.

Fire and Forget

The Action runs asynchronously with no callback to the UI. Pre and Post Data Mapper transforms, and large attachments are not supported. A response still appears in the debug console but does not apply to the Data JSON.

4. (Optional) When Invoke Mode is set to non-blocking, elements using default values will not receive the response because the element loads before the response returns. You must configure these properties to map the response to an element: - **Response JSON Node**: VlocityNoRootNode - **Response JSON Path**: The name of the Omniscript Element receiving the value. 5. (Optional) Check **Apply if error** to enable actions that run successfully to apply their responses to the Omniscript's data JSON even when other actions in the Action Block fail. When **Apply if error** is unchecked, successful actions do not apply their responses to the data JSON when another action in the block fails. 6. (Optional) When the Action Block is inside of a Step, set **Validation Required** to **Step** to prevent the Action Block from running when errors exist in the Step. 7. Preview the Omniscript to test the Action Block behavior. - **[Action Block Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_action_block_properties.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains information on Action Block properties. # Action Block Properties (Managed Package) For the managed package runtime, this page contains information on Action Block properties. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Property

Description

Apply If Error

Enables actions that run successfully to apply their responses to the Omniscript's data JSON even when other actions in the Action Block fail.

Default

An Invoke Mode option, Default blocks the UI with a loading spinner until the Action finishes executing.

Non-Blocking

An Invoke Mode option, Non-Blocking runs the action asynchronously, and the response is applied to the UI. Pre and Post Omnistudio Data Mapper transforms, and large attachments are not supported. When Invoke Mode is set to non-blocking, elements using default values will not receive the response because the element loads before the response returns. To map the response to an element, you must set Response JSON Node to VlocityNoRootNode and Response JSON Path to the name of the element.

Fire and Forget

An Invoke Mode option, Fire and Forget runs the action asynchronously with no callback to the UI. Pre and Post Data Mapper transforms, and large attachments are not supported. A response appears in the debug console but is not applied to the Data JSON.

Validation Required

When set to Step, Validation Required prevents the Action Block from running when errors exist in the Step.

# Action Grid State LWC Card Template (Managed Package) For the managed package runtime, this page contains the Action Grid State LWC Card Template ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Spring '20 The _ActionGridState LWC Card Template_ displays a list of actions. The header includes a title set by a session variable. The body is a single column of actions where each row displays an action icon followed by the action label. ## Available ActionGridState Features

Feature

Description

theme

Specifies which theme to use, slds or nds.

title

If the session title variable is set, it displays as the card title. If the session title variable is not set, a card title is not shown.

actions

Lists the actions configured. Actions display as a vertical list. Each row has an action icon followed by the action label.

# Action Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains the Action LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Summer '20 The _Action Lightning Web Component_ is the base component for all action components. ## Available c-action Attributes To navigate the page after fetching data from a datasource, use the following attributes.

Attribute

Value

Type

Required

Description

debug

true, false (Default: false)

boolean

 

To enable debug mode, set to true. Prints fetched data inside template and updates JSON for testing.

definition

JSON

object

yes

Contains required object. See Available definition Attributes

disableCache

true, false (Default: false)

boolean

 

To turn off caching, set to true.

url

URL

string

 

Reads the interpolated url.

## Example c-action Component ```

URL: {url}

``` ``` @track query = JSON.stringify({ datasource: { type: "query", value: { query: "SELECT Id, name FROM Contact LIMIT 1" } }, url: "/${data[0].Id}", target: "_blank", parameters: {}, navigate: false }); fetchData(ev) { let action = ev.currentTarget; let def = JSON.parse(this.query); action.definition = this.query; action.triggerAction(); } // Passing these properties down to the navigate-action using attributes. onsuccesscallback(ev) { let result = ev.detail.result; this._targetType = "Record"; this._targetId = result[0].Id; // Because attribute values are set using attributes, give the ui a chance to re-render. Promise.resolve().then(() => { let navigateAction = this.template.querySelector("c-navigate-action"); navigateAction.navigate(); this.url = ev.target.url; this.onResult( result.map(obj => { var rObj = obj; rObj.isEdit = false; return rObj; }) ); }); } onerrorcallback(error) { console.log(error); } ``` ## Available definition Attributes

Attribute

Value

Type

Required

Description

datasource

JSON

object

yes

Defines the source from which to fetch the data. See Datasource Lightning Web Component for more information.

data

JSON

object

 

To use the data fetched from the datasource dierctly inside the definition, add data here.

isTrackingDisabled

true, false (Default: true)

string

 

To disable tracking, set to false.

navigateTo

JSON

object

 

Defines the navigation service object. If url is not present, this object is considered for navigation and is interpolated if type and value are passed. See Salesforce documentation on navigation

navigate

true or false (Default: false)

boolean

 

Specifies whether the url navigates or not.

parameters

JSON

object

 

Adds all fields as url parameters only if url is set.

target

current window or new window

string

 

Specifies which window the url opens. Works only if the url is relative and is not salesforce object data.

trackingObj

 

string

 

Specifies the tracking object of the container Flexcard.

url

 

string

 

Defines the navigation url, which is interpolated if type and value are passed. The url is given higher preference over the navigateToobject.

## Example definition JSON ## Navigate to View Page by Navigation Object ``` { "datasource": { "type": "query", "value": { "query": "SELECT Id, name FROM Contact LIMIT 1" } }, "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "${data[0].Id}", "actionName": "view" } }, "navigate": true } ``` ## Navigate to View Page by URL ``` { "datasource": { "type": "query", "value": { "query": "SELECT Id, name FROM Contact LIMIT 1" } }, "url": "/${data[0].Id}", "navigate": true } ``` ## Navigation to Object with Direct Data ``` { "data": { "Id": "001B000000qBQXDIA4" }, "url": "/${data.Id}", "navigate": true } ``` ## Navigate to Object Home Page ``` { "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "Account", "actionName": "home" } }, "navigate": true } ``` ## Navigate to Account Create New Screen ``` { "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "Account", "actionName": "new" } }, "navigate": true } ``` ## Available c-action Attributes for Links To perform an action by clicking on the link, use the following attributes.

Attribute

Value

Type

Required

Description

action-labelclass

 

string

 

Adds an extra class to the action label element.To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

action-wrapperclass

 

string

 

Adds an extra class to the action wrapper element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

context-id

 

string

 

Sets action context Id.

icon-color

 

string

 

Sets the color of the icon.

icon-extraclass

 

string

 

Adds an extra class to the icon element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

icon-size

xx-small, small, medium, large, x-large

string

 

Sets the size of the icon.

icon-url

URL

string

 

Sets the icon URL. Use with Newport Design System (NDS) theme only.

icon-wrapperclass

 

string

 

Adds an extra class to the icon wrapper element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

s-object-type

sObject

string

 

Sets action sObject type.

state-action

JSON

object

yes

Sets the action Info.

state-obj

JSON

object

 

Contains the layout/card records.

styles

 

string

 

To set inline styles of label and text-align property. it should be in this formt style = { "label": "", "textAlign" : ""}

theme

slds, nds (Default: slds)

string

 

Specifies which theme to use.

## Example c-action Component (inside Vlocity Card state template) ``` ``` ## Vlocity Insurance and Health Spring '20 The _Action Lightning Web Component_ is the base component for all action components. ## Available c-action Attributes To navigate the page after fetching data from a data source, use the following attributes.

Attribute

Value

Type

Required

Description

debug

true, false (Default: false)

boolean

 

To enable debug mode, set to true. Prints fetched data inside the template and updates JSON for testing.

definition

JSON

object

yes

Contains the required object. See Available definitionAttributes

disableCache

true, false (Default: false)

boolean

 

To turn off caching, set to true.

url

URL

string

 

Reads the interpolated URL.

## Available definition Attributes

Attribute

Value

Type

Required

Description

datasource

JSON

object

yes

Defines the source from which to fetch the data. See Datasource Lightning Web Component for more information.

data

JSON

object

 

To use the data fetched from the datasource directly inside the definition, add data here.

navigateTo

JSON

object

 

Defines the navigation service object. If URL is not present, this object is considered for navigation and is interpolated if type and value are passed. See Salesforce documentation on navigation

navigate

true or false (Default: false)

boolean

 

Specifies whether the URL navigates or not.

parameters

JSON

object

 

Adds all fields as URL parameters only if url is set.

target

current window or new window

string

 

Specifies which window the URL opens. Works only if the URL is relative and is not salesforce object data.

url

 

string

 

Defines the navigation URL, which is interpolated if type and value are passed. The url is given a higher preference over the navigateToobject.

## Example c-action Component ```

URL: {url}

``` ``` @track query = JSON.stringify({ datasource: { type: "query", value: { query: "SELECT Id, name FROM Contact LIMIT 1" } }, url: "/${data[0].Id}", target: "_blank", parameters: {}, navigate: false }); fetchData(ev) { let action = ev.currentTarget; let def = JSON.parse(this.query); action.definition = this.query; action.triggerAction(); } // I'm passing these properties down to the navigate-action via // attributes. onsuccesscallback(ev) { let result = ev.detail.result; this._targetType = "Record"; this._targetId = result[0].Id; // Because we're setting the attribute values via attributes, // we need to give the ui a chance to re-render. Promise.resolve().then(() => { let navigateAction = this.template.querySelector("c-navigate-action"); navigateAction.navigate(); this.url = ev.target.url; this.onResult( result.map(obj => { var rObj = obj; rObj.isEdit = false; return rObj; }) ); }); } onerrorcallback(error) { console.log(error); } ``` ## Examples for definition JSON ## Navigate to View Page by Navigation Object ``` { "datasource": { "type": "query", "value": { "query": "SELECT Id, name FROM Contact LIMIT 1" } }, "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "${data[0].Id}", "actionName": "view" } }, "navigate": true } ``` ## Navigate to View Page by URL ``` { "datasource": { "type": "query", "value": { "query": "SELECT Id, name FROM Contact LIMIT 1" } }, "url": "/${data[0].Id}", "navigate": true } ``` ## Navigation to Object with Direct Data ``` { "data": { "Id": "001B000000qBQXDIA4" }, "url": "/${data.Id}", "navigate": true } ``` ## Navigate to Object Home Page ``` { "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "Account", "actionName": "home" } }, "navigate": true } ``` ## Navigate to Account Create New Screen ``` { "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "Account", "actionName": "new" } }, "navigate": true } ``` ## Available c-action Attributes for Links To perform an action by clicking on the link, use the following attributes.

Attribute

Value

Type

Required

Description

action-labelclass

 

string

 

Adds an extra class to the action label element.To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

action-wrapperclass

 

string

 

Adds an extra class to the action wrapper element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

context-id

 

string

 

Sets action context Id.

icon-extraclass

 

string

 

Adds an extra class to the icon element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

icon-size

xx-small, small, medium, large, x-large

string

 

Sets the size of the icon.

icon-url

URL

string

 

Sets the icon URL. Use with Newport Design System (NDS) theme only.

icon-wrapperclass

 

string

 

Adds an extra class to the icon wrapper element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

s-object-type

sObject

string

 

Sets action sObject type.

state-action

JSON

object

yes

Sets the action Info.

state-obj

JSON

object

 

Contains the layout/card records.

theme

slds, nds (Default: slds)

string

 

Specifies which theme to use.

## Example c-action Component (inside Vlocity Card state template) ``` ``` ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _Action Lightning Web Component_ is the base component for all action components. ## Available c-action Attributes for Navigation To navigate the page after fetching data from a datasource, use the following attributes.

Attribute

Value

Type

Required

Description

debug

true, false (Default: false)

boolean

 

To enable debug mode, set to true. Prints fetched data inside template and updates JSON for testing.

definition

JSON

object

yes

Contains required object. See Available definition Attributes

url

URL

string

 

Reads the interpolated url.

## Available Definition Attributes

Attribute

Value

Type

Required

Description

datasource

JSON

object

yes

Defines the source from which to fetch the data. See Datasource Lightning Web Component for more information.

data

JSON

object

 

To use the data fetched from the datasource directly inside the definition, add data here.

navigateTo

JSON

object

 

Defines the navigation service object. If url is not present, this object will be considered for navigation and is interpolated if type and value are passed.

navigate

true or false (Default: false)

boolean

 

Specifies whether the url has to navigate or not.

parameters

JSON

object

 

Adds all fields as url parameters only if url is set.

target

current window or new window

string

 

Specifies which window the url opens. Works only if the url is relative and is not salesforce object data.

url

 

string

 

Defines the navigation url, which is interpolated if type and value are passed. The url is given higher preference over the navigateTo object.

## Example c-action Component ```

URL: {url}

``` ``` @track query = JSON.stringify({ datasource: { type: "query", value: { query: "SELECT Id, name FROM Contact LIMIT 1" } }, url: "/${data[0].Id}", target: "_blank", parameters: {}, navigate: false }); fetchData(ev) { let action = ev.currentTarget; let def = JSON.parse(this.query); action.definition = this.query; action.triggerAction(); } // I'm passing these properties down to the navigate-action via // attributes. onsuccesscallback(ev) { let result = ev.detail.result; this._targetType = "Record"; this._targetId = result[0].Id; // Because we're setting the attribute values via attributes, // we need to give the ui a chance to re-render. Promise.resolve().then(() => { let navigateAction = this.template.querySelector("c-navigate-action"); navigateAction.navigate(); this.url = ev.target.url; this.onResult( result.map(obj => { var rObj = obj; rObj.isEdit = false; return rObj; }) ); }); } onerrorcallback(error) { console.log(error); } ``` ## Examples for definition JSON ## Navigate to View Page by Navigation Object ``` { "datasource": { "type": "query", "value": { "query": "SELECT Id, name FROM Contact LIMIT 1" } }, "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "${data[0].Id}", "actionName": "view" } }, "navigate": true } ``` ## Navigate to View Page by URL ``` { "datasource": { "type": "query", "value": { "query": "SELECT Id, name FROM Contact LIMIT 1" } }, "url": "/${data[0].Id}", "navigate": true } ``` ## Navigation to Object with Direct Data ``` { "data": { "Id": "001B000000qBQXDIA4" }, "url": "/${data.Id}", "navigate": true } ``` ## Navigate to Object Home Page ``` { "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "Account", "actionName": "home" } }, "navigate": true } ``` ## Navigate to Account Create New Screen ``` { "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "Account", "actionName": "new" } }, "navigate": true } ``` ## Available c-action Attributes for Links To perform an action by clicking on the link, use the following attributes.

Attribute

Value

Type

Required

Description

action-labelclass

 

string

 

Adds an extra class to the action label element.To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

action-wrapperclass

 

string

 

Adds an extra class to the action wrapper element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

context-id

 

string

 

Sets action context Id.

icon-extraclass

 

string

 

Adds an extra class to the icon element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

icon-size

xx-small, small, medium, large, x-large

string

 

Sets the size of the icon.

icon-url

URL

string

 

Sets the icon URL. Use with Newport Design System (NDS) theme only.

icon-wrapperclass

 

string

 

Adds an extra class to the icon wrapper element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

s-object-type

sObject

string

 

Sets action sObject type.

state-action

JSON

object

yes

Sets the action Info.

state-obj

JSON

object

 

Contains the layout/card records.

theme

slds, nds (Default: slds)

string

 

Specifies which theme to use.

## Example c-action Component (inside Vlocity Card state template) ``` ``` ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _Action Lightning Web Component_ is the base component for all action components. ## Available c-action Attributes for Navigation To navigate the page after fetching data from a datasource, use the following attributes.

Attribute

Value

Type

Required

Description

debug

true, false (Default: false)

boolean

 

To enable debug mode, set to true. Prints fetched data inside template and updates JSON for testing.

definition

JSON

object

yes

Contains required object. See Available definition Attributes

url

URL

string

 

Reads the interpolated url.

## Available definition Attributes

Attribute

Value

Type

Required

Description

datasource

JSON

object

yes

Defines the source from which to fetch the data. See Datasource Lightning Web Component for more information.

data

JSON

object

 

To use the data fetched from the datasource directly inside the definition, add data here.

navigateTo

JSON

object

 

Defines the navigation service object. If url is not present, this object will be considered for navigation and is interpolated if type and value are passed. See Salesforce documentation on navigation.

navigate

true or false (Default: false)

boolean

 

Specifies whether the url has to navigate or not.

parameters

JSON

object

 

Adds all fields as url parameters only ifurl is set.

target

current window or new window

string

 

Specifies which window the url opens. Works only if the url is relative and is not salesforce object data.

url

 

string

 

Defines the navigation url, which is interpolated if type and value are passed. The url is given higher preference over thenavigateTo object.

## Example c-action Component ```

URL: {url}

``` ``` @track query == JSON.stringify({ datasource: { type: "query", value: { query: "SELECT Id, name FROM Contact LIMIT 1" } }, url: "/${data[0].Id}", target: "_blank", parameters: {}, navigate: false }); fetchData(ev) { let action == ev.currentTarget; let def == JSON.parse(this.query); action.definition == this.query; action.triggerAction(); } // I'm passing these properties down to the navigate-action via // attributes. onsuccesscallback(ev) { let result == ev.detail.result; this._targetType == "Record"; this._targetId == result[0].Id; // Because we're setting the attribute values via attributes, // we need to give the ui a chance to re-render. Promise.resolve().then(() => { let navigateAction == this.template.querySelector("c-navigate-action"); navigateAction.navigate(); this.url == ev.target.url; this.onResult( result.map(obj => { var rObj == obj; rObj.isEdit == false; return rObj; }) ); }); } onerrorcallback(error) { console.log(error); } ``` ## Examples for definition JSON ## Navigate to View Page by Navigation Object ``` { "datasource": { "type": "query", "value": { "query": "SELECT Id, name FROM Contact LIMIT 1" } }, "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "${data[0].Id}", "actionName": "view" } }, "navigate": true } ``` ## Navigate to View Page by URL ``` { "datasource": { "type": "query", "value": { "query": "SELECT Id, name FROM Contact LIMIT 1" } }, "url": "/${data[0].Id}", "navigate": true } ``` ## Navigation to Object with Direct Data ``` { "data": { "Id": "001B000000qBQXDIA4" }, "url": "/${data.Id}", "navigate": true } ``` ## Navigate to Object Home Page ``` { "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "Account", "actionName": "home" } }, "navigate": true } ``` ## Navigate to Account Create New Screen ``` { "navigateTo": { "type": "standard__objectPage", "attributes": { "objectApiName": "Account", "actionName": "new" } }, "navigate": true } ``` ## Available c-action Attributes for Links To perform an action by clicking on the link, use the following attributes.

Attribute

Value

Type

Required

Description

action-labelclass

 

string

 

Adds an extra class to the action label element.To add multiple classes, use a space to separate each class, such as `classone classtwo'.

action-wrapperclass

 

string

 

Adds an extra class to the action wrapper element. To add multiple classes, use a space to separate each class, such as `classone classtwo'.

context-id

 

string

 

Sets action context Id.

icon-extraclass

 

string

 

Adds an extra class to the icon element. To add multiple classes, use a space to separate each class, such as `classone classtwo'.

icon-size

xx-small, small, medium, large, x-large

string

 

Sets the size of the icon.

icon-url

URL

string

 

Sets the icon URL. Use with Newport Design System (NDS) theme only.

icon-wrapperclass

 

string

 

Adds an extra class to the icon wrapper element. To add multiple classes, use a space to separate each class, such as `classone classtwo'.

s-object-type

sObject

string

 

Sets action sObject type.

state-action

JSON

object

yes

Sets the action Info.

state-obj

JSON

object

 

Contains the layout/card records.

theme

slds, nds (Default: slds)

string

 

Specifies which theme to use.

## Example c-action Component (inside Vlocity Card state template) ``` ``` # Action Toolbar Style Types (Managed Package) For the managed package runtime, this page lists and displays images of Action Toolbar style types. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning with Winter '18, the Action Toolbar is no longer available. **Horizontal Action Toolbar** ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_actiontoolbarexample01.png) **Vertical Action Toolbar** ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_actiontoolbarexamplr02.png) **Action Toolbar as a List** ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_actiontoolbarexample03.png) # Actionable Event Orchestration Setup for Connected Assets Act on telematics data from assets by designing orchestration processes that perform a set of actions for different events, such as route deviation, temperature monitoring, battery status, and sensor issues. Create actionable event types and subtypes to categorize events. Set up an actionable event orchestration to define the type of actions to be performed for events with a specific type and subtype. Design execution procedures to specify the set of actions for an actionable event orchestration. Use a context definition with an actionable event orchestration to define the event data that can be used in the execution procedure. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
- **[Create Actionable Event Types and Subtypes for Connected Assets](https://help.salesforce.com/s/articleView?id=xcloud.ca_aeo_type_subtype.htm&release=264.0.0&type=5)** To categorize internal and external events for assets, define types and subtypes. Based on an event's type and subtype, an orchestration process is triggered to perform a particular set of actions. For example, Technical Faults can be an event type with multiple subtypes such as Sensor Failure, Battery Issue, or Inadequate Input Power. - **[Create an Actionable Event Orchestration for Connected Assets](https://help.salesforce.com/s/articleView?id=xcloud.ca_aeo_create_orchestration.htm&release=264.0.0&type=5)** An actionable event orchestration outlines the actions to be taken for events of a specific type and subtype. For example, some actionable event orchestrations are triggered for events of the Asset Health type and the Low Battery Level subtype. Create an actionable event orchestration for a specific event type and subtype, and specify the execution procedure to be launched to perform operations for an event. Specify a context definition and mapping to define the event data that can be used in the execution procedure. - **[Create an Execution Procedure for Actionable Events for Connected Assets](https://help.salesforce.com/s/articleView?id=xcloud.ca_aeo_execution_procedure.htm&release=264.0.0&type=5)** An execution procedure outlines the set of actions to be performed for an asset event. For example, an execution procedure for an Overheating Asset event can create a Case record, an Asset Milestone of type Critical Recall, and a record alert of the type Error. Use expression sets or flows as execution procedures. Using the standard and custom elements in the expression set builder, users create a series of filters, calculation conditions, aggregation conditions, and eligibility parameters to define the type of action for a specific event. Using the elements in a Flow Builder and custom Apex actions, users can create complex business rules to trigger actions. # Actionable Event Orchestration Setup Workflow for Connected Assets Enable connected services and related features for assets in Salesforce, and assign the required permissions to users. Work with your integrations team to connect your telematics provider with Salesforce via MuleSoft or any other service of your choice. Get access to usage-based entitlements for each connected asset. Set up actionable event orchestration. Set up eligibility rules for service processes to control which users can perform an action. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
## Prepare the Org Enable these features in Setup. - Actionable Event Orchestration - Event Orchestration Decision Table - Context Definitions Assign permission sets to user profiles. An event designer uses context definitions and expression sets or flows to design the orchestration processes, and the runtime user typically only needs read access on the different objects and fields.
Who Needs It What They Do Permission Sets
Event Designer Use context definitions, expression sets, and flows to design the orchestration processes.
  • Actionable Event Orchestration Designer
  • Context Service Admin
  • Rule Engine Designer
Runtime User Track the execution of actionable event orchestrations.
  • Actionable Event Orchestration Runtime
  • Context Service Runtime
  • Rule Engine Runtime
Though access varies based on the type of actions you create, make sure you give users at least Read access on objects such as cases, asset milestones, and record alerts. Actionable Event Orchestration operates on the usage-based licensing model. Only the assets where Connected Services Active is marked as active are considered for orchestration. Make sure your org has the Actionable Asset Event Orchestration Limit usage-based entitlement. With this entitlement, you can run up to 300 orchestrations per month of usage type Manufacturing for connected assets, split equally between expression-set based and flow-based orchestrations. ## Business Requirements External systems, such as asset telematics providers, store a large amount of data from assets and make the data available to downstream systems such as Salesforce. Companies use a subset of this data in Salesforce to process events and perform actions such as creating record alerts, asset milestones, work orders, and cases. The actionable event orchestration framework helps users define rules and conditions and execute the actions based on event type. When a new asset is onboarded with advanced telematics services enabled, companies register it as a connected asset and provide detailed information to an external system, such as the asset number, model, year, and detailed service schedules. The external system collects telemetry, performance, service, and other data from the asset periodically. The data is generated from various sensors and Internet of Things (IoT) systems in the asset. The external system compares the real time data with the baseline specifications of the asset, and generates events when there are discrepancies. For example, an asset requires service every 5,000 hours of usage, and the company wants to alert the customers about the upcoming maintenance every 4,500 hours. The total usage period value derived from the asset sensors is compared with the service specification at regular intervals by the maintenance alert service in the external system. The maintenance alert service uses the usage thresholds to generate and publish maintenance events whenever the asset completes 4,500 hours over the total usage period reading. Salesforce subscribes to the maintenance alert events and acts upon these events. When a maintenance alert is received, the orchestration framework can evaluate whether the asset is already serviced. If the asset isn’t serviced, an alert or notification is created on the Asset record page. Service agents can notify the customer based on the automatically generated alert. ## Extend and Customize the Records Answer these questions and plan your implementation of Actionable Event Orchestration. | Question | What You Need To Know | | --- | --- | | How can external systems share event data with Salesforce? | Bring in data from external systems, such as telematics providers, by using Actionable Telematics Event Business API and Platform Events. Make sure you get the basic details from the provider, such as the Asset ID, Event Type, and Event Fault Code. | | What is the integration service you’re using to connect Salesforce and the external system? | You can use MuleSoft to easily integrate telematics systems with Salesforce. | | What type of events do you want to act on? | Decide which telematics, operations, and performance codes and events you want to act on. Typically, you only act on critical events that require immediate attention or investigation. Create event types, subtypes, and categories to easily differentiate the events. | | How are you processing the actions for the events? | Use expression sets or Salesforce Flows to execute the orchestration. For simple record creation or updation, use expression sets. For nuanced workflows, use flows. | | How do you want to bring in the events into Salesforce? | Use the platform event framework or the business API to trigger inbound events. | | What are the event details that you want to use as either input or output variables in the orchestration procedure? | Create a context definition that contains nodes based on the type of event data and details shared by the external system. | | How are you matching event types to the relevant orchestration procedure? | Extend the Filter and Match Actionable Event Orchestrations decision table to add input or output parameters based on your requirements. | # Actionable Lists in Salesforce Suites In the Marketing app, the List Sends feature targets an Actionable List, which is a saved collection of leads or contacts. Because the recipient list comes from an Actionable List instead of a segment, your email goes out without waiting on Data 360 processing. ### Required Editions
Available in: Lightning Experience
Available in: Free, Starter and Pro Suite Editions.
## What an Actionable List Is An Actionable List is a targeted collection of leads or contacts that you build from your Salesforce data. Actionable Lists target an audience and send an email without learning a separate segmentation tool. It helps to know what an Actionable List _isn’t_. - **It isn’t a segment.** A segment is a set of filtering rules that Data 360 processes each time an email is ready to send. An Actionable List already holds its members, so your send doesn’t wait on that processing step. - **It isn’t dependent on Data 360.** A List Send doesn't create a segment, so it doesn’t introduce delays or failed sends. - **It isn’t a list view.** A list view is a filter that controls which records you see on a page. An Actionable List is a saved audience that you can target, reuse, and reference from a flow. ## Ways to Create an Actionable List You have several ways to build an Actionable List, depending on where you’re working. | From... | How... | | --- | --- | | The Actionable Lists tab | Create a list directly and add members to it. | | A filtered list view | Filter the Leads or Contacts list view, click **Send Email**, and then select **Create from a new list**. | | A flow | Use the **Add to actionable list** action in Flow Builder to add members automatically based on criteria that you set. | | A CSV import | Turn on the **Add to Actionable List** option when you import a file, and then select an existing list. | | Audience creation agent | Select **Start a fresh, empty list** in the List Sends feature when defining your recipients. | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/images/icon_note.png) Note An Actionable List that you manage on the Actionable Lists tab can include up to 10,000 members. For lists created and managed elsewhere in Salesforce, such as in Email Builder Lite, a limit of 2,000 members applies. ## Things to Know About Actionable Lists - **Leads or contacts, not both:** An Actionable List contains either leads or contacts. You can’t mix the two in one list. - **No campaign members:** You can’t add campaign members to an Actionable List. To target campaign members, use a campaign and a segment instead. - **Email preview and merge fields:** Previewing an email with merge field values substituted isn’t available when your recipients come from an Actionable List. - **Included with the Marketing app:**To use Actionable Lists, activate the Marketing App. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/images/icon_note.png) Note Actionable Lists change how you choose recipients for List Sends only. When you send email as part of a campaign, you still build a segment to target your audience by using quick filters, Segment Builder, or campaign members. # Actionable Relationship Center in Rebate Management Get insights into rebate relationships using two prebuilt templates in the Actionable Relationship Center (ARC). Start from transaction journals with the Rebate Payouts Overview, or from member payouts with the Payout Explainability Overview, and track how each transaction and aggregate contributes to total payouts. ARC graphs are fully visible only when aggregate items are generated for a particular payout. Without these items, the graphs provide an incomplete view. Gain a clear understanding of the underlying data dependencies and the connections that drive overall rebate outcomes. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled. Requires the Agentforce for Manufacturing add-on or included in Agentforce 1 Manufacturing Edition, assigned to each user.
ARC Graph Overview - Nodes: Represent Salesforce records, such as Transaction Journals and Member Payouts. - Lines: Indicate relationships or contribution links. - Visual cues: Node colors, shapes, and hover tooltips help identify record types, statuses, and key information. - Filters and search: Help users focus on relevant records. - Embedding graphs: Drag the ARC Relationship Graph component onto Lightning record pages to display contextual insights directly. Benefits Overview - Understand data dependencies across rebate transactions and member payouts. - Trace individual transactions to aggregate calculations and total payouts. - Identify bottlenecks or misalignments in rebate processing. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note To maintain clarity and usability of the graphs, limit unnecessary nodes and review configurations regularly. - **[View Rebate Payouts Using ARC Graphs](https://help.salesforce.com/s/articleView?id=xcloud.view_rebate_payout_arc_graphs.htm&release=264.0.0&type=5)** Track rebate relationships by viewing or creating Actionable Relationship Center (ARC) graphs. View connections between transaction journals and member payouts, and add graphs to record pages for clear insights into data dependencies. # Actionable Telematics Event Business API and Platform Events Different methods are available to bring asset events into Salesforce and execute actions on the event. Use the Actionable Orchestration Source Event platform event to publish events or use the Orchestration Inbound Events business API to trigger events. The platform event and the business API can be easily integrated with any external system, such as telematics provider systems. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
Here’s the process to use the platform event framework to ingest events. - Phase 1 – Prepare Input Data: The request payload must contain the source system identifier and event type at a minimum. In addition, event subtype and event category can also be specified. For additional events data, make sure the JSON structure matches the nodes and attributes for a context definition. - Phase 2 – Publish the Source Event: Publish the Actionable Orchestration Source Event platform event from an external system so that you can establish the connection between the external system and Salesforce. Salesforce receives all events originating in the external system after the platform event is published. - Phase 3 – Subscribe to the Response Event: Subscribe to Actionable Orchestration Response Event to notify the external system after an action is executed for the source event. The response contains the details of the executed action, the processing status of the source event, and the error description for a failed event. For details, see [Platform Events Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_intro.htm). Perform these high-level steps if you use the business API to ingest events. - Prepare Input Data: The request payload must contain the source system identifier and event type at a minimum. In addition, event subtype and event category can also be specified. For additional events criteria, make sure the JSON structure specifies the key-value pairs for each type of detail. - Trigger the API: Use a POST method to trigger the API that automatically invokes the actionable event orchestration framework. - Review the Results: Review the API response, which lists the actions taken by the orchestration process for a specified event. The response contains the details of the executed action, the processing status of the source event, and the error description for a failed event. For details, see [Orchestration Events (POST)](https://developer.salesforce.com/docs/atlas.en-us.automotive_cloud.meta/automotive_cloud/connect_resources_inbound_events.htm). # Actionable Telematics Framework for Connected Assets The actionable event orchestration framework empowers companies to build sophisticated orchestrations for processing event data generated from assets and take actions in Salesforce. Design orchestration processes that respond to key asset events, such as sensor faults, high ambient temperatures, and battery failures, by setting rules and conditions. After the asset sends the event data, the framework determines the orchestration process to execute. Use these orchestrations to create and update records, including work orders, asset milestones, cases, milestones, and record alerts. Service teams monitor these records in real time and take the required actions, such as offering assistance to customers and performing on-site services. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
External systems store extensive telemetry, operational, performance, service, geospatial, and other forms of data for assets. This data is generated from asset sensors and Internet of Things (IoT) systems, and made available to downstream systems such as Salesforce. Use the actionable event orchestration framework to process a subset of the event data in Salesforce. The framework uses expression sets or flows to take actions such as creating cases, work orders, and record alerts, or to trigger more complex business workflows. Get event data into Salesforce by publishing platform events or by using an API. Define the types of the events that you receive. Build orchestrations that execute based on the types of the events. - **[Actionable Event Orchestration Setup Workflow for Connected Assets](https://help.salesforce.com/s/articleView?id=xcloud.ca_aeo_workflow.htm&release=264.0.0&type=5)** Enable connected services and related features for assets in Salesforce, and assign the required permissions to users. Work with your integrations team to connect your telematics provider with Salesforce via MuleSoft or any other service of your choice. Get access to usage-based entitlements for each connected asset. Set up actionable event orchestration. Set up eligibility rules for service processes to control which users can perform an action. - **[Key Components of Actionable Event Orchestration for Connected Assets](https://help.salesforce.com/s/articleView?id=xcloud.ca_aoe_components.htm&release=264.0.0&type=5)** Set up a touchless process that identifies key events based on information shared from an asset, applies qualification and eligibility conditions on the event data, and performs actions in Salesforce, such as creating records. - **[Actionable Event Orchestration Setup for Connected Assets](https://help.salesforce.com/s/articleView?id=xcloud.ca_aeo_setup.htm&release=264.0.0&type=5)** Act on telematics data from assets by designing orchestration processes that perform a set of actions for different events, such as route deviation, temperature monitoring, battery status, and sensor issues. Create actionable event types and subtypes to categorize events. Set up an actionable event orchestration to define the type of actions to be performed for events with a specific type and subtype. Design execution procedures to specify the set of actions for an actionable event orchestration. Use a context definition with an actionable event orchestration to define the event data that can be used in the execution procedure. - **[Set Up Flow-Based Orchestrations for Connected Assets](https://help.salesforce.com/s/articleView?id=xcloud.ca_aeo_design_templates_setup.htm&release=264.0.0&type=5)** Effortlessly save orchestration records as templates and directly apply expression set templates or flow templates as execution procedures for actionable event orchestrations. Additionally, templates come with related configurations—such as context definitions and flows—enabling seamless automation of key business processes such as asset registration and service appointment scheduling. # Actions You can create and manage loyalty programs for your organization using the standard and custom invocable actions. For example, change member tier based on their loyalty points, assign and process benefits based on their tier, manage loyalty points for a member, issue voucher for a member, and cancel redemption transactions for a member. You can also use Actions to integrate data in third-party systems with Loyalty Management. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
For more information on Invocable Actions, see [Loyalty Management Standard Invocable Actions](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/loyalty_mgt_actions_parent.htm) and [Loyalty Management Custom Invocable Actions](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/loyalty_mgt_custom_actions_parent.htm) in Loyalty Management Developer Guide and [Invocable Resource Actions](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_actions_invocable.htm) in REST API Developer Guide. # Actions Configure actions by using flows, OmniScripts, or quick actions so that your customer service representatives can use Action Launcher to quickly find and run service actions, such as issuing a voucher, and changing member’s tiers, and resolve queries. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions
Available in: Orgs that have the B2C - Loyalty Management Plus or the Loyalty Management - Advanced license enabled
For detailed setup and configuration steps, see [Action Launcher](https://help.salesforce.com/s/articleView?id=ind.the_action_launcher_component.htm&type=5&language=en_US). # Activate a DKIM Key After you add a DomainKeys Identified Mail (DKIM) key in Setup and update your domain’s DNS records, wait for the DNS changes to apply across the internet before you activate the key. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: all editions except Database.com
User Permissions Needed
Manage DKIM keys: Customize Application
## Verify the DKIM Key Is Ready for Activation Before you activate a DKIM key, verify that the required CNAME records are published in DNS. When DNS propagation is complete, you see a green circle with a white checkmark and confirmation message at the top of the DKIM Key Details page (1) and you can click the Activate button (2). ![DKIM Key Details page showing that DNS propagation is complete and Activate is available](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/email/dkim_details_activate.png) If the completion message appears and Activate is available, the DKIM key is ready for activation. If not, [check for common issues](https://help.salesforce.com/s/articleView?id=xcloud.security_email_dkim_activate.htm&release=264.0.0&type=5 "If your DKIM key isn’t ready for activation and you updated the DNS records for your domain more than 72 hours ago, check the DNS records for your domain."). ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_tip.png) Tip To refresh the DKIM Key Details page, reload the page in your browser or reload the DKIM key list in Setup and click the key’s selector name. ## Activate the DKIM Key When you can select Activate on the DKIM Key Details page, activate the key to start signing email from the domain. An active DKIM key also verifies that you own this email domain. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **DKIM Keys**. 2. Click **Edit** for the key. 3. Click **Activate**. Then, in the confirmation window, click **OK**. For security, Salesforce rotates your DKIM keys every 30 days. When you activate your DKIM key, Salesforce creates a secondary, inactive DKIM key for the next rotation. The second CNAME record points to that key. See [Considerations for DKIM Keys](https://help.salesforce.com/s/articleView?id=xcloud.emailadmin_considerations_dkim.htm&release=264.0.0&type=5 "Before you create DKIM keys, understand their purpose and how DKIM key rotation and domain matching work."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note After you activate the DKIM key in Setup, no further action is required for key rotation. ## Use Active DKIM Keys for Address Verification If a trusted integration or Salesforce admin manages users’ email addresses in Salesforce, you can bypass email address verification for addresses in a domain with an active DKIM key. For more granular control over email address verification, use authorized email domains instead. See [Use a Verified Domain for User-Level Email Verification](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_user_bypass.htm&release=264.0.0&type=5 "If a trusted integration or admin manages your users’ email addresses in Salesforce, specify which domains require address verification. For each authorized email domain, you can require email address verification only when users change their email address, or disable address verification entirely. Or use your active DomainKeys Identified Mail (DKIM) keys to verify addresses for new users and new organization-wide email addresses."). ## Troubleshoot Common DNS Issues That Prevent DKIM Key Activation If your DKIM key isn’t ready for activation and you updated the DNS records for your domain more than 72 hours ago, check the DNS records for your domain. 1. If you can’t click the Activate button, reload the DKIM Key Details page first. This page isn’t automatically refreshed. 2. If you still can’t click the Activate button, verify that the CNAME records match the values on the DKIM Key Details page exactly. To check a DNS CNAME record, run a command-line tool such as `nslookup` or `dig`, or use an online DNS lookup tool. These common errors can prevent activation of a DKIM key. Work with your DNS provider to update any incorrect records. - The CNAME record contains a typo. - Only one of the two required CNAME records is published in DNS for your domain. - The DNS record uses a different domain from the key. For example, if the DKIM key is for the sales.example.com domain: Correct: ``` example-sf-a._domainkey.sales.example.com IN CNAME example-sf-a.k4tyd2.custdkim.salesforce.com ``` Incorrect: ``` example-sf-a._domainkey.example.com IN CNAME example-sf-a.k4tyd2.custdkim.salesforce.com ``` The domain name in the CNAME record’s name must exactly match the Domain in the DKIM key, including all subdomains. These record-value errors also prevent activation of a DKIM key. These issues can occur because DNS providers have different requirements for entering CNAME record details. Check your provider’s documentation for the correct format to use in their system. - The domain name in the CNAME record includes the root domain twice. Correct: ``` example-sf-a._domainkey.example.com IN CNAME example-sf-a.k4tyd2.custdkim.salesforce.com ``` Incorrect: ``` example-sf-a._domainkey.example.com.example.com IN CNAME example-sf-a.k4tyd2.custdkim.salesforce.com ``` This error can occur when your DNS provider automatically appends the root domain, such as example.com, to the text that you enter. - The DNS records include double dots after the name or value. For example: ``` NAME TTL CLASS TYPE VALUE ----------------------------------------------------------------------------------------------------- example-sf-a._domainkey.example.com.. 3600 IN CNAME example-sf-a.k4tyd2.custdkim.salesforce.com.. example-sf-b._domainkey.example.com.. 3600 IN CNAME example-sf-b.e6mxu6.custdkim.salesforce.com.. ``` A single trailing dot tells the DNS server that the domain name is absolute. The trailing dot prevents the provider from appending text to the domain name. Two trailing dots invalidate the CNAME record. If your DNS provider adds a trailing dot automatically, don’t enter another one. #### See Also - [DomainKeys Identified Mail (DKIM) Keys](https://help.salesforce.com/s/articleView?id=xcloud.emailadmin_setup_dkim_key.htm&release=264.0.0&type=5 "Use the DKIM key feature so Salesforce can sign outbound email sent on your company’s behalf. These signatures give recipients confidence that the email was handled in a way that’s consistent with your company. An active DKIM key also verifies your domain ownership so that Salesforce can send email for your users.") - [Create a DKIM Key](https://help.salesforce.com/s/articleView?id=xcloud.emailadmin_create_secure_dkim.htm&release=264.0.0&type=5 "DomainKeys Identified Mail (DKIM) is a security standard that attaches a digital signature to your emails to prove that they came from you. With this signature, the receiving server can verify that the message content wasn’t altered or faked during transit. DKIM builds trust with email providers, so your messages are more likely to land in the inbox instead of the spam folder. An active DKIM key verifies your domain ownership so that Salesforce can send email for your users.") # Activate a Flexcard Activate a Flexcard to generate an LWC and publish it to a Lightning page or Experience Builder site. Activating a Flexcard disables editing capabilities. You can’t add or edit elements on an active Flexcard. Preview your Flexcard's appearance and test functionality before activating it. See [Preview and Debug a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard_41051.htm&release=264.0.0&type=5 "Preview a Flexcard's appearance and test its functionality before you publish it to a Lightning page or to a page in an Experience Builder Aura site. Review how the Flexcard looks on multiple devices and test the functionality of interactive elements such as actions. Debug the Flexcard's data output, events, actions, and more."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note After the release 246 upgrade, the package runtime uses metadata deployment instead of the tooling API. Metadata deployment requires that you wait for activation of the parent Flexcard to complete before activating dependent cards. 1. To activate a FlexCad from the Flexcard Designer: 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. To initiate the activation wizard, click **Activate** in the submenu. 3. Click **Done**. 2. To activate a Flexcard from the Flexcards home tab: 1. In the Flexcards home tab in your org, click a Flexcard to view available versions. 2. Select the checkbox next to the inactive Flexcard you want to activate. 3. Click **Activate**. What’s next: Configure Publish Options to define metadata values and add a custom component SVG icon for your generated LWC. See [Publish a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_activateconfigureand_publish_flexcards_24744.htm&release=264.0.0&type=5 "Define metadata values, such as where your Flexcard is visible, and update the component SVG icon for your Flexcard before publishing your component to a Lightning or Experience page. For example, to view your Flexcard on an Experience site you can enable Community Page under Targets in Publish Options."). # Activate a Flexcard (Managed Package) For the managed package runtime, activate a Flexcard to generate an LWC and publish it to a Lightning page or Experience Builder site. After you activate a Flexcard, you can’t edit it or add elements to it. Before you begin, review your Flexcard's appearance and test its functionality. See ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note After the release 246 upgrade, the managed package runtime uses metadata deployment instead of the tooling API. Metadata deployment requires that you wait for the parent Flexcard to be activated before you activate dependent cards. 1. To activate a Flexcard from the Flexcard designer: 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. To initiate the activation wizard, click **Activate** in the submenu. 3. Click **Done**. 2. To activate a Flexcard from the Flexcards home tab: 1. In the Flexcards home tab in your org, click a Flexcard to view available versions. 2. Select the checkbox next to the inactive Flexcard you want to activate. 3. Click **Activate**. What’s next: Configure Publish Options to define metadata values and add a custom component SVG icon for your generated LWC. See [Configure Publish Options on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_publish_options_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, define metadata values, such as where your Flexcard is visible, and update the component SVG icon for your Flexcard before publishing your component to a Lighting or Experience page. For example, to view your Flexcard on an Experience site you can enable Community Page under Targets in Publish Options."). # Activate a Rebate Program Activate a rebate program to start the calculation of payouts for the enrolled members. To activate a rebate program, ensure the associated rebate types, members, and benefits are active. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
1. Open the record of the rebate program that you want to activate. 2. On the header of the rebate program, click **Edit**. 3. Change the status from Draft to Active, and save your changes. Optionally, use an approval workflow using Salesforce standard approval mechanisms to change the status to Active automatically. #### See Also - [Prepare to Create an Approval Process](https://help.salesforce.com/s/articleView?id=platform.approvals_checklist.htm&type=5&language=en_US) - [How Are Rebate Payouts Calculated?](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_how_are_payouts_calculated.htm&release=264.0.0&type=5 "Review the necessary steps to calculate rebate payouts for the members in a rebate program. Transaction Journal records are used as the input for calculation, and the output is stored in Rebate Member Payout records.") # Activate a Rebate Program Activate an advanced rebate program to start the calculation of accruals and payouts for the enrolled members. To activate a rebate program, ensure the associated rebate types, members, and benefit tiers are in Active status. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
1. Open the record of the rebate program that you want to activate. 2. On the header of the rebate program, click Edit. 3. Change the status from Draft to Active, and save your changes. Optionally, use a Salesforce standard approval process to automate the status change to Active. For Advanced programs, this ensures that the finance team has reviewed the independent accrual and payout frequencies before the Data Cloud engine begins processing high-volume transactions. # Activate a Telemetry Definition Version A telemetry definition version is created in inactive status. Activate a telemetry definition version to create telemetry action definitions. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To create and update Telemetry Definitions: Telemetry Definition and Action Management Designer
1. From Setup, in the Quick Find box, enter and select **Telemetry Definition and Action Management**. 2. On the Telemetry Definition tab, open your telemetry definition record. 3. Open your created telemetry definition version. 4. Click **Activate**. # Activate a Theme To customize your users’ visual experience, activate a theme that reflects your brand. Activate a custom theme that celebrates your brand identity, or use a built-in theme with preset color palettes and images. Either way, a theme elevates your Salesforce org and enhances the user experience. ### Required Editions
Available in: Lightning Experience
Available in: Group, Essentials, Professional, Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To view company information: View Setup and Configuration
To activate, create, edit, or preview a theme: Customize Application
1. From Setup, in the Quick Find box, enter Themes and Branding, and then select **Themes and Branding**. 2. Click ![Dropdown icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/resources-global/_corporate/images/dropdown.png) next to the custom or built-in theme that you want to learn more about or activate. 1. To see the theme details, such as colors, images, and accessibility settings, click **View**. 2. To test how your org looks with the theme applied, click **Preview**. 3. To apply the theme to your org and immediately make it visible to your users, click **Activate**. 3. To activate a theme after you view or preview it, from the theme’s view page, click **Activate**. 4. If your org currently uses a Salesforce Lightning Design System (SLDS) 1 theme and you activate an SLDS 2 theme, click **Activate** again to confirm that you intend to activate SLDS 2 for your org. Similarly, if your org currently uses an SLDS 2 theme and you activate an SLDS 1 theme, click **Activate** again to confirm that you intend to disable SLDS 2 for your org. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note When you activate an SLDS 2 theme, you enable SLDS 2 for your org. If you change your active theme from an SLDS 2 theme to an SLDS 1 theme, you disable SLDS 2 for your org. See [Transition to SLDS 2](https://www.lightningdesignsystem.com/2e1ef8501/p/8184ad-transition-to-slds-2). When you activate a theme, it’s immediately applied to your org and visible to your users. Most built-in themes don’t support customizations, but in some editions, you can enable dark mode for built-in or custom SLDS 2 themes. # Activate and Deactivate Embedded Omniscripts (Managed Package) For the managed package runtime, when you activate or deactivate an embedded script, Vlocity updates all activated parent scripts to reflect the change. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Learn how to embed an Omniscript in other Omniscripts. See [Embed an Omniscript in Another Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_embed_an_omniscript_in_another_omniscript.htm&release=264.0.0&type=5 "For the managed package runtime, an Omniscript can be reused in one or more existing Omniscripts. Reusing Omniscripts enables you to build a variety of smaller scripts and then piece them together into one or more parent scripts. Embedded Omniscripts behave just like other Omniscript elements."). 1. From the Setup section of the embedded script, click **Activate Version** or **Deactivate Version**. 2. Verify the Affected Omniscripts (any Active Omniscript that this form is embedded in), and click **Proceed**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_omniscript_addrscripts.png) 3. After the parent scripts update, click **Done**. # Activate and Deploy an LWC Omniscript (Managed Package) For the managed package runtime, activate and deploy Omniscripts to make them available to Experience sites, Lightning pages, custom LWCs, and Lightning tabs. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In an Omniscript, click **Activate** to activate and deploy the Omniscript automatically. 2. (Optional) Click **Deactivate** and then **Activate** to redeploy the Omniscript and apply updates or resolve a deployment issue. 3. (Optional) In the Classic Designer only, if there is an issue with the deployment, redeploy the Omniscript by clicking **Deploy LWC** in the Script Configuration properties. Ensure that the Omniscript is active, and then click **Deploy LWC** to redeploy the Omniscript. 4. After deploying your Omniscript, launch it from one of these experiences:

Experience

Description

Lightning pages

Launch an Omniscript from a Lightning page the using Omniscript's generated LWC, or the Vlocity LWC Omniscript Wrapper component.

Experience pages

Launch an Omniscript from an Experience page using Omniscript's generated LWC, or the Vlocity LWC Omniscript Wrapper component.

Embedded inside of a custom component

Launch an Omniscript from a custom Lightning web component by embedding the Omniscript's LWC.

Off-Platform

Run Omniscripts off-platform using OmniOut. Available beginning with Vlocity Insurance and Health and Vlocity CME Summer ’20.

5. (Optional) If an error occurs when an Omniscript initially loads, in the Omniscript, click **Deactivate** and then **Activate** to redeploy the Omniscript. 6. (Optional) Map deployment errors using the Error Handling Framework. Available beginning with Vlocity Insurance and Health Winter ’20 and Vlocity CME Fall ’20 . Error Mapping Example: Original error ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/owc_deploy_error.png) Error Message Mapping a Path and Value to a new message ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/owc_deployment_error_mapping.png) New error message ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/owc_error_message.png) 7. (Optional) Click the dropdown arrow, and then click **Download LWC** to view the metadata for the Omniscript. What’s next: [Add an LWC Omniscript to a Lightning or Experience Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_an_lwc_omniscript_to_a_lightning_or_experience_page.htm&release=264.0.0&type=5 "For the managed package runtime, add an Omniscript to a Lightning or Experience page by adding the Lightning web component generated when you activate an Omniscript."). # Activate and Embed Loyalty Management Widgets Embed member engagement widgets on Experience Cloud site pages or on external portals. After you customize your widget and test it in preview, activate the widget, and embed it. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To activate or download member engagement widgets: Loyalty Management permission set
## Activate the Widget 1. On the Loyalty Program tab in Loyalty Management, select the program that contains the widget. 2. Open the **Setup** subtab. 3. From the Loyalty Program Widgets related list, click the widget. The widget opens in Loyalty Widget Designer. 4. Click **Activate**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note An active widget can't be edited. Deactivate it before making changes. ## Embed the Widget on Experience Cloud Sites You can embed widgets on Experience Cloud sites as Flexcards. See [Add a Standard FlexCard Component to an Experience Cloud Page](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_flexcard_to_an_experience_page.htm&language=en_US&type=5). ## Embed the Widget on External Sites by Using Lightning Out 2.0 1. Open the widget in Loyalty Widget Designer. 2. Click **Embed**. A window that contains HTML code required to embed the widget appears. 3. Add the code to your external portals. 4. For each external site on which you embed the widget, complete these setup tasks. 1. [Configure security-related and administrative settings](https://help.salesforce.com/s/articleView?id=platform.lightning_out_prepare.htm&type=5&language=en_US). 2. [Set up authentication for Lightning Out 2.0](https://help.salesforce.com/s/articleView?id=platform.lightning_out_auth.htm&type=5&language=en_US). ## Embed the Widget on External Sites by Using OmniOut 1. Open the widget in Loyalty Widget Designer. 2. Click **Download**. A zip file is downloaded to your local system. The zip file contains files that you require to embed the widget on external portals by using OmniOut. 3. Embed the widget on external portals. See [OmniOut](https://help.salesforce.com/s/articleView?id=xcloud.os_omniout.htm&language=en_US&type=5). Watch this video to understand how you can embed widgets on Experience Cloud sites and external websites. If you aren’t able to watch the video in full screen, open the video on a new tab: [![Watch video](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/resources-global/_corporate/images/play_btn.png) Embed Loyalty Engagement Widgets](https://salesforce.vidyard.com/watch/mLa4EzCT7E8XFgpePYeYdp). # Activate and Launch Omniscripts Make Omniscripts available to Experience Sites, Lightning Pages, custom LWCs, and Lightning tabs by activating and launching the Omniscript. If an error occurs during deployment, the Omniscript is deactivated. Before you begin, make sure that all components embedded in the Omniscript are also active. 1. From the Omniscript designer, activate the Omniscript. 2. After activating the Omniscript, click **How to launch?** to view how you can launch the Omniscripts. See [How to Launch Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_how_to_launch_19862.htm&release=264.0.0&type=5 "Make an active Omniscript available for launch in one of three ways: as a standalone Lightning Web Component in a Lightning Web Page or as a URL."). 3. After activating your Omniscript, launch your Omniscript from a Lightning page or Experience page in these ways: - Launch an Omniscript using the standard Omniscript component. - Launch an Omniscript using the Omniscript's generated LWC. 4. If an error occurs on the initial load of an Omniscript, in the Omniscript, click **Deactivate**, then click **Activate**. 5. If there’s an issue with deploying the Omniscript in a Lightning or Experience page, redeploy the Omniscript by clicking **Deploy Standard Runtime Compatible LWC**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note This feature applies only to the managed package designer on standard runtime. 6. To reference your Omniscript on an Aura Experience Cloud site, or on a Lightning page, use the Omniscript wrapper component available from the Salesforce Lightning Component Library. See [Component Library](https://developer.salesforce.com/docs/component-library/bundle/lightning-omnistudio-omniscript) for more information. If you’re referencing an Omniscript in a Lightning web component (LWC), you must use a wrapper component that takes in the name of the Omniscript you want to load at runtime, as shown. The type, subtype, and language attributes are mandatory. The Lightning theme is added by default. However, if you'd like to use the Newport theme instead, add the theme attribute as well. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_example.png) Example ``` ``` - **[How to Launch Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_how_to_launch_19862.htm&release=264.0.0&type=5)** Make an active Omniscript available for launch in one of three ways: as a standalone Lightning Web Component in a Lightning Web Page or as a URL. - **[Add Your Omniscript to a Lightning Page](https://help.salesforce.com/s/articleView?id=xcloud.os_add_your_omniscript_to_a_lightning_page_19957.htm&release=264.0.0&type=5)** In Omnistudio standard runtime, add the standard Omniscript component to a Lightning page after activation. - **[Add Your Omniscript to an Experience Cloud Page](https://help.salesforce.com/s/articleView?id=xcloud.os_add_your_omniscript_to_an_experience_page_19992.htm&release=264.0.0&type=5)** In the Omnistudio standard runtime, add the standard Omniscript component to an Experience Builder page after activation. # Activate and Publish a Flexcard After you confirm that the Flexcard is ready, activate it. After activation, add the Flexcard to a Lightning page or to a page in an Experience Builder site. If you use Omnistudio for Vlocity, or Omnistudio Standard in Summer '22 or earlier, when you activate a Flexcard, Omnistudio generates a custom Lightning web component. Add the generated LWC to a Lightning page or Experience Builder page. See [Activate, Configure, and Publish Flexcards for Omnistudio Vlocity](https://help.salesforce.com/s/articleView?id=xcloud.os_activateconfigureand_publish_flexcards_24744.htm&language=en_US). If you use Omnistudio Standard in Summer '22 or later, add the standard Flexcard component to a Lightning page or Experience Builder page after activation. You can’t edit or delete an active Flexcard. To make changes, deactivate it first. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_important.png) Important If a Flexcard embeds an Omniscript and you add the Flexcard to a Lightning Web Runtime (LWR) site in Experience Cloud, include the `lwr` attribute on the `lightning-omnistudio-omniscript` component. Without the attribute, the Flexcard renders in Preview but the embedded Omniscript fails at runtime with the error LWR3008. See [lightning-omnistudio-omniscript](https://developer.salesforce.com/docs/platform/lightning-component-reference/guide/lightning-omnistudio-omniscript.html). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note It is recommended that you use a standard Flexcard component on a Lightning or Experience Cloud page. If you migrate from the Omnistudio managed package runtime to the standard runtime, you can create new versions of existing Flexcards for standard runtime. Then, you can add those Flexcards via the Process Automation section on the Lightning App Builder or Experience Builder page. To reference your Flexcard on an Experience Cloud site, or on a Lightning page, use the Flexcard wrapper component available from the Salesforce Lightning Component Library. See [Component Library](https://developer.salesforce.com/docs/component-library/bundle/lightning-omnistudio-flexcard) for more information. If you’re referencing a Flexcard on a Lightning Web Runtime (LWR) Experience Cloud site, you must use a wrapper component that takes in the name of the Flexcard you want to load at runtime, as shown. The `flexcard-name` attribute is mandatory. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_example.png) Example ``` ``` - **[Publish a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_activateconfigureand_publish_flexcards_24744.htm&release=264.0.0&type=5)** Define metadata values, such as where your Flexcard is visible, and update the component SVG icon for your Flexcard before publishing your component to a Lightning or Experience page. For example, to view your Flexcard on an Experience site you can enable **Community Page** under **Targets** in **Publish Options**. - **[Add a Flexcard to a Lightning Page](https://help.salesforce.com/s/articleView?id=xcloud.os_activateconfigureand_publish_flexcards_24744.htm&release=264.0.0&type=5)** Add a Flexcard that you created or an existing Flexcard to Lightning pages and set up how you want it to appear to users. - **[Add a Flexcard to an Experience Builder Page](https://help.salesforce.com/s/articleView?id=xcloud.os_activateconfigureand_publish_flexcards_24744.htm&release=264.0.0&type=5)** Add a Flexcard that you created or an existing Flexcard to the pages of Experience Builder sites. - **[Considerations for Using Flexcards on Lightning Web Runtime Sites](https://help.salesforce.com/s/articleView?id=xcloud.os_activateconfigureand_publish_flexcards_24744.htm&release=264.0.0&type=5)** Learn about some considerations for using Flexcards on Lightning Web Runtime (LWR) Experience Cloud sites. ## Publish a Flexcard Define metadata values, such as where your Flexcard is visible, and update the component SVG icon for your Flexcard before publishing your component to a Lightning or Experience page. For example, to view your Flexcard on an Experience site you can enable **Community Page** under **Targets** in **Publish Options**. 1. From the App Launcher, find and select **Flexcards**. 2. From the list page, select a Flexcard version. 3. If needed, activate the Flexcard. 4. Click ![action menu icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/flexcard_header_menu_icon.png), and then select **Publish Options**. 5. Enter information as needed. Publish the Flexcard to one of these target pages: 1. App Page - Enables the Flexcard to be used on an App page in Lightning App Builder. 2. Home Page - Enables the Flexcard to be used on a Home page in Lightning App Builder. 3. Record Page - Enables the Flexcard to be used on a record page in Lightning App Builder. 4. Community Page - Enables the Flexcard to be used as a drag-and-drop component on a page in Experience Builder. 5. Community Default - Enables the Flexcard in Experience Builder to expose editable properties when the component is selected. See [XML Configuration File Elements](https://developer.salesforce.com/docs/platform/lwc/guide/reference-configuration-tags.html). When you select publishing options for a parent Flexcard, at least one target must be selected. If you uncheck all targets and click Save, Omnistudio automatically enables the App Page, Home Page, and Record Page options as default targets. 6. Save your changes. ## Add a Flexcard to a Lightning Page Add a Flexcard that you created or an existing Flexcard to Lightning pages and set up how you want it to appear to users. 1. From Setup, in the Quick Find box, enter Lightning App Builder, and then select **Lightning App Builder**. 2. Find the page that you want to add the Flexcard to and then click **Edit**. 3. Drag the Flexcard component from the Standard section of the Components pane onto the canvas. 4. If needed, click **Flexcard Name** and then select a Flexcard. By default, the builder uses the most recent active Flexcard. 5. To track Flexcard user interactions, select **Enable Omnistudio Analytics**. 6. If needed, configure visibility settings, for example, by using display conditions. See [Visibility Rules on Lightning Pages](https://help.salesforce.com/s/articleView?id=platform.lightning_page_components_visibility.htm&type=5&language=en_US). 7. Activate your page and configure activation properties. See [Activate Your Lightning App Page](https://help.salesforce.com/articleView?id=lightning_page_getting_into_salesforce1.htm&type=5&language=en_US). 8. Save your changes. ## Add a Flexcard to an Experience Builder Page Add a Flexcard that you created or an existing Flexcard to the pages of Experience Builder sites. You can add a Flexcard to an Aura or Lightning Web Runtime (LWR) Experience Cloud site. To know how to create LWR-compatible Flexcards, see [Activate and Publish a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_activateconfigureand_publish_flexcards_24744.htm&release=264.0.0&type=5 "After you confirm that the Flexcard is ready, activate it. After activation, add the Flexcard to a Lightning page or to a page in an Experience Builder site."). 1. From Setup, in the Quick Find box, enter Digital Experience, and then select All Sites. 2. Find the site that you add the Flexcard to and then click Builder. 3. Click ![Experience Builder icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/experience_builder_lightning_icon.png). If you're using an Aura-based Experience Cloud site, find the Flexcard component under Process Automation and drag it to the canvas. If you're using an LWR site, find the Flexcard component in the Customer Interactions section. 4. From the Flexcard Name picklist, select a Flexcard. 5. If needed, in Exposed Attributes, enter a configurable public property as JSON code. For example, to show up to five accounts on the Flexcard, if the variable is AccountRecordLimit, enter `{"AccountRecordLimit": 5}`. For multiple properties, separate key and value pairs with a comma, such as `{"AccountRecordLimit": 5, "Greeting": "Hello"}`. 6. If the Flexcard uses the record ID context variable, then to view the related record data, enter a record ID. For information about exposed attributes and a Flexcard’s context ID, see [Configure Flexcard Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_set_up_a_flexcard_in_the_flexcard_designer_37646.htm&release=264.0.0&type=5 "Specify your Flexcard’s behavior with the setup options. For example, add or update a data source, create an event listener, or add session variables."). 7. If needed, enter the object API name as a parameter in the {!objectApiName} format. For example, for an Account record page, enter `{!Account}`. 8. To track Flexcard user interactions, select **Enable Omnistudio Analytics**. 9. Preview your Experience Builder site, and make changes as needed. 10. Publish your Experience Builder site. ### Set Up User Access to Experience Builder Pages Make sure that your users see Flexcards on Experience Builder sites by granting them View All Records access to the Omni UI Cards object. Also, configure the necessary permission sets and groups to control Apex class access. See [Setup Omnistudio Standard Permission Sets for Experience Site Users](https://help.salesforce.com/s/articleView?id=xcloud.os_setup_omnistudio_standard_permission_sets_for_experience_users_7169.htm&type=5&language=en_US). ## Considerations for Using Flexcards on Lightning Web Runtime Sites Learn about some considerations for using Flexcards on Lightning Web Runtime (LWR) Experience Cloud sites. Both existing and newly created Flexcards can be used on LWR sites. Learn about some key considerations before you choose a Flexcard to embed in your LWR sites. You can use Flexcards through the LWR site builder under the Customer Interactions category. To make sure that your Flexcards display correctly and function well, note these pointers and choose only compliant Flexcards for your LWR sites. - If you make changes to your Flexcard, whether it is a child or parent Flexcard, make sure that you republish the sites that use it. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Before republishing your sites via the site builder, consider other elements from other products that you've embedded in your site. Only republish if everything is production-ready. - To use the Open Omniscript option on an LWR site, make sure that you select the **Load Omniscript from URL** checkbox in the Properties section of the page. This checkbox is added to the Omniscript component and loads the Omniscript present in the URL configured via the Action Type. You must also create an lwcos page for this action to work. For more information, see [Launch an Omniscript from an Omniscript Action on a Flexcard in Experience Cloud](https://help.salesforce.com/s/articleView?id=xcloud.os_launch_an_lwc_omniscript_from_an_omniscript_action_on_a_flexcard_in_a_community_27646.htm&release=264.0.0&type=5 "Omnistudio supports Omniscripts launched from Flexcards in Experience Builder. With the Omniscript for Experience Builder component, you can load a dynamic Omniscript launched from a Flexcard Action element into an Experience Cloud page."). - The Style tab on LWR sites don't work with Flexcard elements. You can continue to control the style of the Flexcard through the options available within the Flexcard designer, but they aren't compatible with the settings native to the LWR site builder. - Custom LWCs are supported. However, due to a technical limitation, nested custom LWCs require a workaround to work as expected. Because LWR sites work on cached data, they look for Flexcards and Omniscripts nested within your custom LWCs on the site. If present, they load the appropriate component at build time. To do this, you can pick one of the two methods outlined here. - Create a page on your site and add all nested components in your main LWC component to this page. Hide the page so it doesn’t show up for users as a navigation option. - On the page that you’re adding your custom LWC, add the dependent Flexcards and Omniscripts. Then, for each component, control the visibility via the Visibility tab. For instance, you can switch the **Show Component on Desktop** toggle on and add a condition that says User ID equals Invalid\_User. Since Invalid\_User is a value that never matches a real user ID, this condition is always false. As a result, the dependent components remain hidden from users but are still available for the LWR site to discover and cache. - When you open an LWR site from the Digital Experiences page, the site considers you an unauthenticated user and shows only Flexcards that have data available to guest users. To make sure that you see the full data, implement a login page on your site. Then, go to the **Workspaces** link next to the site name. Click **Administration** and find the **Login & Registration** tab in the left navigation pane. Make sure that the Login Page Type dropdown has a value and that the **Allow employees to log in directly to an Experience Cloud site** checkbox is selected. - ![The Login & Registration page showing the Login Page Setup options](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/login_on_lwr.png) - Streaming APIs as data sources don’t work on LWR. # Activate and Use ApexGuru for Apex Code Analysis Learn how to activate ApexGuru and analyze your Salesforce org’s Apex code securely using the Einstein Trust Layer. ![ApexGuru workflow diagram for code analysis and recommendations.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-scalability-264-0-0-production-enus/18f3af65-f4ea-4406-9c30-319b9afa03cd/scalability/images/apexguru_workflow_image.png) 1. Review the legal terms for ApexGuru and click **I Agree** to activate the service. 2. Allow ApexGuru to securely retrieve your org’s Apex code in read-only mode for dynamic grounding. 3. Let the Einstein Trust Layer provide data masking, secure gateway, and zero data retention during the analysis process. 1. ApexGuru scans and reviews the uploaded Apex code to identify inefficiencies and areas of optimization. These hotspots and performance bottlenecks can impact overall performance. 2. A Salesforce-owned LLM within the Einstein Trust Layer detects common antipatterns in the code and prioritizes recommendations based on their potential impact. 3. Ensure that the data is immediately deleted after the analysis is complete. 4. Allow ApexGuru to retrieve data while maintaining the confidentiality and integrity of the Apex code during processing and transmission. 5. Review the recommendations generated by the model in the ApexGuru interface for further analysis. You have securely activated ApexGuru, analyzed your Apex code, and received prioritized recommendations for optimization in your ApexGuru interface. # Activate Bounce Management and Return Bounced Emails to Sender Control Enables Salesforce to track and handle failed email deliveries (bounces) for outbound org email, including notifying senders when messages cannot be delivered successfully. ## Control Name Email Security - Deliverability (Select "Activate bounce management" and "Return bounced emails to sender"). ## Control Overview Enables Salesforce to track and handle failed email deliveries (bounces) for outbound org email, including notifying senders when messages cannot be delivered successfully. ## Description When bounce management is activated, Salesforce captures and logs email‑delivery failures, such as invalid addresses, mailbox‑full errors, or spam filter rejections, and can route bounce notifications back to the original sender for follow‑up or cleanup. ## Recommended Configuration On the Deliverability Setup page, in the Bounce Management (Emails from Salesforce or Email Relay Only) section, select **Activate bounce management** and **Return bounced emails to sender**. ## Security Impact Improves visibility into failed email‑delivery attempts and helps prevent stale or invalid addresses from being used in ongoing campaigns, which can otherwise degrade sender reputation and expose the company to abuse or misdirected information. ## Business Impact Supports cleaner contact lists, better campaign performance, and improved email‑sender health metrics. It also helps users understand when messages fail to reach recipients, enabling corrective action. ## Security Risk If Not Configured Lack of Bounce Management for Outbound Organizational Email deliverability allows undetected delivery failures to accumulate, which can distort metrics and increase the risk of misdirected or misaddressed sensitive communications. ## Threat Scenarios Stale or invalid email addresses in Salesforce may be used unknowingly to send sensitive or high‑value messages, which might then be captured by attackers or inadvertently leaked to unintended recipients if the address is reused or repurposed. ## Estimated CVSS Score Range Medium (4.0–6.9). ## Risk Impact Considerations The impact is lower than encryption or domain‑verification controls, but becomes more important for large‑volume email programs or when email‑contact data quality is critical (for example, in financial services or healthcare). ## Higher Risk When Large‑scale marketing or notification programs, frequently changing or low‑quality contact data, or environments where sender‑reputation and compliance with email‑privacy rules are tightly monitored. ## Low Risk When Low‑volume outbound email, mostly internal communications, or where another email‑gateway or ESP already handles bounce‑management and reporting. ## Business and Integration Considerations Implement after core security settings (TLS, DKIM, privacy, standard security mechanisms) are in place; make sure that users who manage outbound email understand how to act on bounce reports. ## Security Health Review Guidance Good to have. ## Who Is Impacted System administrators, email‑marketing teams, sales and service users who send outbound email, and compliance teams that monitor email‑delivery practices. #### See Also - [Enable Email Bounce Handling](https://help.salesforce.com/s/articleView?id=sales.emailadmin_bounce_enable.htm&type=5&language=en_US) # Activate Elements in the LWC Omniscript Designer (Managed Package) For the managed package runtime, activate an inactive element by selecting the element in the Navigation Panel of the Omniscript Designer. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). When an element is deactivated, it disappars from the canvas. View inactive and active steps and actions placed outside of steps in the Slide View of the Navigation Panel. View all inactive and active elements, including those inside steps, in the Tree View of the Navigation Panel. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/new_os_designer_slide_view_tab.png) ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/new_os_designer_tree_view_tab.png) 1. From Omniscript, in the Navigation panel, click the Tree View icon. 2. (Optional) If you are activating an action outside of a step or a step, you may also click the Slide View icon to activate the element. 3. Click the action, step, or element inside of a step that you want to activate. 4. In the Properties panel, click **Activate**. # Activate Elements in the Omniscript Designer Activate an inactive element by selecting the element in the Navigation Panel of the Omniscript Designer. When an element is deactivated, it disappears from the canvas. View inactive and active steps and actions placed outside of steps in the Slide View of the Navigation Panel. View all inactive and active elements, including those inside steps, in the Tree View of the Navigation Panel. 1. From Omniscript, in the Navigation panel, click the Tree View icon. 2. (Optional) If you are activating an action outside of a step or a step, you may also click the Slide View icon to activate the element. 3. Click the action, step, or element inside of a step that you want to activate. 4. In the Properties panel, click **Activate**. #### See Also - [Create an Omniscript](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_omniscript_8570.htm&release=264.0.0&type=5 "Create an Omniscript to build a form in the Omniscript Designer.") # Activate the Flow in Flow Builder Before you can sync your data between Salesforce Suites and your external apps, activate your flow in Flow Builder. 1. From the Suites Home page, select **Quick Settings** (gear icon) in the top-right corner. 2. Select **Open Advanced Setup**. 3. In the Quick Find box, search for and select **Flows**, which is in the Process Automation category. 4. From the Flows page, find and select the flow related to the app connection. 5. In the upper-right corner, select **Activate** to deploy the flow and make it live. You can also activate a flow from the **Flows** tab in the Automation app. Open the flow, and then select **Activate**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/images/icon_note.png) Note You can save a limited number of flows. See the Considerations section in [Integration Basics for Salesforce Suites](https://help.salesforce.com/s/articleView?id=xcloud.connect_external_apps.htm&release=264.0.0&type=5 "Salesforce Suites is built on a simple idea: Your business runs smoother when everything you need lives under one roof, especially your data. But what about the external apps your business relies on, like accounting and project management tools? Salesforce prebuilt integrations bridge that gap by bringing your external app data into your Suites workspace and eliminating siloed data."). # Activate the Story-SLDS Component (Managed Package) For the managed package runtime, to display a Customer Story on a Lightning or Community page, the story-slds component must be active. The story-slds component displays a timeline of all interactions with a customer in a single, chronological feed. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Go to the Vlocity Cards tab in your org, and search for story-slds, and click **story-slds (Version 3)** to open the story card layout in the Vlocity Card Designer. Beginning with Vlocity Health and Insurance Summer '19, select Version 3 for an LWC enabled story-slds. For an Angular story-slds component, select Version 2. 2. Confirm **Enable LWC** is selected in the Layout pane. If using an Angular story-slds, use **story-slds (Version 2)**. 3. In the Cards pane, click Activate for each object you want to display in the story and disable Activate for those you want to hide. 4. In the Layout pane, click **Activate**. # Activate Your Experience Cloud Site To complete your site setup for customers and partners, you must activate it. 1. From Setup, enter All Sites in the Quick Find box, select **All Sites**, and click **Workspaces** next to your site. 2. Select **Administration**, and select **Settings**. 3. Click **Activate Site**, and click **OK**. Salesforce sends you an email when the site is activated. 4. To verify that your site is activated, refresh your private (incognito) window. The browser displays the login page for your site. # Activate Your Loyalty Member Portal Activate your Loyalty Member Portal to make it accessible to the loyalty program members. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
1. From Setup, in the Quick Find box, enter **All**, and then select **All Sites**. 2. To activate your Loyalty Member Portal, open **Workspaces** of your Loyalty Member Portal. 3. Click **Administration**, and then click **Settings**. 4. Click **Activate**. Experiences users receive an email with the loyalty member portal link and the credentials to log in. # Activate, Configure, and Publish Flexcards (Managed Package) For the managed package runtime, after creating a Flexcard, activate it to generate a custom-generated LWC, which you can then add to a Lightning or Experience page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. To activate a Flexcard, see [Activate a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, activate a Flexcard to generate an LWC and publish it to a Lightning page or Experience Builder site. After you activate a Flexcard, you can’t edit it or add elements to it."). 2. To define metadata values, such as where your Flexcard is visible, and to update the component SVG icon for your Flexcard, see [Configure Publish Options on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_publish_options_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, define metadata values, such as where your Flexcard is visible, and update the component SVG icon for your Flexcard before publishing your component to a Lighting or Experience page. For example, to view your Flexcard on an Experience site you can enable Community Page under Targets in Publish Options."). 3. To a add a Flexcard to a Lighting or Experience page, see this table:

Deployment Location

Flexcard Type

Deployment Instructions

Lightning page

Custom-generated LWC

Experience page

Custom-generated LWC

Off-platform (outside of Salesforce)

Custom-generated LWC

Beginning in Summer ’21, see OmniOut (Managed Package).

- **[Activate a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, activate a Flexcard to generate an LWC and publish it to a Lightning page or Experience Builder site. After you activate a Flexcard, you can’t edit it or add elements to it. - **[Configure Publish Options on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_publish_options_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, define metadata values, such as where your Flexcard is visible, and update the component SVG icon for your Flexcard before publishing your component to a Lighting or Experience page. For example, to view your Flexcard on an Experience site you can enable **Community Page** under **Targets** in **Publish Options**. - **[Add a Flexcard to a Lightning Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_flexcard_to_a_lightning_page.htm&release=264.0.0&type=5)** For the managed package runtime, after creating and activating your Flexcard, publish the generated component to a Lightning page from the Lightning App Builder. - **[Add a Flexcard to an Experience Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_flexcard_to_an_experience_page.htm&release=264.0.0&type=5)** For the managed package runtime, after creating and activating your Flexcard, publish the generated component to an Experience page from the Experience Builder. # Activating Omniscripts (Managed Package) For the managed package runtime, to activate a script for production deployment, edit the script and, in the Script Configuration section, click **Activate Version**. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). You can activate an Omniscript from the Omniscript designer. After expanding the desired Omniscript Type to view the Omniscript, click the dropdown arrow to the right of the active column, and select **Activate**. There can be only one active Omniscript per type, subtype, and language. Each active Omniscript must be assigned a unique subtype. Inactive scripts can be run only in preview mode. After a script is activated, you can’t change it unless you deactivate it. To deactivate an Omniscript, click **Deactivate Version** in the Script Configuration section. # Activation and Download of Widget FlexCards After you customize and activate a widget FlexCard, a Lightning Web Component (LWC) is generated for the widget. Use the LWC to embed the widget on Experience Cloud site pages and on Lightning pages. After you activate a widget FlexCard, download the widget’s LWC and use the LWC to embed the widget on external websites by using OmniOut. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
## Widget Activation See these resources to learn how you can activate widgets: - [Activate a FlexCard](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_a_flexcard.htm&type=5&language=en_US) - [Configure Publish Options on a FlexCard](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_publish_options_on_a_flexcard.htm&type=5&language=en_US) - [Add a FlexCard to a Lightning Page](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_flexcard_to_a_lightning_page.htm&type=5&language=en_US) - [Add a FlexCard to an Experience Cloud Page](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_flexcard_to_an_experience_page.htm&type=5&language=en_US) ## Widget Download See these resources to learn how you can download the LWC of widgets and embed widgets on external sites: - [Download an Off-Platform FlexCard LWC from the FlexCard Designer](https://help.salesforce.com/s/articleView?id=xcloud.os_download_an_off_platform_flexcard_lwc_from_the_flexcard_designer.htm&type=5&language=en_US) - [Complete Prerequisites to Use OmniOut](https://help.salesforce.com/s/articleView?id=xcloud.os_omniout.htm&type=5&language=en_US) - [Add a FlexCard LWC to OmniOut](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_flexcard_lwc_to_omniout.htm&type=5&language=en_US) # Activation in the Cards Framework (Managed Package) For the managed package runtime, multiple versions of a component can exist, but only one version at a time can be active. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Activating one version deactivates all the others. Only active component versions are exported when you create a DataPack. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cards_activation.png) # Activations Activation tracks information about devices from which users have verified their identity. Salesforce prompts users to verify their identity when they access Salesforce from an unrecognized browser or application. Identity verification adds an extra layer of security on top of username and password authentication. The Activations page lists the login IP addresses and client browsers used. ### Required Editions
Available in: Both Salesforce Classic and Lightning Experience
Available in: All Editions
When a user logs in from outside a trusted IP range and uses a browser or app we don’t recognize, the user is challenged to verify identity. We use the highest-priority verification method available for each user. In order of priority, the methods are: - Verification via push notification or location-based automated verification with the Salesforce Authenticator mobile app (version 2 or later) connected to the user’s account. - Verification via a U2F security key registered with the user’s account. - Verification code generated by a mobile authenticator app connected to the user’s account. - Verification code sent via SMS to the user’s verified mobile phone. - Verification code sent via email to the user’s email address. After identity verification is successful, the user doesn’t have to verify identity again from that browser or app, unless the user: - Manually clears browser cookies, sets the browser to delete cookies, or browses in private or incognito mode - Deselects **Don’t ask again** on the identity verification page The Activations page in Setup lists the login IP addresses and client browser information of devices from which users have verified their identity. You can revoke the browser activation status for one, many, or all users. For example, a user reports a lost device and is issued a new one. You can revoke the activation status of the browser on the lost device so that anyone attempting to access the org from that device has to verify their identity. This identity verification adds a layer of security while allowing users to stay productive. Users can view their own Activations page to check their login IP addresses and client browser information. End users can revoke the activation status only for their own activated browsers. For example, a user logs in to the org. On the user’s Activations page, several different browsers are activated, but the user has only logged in from a single browser on a work laptop. The user immediately revokes the activation status of those browsers the user doesn’t recognize. Because this user is challenged for identity verification using a code sent via SMS to the user’s mobile device, anyone else who tries to log in from one of the deactivated browsers can’t get the texted verification code. Without the code, the hacker fails the identity verification challenge. The user can then report the potential security breach. - **[Use Activations](https://help.salesforce.com/s/articleView?id=xcloud.security_activation_using.htm&release=264.0.0&type=5)** View your users’ activations and revoke activation status to prevent security breaches. #### See Also - [Use Activations](https://help.salesforce.com/s/articleView?id=xcloud.security_activation_using.htm&release=264.0.0&type=5 "View your users’ activations and revoke activation status to prevent security breaches.") # Activities View Choose a default for how activities display on record pages in Lightning Experience. The views focus on different information and behave differently. Users can change their view preference in their personal settings. ### Required Editions
Available in: Lightning Experience and the Salesforce mobile app for iOS and Android
Available in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
The activity timeline view shows details for each task, event, and email in an expandable timeline view. ![An example of an activity timeline](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/record_page_activity_view_timeline.png) The related lists view shows details for each task, event, and email in the Open Activities and Activity History related lists. ![An example of a related lists view](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/record_page_related_lists.png) All standard Lightning Experience record pages support both views. # Activity-Based Currencies with Mixed-Expiration Subcurrencies Optimize financial liability and drive member engagement by creating currencies that use the Activity with Mixed Subcurrencies expiration model. This model provides members with long-term value from their activity-based expiration points while encouraging the timely redemption of fixed-expiration points. It also provides liability control across partners and promotions by using point traceability. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Advanced
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_important.png) Important This feature is available only on request. Contact your Salesforce account executive. ## Use Case Let's say you want reward points that don't expire as long as members stay active, but you want promotional and partner points to expire within a specific timeframe to expedite usage. Here's how to set up the currencies. - Create a parent currency, Member Points, with the Activity with Mixed Subcurrencies expiration model. - Create a subcurrency, Reward Points, that inherits the activity-based expiration from the parent. - Create two subcurrency, Promotion Points and Partner Points, with fixed-duration expiration. When members redeem points, point traceability maps every debited point to its originating source subcurrency. - **[Considerations for Creating Activity-Based Currencies with Mixed-Expiration Subcurrencies](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_activity_mixed_expiration_considerations.htm&release=264.0.0&type=5)** Here are some considerations for currencies that use the Activity With Mixed Subcurrencies expiration model. - **[Create Activity-Based Currencies with Mixed-Expiration Subcurrencies](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_activity_mixed_expiration_create_currency.htm&release=264.0.0&type=5)** Set up currencies and subcurrencies that use the Activity With Mixed Subtypes expiration model to control how points expire. - **[Set Up Loyalty Program Processes and Actions](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_activity_mixed_expiration_set_up_processes_actions.htm&release=264.0.0&type=5)** After you create currencies and their subtypes, create loyalty program processes or use invocable actions to credit and debit subcurrency points. - **[How Loyalty Management Consolidates Subcurrency Point Balances](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_activity_mixed_expiration_consolidate_balances.htm&release=264.0.0&type=5)** When members transact, Loyalty Management uses Loyalty Aggregated Point Expiration Ledger records to consolidate point balances based on currency, subcurrency, and expiration date. The system performs real-time aggregation for all subtypes regardless of the settings on the Loyalty Management Settings page. - **[Run Data Processing Engine Definitions](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_activity_mixed_expiration_run_dpe_definitions.htm&release=264.0.0&type=5)** After you create currencies that use the Activity With Mixed Subcurrencies expiration model, run the Data Processing Engine definitions required to expire currencies and roll over escrow points. - **[Track Redemptions and Associated Accruals with Traceability](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_activity_mixed_expiration_track_redemptions_traceability.htm&release=264.0.0&type=5)** Trace consumed points to their originating source by using traceability loyalty ledger records. Traceability records map target debit ledgers to source Loyalty Aggregated Point Expiration Ledger records. If a single debit ledger consumes points from multiple aggregate ledgers, Loyalty Management creates a dedicated traceability record for each aggregate ledger from which points are consumed. # Add a Blank Document Create a blank Quip document that’s automatically linked to a Salesforce record. ### Required Editions
Available in: Lightning Experience
You can add a document to the Quip Document component only if your admin configured the component to let you do so. 1. In the Quip Document component for a record, click **New Document**. ![Before you embed a document, the Quip Document component includes three buttons: Choose Document, New Document, and Open Template Library.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_document_component.png) 2. Give your new document a title, and click **Create**. ![The window includes a Title text field.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_document_component_new_document.png) Your new document appears in the Quip Document component. In the background, Salesforce links the document to the record. If the record also includes the Quip Associated Documents component, the document is listed there when the link is complete. #### See Also - [Considerations for Working with Embedded Documents](https://help.salesforce.com/s/articleView?id=xcloud.quip_sf_considerations_for_working_with_embedded_documents.htm&release=264.0.0&type=5 "You can generally work with an embedded document like any other document, and there are a few things to keep in mind.") # Add a Business Event to the Example Card (Managed Package) For the managed package runtime, you can't define complex JSON structures in a Flexcard. However, you can specify key/value pairs in Setup in the Custom Fields section. After creating the tracking configuration and adding event types, you can use merge fields to add the values to a complex JSON structure. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In the Vlocity Flex Cards tab, expand **DocumentationTestCard** and click **DocumentationTestCard (version 1)**. 2. Click **New Version**. 3. Click **Setup**. 4. Scroll down to the Tracking Custom Data section, and in the **Business Event** field, type Back\_to\_School. 5. Click **Activate**, then click **Done**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If the **Business Event** and **Business Category** fields aren't sufficient for your use case, you can define key/value pairs in the Custom Fields section. For additional configuration details, see [Event Tracking for Custom Fields (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_event_tracking_for_custom_fields.htm&release=264.0.0&type=5 "For the managed package runtime, for Integration Procedures and Omniscripts, you can add your own custom fields to the data stored by the Tracking Service. In Summer '20 and later releases, you can add custom fields to Flexcards as well."). What’s next: This is the last task in the current workflow. For the next task in the parent workflow, see [Workflow for Creating a Tracking Configuration and Adding Event Types (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_creating_a_tracking_configuration_and_adding_event_types.htm&release=264.0.0&type=5 "For the managed package runtime, a Vlocity Web Tracking Configuration specifies a third-party tag manager and account to which to send tracking data. Vlocity Web Tracking Event Types specify data formats for specific events. In the workflow example, Event Types pass Omniscript data to Google Analytics."). # Add a Chart to a Flexcard Display data on a Flexcard as a chart by using available types such as bar, pie, donut, and more. Configure settings such as the aspect ratio or dimensions to fit your company or institution’s style. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Beginning Summer '22, if a chart element's height is double its expected height when displayed in a [standard Flexcard component](https://help.salesforce.com/s/articleView?id=xcloud.os_enable_standard_omnistudio_runtime.htm&type=5&language=en_US), enable Lightning Web Security (LWS). For more about LWS, see [Lightning Web Security FAQ](https://help.salesforce.com/s/articleView?id=sf.000363550&%3Btype=1&language=en_US&type=5). To enable LWS, see [Enable Lightning Web Security in an Org](https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.security_lwsec_enable). 1. From the App Launcher, find and select **Flexcards**. 2. Expand a Flexcard and select a version. 3. If needed, deactivate the Flexcard for editing the Flexcard. 4. Drag the **Chart** element from the element panel to the canvas. 5. If needed, configure the chart dimensions: - To apply a fixed height and ignore proportions, turn off Maintain Aspect Ratio and enter a value in pixels in the Chart Height field, such as 300 or 300 px. - To adjust the chart’s height proportionally to its original height, enter a number in the Aspect Ratio field. - To adjust the chart’s height proportionally to its width, turn on Maintain Aspect Ratio and enter a number in the Aspect Ratio field. 6. From the label picklist, select the field whose values are used to categorize the data, such as Name to display Account names. 7. From the value picklist, select the field whose values are used to populate the chart, such as AnnualRevenue. 8. If needed, select a color palette for the chart. If the chart has more than six values, Omnistudio repeats the colors from the color palette. 9. Enter the remaining information as needed. # Add a Chart to a Flexcard (Managed Package) For the managed package runtime, display data on a Flexcard as a chart with the Chart element. Select from bar, pie, donut, line, and radar chart types. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![FlexCard Chart Element](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_chart_element.png) 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. Drag a **Chart** element from the Build panel into a state on the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. (Optional) To display a title at the top of the chart, which is hidden by default, update these properties: - In the **Title** field, enter a title for the chart. - Make sure **Hide Header** isn’t selected. 5. From the **Type** dropdown, select the type of chart to display. 6. (Optional) To adjust your chart's proportions, update the **Aspect Ratio**. See [Flexcard Chart Element Aspect Ratio (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcard_chart_element_aspect_ratio.htm&release=264.0.0&type=5 "For the managed package runtime, you can adjust the proportions of a Chart element with the Aspect Ratio, Maintain Aspect Ratio, and Chart Height features in the Flexcard Designer. Set the Aspect Ratio to adjust height relative to the width. Set fixed proportions. Or, override the aspect ratio and set a fixed height."). 7. (Optional) To manually set the height, overriding the **Aspect Ratio**, enter a number in the **Chart Height** field. The height is in pixels, such as 300px. You can enter just the number without the 'px' suffix, such as 300. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note This feature is visible when the **Maintain Aspect Ratio** feature is disabled. 8. From the **Label Node** dropdown, select the field whose values are used to categorize the data, such as Name to display Account names. 9. From the **Value Node** dropdown, select the field whose values are used to populate the chart, such as AnnualRevenue. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important The values must be numbers and have the same count as the field selected in **Label Node**. 10. Select the color scheme for your chart from the **Color Palette** dropdown. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Each color palette has up to 6 unique colors. If there are more than 6 values in your chart, the colors repeat from the beginning. 11. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 12. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). What’s next: Preview your Flexcard. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). - **[Flexcard Chart Element Aspect Ratio (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcard_chart_element_aspect_ratio.htm&release=264.0.0&type=5)** For the managed package runtime, you can adjust the proportions of a Chart element with the Aspect Ratio, Maintain Aspect Ratio, and Chart Height features in the Flexcard Designer. Set the Aspect Ratio to adjust height relative to the width. Set fixed proportions. Or, override the aspect ratio and set a fixed height. - **[Flexcards Chart Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_chart_properties.htm&release=264.0.0&type=5)** For the managed package runtime, chart element properties are configurable in the Property Panel when you select a Chart element in the Flexcard Designer. With the Chart element, display data as a chart and enable users to perform actions within the chart. # Add a Checkbox Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Checkbox input element on a Flexcard to enable users to select or unselect a checkbox. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Checkbox** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. In **Checkbox Label**, enter the label that appears next to the checkbox. 6. (Optional) To enable the checkbox by default, check **Default Value**. 7. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [CheckboxGroup Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_checkboxgroup_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains a CheckboxGroup LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 8. To execute an action when a user selects or unselects the checkbox, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 9. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 10. (Optional) To style your element, click **Style** to open the Style panel, and see [Flexcards Datatable Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_datatable_style_properties.htm&release=264.0.0&type=5 "For the managed package runtime, configure style properties specific to the Datatable element from the Style panel of the Flexcard Designer."). - **[Flexcards Checkbox Input Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_checkbox_input_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Checkbox Input element properties are configurable in the Properties panel when you select a Checkbox element in the Flexcard Designer. Enable a user to select or unselect a checkbox. # Add a Child Flexcard to Itself Recursively (Managed Package) For the managed package runtime, when a child Flexcard has hierarchical data, it can call itself recursively. When the Flexcard element is embedded in a child Flexcard, use the Is Recursive feature to display the children and grand-children of parent objects. The child Flexcard can add itself to itself again and again, each time passing the same child data field (also called a data node) available in each level of the data JSON, until that data field no longer exists or is empty. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Summer '21.

For example, let's say your hierarchical data JSON has a Products data field that lists products within a product. You can display the products, their child products, and grand-child products by embedding the child Flexcard once inside itself, and passing the products data field to itself. The Is Recursive features loops through each Products node and displays the product information based on the elements added to the Flexcard. 1. From the Omnistudio Flexcards home tab, create a child Flexcard. See [Embed Flexcard Inside Another Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_embed_flexcard_inside_another_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, embed a reusable Flexcard as a child inside another Flexcard. The child Flexcard can have its own data source. Or, the parent can override the child's data source with its own data source. The parent can also pass specific data to the child, such as its recordId to use as the child's contextId."). 2. Add data fields and other elements to the child Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). 3. From the Build panel, drag a Flexcard element onto the canvas. 4. From the Properties panel, select **Is Recursive**. You can view the actual content of a recursive child Flexcard only in preview mode. In design mode, Salesforce sometimes doesn’t show all of its elements. 5. Pass data to the children: To pass specific attributes, follow these tasks: 1. In the **Attribute** field, enter a name for the attribute, such as AccountId. 2. In the **Value** field, select a data merge field, such as {Id}. ![FlexCard Recursive Child Attributes](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_recursive_child_attributes.png) 3. In the data source, reference the attribute as a contextId. For example, {Parent.AccountId}. ![FlexCard Recursive Child Attributes Data Source](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_recursive_child_attributes_ds.png) ![FlexCard Recursive Child Attributes Preview](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_recursive_child_attributes_preview.png) To return objects within a specific dataset from the data source, enter the repeating child node in the **Data Node** field. For example, if your data source has a similar JSON structure as seen in this code sample, enter {record.Products} to display a card for each Products object. ``` [ { "Id": "5123", "Name": "Exit Communications", "Account Number": "QHT123456789", "Phone": "415-987-6543", "Website": "http://www.exitcomm.org", "Contact": "Melrose Oduke", "Contact Phone": "415-333-1234", "Products": [ { "Id": "1", "Name": "Product1", "Products": [ { "Id": "1_1", "Name": "Product1_1" }, { "Id": "1_2", "Name": "Product1_2", "Products": [ { "Id": "2", "Name": "Product2", "Products": [ { "Id": "2_1", "Name": "Product2_1" }, { "Id": "2_1_2", "Name": "Product2_1_2" } ] } ] } ] } ] } ] ``` ![FlexCard Recursive Child Data Node](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_recursive_child_data_node.png) ![FlexCard Recursive Child Data Node Preview](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_recursive_child_data_node_preview.png) 6. (Optional) To conditionally show the recursive child Flexcard, click **+Add New** next to **Conditions** in the Properties panel. See [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). Conditions applied to a recursive child Flexcard, apply to all recursively repeating records. If one record condition returns false, nested records don't show. 7. To preview the Flexcard at run time, click **Preview**. 8. Click **Activate**. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Activate the child Flexcard to embed it into a parent Flexcard. # Add a Click Event to a Flexcard Element (Managed Package) For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Beginning Winter '22, enable Input elements to perform actions. See [Flexcards Input Elements Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_input_elements_reference.htm&release=264.0.0&type=5 "For the managed package runtime, add input elements on a Flexcard to enable users to enter data or select from a list of options you provide. When a user enters, selects or updates a value, the change is reflected in the data JSON. You can configure an element to execute an action when a user selects an option or enters data. Input elements are available in the Inputs section of the Build panel of the Flexcard Designer."). 1. In the Flexcard Designer, select an element on the canvas that supports actions. Or, drag a supported element from the Build panel onto the canvas. 2. From the Properties panel, click **\+ Add Action**. 3. Beginning Spring '22, execute multiple sequential actions from one element: 1. (Optional) To block users from interacting with the Flexcard until actions that require waiting for a response, such as a Data action, are resolved, enter true in **Show Spinner**. Or enter a merge field whose value is true, such as {requireResponse}. The user sees a spinner image and a dimmed page while waiting. Default is false. 2. Select the right arrow under **Actions** next to the default **Action** label to reveal properties to configure. 3. (Optional) To distinguish this action from other actions on this element, update **Action Label**. This label is only visible within the designer in Design view. 4. Select the type of action to execute from the **Action Type** dropdown. See [Flexcards Actions Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_actions_reference.htm&release=264.0.0&type=5 "For the managed package runtime, select from multiple ways to execute an action from a Flexcard. Create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). 5. Before Spring '22, configure one action to execute: 6. (Optional) To create another action that executes after the previous one completes, select **\+ Add New**, and repeat steps a through e. Before Spring '22, configure one action to execute: 1. Select the type of action from the **Action Type** dropdown. See [Flexcards Actions Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_actions_reference.htm&release=264.0.0&type=5 "For the managed package runtime, select from multiple ways to execute an action from a Flexcard. Create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). 2. Before Spring '22, configure one action to execute: 4. Click **Save**. What’s next: Preview your Flexcard. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). # Add a Club Member After you set up a club and activate it, you can add club members. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Advanced
User Permissions Needed
To add club members:

Loyalty Management permission set

AND

Manage Loyalty Programs permission set

1. From the record page of a club. click **Members**. 2. Click **Add Club Member**. 3. Enter these details:
Contact, Account, and Loyalty Program Membership NumberA value for one of these parameters.
Membership StatusThe status of the member.
Enrollment TypeThe criteria based on which the member is enrolled.
Enrollment Date and End DateMembers can only enroll between the start and end date time of the club membership plan. If you don't select an end date, the club membership ends on the end date of the club.
![Create a new club by entering the primary information such as name description and start and end dates.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/loyalty_management/images/loyalty_clubs_new_member.png) 4. Save your changes. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note You can use the Club Member Enrollment API to enroll members in your club from an external system such as your website. The integration user who is executing the API must be assigned the Loyalty Management and Manage Loyalty Programs permission sets. # Add a Comment Solicit or provide feedback, ask questions, or get answers about a specific part of a document. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. Specify the content to comment on.
Content Action
Text Highlight the text.
Header, paragraph, or list item Place your cursor next to the content.
Whole image Click the image.
Part of an image From the Image menu, select the Comment icon, and drag the orange circle to the part of the image that you want to comment on.
Cell in spreadsheet Select the cell, then in the formatting ribbon, select the Comment icon.
Note
Note You can’t comment on spreadsheet rows, columns, or cell ranges.
![Comment on part of an image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_comment_on_image_01.PNG) 2. Write your comment. You can include emojis and attachments and @mention your teammates. 3. Click **Send**. Quip notifies the document creator and anyone you @mentioned in your comment. # Add a Competitive Analysis Section to an Existing Account Plan Use Flow Builder to automatically add a section to the document associated a record each time the record is updated. For example, if you create an Account Plan template and associate it with the Account object, you can use the Edit Quip Document action to add a Competitive Analysis section. ### Required Editions
Available in: Lightning Experience
User Permissions Needed
To create or change custom fields: Customize Application
To open, edit, or create a flow in Flow Builder: Manage Flow
1. Open Flow Builder. From Setup, you can type Flows in the Quick Find box, select **Flows**, and then click **New Flow**. 2. In the New Flow dialog box, select **Record-Triggered Flow**, and then click **Create**. ![New Flow dialog box with Record-Triggered Flow selected](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_flow_builder_export_to_pdf.png) 3. Fill in the fields using the following values, and then click **Done**.
Field Description
Object Object associated with the document that you want to add content to, for example, Account.
Trigger the Flow When A record is created or updated
Condition Requirements

None

Alternatively, you can create a custom field on the object and set the Condition Requirements to check for an update to the custom field.

Run the Flow After the record is saved
4. In the Flow Builder canvas, add the **Edit Quip Document** action. ![New Action dialog box](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_edit_document_action.png) 5. In the New Action dialog box, fill in the fields, and then click **Done**. For example, to replace a section titled Section A with a section titled Competitive Analysis, enter the following values.
Field Description
Label A name for the action, for example, Edit Doc
Content Location Location where you want to add content. For example, to replace an existing section, enter replace_section.
Document URL Link to the document where you’re adding the document range. For example, to specify the document in the Quip Document URL field on a record, enter {!$Record.Quip_URL__c}.
Document Type document
Content

The content to add to the document, for example:

<h2>Competitive Analysis</h2><p>Specify the strengths and weaknesses of current and potential competitors.</p>

Set the field to Include.

Content Format html
Section Match Type prefix
Section Style heading
Section Text Section A
Section Type textmatch
Document Link {!$Record.Quip_URL__c}
6. Connect the start of the flow to the action. 7. Click **Save**. 8. Activate the flow. The next time an Account record associated with the Account Plan is updated, a new Competitive Analysis section appears in the Account Plan. # Add a Components Event Component to a Community (Managed Package) For the managed package runtime, add a Vlocity Cards Component Events component to a Community page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To configure a Vlocity Cards Component Events component on a Lighting page, see [Reloading a Card Layout After Updating Profile Attributes (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_reloading_a_card_layout_after_updating_profile_attributes.htm&release=264.0.0&type=5 "For the managed package runtime, to reload a Card Layout after updating profile attributes, configure a Vlocity Cards Component Events component. Enable a Vlocity Cards Component Events component on a Lightning Page through the Lightning App Builder and on a Community Page through the Community Builder."). 1. In your org, go to Setup > All Communities, and click the **New Community** button to create a new community. Or, choose an existing community to open by clicking **Builder** next to its name. For more information on using the Community Builder, see [Community Builder Overview](https://help.salesforce.com/articleView?id=community_designer_overview.htm&type=5&language=en_US). 2. Click the blue and white lightning icon to open the Components pane. From the list of Custom Components, select **Vlocity Cards** and drag it to the canvas area. 3. In the properties pane, enter the name of a Card Layout in the **Layout Name** input field. 4. The Vlocity Cards Component Events component does not display content. To validate if your component is configured properly, visit your Community page. Make a change to the available profile attributes to see the Card Layout reload. # Add a Connector to an External App With the Guided Wizard Connect to an external app by using the guided connection wizard. 1. Open the Automation app. 2. From the Automation - Home tab, select a connector icon under **Top Integrations**. 3. Select a template. Depending on the app, you see multiple template options or just one. 4. In the Get Started and Set the Connection steps of the connection wizard, enter authentication details for your external app, such as URL, protocol, and API key. 5. In the Configure the Flow step of the connection wizard, enter your field details. You can also create custom fields if needed. 6. Review your new flow and select **Connect**. The connection wizard generates your flow and saves it. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/images/icon_note.png) Note You can save a limited number of flows. See the Considerations section in [Integration Basics for Salesforce Suites](https://help.salesforce.com/s/articleView?id=xcloud.connect_external_apps.htm&release=264.0.0&type=5 "Salesforce Suites is built on a simple idea: Your business runs smoother when everything you need lives under one roof, especially your data. But what about the external apps your business relies on, like accounting and project management tools? Salesforce prebuilt integrations bridge that gap by bringing your external app data into your Suites workspace and eliminating siloed data."). # Add a Connector to an External App Without the Guided Wizard Connect to an external app by using direct configuration. 1. Open the Automation app. 2. From the Automation - Integrations tab, select **New Connection**. 3. Select a connector, such as Jira or Google Sheets. 4. Select **Create Connection**. 5. Enter authentication details for your external app, select your triggers and actions, and enter your field details. You can also create custom fields if needed. 6. Select **Create**. The connection wizard generates your flow and saves it. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/images/icon_note.png) Note You can save a limited number of flows. See the Considerations section in [Integration Basics for Salesforce Suites](https://help.salesforce.com/s/articleView?id=xcloud.connect_external_apps.htm&release=264.0.0&type=5 "Salesforce Suites is built on a simple idea: Your business runs smoother when everything you need lives under one roof, especially your data. But what about the external apps your business relies on, like accounting and project management tools? Salesforce prebuilt integrations bridge that gap by bringing your external app data into your Suites workspace and eliminating siloed data."). # Add a Currency Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Currency Input element on a Flexcard to enable users to enter a currency amount based on the locale and currency type you specify. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Currency** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) In **Placeholder**, enter temporary text that displays inside the input field and which suggest to the user what content to enter. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. (Optional) Click into **Default Value** to select a default input value from a merge field. Or, enter a value as plain text. 6. (Optional) In **Locale**, update the locale for the currency. The default value is based on the logged-in user's locale settings. 7. (Optional) In **Currency Code**, update the type of currency. The default value is based on the logged-in user's locale settings. 8. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [Input Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_input_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains an Input LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 9. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 10. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 11. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). # Add a Custom Component SVG Icon to a Flexcard Add an SVG resource as the custom icon for your generated LWC to easily identify it in the Lightning App Builder and the Experience Builder. Use the **Publish Options** feature on an activated Flexcard to update the default icon with a custom SVG resource. Before You Begin - You must activate your Flexcard to view the Publish Options feature. See [Activate a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_a_flexcard_24808.htm&release=264.0.0&type=5 "Activate a Flexcard to generate an LWC and publish it to a Lightning page or Experience Builder site. Activating a Flexcard disables editing capabilities. You can’t add or edit elements on an active Flexcard."). 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Flexcard Designer submenu, click the down arrow next to **Activate**, and click **Publish Options**. 3. To upload a custom SVG resource, under **Add SVG resource / Drop it here**, click **Choose File** or drag a file from your computer inside the dashed box. 4. Click **Save**. What’s next: Configure metadata values for your generated Flexcard LWC. See [Define Metadata Values from the Flexcard Designer](https://help.salesforce.com/s/articleView?id=xcloud.os_define_metadata_values_from_the_flexcard_designer_24983.htm&release=264.0.0&type=5 "Define the metadata values for the generated Flexcard LWC from the Flexcard Designer. When your Flexcard is active, use the Publish Options feature to configure API Version, Targets, Description, and other metadata values from a GUI or code editor."). # Add a Custom Component SVG Icon to a Flexcard (Managed Package) For the managed package runtime, add an SVG resource as the custom icon for your generated LWC to easily identify it in the Lightning App Builder and the Experience Builder. Use the **Publish Options** feature on an activated Flexcard to update the default icon with a custom SVG resource. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - You must activate your Flexcard to view the Publish Options feature. See [Activate a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, activate a Flexcard to generate an LWC and publish it to a Lightning page or Experience Builder site. After you activate a Flexcard, you can’t edit it or add elements to it."). 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Flexcard Designer submenu, click the down arrow next to **Activate**, and click **Publish Options**. 3. To upload a custom SVG resource, under **Add SVG resource / Drop it here**, click **Choose File** or drag a file from your computer inside the dashed box. 4. Click **Save**. # Add a Custom Lightning Web Component to a Custom LWC Element Add custom Lightning web components that do not extend an Omniscript element's component by using the **Custom LWC element**. The Custom LWC element enables custom components to either interact with the Omniscript or to act as a standalone component. Standalone components do not interact with the Omniscript or the Omniscript's data JSON. # Add a Custom Lightning Web Component to a Custom LWC Element (Managed Package) For the managed package runtime, add custom Lightning web components that don’t extend an Omniscript element's component by using the Custom LWC element. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The Custom LWC element enables a custom component to either interact with the Omniscript or to act as a standalone component. Standalone components don’t interact with the Omniscript or the Omniscript’s data JSON. ## What’s Next Deploy your Omniscript to preview the Custom LWC’s design and behavior. See [Deploying an Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploying_an_omniscript.htm&release=264.0.0&type=5 "For the managed package runtime, Vlocity Omniscripts can be deployed within the Vlocity application, or within an iFrame either on a Salesforce Community or an external website. Once embedded within the page, the script can be versioned, modified, and activated without the need to reconfigure the page."). - **[Add a Custom LWC that Extends the Omniscript Base Mixin (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_custom_lwc_that_extends_the_omniscript_base_mixin.htm&release=264.0.0&type=5)** For the managed package runtime, to add a custom Lightning web component to a Custom LWC element: - **[Add a Standalone Custom LWC (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_standalone_custom_lwc.htm&release=264.0.0&type=5)** For the managed package runtime, to add a standalone custom Lightning web component to an Omniscript: # Add a Custom LWC that Extends the Omniscript Base Mixin (Managed Package) For the managed package runtime, to add a custom Lightning web component to a Custom LWC element: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Enable custom Lightning web components to interact with Omniscript by extending the OmniScriptBaseMixin component. Custom Lightning web components extending the OmniScriptBaseMixin cannot extend an Omniscript element's component. For more information on the OmniScriptBaseMixin, see [Extend the OmniScriptBaseMixin Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_extend_the_omniscriptbasemixin_component.htm&release=264.0.0&type=5 "For the managed package runtime, enable a custom Lightning web component to interact with an Omniscript by extending the OmniScriptBaseMixin component. The OmniScriptBaseMixin includes methods to update an Omniscript's data JSON, pass parameters, and more.") 1. Drag a **Custom LWC element** from Inputs into the canvas. 2. In the **Lightning Web Component Name** field, enter the name of a component that extends the OmnIScriptBaseMixin. 3. (Optional) Expand the **Custom Lightning Web Components Properties** section and click **Add New Option**. 4. (Optional) In the **Property Name** field, enter the name of a property that is defined in the custom Lightning web component. 5. (Optional) In the **Property Source** field, enter a string or a merge field. 6. Save and Activate the Omniscript. 7. Click **Preview** to preview the Omniscript. # Add a Customer Story to a Page as a Visualforce Component (Managed Package) For the managed package runtime, add a Customer Story to an Account, Contact, Household, or Opportunity page layout using a Visualforce component. Display a timeline of all interactions with a customer in a single, chronological feed. Before you begin: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Configure the objects displayed in the customer story. See [Configure the Objects Displayed in a Customer Story (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_the_objects_displayed_in_a_customer_story.htm&release=264.0.0&type=5 "For the managed package runtime, configure Story Object Configuration when adding a Customer Story to a new page layout. For example, create new object configurations for the Opportunity object."). 2. Create the Visualforce component. See [Create the Visualforce Component for a Customer Story (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_the_visualforce_component_for_a_customer_story.htm&release=264.0.0&type=5 "For the managed package runtime, create the Visualforce component for a new Customer Story you want to add to a new page layout. For example, create the Visualforce component for a new Customer Story for the Opportunity object."). To add a customer story to a page: 1. Go to Setup > Object Manager in your org. 2. Click the **Label** of the object where you want to add the Customer Story. 3. Click **Page Layouts**. 4. Click a layout from the **Page Layout Name** column. 5. Select **Visualforce Pages** from the object palette. 6. Click **Section**. ![Salesforce Billing VF Pages settings](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_billing_visualforcepages_palette.jpg) 7. Drag **Section** onto the page layout. The **Section Properties** dialog box opens. ![Salesforce Section Properties](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_sectionpropertiesdialog.jpg) 8. Enter the following information: - **Section Name**: The section heading that appears on the record detail page, for example Customer Story. - **Display Section Header On**: Specifies where the section heading appears, for example, the **Detail Page** and **Edit Page**. - **Layout**: The layout for the section. Select **1-Column**. 9. Click **OK**. 10. Drag one of the following items onto the new section in the page layout: - **AccountStories** - **ContactStories** - **HouseholdStories** - **OpportunityStories** ![Salesforce Visualforce Page Palette Customer Story](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_visualforcepages_palette_customerstory.jpg) 11. Click the **Properties** button—the wrench icon, located in the upper right corner of the section—to open the Visualforce Page Properties dialog box. ![In the Visualforce Page Properties dialog, the Width is 100%, the Height is 300, and Show scrollbars is checked.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_visualforcepageproperties.jpg) - Enter a **Height (in pixels)** of at least 280px. - Select **Show Scrollbars**. 12. Click **OK**. 13. Click **Save**. - **[Create the Visualforce Component for a Customer Story (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_the_visualforce_component_for_a_customer_story.htm&release=264.0.0&type=5)** For the managed package runtime, create the Visualforce component for a new Customer Story you want to add to a new page layout. For example, create the Visualforce component for a new Customer Story for the Opportunity object. # Add a Customer Story to a Page with the Story-SLDS Component (Managed Package) For the managed package runtime, add a Customer Story to an Account, Contact, Household, or Opportunity page layout with the `story-slds` component. Display a timeline of all interactions with a customer in a single, chronological feed. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before You Begin - Configure the objects displayed in the customer story. See [Configure the Objects Displayed in a Customer Story (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_the_objects_displayed_in_a_customer_story.htm&release=264.0.0&type=5 "For the managed package runtime, configure Story Object Configuration when adding a Customer Story to a new page layout. For example, create new object configurations for the Opportunity object."). - Activate the story-slds component. See [Activate the Story-SLDS Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_the_story_slds_component.htm&release=264.0.0&type=5 "For the managed package runtime, to display a Customer Story on a Lightning or Community page, the story-slds component must be active. The story-slds component displays a timeline of all interactions with a customer in a single, chronological feed."). 1. To add the story-slds component to a Lightning page, open an Account, Contact, Household, or Opportunity record and click **Edit Page** from the Setup menu. 2. Drag the story-slds component from the list of **Custom** components in the **Components** pane onto the canvas. 3. Click **Save**. - **[Add a New Object to the Story-SLDS Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_new_object_to_the_story_slds_component.htm&release=264.0.0&type=5)** For the managed package runtime, clone and modify the story-slds card layout to add a new story object to the Customer Story timeline. The Vlocity Customer Story displays a timeline of all interactions with a customer in a single, chronological feed. Update the maximum number of records returned per story object with the **pageSize** parameter. - **[Activate the Story-SLDS Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_the_story_slds_component.htm&release=264.0.0&type=5)** For the managed package runtime, to display a Customer Story on a Lightning or Community page, the story-slds component must be active. The story-slds component displays a timeline of all interactions with a customer in a single, chronological feed. # Add a Data Source to a Screen Define the records you want available on a screen, including the object, filters, sort order, and how many records to retrieve. A component shows live data only after its screen has a data source. Add a data source before you bind components on that screen to fields. 1. In the data tab, select the screen to add data to, and then select **Browse source manually**. 2. Enter a data source label. The label is an alias for this source. Use a distinct label for each source so that you can tell them apart. For example, you can add the same object twice with different filters, so give each one a clear name such as Active opportunities. 3. Select the object to pull records from, such as Opportunity. 4. Add filter conditions. For each condition, choose a field, an operator, and a value. When you have more than one condition, choose whether records must meet all conditions (AND) or at least one condition (OR). 5. Set the sort order by choosing a field to sort by, and then selecting ascending or descending. 6. Set how many records to retrieve, such as the first six records. 7. Save the data source. The data source is now available on the screen and ready to bind to components. Bind a component on the screen to a field in this data source. # Add a Datatable to a Flexcard (Managed Package) For the managed package runtime, add the Datatable element in Flexcard Designer. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). For a list of datatable events, see [Flexcards Datatable Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_datatable_properties.htm&release=264.0.0&type=5 "For the managed package runtime, datatable element properties are configurable in the Property Panel when you select a Datatable element in the Flexcard Designer. With the Datatable element, display a tabular structure of the data fetched from a data source."). ![FlexCard Datatable Element](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_datatable2.png) 1. In the Flexcard Designer, drag a **Datatable** element from the Build panel into a state on the canvas. 2. (Optional) From the Properties panel, update the element name in the **Element Name** field. 3. (Optional) Before Winter '22, to add an aria-label for accessibility users only visible in assistive technologies, enter a name in the **Datatable Name** field. In Winter '22 only, enable **Accessibility Support** under **Attributes** to display the **Datatable Name** field. Enabling **Accessibility Support** also adds `role` attributes to the datatable's HTML to indicate its structure for assistive technologies. Beginning Spring '22, **Accessibility Support** and **Datatable Name** aren't supported. 4. To update columns, perform the following tasks: 1. Click the pencil icon next to **Column** to launch the **Add DataTable Columns** window and configure columns as follows: - To add an available data field column, click **Add Column**. - To delete a data field column, click the trash icon of the data field to remove. - To update data field column labels, click into a field under **Field Label**. - To update the ability to sort a specific data field column, change the value for **Is Sortable** to false or true. **Is Sortable** must be selected under **Attributes** in the Properties panel. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning Spring '22, click the sortable column once to sort descending, a second time to sort ascending, and a third time to reset the datatable to its state before sorting. If **Draggable** is enabled, clicking on a sortable column the first time disables the ability to drag a row. Selecting the same sortable column a third time enables you to drag a row. - To update the ability to search a specific data field, change the value for **Is Searchable** to true or false. **Is Searchable** must be selected under **Attributes** in the Properties panel. - To update the type of data for a specific data field column, such as currency, date, number, update **Type**. - To update the ability to edit the value of a data field, change the value for **Is Editable** to true or false. **Cell Level Edit** must be checked under **Attributes** in the Properties panel. - To update the ability for a user to hide or show specific data field columns, change the value for **Is User Selectable** to true or false. **User Selectable Column** must be checked under **Attributes** in the Properties panel. - To update whether a data field is hidden or shown by default, change the value for **Is Visible** to true or false. If this property is set to false and **Is User Selectable** is set to true, the user can make the column visible. 2. Click **Save**. 5. **Records** gets the records to display in the datatable. Default is {records}, which displays all records returned from the data source. 6. (Optional) In the **Attributes** section, configure additional properties: 1. To add pagination to the data table, enter values for the following properties: - **Page Size**: To set how many records per page to display, enter a number. - **Page Limit**: To set a max number of pagination links to display, update default number. 2. To enable the ability to delete a row based on a data field value returning as false, enter the name of the data field column in **Row Delete Dependent Column** in the Attributes section. For example, let's say your table is a list of account cases and has a record field IsEscalated whose value is either true or false. When a record's IsEscalated value is false, a user can delete the record. If true, the trash icon is disabled and a user can’t delete the record. Deleting a row fires the `delete` event. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important **Row Delete** must be enabled, and the column must have a boolean (true or false) value. 3. To make rows selectable by adding a checkbox at the beginning of each row, select **User Selectable Row**. Selecting a row fires the `selectrow` event. 4. To configure additional attributes see [Flexcards Datatable Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_datatable_properties.htm&release=264.0.0&type=5 "For the managed package runtime, datatable element properties are configurable in the Property Panel when you select a Datatable element in the Flexcard Designer. With the Datatable element, display a tabular structure of the data fetched from a data source."). 7. (Optional) To group a table by a data field type, in the **Group Attributes** section, perform the following tasks: 1. In the **Group By** field, enter the name of the data field to group records by. For example, to group Account Cases by the Status data field, enter Status. 2. (Optional) Configure these properties: - **Sort Across Groups**: Sort across all groups. By default, sorting happens within each group. - **Hide Extra Column**: Remove the space below and above the group name. - **Active Groups**: Collapse or expand the grouped rows by default. - **Group Wrapper Class**: Add a class to each group. See [Apply Custom CSS to an Element on a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_create_custom_css_within_the_flexcard_designer.htm&release=264.0.0&type=5 "For the managed package runtime, create custom CSS classes within the Flexcard Designer to apply to Flexcard elements or supported fields inside elements. Create custom CSS classes when the design interfaces in the Style panel do not meet your design needs."). - **Group Order**: Update the order in which each group is sorted. 8. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 9. (Optional) To style your element, click **Style** to open the Style panel, and see [Flexcards Datatable Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_datatable_style_properties.htm&release=264.0.0&type=5 "For the managed package runtime, configure style properties specific to the Datatable element from the Style panel of the Flexcard Designer."). # Add a Date Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Date Input element on a Flexcard to enable users to select a formatted date from a calendar widget. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Date** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) In **Placeholder**, enter temporary text that displays inside the input field and which suggest to the user what content to enter. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. (Optional) Click into **Default Value** to select a default input value from a merge field. Or, enter a value as plain text. Enter a default value in the format specified in **Date Format**. 6. (Optional) Update the **Date Format**. Default is MM-dd-yyyy, which displays as `12-03-2021`. See [date-fns format](https://date-fns.org/v2.0.0-alpha.31/docs/format) for format options. 7. (Optional) To limit the user to a specific date range, set the **Minimum Date** and **Maximum Date**. Select a date in the past or future in the format specified in **Date Format**. For example, for December 1, 1990, if the format is `MM-dd-yyyy`, enter 12-01-1990, and if the format is `dd-MM-yyyy`, enter 01-12-1990. Leave **Maximum Date** empty for the current date. 8. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [DatePicker Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datepicker_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains a DatePicker LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 9. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 10. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 11. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). # Add a Date/Time Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Date/Time Input element on a Flexcard to enable users to select a formatted date from a calendar widget and a formatted time from a list of time intervals. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Date/Time** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. (Optional) In **Date Placeholder**, to suggest to the user the type of content to enter for the date, enter temporary text that displays inside the input field. 6. (Optional) In **Time Placeholder**, to suggest to the user the type of content to enter for the time, enter temporary text that displays inside the input field. 7. (Optional) Click into **Default Value** to select a default input value from a merge field. Or, enter a value as plain text. Enter a default value in the format specified in **Date Format** and **Time Format**. For example, if the formats are `MM-dd-yyyy` and `hh:mm a`, enter 12-03-2020 03:30 pm. 8. (Optional) Update the **Date Format**. Default is MM-dd-yyyy, which displays as `12-03-2021`. See [date-fns format](https://date-fns.org/v2.0.0-alpha.31/docs/format) for format options. 9. (Optional) Update the **Time Format**. Default is hh:mm a, which displays as `3:30 am` or `3:30 pm`. See [date-fns format](https://date-fns.org/v2.0.0-alpha.31/docs/format) for format options. 10. (Optional) To limit the user to a specific date range, set the **Minimum Date** and **Maximum Date**. Select a date in the past or future in the format specified in **Date Format**. For example, for December 1, 1990, if the format is `MM-dd-yyyy`, enter 12-01-1990, and if the format is `dd-MM-yyyy`, enter 01-12-1990. Leave **Maximum Date** empty for the current date. 11. (Optional) In **Time Interval**, update the time intervals from the default 30 to another increment. For example, enter 15 to display a list of 15-minute increments, such as 12:00, 12:15, 12:30, 12:45. 12. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [DateTimePicker Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datetimepicker_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains a DateTimePicker LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 13. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 14. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 15. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). # Add a Display Field to a Flexcard Display data fields returned from a data source on a Flexcard. For example, display Policy information for an Account. 1. From the App Launcher, find and select **Flexcards**. 2. Expand a Flexcard and select a version. 3. If needed, deactivate the Flexcard for editing the Flexcard. 4. Drag the **Field** element from the element panel to the canvas. 5. Enter information as needed: - The Placeholder, Label, and Output fields support concatenated strings, including a combination of plain text and supported merge fields with custom labels, such as `{Label.AccountName} > {Name}` or `{Name} + {Id}`. - For date fields, ensure that the date value matches the user locale format. For example, your date value comes from the custom data source `[{"DOB" : "28-03-2015"}`, and your locale is en\_US, which has a format of M/D/YYYY. Because months only go up to 12, the number 28 doesn’t work which results in an incorrect date. Instead, unless you localize your application, update the format to match the date to `DD/MM/YYYY`, or select a text field type. - If you don't select the user locale for formatting, the Flexcard author’s user locale determines the format for the date, time, and currency. # Add a Document Based on a Template Access the Quip Template Library in Salesforce to quickly create and embed a new Quip document that’s automatically linked to a Salesforce record. If the template contains mail merge syntax, it’s populated with Salesforce data automatically. ### Required Editions
Available in: Lightning Experience
You can add a document to the Quip Document component only if your admin configured the component to let you do so. Ensure that you or your admin created the template that you want to use. You can only create templates in Quip. Ensure that you completed the connection from Quip to Salesforce in the Salesforce tab of the Quip Account Settings window. 1. In the Quip Document component, click **Open Template Library**. ![Before you embed a document, the Quip Document component includes three buttons: Choose Document, New Document, and Open Template Library.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_document_component.png) Alternatively, click **Open Template Library** from the dropdown. 2. In the Template Library, select the template to use, and then click **Use Template**. ![Quip Template Library with several templates showing.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_document_component_template_library.png) You can search by name across all galleries, or you can narrow your search to a specific gallery. The New Document from Template window appears. 3. Select the Quip folder where you want to save the document. ![The window includes a Name and Folder field.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_document_component_template_library_new_window.png) To preserve any mail merge syntax, the document name isn’t editable. 4. Click **Save in**. Your new document appears in the Quip canvas. If the template contains mail merge syntax, your new document is populated with Salesforce data right away. Link sharing also takes effect immediately. In the background, Salesforce works on linking the document to the record and setting up any synced sharing that you configured. When the link to the record is complete, the document is listed in the Associated Documents component. 5. Edit the document as needed, and then close the Quip canvas. #### See Also - [Considerations for Working with Embedded Documents](https://help.salesforce.com/s/articleView?id=xcloud.quip_sf_considerations_for_working_with_embedded_documents.htm&release=264.0.0&type=5 "You can generally work with an embedded document like any other document, and there are a few things to keep in mind.") - [Mail Merge Examples](https://help.salesforce.com/s/articleView?id=xcloud.admin_files_quip_templates.htm&release=264.0.0&type=5 "Use templates to prepopulate documents with content that’s specific to the Salesforce record they’re embedded in. For example, you want to use a document to store an Account Plan for each account. When a user creates an Account Plan, you want it to include the same boilerplate content for every account. But you also want to include specific field values from the account, such as the account name and description.") # Add a Document to a Folder Relocate documents and spreadsheets to make them easier to find or to change who they’re shared with quickly. When you move or add a document to another folder, the document members change to reflect the folder members. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. Open the document or spreadsheet. 2. In the Document or Spreadsheet menu, select **Move To Folder**. 3. Choose whether you want to move the document from its current folder or add it to another folder. # Add a Document to Favorites Mark an important document as a Favorite so that you can find it easily later. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. Open the document to add. 2. Click the star or **Add to Favorites** menu at the top of the document. 3. To add the document to a collection, select the collection. 4. Click out of the **Add to Favorites** menu. The document appears in the Favorites list in the Home tab of the sidebar. # Add a Field to a Flexcard (Managed Package) For the managed package runtime, display data fields returned from a data source on a Flexcard. For example, display Policy information for an Account. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. To add a data field, from the Build panel, perform one of these tasks: - Click **Fields** to view the list of available data fields, and drag a data field into a state on the canvas. - Drag the **Field** element from the **Elements** list into a state on the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. (Optional) Enter a visible label in the **Label** field. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning with Summer '21, **Label** supports concatenated strings. Combine plain text and supported merge fields. For example, {Label.AccountName}>{Name}. 5. (Optional) Add placeholder text in the **Placeholder** field. 6. (Optional) To set a data type, such as text and currency, select one from the **Field Type** dropdown. The default is Text. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note To configure additional properties for your selected **Field Type**, see [Flexcards Field Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_field_properties.htm&release=264.0.0&type=5 "For the managed package runtime, field element properties are configurable in the Property Panel when you select a Field element in the Flexcard Designer. With the Field element, display data fields returned from a provided data source."). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If you select Date as a **Field Type**, and the field element is a string that represents a date, make sure that the date value matches the user locale format. For example, if your date value comes from a Custom data source such as is \[{"DOB" : "28-03-2015"}, and your locale is en\_US, which has an M/D/YYYY format, because months only go up to 12, the number 28 won’t read properly. The final date is displayed incorrectly. Instead, if your application doesn’t require localization, update the format to match the string output, such as DD/MM/YYYY. Or select Text as a **Field Type**. 7. If you dragged the Field element from the Build panel, in the **Output** field, click into the field and select from the available data fields returned from the data source. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning with Summer '21, **Output** supports concatenated strings, such as {Name} + {Id}. 8. (Optional) When Date is selected for Field Type, you can enable **Use Absolute Date** to prevent converting the date based on the timezone when **Format** is updated. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If the logged-in user's timezone isn’t the same as the timezone where the record was created, when **Use Absolute Date** is disabled, the date may display one day ahead or behind. For example, 12/16/2020 or 12/14/2020 instead of 12/15/2020. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Don’t enable if Date is the **Field Type** and your field element returns a date as a string, such as data from a Custom data source that looks like \[{"DOB" : "28-03-2015"}\], and doesn’t match the defined format. This throws an error. See the notice in Step 6. 9. (Optional) Beginning Winter '22, to provide information about the field, enter descriptive text in **Help Text**. 10. (Optional) If your Flexcard is used on an application accessible across different locales, enable **Use User Locale For Formatting** to use the logged-in user's locale to determine the format of your date, time, and currency. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note By default, the Flexcard Author's user locale determines the format. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Don’t enable if Date is the **Field Type** and your field element returns a date as a string, such as data from a Custom data source that looks like \[{"DOB" : "28-03-2015"}\], and doesn’t match the defined format. This throws an error. See the notice in Step 6. 11. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 12. (Optional) To style your element, click **Style** to open the Style panel, and see [Flexcards Field Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_field_style_properties.htm&release=264.0.0&type=5 "For the managed package runtime, configure style properties specific to the Field element from the Style panel of the Flexcard Designer."). What’s next: Preview your Flexcard. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). - **[Flexcards Field Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_field_properties.htm&release=264.0.0&type=5)** For the managed package runtime, field element properties are configurable in the Property Panel when you select a Field element in the Flexcard Designer. With the Field element, display data fields returned from a provided data source. # Add a File or Image to Omniscript (Managed Package) For the managed package runtime, add and configure a File or Image element to enable the upload of files and images. Files and images upload to Content Documents by default. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note The Image and File elements don't work in preview because they use SFDC components. When Image and File elements are required in a Step, the Preview cannot advance past the Step. Vlocity recommends marking File and Image elements as Required only before activating the Omniscript. Omniscripts and Flexcards support all image file types by default. If set, the lightning-file-upload `accept` attribute filters file types in the user's file browser. If set, the **Don't allow HTML uploads as attachments or document records** security setting disallows .svg image files. See [Lightning Web Component File Upload](https://developer.salesforce.com/docs/component-library/bundle/lightning-file-upload/documentation). 1. From Omniscript, under Available Components, drag the File or Image element from the **Inputs** section into a **Step** in the Structure panel. 2. To attach the Content Document to a parent record, enter a content parent object ID or comma-separated list of object IDs. When left blank, the Content Document does not attach to a parent record. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note In the LWC Omniscript Designer files and images upload to Content Documents by default. By default, the LWC File and LWC Image elements accept a file size of up to 2GB. 3. (Optional) When configuring the Image element, allow uploads of multiple images by selecting **Allow Multiple Images**. 4. (Optional) Use one of the JSON node names from Image and File to apply a condition to another element: ``` "yourFileElementName": [ { "data": "0693g000000T1ZFAA0", "filename": "isolated-on-png.png", "vId": "0683g000000T11iAAC", "size": 8234 } ] ``` What’s next: When a file is attached to a File element in Omniscript, it adds this JSON to the Data JSON of the form. To map the file's JSON to a Salesforce record, see [Mapping File Attachments From an Omniscript to Salesforce (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_mapping_file_attachments_from_an_omniscript_to_salesforce.htm&release=264.0.0&type=5 "For the managed package runtime, after adding a file or image to an Omniscript, you can map the file from the Omniscript to a parent record in Salesforce. Follow the instructions below to accomplish this:"). # Add a Flexcard LWC to OmniOut (Managed Package) For the managed package runtime, download and configure a Flexcard to use it off-platform in your OmniOut project. Download your Flexcard LWC from the Flexcard Designer, add the component folder to the OmniOut project, and configure files for HTML and CSS. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If your Flexcard has a datasource, you must initialize a datasource when building a connection in your app as outlined in Step 11 in [the workflow to run Flexcards off-platform](https://help.salesforce.com/s/articleView?id=xcloud.os_omniout.htm&release=264.0.0&type=5 "For the managed package runtime, run LWC Omniscripts and Flexcards off-platform on third-party websites with OmniOut for Omniscripts and OmniOut for Flexcards. Display Omniscripts and Flexcards and connect to Salesforce from a content management system's (CMS) external website. Run an Omniscript or Flexcard on your external site by adding the component to the OmniOut project, integrating OmniOut into your application, and deploying your application to your CMS."). The step directs you to [Create a Connection Object in OmniOut for Flexcards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_connection_object_in_omniout_for_flexcards.htm&release=264.0.0&type=5 "For the managed package runtime, send and receive data to and from Salesforce by creating a connection object. A connection object must be present for every type of connection, including when a proxy is present. The connection object exposes the instance URL, namespace, and request function.") to connect your app using the `initializeDatasourceSdk` and `setConnection` methods.

Required Versions

Available beginning Summer '21.

Before You Begin - Install OmniOut's required dependencies. See [Install OmniOut Dependencies (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_install_omniout_dependencies.htm&release=264.0.0&type=5 "For the managed package runtime, configure and install the OmniOut dependencies using a command-line-tool. Install the tools necessary to build your OmniOut app and view it locally.") 1. Open a Flexcard from Omnistudio Flexcards home tab in your Salesforce org, and click **Activate** from the submenu. 2. Click the down arrow next to **Activate**, and click **Download Off-Platform LWC**. 3. Click **Done**. 4. Copy the component in the **c** folder of your downloaded file into the **./src/modules** folder of your OmniOut project, or subdirectory such as **./src/modules/flexcards**. 5. In Visual Studio Code, open the **./src/index.html** file add the Flexcard component tag. For example, if the name of your component folder is flexaccountproducts and is placed inside the **./src/modules/flexcards** directory, your component tag can look like ``. 6. To import and define your component, open the **./src/index.js** file and take these steps: 1. Import your component from your component's file path. ``` import FlexCardProducts from 'flexcards/accountproducts'; ``` 2. Configure the Flexcard for HTML by defining a custom element and connecting it to your component. ``` customElements.define('flexcards-accountproducts', buildCustomElementConstructor(FlexCardProducts)); ``` 7. (Optional) In the Flexcard component tag, remove the `run-mode="localScriptDef"` attribute to check if the Flexcard is active in Salesforce. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If `run-mode` isn’t present, a connection is made to retrieve the custom labels. 8. (Optional) In **Index.html**, uncomment the Newport style sheets to apply Newport styling. ``` ``` 9. In **Index.html**, include the SLDS styles even when using Newport styles, if the Image element exists in your Flexcard.

Element

Style Sheets

Note

Image

<!-- SLDS styles -->
<link rel="stylesheet" type="text/css" href="/slds/assets/styles/salesforce-lightning-design-system.css">
<link rel="stylesheet" type="text/css" href="/vlocityresources/slds/styles/OmniLwcUtilsCss.css">

OmniOut supports image uploads up to 30 MB.

10. Save your file. 11. To restart the server and view your Flexcard locally, run the command `npm run watch` in your terminal console. What’s next: [Create a Connected App for OmniOut (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_connected_app_for_omniout.htm&release=264.0.0&type=5 "For the managed package runtime, enable the external connection to interact with Salesforce by configuring a Connected App in Salesforce. Create a Connected App to make external calls from OmniOut. Connected Apps provide OmniOut with an access token that enables proxies and login authentication to work."). # Add a Flexcard to a Lightning Page (Managed Package) For the managed package runtime, after creating and activating your Flexcard, publish the generated component to a Lightning page from the Lightning App Builder. Before you begin, activate your Flexcard. See ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). [Activate a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, activate a Flexcard to generate an LWC and publish it to a Lightning page or Experience Builder site. After you activate a Flexcard, you can’t edit it or add elements to it."). 1. In your org, go to Setup > Lightning App Builder and click **Edit** for an existing Lightning app to open the Lightning App Builder. Or, on a Lightning record page, from the Setup menu, click **Edit Page**. 2. From the Components pane, find your generated Flexcard Lightning web component from the list of **Custom** components, and drag it to the canvas area. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If you don’t see your component listed, confirm that the appropriate Target is checked in Publish Options. 3. (Optional) Beginning Winter '22, if your Flexcard defines an attribute that creates a public property, set the public property value from the properties pane in the Lightning App Builder. For example, if the attribute defined in the Flexcard is `AccountRecordLimit`, and the **Label** is Record Limit, look for **Record Limit** in the Lightning App Builder properties pane. See [Create a Public Property for a Flexcard LWC in the Flexcard Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_public_property_for_a_flexcard_lwc_in_the_flexcard_designer.htm&release=264.0.0&type=5 "For the managed package runtime, in the Flexcard Designer, define an attribute that creates a public property whose value is set in the Lighting App Builder and Experience Builder. Call the attribute within the Flexcard as a session variable ({Session.AttName}) where merge fields are supported, such as in a Text element and a data source parameter."). 4. (Optional) To modify the component's visibility by adding filters, set **Component Visibility**. See [Dynamic Lightning Pages](https://help.salesforce.com/articleView?id=lightning_page_components_visibility.htm&type=5&language=en_US). 5. To configure activation options, click **Activation**. See [Activate Your Lightning App Page](https://help.salesforce.com/articleView?id=lightning_page_getting_into_salesforce1.htm&type=5&language=en_US). # Add a Flexcard to an Experience Cloud Page After creating and activating your Flexcard, publish the generated component to an Experience Cloud page from the Experience Builder. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Beginning Summer '22, add a standard Flexcard component to an Experience Cloud page. See [Add a Flexcard to an Experience Builder Page](https://help.salesforce.com/s/articleView?id=xcloud.os_activateconfigureand_publish_flexcards_24744.htm&release=264.0.0&type=5 "Add a Flexcard that you created or an existing Flexcard to the pages of Experience Builder sites."). Before You Begin - Activate your Flexcard. See [Activate a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_a_flexcard_24808.htm&release=264.0.0&type=5 "Activate a Flexcard to generate an LWC and publish it to a Lightning page or Experience Builder site. Activating a Flexcard disables editing capabilities. You can’t add or edit elements on an active Flexcard."). 1. To access the Experience Builder, see [Navigate Experience Builder](https://help.salesforce.com/s/articleView?id=experience.community_designer_ui.htm&type=5&language=en_US). 2. Click the lightning bolt icon to open the Components pane. 3. From the list of **Custom Components** in the Components pane, find the name of your generated Flexcard LWC and drag it to the canvas area. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_important.png) Important If you don't see your Flexcard, confirm that it is active and available to Experience Builder sites by selecting the appropriate **Target**. See [Define Metadata Values from the Flexcard Designer](https://help.salesforce.com/s/articleView?id=xcloud.os_define_metadata_values_from_the_flexcard_designer_24983.htm&release=264.0.0&type=5 "Define the metadata values for the generated Flexcard LWC from the Flexcard Designer. When your Flexcard is active, use the Publish Options feature to configure API Version, Targets, Description, and other metadata values from a GUI or code editor."). 4. To view record data on a Flexcard that uses the `{recordId}` context variable to pass the ContextId to a data source, enter {!recordId} in **recordId**. See [Access the ContextId of a Flexcard on an Experience Site](https://help.salesforce.com/s/articleView?id=xcloud.os_access_the_contextid_of_a_flexcard_on_an_experience_site_42057.htm&release=264.0.0&type=5 "Most Flexcards use a ContextId, represented by the {recordId} context variable in an Input Map, to retrieve data from an Apex Remote, Omnistudio Data Mapper, or Integration Procedure data source. For a Flexcard to use the {recordId} context variable on an Experience site, you must add and configure a RecordId property. Add this property to your Flexcard's configuration, then configure the property on the Experience page."). 5. (Optional) Beginning Winter '22, if your Flexcard defines an attribute that creates a public property, set the public property value from the properties pane in the Experience Builder. For example, if the attribute defined in the Flexcard is `AccountRecordLimit`, and the **Label** is Record Limit, look for **Record Limit** in the Experience Builder properties pane. See [Create a Public Property for a Flexcard LWC in the Flexcard Designer](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_public_property_for_a_flexcard_lwc_in_the_flexcard_designer_41483.htm&release=264.0.0&type=5 "In the Flexcard Designer, define an attribute that creates a public property whose value is set in the Lightning App Builder and Experience Builder. Call the attribute within the Flexcard as a session variable ({Session.AttName}) where merge fields are supported, such as in a Text element and a data source parameter."). Beginning Summer '22, if you're adding a standard Flexcard to an Aura-based Experience Cloud page and need to define the value of a public property, use **Exposed Attributes**. See [Add a Flexcard to an Experience Builder Page](https://help.salesforce.com/s/articleView?id=xcloud.os_activateconfigureand_publish_flexcards_24744.htm&release=264.0.0&type=5 "Add a Flexcard that you created or an existing Flexcard to the pages of Experience Builder sites."). 6. To preview, click **Preview**. See [Preview Your Experience Builder Site](https://help.salesforce.com/articleView?id=community_designer_preview.htm&type=5&language=en_US). # Add a Flexcard to an Experience Page (Managed Package) For the managed package runtime, after creating and activating your Flexcard, publish the generated component to an Experience page from the Experience Builder. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before You Begin - Activate your Flexcard. See [Activate a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, activate a Flexcard to generate an LWC and publish it to a Lightning page or Experience Builder site. After you activate a Flexcard, you can’t edit it or add elements to it."). 1. To access the Experience Builder, see [Navigate Experience Builder](https://help.salesforce.com/s/articleView?id=experience.community_designer_ui.htm&type=5&language=en_US). 2. Click the lightning bolt icon to open the Components pane. 3. From the list of **Custom Components** in the Components pane, find the name of your generated Flexcard LWC and drag it to the canvas area. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If you don't see your Flexcard, confirm that it is active and available to Experience Builder sites by selecting the appropriate **Target**. 4. To view record data on a Flexcard that uses the `{recordId}` context variable to pass the ContextId to a data source, enter {!recordId} in **recordId**. See [Access the ContextId of a Flexcard on an Experience Site (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_access_the_contextid_of_a_flexcard_on_an_experience_site.htm&release=264.0.0&type=5 "For the managed package runtime, on an Experience site, to view record data on a Flexcard that uses the {recordId} context variable in an Input Map to pass a ContextId to an Apex Remote, Omnistudio Data Mapper, or Integration Procedure data source, you must add and configure a recordId property. Add the recordId property in your Flexcard's configuration file, then configure the property on the Experience page."). 5. (Optional) Beginning Winter '22, if your Flexcard defines an attribute that creates a public property, set the public property value from the properties pane in the Experience Builder. For example, if the attribute defined in the Flexcard is `AccountRecordLimit`, and the **Label** is Record Limit, look for **Record Limit** in the Experience Builder properties pane. See [Create a Public Property for a Flexcard LWC in the Flexcard Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_public_property_for_a_flexcard_lwc_in_the_flexcard_designer.htm&release=264.0.0&type=5 "For the managed package runtime, in the Flexcard Designer, define an attribute that creates a public property whose value is set in the Lighting App Builder and Experience Builder. Call the attribute within the Flexcard as a session variable ({Session.AttName}) where merge fields are supported, such as in a Text element and a data source parameter."). 6. To preview, click **Preview**. See [Preview Your Experience Builder Site](https://help.salesforce.com/articleView?id=community_designer_preview.htm&type=5&language=en_US). # Add a Member List Enroll multiple members in a rebate program. Add an Accounts list view to a rebate program through the Members related list. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
User Permissions Needed
To add a member list to a program Rebate and Accrual Management Advanced Admin permission set
1. On a Rebate Program record, click, and select **Add Member List**. 2. Provide these details. - Account List View: Search and select the required account list view to add all accounts in the list view as members. - Member Status: Status of the enrolled members. Valid values are Active and Inactive. Accruals are calculated only for active members. 3. Click **Save**. You receive an in-app notification after all the accounts in the list view are added as members. # Add a Member List to a Rebate Program Enroll multiple members in a rebate program. Add an Accounts list view to a rebate program through the Members related list. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
User Permissions Needed
To add a member list to a program Rebate Management Admin permission set
1. On a Rebate Program record, click ![the corresponding dropdown](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/channel_revenue_mgmt/images/user_rebates_add_member_list_to_program.png), and select **Add Member List**. 2. Provide these details. 1. Account List View: Search and select the required account list view to add all accounts in the list view as members. 2. Member Status: Status of the enrolled members. Valid values are `Active` and `Inactive`. Payouts are calculated only for active members. 3. Click **Save**. You receive an in-app notification after all the accounts in the list view are added as members. # Add a Menu to a Flexcard (Managed Package) For the managed package runtime, create a menu from a list of actions on a Flexcard. Style the menu button, and each action in the menu's dropdown. Add any action type available in the Flexcard Designer. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). See [Flexcards Actions Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_actions_reference.htm&release=264.0.0&type=5 "For the managed package runtime, select from multiple ways to execute an action from a Flexcard. Create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). 1. From the Flexcard Designer, drag a Menu element into a state on the canvas. 2. (Optional) From the Properties panel, update the element name in the **Element Name** field. 3. (Optional) In the **Label** field, enter the visible label of the menu button. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning Summer '21, **Label** supports concatenated strings. Combine plain text and supported merge fields. For example, Update {AccountName}. 4. (Optional) To change the default menu button icon, from the **Icon** field perform one of the following tasks: - Enter the name of the icon, such as utility:arrowdown. See [Salesforce Lightning Design System](https://www.lightningdesignsystem.com/icons/). - Click the search icon in the input field, and perform one of the following tasks: - Click to select an icon from the list available, and click **Save**. - Search for an icon in the search field, click an icon to select it, and click **Save**. 5. (Optional) To disable scrolling in the dropdown when there are more than 5 menu items, uncheck **Enable Overflow**. 6. (Optional) To change the position of the dropdown menu, select a new position from the **Dropdown Position** dropdown. The default is left. 7. (Optional) To change the size of the dropdown menu, select a new size from the **Dropdown Size** dropdown. 8. (Optional) To select a style variant, select a new style from the **Variant** dropdown. 9. (Optional) To change the position of the icon in the menu button relative to the label, select a new position from the **Icon Position** dropdown. 10. (Optional) To adjust the size of the icon in the menu button, select a new size from the **Icon Size** dropdown. 11. To add actions, for each action, click **\+ Add New Action**. See [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle.") to configure the action properties. - Beginning Winter '22, to add conditions that must be met for the action to display in the menu, click **\+ Add New** next to **Conditions**. See [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). - To update the position of the action icon relative to the label, select a new position from the **Icon Position** dropdown. - To enable menu items to reflect status level notifications like Error, Success, and Warning, select the class from the **Status** dropdown. 12. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 13. (Optional) To style your menu element, click **Style** to open the Style panel, and see [Flexcards Menu Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_menu_style_properties.htm&release=264.0.0&type=5 "For the managed package runtime, configure style properties specific to the Menu element from the Style panel of the Flexcard Designer."). 14. Beginning Summer '22, to use your mouse and keyboard to open or close the menu and move through the menu items, see the following options: - When the menu button is in focus, to open or close the menu, click with your mouse, press the enter/return key. You can also click outside the menu element to close the menu. - When the menu button or a menu item is in focus, to close the menu, press the tab or esc key. If you press the tab key, the focus moves to the next item on the page. - To go through the menu items, use the up and down arrow keys. What’s next: Preview your Flexcard. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). - **[Flexcards Menu Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_menu_properties.htm&release=264.0.0&type=5)** For the managed package runtime, menu element properties are configurable in the Property Panel when you select a Menu element in the Flexcard Designer. With the Menu element, create a menu from a list of actions. # Add a Multi-Select Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Multi-Select Input element on a Flexcard to enable users to select from multiple options. You can display options as images, checkboxes, buttons, or a dropdown list. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Multi-Select** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. Select the **Display Mode** for your radio items. Available modes are:

Mode

Description

Vertical

Displays options as checkboxes stacked on top of each other.

Horizontal

Displays options as checkboxes next to each other.

Button Group

Displays options as inline buttons.

Image

Displays options as images.

Combobox

Displays options as a dropdown list.

6. If **Display Mode** is **Image**, configure the following properties: - **Control Width**: The width of the image in pixels. Default is 100. - **Control Height**: The height of the image in pixels. Default is 100. - **Image Count In Row**: How many images to display per row. Default is 3. - **Enable Caption**: To display the label as a caption underneath the image, enter true. To hide caption, enter false. 7. If **Display Mode** is **Combobox**, configure the following property: - **Placeholder**: To suggest to the user the type of content to enter, enter temporary text that displays inside the input field. 8. To enter the options from which the user can select, click **\+ Add New** in the **Options** section. Configure the following properties: - **Label**: Enter the visible label for the option. Click into the field to select from a list of merge fields available from your data source. Or enter plain text. - **Value**: Enter the value of the option. Click into the field to select from a list of merge fields available from your data source. Or enter plain text. - **Use As a Default Value**: Set as the default option. A default option isn’t available when **Display Mode** is **Combobox**. - **Image**: If the **Display Mode** is **Image**, select an image from the **Select an Image from Content Document** dropdown, or **Upload Image**. 9. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [RadioGroup Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_radiogroup_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains a RadioGroup LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 10. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 11. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 12. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). # Add a New Object to the Customer Story (Managed Package) For the managed package runtime, the Customer Story includes default customer activities depending on your org's industry. You can also add new story objects to the timeline. Use the Story List Page Limit custom setting to set the maximum number of records returned per story object. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). If person accounts are enabled, and you want to add a story object to a person account, add a new story object as if Contact were the Parent Object. For Parent Object Name, enter Account. For Parent Object Field, enter PersonContactId. 1. In your org, go to Setup > Custom Code > Custom Settings. 2. Click **Story Object Configuration**. 3. Click **Manage**. 4. Click **New**. 5. Enter values for these fields: - **Name**: Enter the visible name of the new field, such as Opportunity\_Event. - **Detail Fields**: Enter an API name for the field that shows a summary of the record. For example, Description. - **Has Owner**: If this object has an owner, check the checkbox. - **Parent Object Name**: Enter the name of the parent object from which to pull data, such as Opportunity. - **Story Object Name**: Enter the name of the parent's child object from which to pull data, such as Event. - **Story Object Lookup Field**: Enter the field name of the lookup field of the object set in **Story Object Name**, such as WhatId. - **Story Object Sort Field**: Enter the name of the field to sort on the object entered in **Story Object Name**, such as StartDateTime. - **Summary Fields**: Enter the fields to display in the Customer Story. Enter data as a comma-separated list with no spaces, such as Title:Subject,Title\_Highlight:Type,Subtitle:Location. For a complete list of field descriptions and sample values, see[Customer Story Configuration (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_customer_story_configuration.htm&release=264.0.0&type=5 "For the managed package runtime, the following tables describe the settings you can configure for customer story objects."). 6. Click **Save**. What’s next: Add the new object to the story-slds card layout. See [Add a New Object to the Story-SLDS Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_new_object_to_the_story_slds_component.htm&release=264.0.0&type=5 "For the managed package runtime, clone and modify the story-slds card layout to add a new story object to the Customer Story timeline. The Vlocity Customer Story displays a timeline of all interactions with a customer in a single, chronological feed. Update the maximum number of records returned per story object with the pageSize parameter."). # Add a New Object to the Story-SLDS Component (Managed Package) For the managed package runtime, clone and modify the story-slds card layout to add a new story object to the Customer Story timeline. The Vlocity Customer Story displays a timeline of all interactions with a customer in a single, chronological feed. Update the maximum number of records returned per story object with the **pageSize** parameter. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From the Vlocity Cards home tab, click story-slds, select the checkbox next to **story-slds (Version 3)** card layout., and click **Clone**. 2. In the Cards pane, click the clone icon on any card. ![Vlocity Cards clone card icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_cards_clone_icon.png) 3. Enter a **Name** and update the **Title**. 4. Click **Clone**. The new card appears at the bottom of the Cards pane. 5. Update the **\['objAPIName'\]** filter value to the API name of your new object. 6. In the States pane, for each state, update the **Name**. 7. In the **Fields** section, update fields to display in your story as needed. # Add a Number Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Number Input element on a Flexcard to enable users to enter a numeric value. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The user can enter the number or, in supported browsers, use stepper arrows to increase or decrease the value. When the field is empty, increments starts from 0. To set `step` increments, see [Input Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_input_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains an Input LWC ReadMe for each Vlocity release.").

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Number** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) In **Placeholder**, enter temporary text that displays inside the input field and which suggest to the user what content to enter. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. (Optional) Click into **Default Value** to select a default input value from a merge field. Or, enter a value as plain text. 6. (Optional) In **Mask**, to help your user enter data correctly, provide an input mask that formats the data a specific way. For Mask examples, see [JavaScript Number Formatter](https://mottie.github.io/javascript-number-formatter/). To define a minimum and maximum Mask value, add and set the **min** and **max** attributes. Don’t use a merge field to set those values. 7. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [Input Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_input_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains an Input LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. To ensure that a Mask with separators such as commas or a decimal point is interpreted correctly, set the maskWithSeparator attribute to true. 8. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 9. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 10. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - **[Flexcards Number Input Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_number_input_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Number Input element properties are configurable in the Properties panel when you select a Number element in the Flexcard Designer. Enable users to enter a numeric value. # Add a PDF Action to an Omniscript (Managed Package) For the managed package runtime, populate a PDF with Omniscript data using the PDF Action. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note The PDF Action is not supported in IE 11 browsers. Edit block doesn't support this action. Beginning Spring ’22, enable older PDF viewers to display text fields in a PDF element using the appearance object property. By default, the `useAppearanceObject` is undefined. To enable, add "useAppearanceObject": true in the JSON editor of the PDF Action Properties pane. PDFs larger than 250KB generate slowly. PDFs larger than 1MB can take several minutes to generate and sometimes time out. Before You Begin 1. From the Omniscript Designer, drag the **PDF Action** to the Omniscript. 2. From the Properties pane, in **Document**, select your PDF document. 3. (Optional) Attach the PDF to a parent record by taking these steps: 1. For **Attachment Name**, name the attachment. 2. For **Attachment Parent Id**, provide the id of the attachment's parent record id. 4. In the Send Transformations section, from the **PreTransform Data Mapper Interface** picklist, select the Omnistudio Data Mapper that you created in [Create a Data Mapper Interface to Map an Omniscript to a PDF](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_dataraptor_interface_to_map_omniscript_data_to_a_pdf.htm&release=264.0.0&type=5 "For the managed package runtime, after you create the Omniscript and upload your PDF, you must create a Data Mapper to map the information from the Omniscript to the PDF."). 5. Select **Read Only** to make the filled PDFs read-only. 6. If necessary, change the default date and time formats. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Use [moment.js](http://www.momentjs.com) formatting. If left blank, the defaults are Time Format: h:mm a, Date Format: MM/DD/YYYY, Date Time Format: MM/DD/YYYY h:mm a. 7. Exclusive to the Classic Designer, if you bypass the redirect page, the filled PDF file will be open in a separate tab. Specify a display height and width for the dimensions of the tab. If you do not see the fields being filled until you click into them, you may need to disable the "Highlight Existing Fields" option in the Adobe Acrobat preferences. 8. Launch the form in Preview mode, and fill out each field that should map to the PDF. 9. Check the PDF to confirm the mappings are correct. # Add a Privacy Policy for Binary Uploads For Android and iOS apps using the Binary Upload distribution method, update your app’s information with a link to the privacy policy. Add a Privacy Policy to your Google Play Store Listing 1. Log into your Google Play Console (https://play.google.com/apps/publish). 2. Select your branded Experience Cloud app. 3. Navigate to the Store Presence and select **Store listing**. 4. Under Privacy Policy, enter the URL where your privacy policy is hosted. 5. Save your changes. ## Add a Privacy Policy to your App Store Listing 1. Log into your Apple Developer Account (https://developer.apple.com/account/). 2. Navigate to App Store Connect, and select **My Apps**. 3. Select your branded Experience Cloud app, and choose **App Information**. 4. Under Privacy Policy, enter the URL where your privacy policy is hosted. 5. Save your changes. # Add a Product Add a product to your online store. In addition to bulk loading products by using a CSV file, you can add products one at a time during store setup. ### Required Editions
Available in: Lightning Experience
Available in: Starter and Pro Suite Editions.
User Permissions Needed
To set up or edit an online store: Commerce Admin or Commerce Starter App
1. From the Commerce app, select the **Store** tab. 2. From the Setup Assistant, select **Add your first product.** 3. Select **New.** 4. Enter the product details. 1. Enter a product name. 2. (Optional) Enter a product code and value for the SKU field. 3. (Optional) Enter a product description. A detailed product description improves the shopper experience and makes it easier for customers to understand and purchase a product. 5. Complete the pricing fields. 1. (Optional) Enter a selling price. Your product needs a price to sell in Commerce, but it's not required to add a simple product. 2. (Optional) Enter a strikethrough price. To highlight a discount, you can show a strikethrough price next to the selling price. The strikethrough price is the product’s original price or manufacturer’s suggested retail price. 6. (Optional) Add images of your product. To add images or attachments to the product, complete the media fields. You can select images and attachments from a CMS workspace or add an image. The list image represents the product in places like search results or in the cart. The list image doesn’t appear in the live preview. The default image appears first on the product detail page. 7. Select a category for your product. 8. Click **Save.** # Add a Program Partner You can add program partners to the loyalty programs. The program partners can only be an account in the organization. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
1. In the Loyalty Programs tab, select your loyalty program. 2. On the Members and Partners tab, under Loyalty Program Partners, click **New**. 3. Enter a name for the program partner. 4. Select an account for the program partner. 5. Select the type of program partner. - If the partner rewards member with points for doing business with them, select **Accrual**. - If the members redeem their points with the partner, select **Redemption**. - If the partner is accrual and redemption, select **Both**. 6. Select the program partnership start date and end date. 7. Select the type of industry. Picklist values for Industry aren’t provided by default. Based on the requirements of the organization, admins must add picklist values for the field in Object Manager. 8. Select **Active**. 9. Select **Billing Type** of the partner. For prepaid billing, the partner buys point packs from the loyalty program. For postpaid billing, the partner pays the bill amount after offering their products or services to members. This is available only for Expanded Partner Management. 10. Select the category for the program partnership. 11. Enter the accrual cost per unit and the redemption cost per unit. - The Accrual Cost per Unit is the cost per point associated with the transactions of the accrual partner. - The Redemption Cost per Unit is the cost per point associated with the transactions of the redemption partner. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The Accrual Cost per Unit and the Redemption Cost per Unit fields are not available by default. Navigate to the **Object Manager** > **Loyalty Program Partner** > **Page Layouts** and add the fields to the custom UI screen. 12. In the Partner Linkage Details section, enter the following information: 1. To allow linking of the partner with other loyalty program memberships, select **Allow Linking**. 2. Select a date and time from which you can link the partner with other loyalty program memberships. 3. Select a date and time after which you can't link the partner with other loyalty program memberships. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note Make sure the linking window falls within the program partnership start and end dates. 13. Save your changes. #### See Also - [_Salesforce Help_: Billing Type Options for Partners](https://help.salesforce.com/s/articleView?id=xcloud.billing_type_options_for_partners.htm&release=264.0.0&type=5 "While creating a Loyalty Program Partner record, you can specify the billing type—Prepaid or Postpaid—for your partner.") - [_Salesforce Help_: Partner’s Conversion Factor for Currencies](https://help.salesforce.com/s/articleView?id=xcloud.partner_conversion_factor_for_currencies.htm&release=264.0.0&type=5 "A loyalty program can have multiple currencies. Members can accrue or redeem points of multiple currencies for each partner transaction. To calculate the partner’s credited or debited points, the loyalty program and the partner decide the conversion factor for the currencies that are used in partner transactions. The conversion factor applies to both prepaid billing and postpaid billing.") # Add a Radio Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Radio input element on a Flexcard to enable users to select an item from one or more options. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Radio** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. Select the **Display Mode** for your radio items. Available modes are:

Mode

Description

Vertical

Displays radios stacked on top of each other.

Horizontal

Displays radios inline.

Button Group

Displays options as inline buttons.

Image

Displays options as images.

Color

Displays options as colored circles.

6. If **Display Mode** is **Image**, configure the following properties: - **Width**: The width of the image in pixels. Default is 100. - **Height**: The height of the image in pixels. Default is 100. - **Image Count Per Row**: How many images to display per row. Default is 3. - **Enable Caption**: To display the label as a caption underneath the image, enter true. To hide caption, enter false. 7. If **Display Mode** is **Color**, configure the following properties: - **Width**: The width of the circle in pixels. Default is 100. - **Height**: The height of the circle in pixels. Default is 100. - **Count Per Row**: How many items to display per row. Default is 3. 8. To enter the options from which the user can select, click **\+ Add New** in the **Options** section. Configure the following properties: - **Label**: Enter the visible label for the option. Click into the field to select from a list of merge fields available from your data source. Or enter plain text. - **Value**: Enter the value of the option. Click into the field to select from a list of merge fields available from your data source. Or enter plain text. If the **Display Mode** is **Color**, enter the name of a CSS color, such as Yellow. See [Color Names Supported by All Browsers](https://www.w3schools.com/colors/colors_names.asp). Or, enter a HEX code such as #ffff00. See [Colors HEX](https://www.w3schools.com/colors/colors_hexadecimal.asp). - **Use As a Default Value**: Set as the default option. - **Image**: If the **Display Mode** is **Image**, select an image from the **Select an Image from Content Document** dropdown, or **Upload Image**. 9. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [RadioGroup Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_radiogroup_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains a RadioGroup LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 10. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 11. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 12. (Optional) To style your element, click **Style** to open the Style panel, and see [Flexcards Datatable Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_datatable_style_properties.htm&release=264.0.0&type=5 "For the managed package runtime, configure style properties specific to the Datatable element from the Style panel of the Flexcard Designer."). - **[Flexcards Radio Input Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_radio_input_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Radio Input element properties are configurable in the Properties panel when you select a Radio element in the Flexcard Designer. Enable users to select one option from a list of options. Display options as radios, images, buttons, or color blocks. # Add a Range Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Number Input element on a Flexcard to enable users to select from a range of numbers you specify. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Range** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. (Optional) Click into **Default Value** to select a default input value from a merge field. Or, enter a value as plain text. 6. (Optional) In **Mask**, provide an input mask that formats the range numbers. For example, for a rating selector, enter 0.0 for a user to select a rating such as 3.5. 7. (Optional) In **Step**, set by how much each number in the range increases. Enter a whole or floating point number, such as 2, .5, or 1.1. For example, if a rating selector's range is 1 to 10, and your **Step** is .5, then the first few numbers in the range are 1, 1.5, 2, and 2.5. The default **Step** is 1. 8. To set the range of available numbers, enter a **Minimum Value** and **Maximum Value**. Set a negative or positive, whole or floating point number for each value, such as -1 and 10, or -1.5 and 20.5. The default minimum is 0, and the default maximum is 100. 9. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [Input Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_input_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains an Input LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 10. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 11. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 12. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - **[Flexcards Range Input Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_range_input_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Range Input element properties are configurable in the Properties panel when you select a Range element in the Flexcard Designer. Enable users to select from a range of numbers you specify. # Add a Reload Action to a Flexcard (Managed Package) For the managed package runtime, with a Card Action, create an action that reloads a Flexcard. For example, create a FLexCard that listens for an event from another Flexcard and reloads itself when the event is fired. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). See [Add an Event Listener to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_an_event_listener_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add an event listener that listens for an event fired from a component and performs an action in response. With a Pubsub Event, listen for an event from another component, such as another Flexcard on the same Lightning page. With a Custom event, listen for an event fired from a child Flexcard or from an element on the card."). 1. From the Flexcard Designer, drag an **Action** element into a state. 2. Select **Card** from the **Action Type** dropdown. 3. From the **Type** dropdown, select **Reload**. 4. (Optional) To configure other options common among all action properties, see [Flexcards Action Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Action element properties are configurable from the Properties panel in the Flexcard Designer when you select an Action element. With the Action element, create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). What’s next: To style your action element, click **Style** to open the Style panel, and see [Flexcards Action Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_style_properties.htm&release=264.0.0&type=5 "For the managed package runtime, configure style properties specific to the Action element from the Style panel in the Flexcard Designer."). # Add a Remove Card Action to a Flexcard (Managed Package) For the managed package runtime, remove a specific record on a Flexcard or remove the entire Flexcard with a remove card action. The data record is only removed from the Flexcard and not from the database it's pulled from. The Flexcard is only removed from the page it's viewed from, and not permanently deleted. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To remove a record from the database, configure the remove card action with an Update Omniscript action. See [Update an Omniscript from a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_update_an_omniscript_from_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, create an action that updates an Omniscript's data JSON from the Flexcard embedded in the Omniscript. You can embed a Flexcard inside an Omniscript as a Custom LWC."). 1. From the Flexcard Designer, drag an **Action** element into a state. 2. Select **Card** from the **Action Type** dropdown. 3. From the **Type** dropdown, select **Remove**. 4. To remove a specific record, create an Event Listener, and enter a **Record Index**. See [Add an Event Listener to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_an_event_listener_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add an event listener that listens for an event fired from a component and performs an action in response. With a Pubsub Event, listen for an event from another component, such as another Flexcard on the same Lightning page. With a Custom event, listen for an event fired from a child Flexcard or from an element on the card."). 5. (Optional) To configure other options common among all action properties, see [Flexcards Action Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Action element properties are configurable from the Properties panel in the Flexcard Designer when you select an Action element. With the Action element, create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). What’s next: To style your action element, click **Style** to open the Style panel, and see [Flexcards Action Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_style_properties.htm&release=264.0.0&type=5 "For the managed package runtime, configure style properties specific to the Action element from the Style panel in the Flexcard Designer."). # Add a Salesforce Data Mention Use Salesforce data seamlessly in your documents and spreadsheets with Salesforce Data Mentions. Mention live data from Salesforce to see dynamic fields that stay updated with the latest Salesforce data. Update fields from your documents and spreadsheets and sync them to Salesforce. ### Required Editions
Available in: Lightning Experience
To add a Salesforce Data Mention to a document or spreadsheet, you need view access to the Salesforce record or field. To edit the data mention, you need edit access in Salesforce. To insert a Salesforce Data Mention, you can: - @Mention Salesforce Data Mention and enter the record name. - @Mention the record name and select the field. - Select **Salesforce Data Mention** from the Insert menu. - Paste a Salesforce record URL in a document. You can then choose to show the URL as a Salesforce data mention and decide whether to mention the record or a specific record field. #### See Also - [How Does Live Data Work in Quip?](https://help.salesforce.com/s/articleView?id=xcloud.live_data_quip.htm&release=264.0.0&type=5 "Learn about the different live data integrations you can add to your documents, spreadsheets, and templates.") - [Live Data on the Quip Mobile App](https://help.salesforce.com/s/articleView?id=xcloud.quip_live_data_mobile.htm&release=264.0.0&type=5 "Learn about which live data integrations work on the Quip mobile app.") ## Add a Salesforce Data Mention to a Document Mention live data from a Salesforce record or field in your documents without breaking the flow of your content. ### Required Editions
Available in: Lightning Experience
1. To add a data mention starting from a record, @mention the record name in a document. ![@Acme Partners entered in a document.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_insert_data_mention.png) 2. Click **Mention**. 3. To mention a record field, enter or select the field name. ![Hover state for the Acme Partner data mention](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_data_mention_field.png) 4. To see a compact layout of the record, hover over the data mention. To update record fields, click **Edit Record**. ![Hover state for the Acme Partner data mention](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_data_mention_hover.png) 5. To add available fields from the record to your layout, edit the fields or click **Customize Layout**. 6. Click **Save to Salesforce**. Edits that aren’t saved to Salesforce are lost. Salesforce Data Mentions added to your documents update automatically with the latest Salesforce data. ## Add a Salesforce Data Mention to a Spreadsheet Mention live data from a Salesforce record or field in your spreadsheets to keep calculations and more up to date. ### Required Editions
Available in: Lightning Experience
1. To add a data mention starting from a record, @mention the record name in the spreadsheet. ![@Haven Enterprises entered in a spreadsheet.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_insert_data_mention_spreadsheet.png) 2. Click **Mention**. 3. To mention a record field, enter or select the field name. ![Hover state for the Haven Enterprises data mention.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_data_mention_field_spreadsheet.png) 4. To see a compact layout of the record, hover over the data mention. To update record fields, click **Edit Record**. ![Hover state for the Haven Enterprises data mention.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_data_mention_field_spreadsheet.png) Salesforce Data Mentions added to your spreadsheets update automatically with the latest Salesforce data. # Add a Salesforce List View in Quip Bulk update your Salesforce list views, add next steps, and keep your team in the know. The Salesforce List live app uses live Salesforce data so that your list views are always current. ### Required Editions
Available in: Lightning Experience
When you import a list view into Quip, you see only the data that you have access to. You can see records that you own, have read or write access to, or are shared with you. List views also include records owned by or shared with users in roles below you in the hierarchy. The fields you see depend on your page layout and field-level security settings. 1. In a document, enter @Salesforce List. ![Select a List View button in Quip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_select_list.png) 2. Click **Select a List View**. 3. To import a Salesforce record list view, select **Record List**, and click **Next**. 4. Search for the list you want to import by object type, and click **OK**. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip You can add list views from different Salesforce orgs to the same document. To import a list view from a different org, click the org name in the left-hand corner, and select the org you want to pull data from. 5. Select the columns that you want to appear in your list view by using the arrows to move them from **Available Columns** to **Selected Columns**. ![Select list view columns modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_list_view_columns.png) ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip For easier viewing of longer list views, limit the number of rows per page. In **Rows per page**, enter the number of rows you want to show per list view page. You can change the configuration later by selecting **Configure List View** from the Salesforce List dropdown. 6. Click **OK**. 7. To update a list view field, click **![pencil icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/dashboard_pencil_icon.png)**, and enter your new text. Edited fields appear in yellow. 8. To save your changes to Salesforce, click **Save to Salesforce**. To revert your list view to its original state, click **Discard All Changes**. 9. To add comments and next steps, click the **comment bubble**, and place the yellow dot where you want to leave your comments. [See Salesforce List live app considerations and limitations.](https://help.salesforce.com/s/articleView?id=xcloud.quip_list_considerations.htm&release=264.0.0&type=5 "As you add the Salesforce List live app to your documents, keep in mind these considerations.") #### See Also - [Supported Fields in Salesforce Live Apps and Data Mentions](https://help.salesforce.com/s/articleView?id=xcloud.quip_supported_fields_live_apps.htm&release=264.0.0&type=5 "To add Salesforce live apps and data mentions to your documents, check which Salesforce fields are supported.") - [List Views in Quip: Supported Objects and Lists](https://help.salesforce.com/s/articleView?id=xcloud.quip_list_view_objects.htm&release=264.0.0&type=5 "To add live list views to your documents, check which objects, values, and fields are supported for your Salesforce org.") - [Add a Salesforce Template Related List](https://help.salesforce.com/s/articleView?id=xcloud.quip_template_related_list.htm&release=264.0.0&type=5 "As you set up your templates, use Template Related Lists. When a user creates a document from your embedded template, the Salesforce template related lists automatically populate with the record’s data and continue to stay up to date. Configure the Salesforce List live app in Quip to auto-populate with a list of Opportunities related to an Account.") # Add a Salesforce Related List in Quip Add record-specific related lists to a document with the updated Salesforce List live app. Stay on top of deals and cases with in-line editing, comments, and bi-directional syncing to Salesforce. ### Required Editions
Available in: Lightning Experience
When you import a list view into Quip, you see only the data that you have access to. You can see records that you own, have read or write access to, or are shared with you. List views also include records owned by or shared with users in roles below you in the hierarchy. The fields you see depend on your page layout and field-level security settings. 1. In a document, enter @Salesforce List. ![Select a List View button in Quip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_select_list.png) 2. Click **Select a List View**. 3. To import a Salesforce list view of records related to a specific object, select **Related List**. 4. Search for the related list you want to import by object type. To find a list view of cases related to a specific account, search for the Account name and then select the related list view type Cases. ![related list picker](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_related_list_picker.png) 5. Click **OK**. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip You can add list views from different Salesforce orgs to the same document. To import a related list from a different org, click the org name in the left-hand corner and select the org you want to pull data from. 6. Select the columns you want to appear in your list view by using the arrows to move them from **Available Columns** to **Selected Columns**. ![Select list view columns modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_list_view_columns.png) ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip For easier viewing of longer list views, limit the number of rows per page. In **Rows per page**, enter the number of rows you want to show per list view page. You can change the configuration later by selecting **Configure List View** from the Salesforce List dropdown. 7. Click **Insert List**. 8. To update a list view field, click **![pencil icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/dashboard_pencil_icon.png)** and enter your new text. Edited fields appear in yellow. 9. To save your changes to Salesforce, click **Save to Salesforce**. To revert your related list to its original state, click **Discard All Changes**. 10. To add comments and next steps, click the **comment bubble** and place the yellow dot where you want to leave your comments. [See Salesforce List live app considerations and limitations.](https://help.salesforce.com/s/articleView?id=xcloud.quip_list_considerations.htm&release=264.0.0&type=5 "As you add the Salesforce List live app to your documents, keep in mind these considerations.") #### See Also - [Supported Fields in Salesforce Live Apps and Data Mentions](https://help.salesforce.com/s/articleView?id=xcloud.quip_supported_fields_live_apps.htm&release=264.0.0&type=5 "To add Salesforce live apps and data mentions to your documents, check which Salesforce fields are supported.") - [List Views in Quip: Supported Objects and Lists](https://help.salesforce.com/s/articleView?id=xcloud.quip_list_view_objects.htm&release=264.0.0&type=5 "To add live list views to your documents, check which objects, values, and fields are supported for your Salesforce org.") - [Add a Salesforce Template Related List](https://help.salesforce.com/s/articleView?id=xcloud.quip_template_related_list.htm&release=264.0.0&type=5 "As you set up your templates, use Template Related Lists. When a user creates a document from your embedded template, the Salesforce template related lists automatically populate with the record’s data and continue to stay up to date. Configure the Salesforce List live app in Quip to auto-populate with a list of Opportunities related to an Account.") # Add a Salesforce Template Data Mention As you set up your templates, use Salesforce Template Data Mentions instead of mail merge syntax. When a user creates a document from your embedded template, the Salesforce Data Mentions automatically populate with record’s data and continue to stay up to date. ### Required Editions
Available in: Lightning Experience
[![Watch Video Demo](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/play_btn.png) Watch a Demo](https://salesforce.vidyard.com/watch/bhS8Nr5Xp3oC6Fx7WX82W5) (1 minute) Salesforce Template Data Mentions are available in documents [marked as a template](https://help.salesforce.com/s/articleView?id=xcloud.quip_mark_as_template.htm&release=264.0.0&type=5 "To differentiate documents that your team uses as templates, mark your documents as templates in Quip. See what documents are embedded in Salesforce based on the object, convert your embedded documents to templates, and access them from the Template Library in Quip.") and embedded in a record. To insert a Salesforce Template Data Mention, you can: - @Mention **Salesforce Template Data Mention**. - Select **Salesforce Template Data Mention** from the Insert menu. 1. To add a template data mention to a template, @mention Salesforce Template Data Mention 2. Click Mention. 3. Select an object type, then select a field. Click Insert. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note When creating the template, you can insert any field on the object’s record layout. When a user creates a document from the template, only the fields that the user has access to populate. The data mentions in documents created from the [template embedded in a record](https://help.salesforce.com/s/articleView?id=xcloud.admin_files_quip_embed_doc_component.htm&release=264.0.0&type=5 "You can use the Lightning App Builder to add the Quip Document component to a Salesforce Lightning page.") update automatically with the latest Salesforce data. Salesforce Template Data Mentions autopopulate only if they match the embedded record’s fields. # Add a Salesforce Template Record in Quip As you set up your templates, use Template Records. When a user creates a document from your embedded template, the Salesforce template records automatically populate with the record’s data and continue to stay up to date. Control the fields that your users see to keep information relevant and boost Account Plan adoption. ### Required Editions
Available in: Lightning Experience
User Permissions Needed
To configure the Salesforce Record live app: Customize Application
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_important.png) Important Salesforce Template Records are available only in templates. To use template records, [mark the document as a template](https://help.salesforce.com/s/articleView?id=xcloud.quip_mark_as_template.htm&release=264.0.0&type=5 "To differentiate documents that your team uses as templates, mark your documents as templates in Quip. See what documents are embedded in Salesforce based on the object, convert your embedded documents to templates, and access them from the Template Library in Quip.") and make sure that the template is unlocked. 1. In a document, enter @Salesforce Record. Click **Insert**. 2. Select **Template Record**. ![Template Record selected](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_record_insert.png) 3. Select the object of the record your template is embedded in. For example, to set up an Account Plan for an Account object, select **Account**, and then **Next**. ![Account object highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_select_record_object.png) 4. If you don’t see the object or to reference a related object, select **Manual Mode** and enter the information manually. ![Manual Mode icon highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_record_manual_mode_icon.png) 1. To dynamically update the Salesforce Record live app based on a Salesforce field, enter the Record ID with [mail merge syntax](https://help.salesforce.com/s/articleView?id=xcloud.quip_mail_merge.htm&release=264.0.0&type=5 "Templates save time copying and pasting, standardize your business practices, and help you get the most out of your Salesforce data. To auto-fill your embedded templates with data from a Salesforce record, you can use Salesforce Template Data Mentions or mail merge syntax."). ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip Mail merge syntax is case-sensitive. To auto-populate the Account Owner Id using mail merge syntax, enter \[\[Account.Owner.Id\]\] and not \[\[Account.Owner.ID\]\]. ![Manual Mode fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_record_manual_mode.png) 2. To set up the Salesforce Record live app for an object related to the Record ID, select the target object type. 3. To return to List Mode, click **![List Mode icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_list_mode_icon.png).** 5. Select which fields to show and populate with Salesforce record data. ![Select fields to show on record window](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_record_show_fields.png) 6. Click **Done**. After the template record is set up, the fields appear but their values are blank. ![Empty state for Template Record](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_record_empty_state.png) 7. After you finish configuring your template, add it to the Quip Document component so that users can create documents that autopopulate with the record’s data, such as Account Plans. As you add Salesforce template records to your templates, keep in mind these considerations: - When you set up Salesforce template records, you see all available fields for an object type. The Salesforce Record live app doesn’t filter out fields not on the embedded record’s layout. # Add a Salesforce Template Related List As you set up your templates, use Template Related Lists. When a user creates a document from your embedded template, the Salesforce template related lists automatically populate with the record’s data and continue to stay up to date. Configure the Salesforce List live app in Quip to auto-populate with a list of Opportunities related to an Account. ### Required Editions
Available in: Lightning Experience
User Permissions Needed
To configure the Salesforce List live app: Customize Application
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_important.png) Important Salesforce Template Related Lists are available only in templates. To use template related lists, [mark the document as a template](https://help.salesforce.com/s/articleView?id=xcloud.quip_mark_as_template.htm&release=264.0.0&type=5 "To differentiate documents that your team uses as templates, mark your documents as templates in Quip. See what documents are embedded in Salesforce based on the object, convert your embedded documents to templates, and access them from the Template Library in Quip.") and make sure that the template is unlocked. 1. In a document, enter @Salesforce List. 2. Select **Template Related List**. ![Template Related List selected](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_related_list_insert.png) 3. Select the object of the record your template is embedded in and then its related list type. For example, to set up an Opportunities list view for an Account object, select **Account** as the Object and **Opportunities** as the related list type. Click **OK**. ![Account related list types shown](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_related_list_type.png) 4. If you don’t see the related list, select **Manual Mode** and enter the information manually. ![Manual Mode icon highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_related_list_manual_mode_icon.png) 1. To dynamically update the Salesforce List live app based on a record type, enter the Record ID with [mail merge syntax](https://help.salesforce.com/s/articleView?id=xcloud.quip_mail_merge.htm&release=264.0.0&type=5 "Templates save time copying and pasting, standardize your business practices, and help you get the most out of your Salesforce data. To auto-fill your embedded templates with data from a Salesforce record, you can use Salesforce Template Data Mentions or mail merge syntax."). ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip Mail merge syntax is case-sensitive. To auto-populate the Opportunity’s Account Id using mail merge syntax, enter \[\[Opportunity.Account.Id\]\] and not \[\[Opportunity.Account.ID\]\]. ![Manual Mode fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_related_list_manual_mode.png) 2. To set up the Salesforce List live app for a list related to the previously selected object, enter the related list’s API name. To make sure that the related list type is supported in your org, check its [supported objects](https://help.salesforce.com/s/articleView?id=xcloud.quip_list_view_objects.htm&release=264.0.0&type=5 "To add live list views to your documents, check which objects, values, and fields are supported for your Salesforce org."). 3. Enter the number of rows to show in your related list view. 4. To return to List Mode, click **![List Mode icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_list_mode_icon.png).** 5. Select which column to show and populate with Salesforce record data. ![Select columns to show on related list window](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_related_list_show_columns.png) ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip You can select which columns to show only for related lists added via List Mode and not Manual Mode. 6. Click **OK**. After the template related list is set up, the columns appear but their values are blank. ![Empty state for Template Related List](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_relate_list_empty_state.png) 7. After you finish configuring your template, add it to the Quip Document component. # Add a Select Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Select Input element on a Flexcard to enable users to select an item from a dropdown list. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Select** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) In **Placeholder**, enter temporary text that displays inside the input field and which suggest to the user what content to enter. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. (Optional) Click into **Default Value** to select a default input value from a merge field. Or, enter a value as plain text. 6. To enter the options from which the user can select, click **\+ Add New** in the **Options** section. Configure the following properties: - **Label**: Enter the visible label for the option. Click into the field to select from a list of merge fields available from your data source. Or enter plain text. - **Value**: Enter the value of the option. Click into the field to select from a list of merge fields available from your data source. Or enter plain text. 7. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [Combobox Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_combobox_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains a Combobox LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 8. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 9. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 10. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - **[Flexcards Select Input Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_select_input_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, select Input element properties are configurable in the Properties panel when you select a Select element in the Flexcard Designer. Enable users to select an item from a dropdown list. # Add a Single Member Add one account at a time to a rebate program and specify member details. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
User Permissions Needed
To add a member to a program Rebate and Accrual Management Advanced Admin permission set
1. On a Rebate Program record, click **Add Member** on the Members related list of the Related tab. Or, from App Launcher, enter Rebate Program Members, and then select **Rebate Program Members**. 2. Provide the following details. - Account: Search and select the account to be enrolled as a member of the rebate program. - Member Status: Select a status for the member being enrolled. - Name: Enter an alias for the account. If you don't enter a name, the account name is used as the member's name. 3. Click **Save**. # Add a Single Member to a Rebate Program Add one account at a time to a rebate program and specify member details. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
User Permissions Needed
To add a member to a program Rebate Management Admin permission set
1. On a Rebate Program record, click **Add Member** on the Members related list of the Related tab. Or, from App Launcher, enter Rebate Program Members, and then select **Rebate Program Members**. 2. Provide the following details. 1. Account: Search and select the account to be enrolled as a member of the rebate program. 2. Member Status: Select a status for the member being enrolled. 3. Name: Enter an alias for the account. If you don’t enter a name, the account name is used as the member’s name. 4. Ship-To Account: Select the customer account to which the member must sell to get special benefits for a ship-and-debit rebate program. 5. Skip Payout Calculation: Select the checkbox if you don’t want to calculate payouts for the member. 3. Click **Save**. # Add a Smart App Banner Create a smart app banner that shows your branded Experience Cloud app when users visit your Experience Cloud site in a mobile browser. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
To create and modify a site: Create and Set Up Experiences
If your Experience Cloud app is already installed on a user’s device, tapping the smart banner opens the app. If the user doesn’t have your Experience Cloud app on the device, tapping the smart banner takes them to the App Store to download and install your app. 1. To add a smart app banner, select your Experience Cloud site in Setup and launch the Experience Builder. 2. When you’re in the Experience Builder, go to **Page Properties** | **Properties** | **Head Tags** | **Edit Head Tags**. 3. Add your metadata and click **Save**. Here’s an example of the smart app banner metadata from Apple. ![Metatag for smart banner](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_add_smart_banner.png) #### See Also - [Promoting Apps with Smart App Banners (Apple)](https://developer.apple.com/documentation/webkit/promoting_apps_with_smart_app_banners) # Add a Standalone Custom LWC (Managed Package) For the managed package runtime, to add a standalone custom Lightning web component to an Omniscript: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Standalone custom Lightning web components cannot extend any Omniscript element component or the OmniScriptBaseMixin component. The standalone component supports custom functionalities but cannot interact with an Omniscript. For more information on the standalone components, see [Create a Standalone Custom Lightning Web Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_standalone_custom_lightning_web_component.htm&release=264.0.0&type=5 "For the managed package runtime, enable custom Lightning web components to act independently from an Omniscript by adding it to the Omniscript as a standalone component."). 1. Drag a **Custom LWC element** from Inputs into the canvas. 2. In the **Lightning Web Component Name** field, enter the name of a Lightning web component. 3. Select the **Standalone** checkbox. 4. Save and Activate the Omniscript. 5. Click **Preview** to preview the Omniscript. What’s next: - If the Standalone checkbox is deselected, changes to the data in an embedded Flexcard are cached when the user navigates away from the Flexcard. The changes are not applied to the data source. - For this reason, if you call an Update Data Source action in a Flexcard embedded in an Omniscript with Standalone deselected, then the action overrides any changes by the user. # Add a State to a Flexcard (Managed Package) For the managed package runtime, add a state to a Flexcard to present different interactions and layouts based on specified conditions. Each Flexcard has a default state that cannot be deleted. Add a State element to the canvas of a Flexcard, or clone a state already on the canvas. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To clone a state, see [Clone a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_clone_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, create an identical copy of a Flexcard with the Clone feature in the Flexcard Designer. Cloning an existing Flexcard creates a new Flexcard with a new Name, or Author, or both. The Name and Author must be unique."). 1. From the Flexcard Designer, drag a **State** element from the Build panel onto the canvas. 2. (Optional) To create a state to display when there are no records available, select the **Blank Card State** checkbox. For example, when a data source returns no records from the Policy object, create a state with an Omniscript action to add a Policy. 3. In the **Name** field, enter the name of the state, such as Active. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note The state **Name** is for internal use and does not appear on the generated LWC or in Preview. 4. To add data fields and other elements, see [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). 5. To add conditions that must be met for the state to display, see [Add Conditions to a Flexcard State (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_state.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard states enable the presentation of different CRM interactions for each state. Set conditions to determine if, when, and how data displays on a Flexcard."). 6. (Optional) To style your state, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). What’s next: Style your element. See [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). # Add a Survey to Any Lightning Record Page Use the Surveys component to add surveys to object records that support Lightning components. Your users can respond to the survey from the record page. You can also add the Surveys component to Experience Cloud sites to gather responses from guest users. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
User Permissions Needed
To add the Surveys component: System Administrator profile
Make sure to select an Experience Cloud site in Survey Settings before adding the Surveys component to Experience Cloud sites. 1. Open a record for an object to which you want to add the Surveys component. 2. Click ![Setup icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/sfm_gear_icon.png) and select **Edit Page**. 3. In the Lightning App Builder, drag the Surveys component to where you want it to appear on the page. 4. In the Surveys component properties, select the survey that you want to appear on the record page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_note.png) Note You can only select surveys that are active. 5. Save your work, and then click **Activate**. After you embed surveys in Salesforce record pages or Experience Cloud sites, generate the internal or external invitation links from the Survey Builder. # Add a Telephone Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Telephone Input element on a Flexcard to enable users to enter a valid phone number. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Telephone** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) In **Placeholder**, enter temporary text that displays inside the input field and which suggest to the user what content to enter. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. (Optional) Click into **Default Value** to select a default input value from a merge field. Or, enter a value as plain text. 6. In **Mask**, to help your user enter data correctly, provide an input mask that formats the data a specific way. Default is (000)000-0000. 7. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [Input Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_input_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains an Input LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 8. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 9. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 10. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - **[Flexcards Telephone Input Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_telephone_input_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, telephone Input element properties are configurable in the Properties panel when you select a Telephone element in the Flexcard Designer. Enable users to enter valid phone number. # Add a Text Area Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Text Area Input element on a Flexcard to enable users to enter multiple lines of plain text. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note In the text area input, don't use symbols that can break, or escape, JSON and cause an Unterminated string in JSON error. The error doesn't appear in the Flexcard preview but appears in the browser developer console and the sObject page. Examples: " \\ \\n \\r \\\\ 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Text Area** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) In **Placeholder**, enter temporary text that displays inside the input field and which suggest to the user what content to enter. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. (Optional) Click into **Default Value** to select a default input value from a merge field. Or, enter a value as plain text. 6. In **Minimum Length**, enter the minimum number of characters the user must enter. 7. In **Maximum Length**, enter the maximum number of characters the user can enter. 8. (Optional) Select to create new lines of text with the
element. By default, create new lines of text with \\n. 9. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [Input Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_input_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains an Input LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 10. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 11. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 12. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - **[Flexcards Text Area Input Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_text_area_input_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Text Area Input element properties are configurable in the Properties panel when you select a Text Area element in the Flexcard Designer. Enable users to enter multiple lines of text. # Add a Text Element to a Flexcard (Managed Package) For the managed package runtime, combine plain text and merge fields inside a rich text editor with the Text element in the Flexcard Designer. Enter a merge field, such as data fields, or context variables, such as session variables. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The Text element's rich text editor adds an HTML `div` for each text section to build the layout of the element. Add SDLS and NDS classes and other formatting options to each `div` to style your text. 1. In the Flexcard Designer, drag the **Text** element from the Build panel into a state on the canvas. 2. To update the default text, from the Properties panel, click into the rich text editor to override the content. Beginning Spring '22, the default font for a Text element is System Font, which is the native font your operating system’s UI provides. 3. (Optional) To add a new block of text, click return to create a new div. 4. (Optional) To add data field values, select from the **Fields** list in the rich text editor. You can also manually add the field by entering the field name surrounded by single curly braces, such as {Type}. 5. (Optional) To add custom labels, enter the {Label.customLabelName} merge field anywhere in the rich text editor. For example, to add a custom label for AccountName, enter {Label.AccountName}. See [Add Custom Labels to Supported Fields on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_custom_labels_to_supported_fields_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add custom labels to supported Flexcard element fields with the {Label} merge field. Custom labels are custom text values that can be accessed from Apex classes, Visualforce pages, or Lightning components. Add custom labels if your Flexcard supports multiple languages. The values can be translated into any language Salesforce supports."). 6. (Optional) To add a context variable as a merge field, enter it any div. For example, enter {User.userProfileName} to add the logged-in user's profile name. See [Flexcards Context Variables (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, global and local context variables are available to a Flexcard to provide context to data sources, actions, and other components. All variables are case sensitive."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note The rendered User global context variable is visible at run time only, such as in Preview or when Flexcard is published to a page. 7. (Optional) To undo a change, click the **Undo** icon. 8. (Optional) To redo an undone change, click the **Redo** icon. 9. To style the text within the rich text editor, see [Style Text in the Rich Text Editor of a Flexcard Text Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_text_in_the_rich_text_editor_of_a_flexcard_text_element.htm&release=264.0.0&type=5 "For the managed package runtime, style plain text and merge fields inside the Flexcard Text element's rich text editor. Enter a merge field, such as data fields, or context variables, such as session variables."). 10. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). What’s next: (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - **[Style Text in the Rich Text Editor of a Flexcard Text Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_text_in_the_rich_text_editor_of_a_flexcard_text_element.htm&release=264.0.0&type=5)** For the managed package runtime, style plain text and merge fields inside the Flexcard Text element's rich text editor. Enter a merge field, such as data fields, or context variables, such as session variables. - **[Flexcards Text Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_text_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Text element properties are configurable in the Property Panel when you select a Text element in the Flexcard Designer. With the Text element, combine plain text and merge fields using a Rich Text Editor. # Add a Text Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Text Input element on a Flexcard to enable users to enter one line of plain text. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Text** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) In **Placeholder**, enter temporary text that displays inside the input field and which suggest to the user what content to enter. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. (Optional) Click into **Default Value** to select a default input value from a merge field. Or, enter a value as plain text. 6. In **Mask**, to help your user enter data correctly, provide an input mask that formats the data in a specific way. For example, if your input element captures product Ids that look like dX-64887, enter aa-99999 as the mask. When you set the Mask property on text fields, Salesforce shows the default error message instead of custom error messages for those fields. 7. In **Minimum Length**, enter the minimum number of characters the user must enter. 8. In **Maximum Length**, enter the maximum number of characters the user can enter. 9. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [Input Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_input_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains an Input LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 10. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 11. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 12. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - **[Flexcards Text Input Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_text_input_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Text Input element properties are configurable in the Properties panel when you select a Text Input element in the Flexcard Designer. Enable users to enter a single line of text. # Add a Theme to Your App Apply brand colors and spacing across the app. 1. In the Mobile App Designer, open the theme panel. 2. Select or configure a theme, or add a Figma file. 3. Review the re-rendered canvas. 4. Save your changes. Components keep their content, and only their styling changes. Colors imported from Figma remain unchanged. # Add a Time Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Time Input element on a Flexcard to enable users to select a formatted time from a list of time intervals. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Time** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) In **Placeholder**, enter temporary text that displays inside the input field and which suggest to the user what content to enter. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. (Optional) Click into **Default Value** to select a default input value from a merge field. Or, enter a value as plain text. Enter a default value in the format specified in **Time Format**. For example, if the format is `hh:mm a`, enter 03:30 pm. 6. (Optional) Update the **Time Format**. Default is hh:mm a, which displays as `3:30 am` or `3:30 pm`. See [date-fns format](https://date-fns.org/v2.0.0-alpha.31/docs/format) for format options. 7. (Optional) To limit the user to a specific time range, set the **Minimum Time** and **Maximum Time**. Select a time in the format specified in **Time Format**. For example, for 3pm, if the format is `hh:mm a`, enter 03:00 pm. Leave **Maximum Time** empty for the last interval of the day such as 11:30 pm. Leave **Minimum Time** empty for the first available interval, such as 12:00 am. 8. (Optional) In **Time Interval**, update the time intervals from the default 30 to another increment. For example, enter 15 to display a list of 15-minute increments, such as 12:00, 12:15, 12:30, 12:45. 9. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [TimePicker Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_timepicker_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains a TimePicker LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 10. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 11. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 12. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - **[Flexcards Time Input Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_time_input_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, time Input element properties are configurable in the Properties panel when you select a Time Input element in the Flexcard Designer. With the Time Input element, enable users to select a formatted time from a list of time intervals. # Add a Type Ahead Block in an Omniscript In edit blocks, suggest possible entries as a user types in a field, as an autosuggest or autocomplete. 1. Add the **Type Ahead Block** element to the Omniscript canvas. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note If a Type Ahead Block exists in a Block element, only one Block element is permitted. Adding multiple nested Blocks results in errors. 2. Add an Action element into the Type Ahead Block to retrieve data or seed the Type Ahead Block with data. Type Ahead Blocks only support using a single action.

Supported Data Sources

Description

Data JSON

Accesses an array of data present in the Omniscript's data JSON.

Omnistudio Data Mapper Extract Action

Retrieves internal or external Salesforce data.

Google Maps Auto Complete

Calls a Google Maps API to retrieve google maps data.

HTTP Action

Retrieves external data.

Remote Action

Retrieves data from an Apex class.

3. Add input elements into the Type Ahead Block to map response data. To hide an element, such as an Id, from the user, prefill it with data from the TypeAhead using these steps: 1. From the element properties panel, click **Edit as JSON**. The JSON definition of the element is displayed. 2. Set the **hide** property's value to **true**. 3. Check the box labeled **Available for Prefill When Hidden**. 4. Configure additional properties in the Edit Block to set a user's data access. 5. Add custom styling and behavior by overriding LWC Type Ahead Block components. The **LWC Component Override** field only overrides the Type Ahead Component.

Type Ahead Block LWCs

Description

omniscriptTypeahead

Overrides the Type Ahead component that lists the data results.

omniscriptTypeaheadBlock

Overrides the Type Ahead Block component that embeds the Type Ahead component.

progressBar

LWC Type Ahead Blocks display a progress-bar when retrieving data results. For information on customizing the progress-bar, see Base Omnistudio LWC ReadMe Reference.

- **[Use a Type Ahead Block with an Omnistudio Data Mapper](https://help.salesforce.com/s/articleView?id=xcloud.os_add_and_configure_a_type_ahead_block_15427.htm&release=264.0.0&type=5)** Retrieve an object record using a Type Ahead Block with a Data Mapper. For example, type a few letters of an account name in the Type Ahead Block. The Data Mapper finds account records with names containing those letters. - **[Use Type Ahead Block With Data JSON](https://help.salesforce.com/s/articleView?id=xcloud.os_add_and_configure_a_type_ahead_block_15427.htm&release=264.0.0&type=5)** A Type Ahead Block can use a JSON node as its source instead of an Omnistudio Data Mapper, API, HTTP, or Remote action. This JSON node can store data from any action that outputs a list. The response from a Type Ahead Block that uses a JSON node is made client-side, eliminating the need to make server calls. - **[Use Google Maps Autocomplete in Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_add_and_configure_a_type_ahead_block_15427.htm&release=264.0.0&type=5)** Retrieve Google Maps data and display a location in the Type Ahead Block by using the Google Maps API. - **[Make an HTTP Call from a Type Ahead Block](https://help.salesforce.com/s/articleView?id=xcloud.os_add_and_configure_a_type_ahead_block_15427.htm&release=264.0.0&type=5)** Retrieve data from a URL in your Type Ahead Block using an HTTP Action. ## Use a Type Ahead Block with an Omnistudio Data Mapper Retrieve an object record using a Type Ahead Block with a Data Mapper. For example, type a few letters of an account name in the Type Ahead Block. The Data Mapper finds account records with names containing those letters. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note To prevent users’ type-ahead selections from propagating to other fields, make sure to map type-ahead data to individual elements. Create one Data Mapper for each Type Ahead Block, or put one Data Mapper inside a Block or Edit Block element and select **Copy elements** (**Enable Repeat** in the designer for a managed package). Type Ahead Blocks usually use Name but can use another field. The following task steps use Name. 1. Create a Data Mapper Turbo Extract or a Data Mapper Extract with a filter of Name **LIKE** Key. If needed, add other filters. 2. Add a Step component to your Omniscript, or use the first Step. 3. [Add a Type Ahead Block](https://help.salesforce.com/s/articleView?id=xcloud.os_add_and_configure_a_type_ahead_block_15427.htm&release=264.0.0&type=5 "In edit blocks, suggest possible entries as a user types in a field, as an autosuggest or autocomplete.") to the Step in your Omniscript. 4. In the Type Ahead Block Properties, set the **Typeahead Key** to Name. 5. Drag a Omnistudio Data Mapper Turbo or Omnistudio Data Mapper Extract element into the structure of the Type Ahead Block. 6. In the Data Mapper Action Properties, set the **Data Mapper Interface** to the name of the Data Mapper Turbo Extract or Extract you created. 7. To pass the Type Ahead Block input to the Data Mapper, in the Data Mapper Extract Action Properties, go to **Input Parameters**. Set one **Data Source** to the **Name** of the Type Ahead Block, for example TypeAhead1. Set the corresponding **Filter Value** to Key. 8. Set any other **Input Parameters** that the Data Mapper Extract requires for other filters. 9. For a Data Mapper Turbo Extract, make sure the **Response JSON Path** in the Omniscript’s Data Mapper Turbo Action matches the Data Mapper Turbo Extract's **Extract Output Path**. 10. If needed, add fields to the Type Ahead Block. To populate the fields, set the element names to match the Data Mapper Turbo Extract or Extract’s Output JSON Path fields. For more information on populating elements, see [Load Salesforce Data into an Omniscript Using an Omnistudio Data Mapper](https://help.salesforce.com/s/articleView?id=xcloud.os_load_salesforce_data_into_omniscript_using_dataraptor_21910.htm&release=264.0.0&type=5 "Add Salesforce data to your Omniscript using a Data Mapper Turbo Action or Data Mapper Extract Action."). 11. To populate subsequent Omniscript elements with data from the Type Ahead Block’s Data Mapper, use `%StepName:TypeAheadName-Block:DROutputField%`, for example `%Step1:TypeAhead1-Block:AnnualRevenue%`. ## Use Type Ahead Block With Data JSON A Type Ahead Block can use a JSON node as its source instead of an Omnistudio Data Mapper, API, HTTP, or Remote action. This JSON node can store data from any action that outputs a list. The response from a Type Ahead Block that uses a JSON node is made client-side, eliminating the need to make server calls. For example, suppose you want to use an Integration Procedure that [eliminates duplicates in the list](https://help.salesforce.com/s/articleView?id=xcloud.os_create_list_action_remove_duplicates_std.htm&release=264.0.0&type=5 "Advanced Merge matches nodes with different names or at different levels in incoming lists. For example, instead of using a primary key that exists in both lists, you can match records based on first and last name.") the Type Ahead Block displays. You can't add an Integration Procedure to the Type Ahead Block directly as you can do with a Data Mapper. However, you can save the response from the Integration Procedure Action to a JSON node that the Type Ahead Block can reference.. 1. Use the **Send/Response Transformations** properties of the action with the source list to save the list to a root level JSON node. For example, the Integration Procedure that eliminates duplicates outputs a list named contactMerge. In the Integration Procedure Action that calls it, set the **Response JSON Path** to contactMerge and the **Response JSON Node** to the node the Type Ahead Block references, such as NoDupList. 2. In the Type Ahead Block, select **Use Data JSON**. 3. In the **Data JSON Path**, enter the name of a root level JSON node returned by the response of the action with the source list. Continuing the example of the Integration Procedure that eliminates duplicates, set the **Data JSON Path** to NoDupList. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note The Data JSON Path only accepts data at the root level of the JSON. 4. To return unfiltered results, select **Disable Data Filter** in the Type Ahead Block's properties. By default, user input is filtered using a `LIKE` match of the **Typeahead Key** field. 5. To make the Type Ahead Block behave like the Lookup element, select **Lookup Mode**. Instead of typing to return a set of values, users can select from a set of values. However, users can enter text using an Input Method Editor (IME) in the lookup mode. ## Use Google Maps Autocomplete in Omniscripts Retrieve Google Maps data and display a location in the Type Ahead Block by using the Google Maps API. Before you begin, you require a Google Maps API Key to use the Type Ahead Block's Google Maps functionality. See [Google](https://developers.google.com/maps/documentation/javascript/get-api-key). 1. [Add a Type Ahead Block](https://help.salesforce.com/s/articleView?id=xcloud.os_add_and_configure_a_type_ahead_block_15427.htm&release=264.0.0&type=5 "In edit blocks, suggest possible entries as a user types in a field, as an autosuggest or autocomplete.") to your Omniscript. 2. In Type Ahead Block's **Field Label**, enter the text to display in the Google Maps search field. 3. Select **Enable Google Maps Autocomplete** to display the Google Maps Autocomplete section. 4. In the Google Maps API Key field, enter your Google Maps JavaScript API key. If you don't have a Google Maps JavaScript API Key, obtain one from [Google.](https://developers.google.com/maps/documentation/javascript/get-api-key) 5. If you want to hide the Google Map widget, select **Hide Map**. 6. Select a country in the Country Filter field. 7. To run a search and return a Google response, preview the Omniscript. 8. To view the response, open the Action Debugger. ![The Google Maps response node in an OmniScript's Action Debugger.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/lwc_typeahead_response.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note To map the returned Google address with Google Maps Autocomplete to a Salesforce custom address field, under Response, make sure Country and State are in the same format. Here are the available response nodes: Responses return unique sets of data based on the configuration. In addition to the default response nodes, this table shows response nodes that can also be available in the Google response. For detailed information on each response node, see [Google Geocoding API](https://developers.google.com/maps/documentation/geocoding/overview#Types) (Google documentation).

Response Node

Description

street_address

A street address

route

A named route, for example, I-5

intersection

A major intersection

political

A political entity

country

A national political entity

geometry

An object that contains longitude and latitude

administrative_area_level_1

A first-order civil entity below the country level, for example, states

administrative_area_level_2

A second-order civil entity, for example, counties

administrative_area_level_3

A third-order civil entity

administrative_area_level_4

A fourth-order civil entity

administrative_area_level_5

A fifth-order civil entity

colloquial_area

A common alternative name for the entity

locality

An incorporated city

sublocality

A first-order civil entity below locality. The sublocality can contain additional civil entities in nodes from sublocality_level_1 to sublocality_level_5

neighborhood

A neighborhood

premise

A location, for example, a building

subpremise

A first-order entity below a location, for example, a building

postal_code

A postal code

natural_feature

An important natural feature

airport

An airport

park

A park name

point_of_interest

A point of interest, usually an important local entity, for example, the Golden Gate Bridge

types

An array that contains the response's type, for example, San Francisco is a type of locality

9. To map the data from a Google response node, add an element to the Type Ahead Block. Elements in the Type Ahead Block appear as a selectable Child Element in the Google Transformation section. 10. In the Google Transformations section, click **Add New Mapping**. 11. Select a child element and map it to a Google Response Node. Refer to the Action debugger's response, and map these additional nested data types by entering the correct notation in the Google Response Node field:

Response Node

Data Type

Notation Example

geometry

Object

geometry:location:lat

types

Array

types|1

12. To view your mappings, save the Omniscript and run it in preview. ## Make an HTTP Call from a Type Ahead Block Retrieve data from a URL in your Type Ahead Block using an HTTP Action. 1. Add a Type Ahead Block to your Omniscript. 2. Drag the HTTP action into the Type Ahead Block. 3. Configure your HTTP Action by entering your HTTP Path and your HTTP Method. 4. Add fields to your Type Ahead Block for the items that are being returned by the HTTP action. 5. To return unfiltered results select **Disable Data Filter** in the Type Ahead Block's properties. By default, user input is filtered against a LIKE match. # Add a Typeahead Input Element to a Flexcard (Managed Package) For the managed package runtime, add a Typeahead Input element on a Flexcard to enable users to click into a search field, which provides hints or a list of possible options based on the text the user enters. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Typeahead** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) In **Placeholder**, enter temporary text that displays inside the input field and which suggest to the user what content to enter. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. To enter the options from which the user can select, click **\+ Add New** in the **Options** section. Configure the following properties: - **Label**: Enter the visible label for the option. Click into the field to select from a list of merge fields available from your data source. Or enter plain text. - **Value**: Enter the value of the option. Click into the field to select from a list of merge fields available from your data source. Or enter plain text. - **Use As a Default Value**: Set as the default option. 6. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [Combobox Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_combobox_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains a Combobox LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 7. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 8. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 9. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - **[Flexcards Typeahead Input Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_typeahead_input_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Typeahead Input element properties are configurable in the Properties panel when you select a Typeahead element in the Flexcard Designer. Enable users to click into a search field, which provides hints or a list of possible options based on the text the user enters. # Add a Vlocity Action to a Flexcard (Managed Package) For the managed package runtime, add a reusable action to a Flexcard with a Vlocity Action element. Vlocity Actions launch Omniscripts, components, web pages, or external applications. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). See [Vlocity Actions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_vlocity_actions.htm&release=264.0.0&type=5 "For the managed package runtime, Vlocity Actions are automatically generated URLS that launch Vlocity Omniscripts, Vlocity Cards components, web pages, or external applications. Actions are typically specific to a given object type, such as Account, Contact, Policy, or Asset."). 1. From the Flexcard Designer, drag an **Action** element into a state. 2. (Optional) From the Properties panel, update the element name in the **Element Name** field. 3. Select **Vlocity Action** from the **Action Type** dropdown. 4. To select the sObject to perform the action on, click into the **Object** field. 5. To select an Action Name from the data source as a merge field, click to enable **Fetch Action Name From Datasource**. 6. To select the Vlocity Action, click into the **Vlocity Action Name** field. Before Spring '22, click into the **Action Name field**. If **Fetch Action Name From Datasource** isn’t selected, select from a list of Vlocity Actions associated with the sObject. 7. (Optional) Click into the **ContextId** field to select a context Id, such as AccountId. Before Spring '22 click into the **Context ID** field. 8. (Optional) To pass contextual data as a key/value pair, click **\+ Add New** next to **Input Parameters**, and perform the following tasks: 1. Enter a variable name in the **Key** field. 2. Enter the variable value in the **Value** field. 9. (Optional) To configure other options common among all action properties, see [Flexcards Action Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Action element properties are configurable from the Properties panel in the Flexcard Designer when you select an Action element. With the Action element, create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). What’s next: To style your action element, click **Style** to open the Style panel, and see [Flexcards Action Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_style_properties.htm&release=264.0.0&type=5 "For the managed package runtime, configure style properties specific to the Action element from the Style panel in the Flexcard Designer."). # Add a Vlocity Lightning Profiler to a Community (Managed Package) For the managed package runtime, the Vlocity Lightning Profiler component adds profile attributes related to a record to a custom Lightning page ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In your org, go to Setup > All Communities. Click the **New Community** button to create a new community. Or, choose an existing community to open by clicking **Builder** next to its name. For more information on the Community Builder, see [Community Builder Overview](https://help.salesforce.com/articleView?id=community_designer_overview.htm&type=5&language=en_US). 2. Click the blue and white lightning icon to open the Components pane. From the list of Custom Components, select **Vlocity Lightning Profiler** component and drag it to the canvas area. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_profiler_commjunity_builder_drag.png) 3. In the properties pane that pops up, enter a visible title for the component in the **Profile Title** field. 4. (Optional) If the Vlocity Profiler component is not used on a record page, enter a specific sObject ID in the **Context ID** field. 5. (Optional) Enter the values for these properties: - **Take Context ID from field on current record**: Based on a relationship field on the page, enter the relationship field name. For example, AccountId. - **Use Category Color Codes**: To enable category color codes, select this checkbox. To learn how to set attribute category colors, see [Create New Profile Attributes (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_new_profile_attributes.htm&release=264.0.0&type=5 "For the managed package runtime, attributes act like tags that provide more information about the entity in the profile. Typically, Profile Attributes are used with Vlocity Intelligence and can use attribute assignment rules. Product attributes are used with Policy Product Management."). 6. View the profile attributes in the canvas area or click the **Preview** button to view page in preview mode. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_profiler_app_builder_community_page.png) # Add Actions to a Flexcard (Managed Package) For the managed package runtime, add up to six actions to a Flexcard to launch or update an Omniscript, navigate to a web page or application, display a flyout, fire an event, or update data field values. For example, add an action on an account Flexcard that when clicked, displays the contact information for the account. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In the Flexcard Designer, drag the **Action** element from the Build panel into a state on the canvas. 2. (Optional) From the Properties panel, update the element name in the **Element Name** field. 3. Beginning Spring '22, execute multiple sequential actions from one element: 1. (Optional) To block users from interacting with the Flexcard until actions that require waiting for a response, such as a Data action, are resolved, enter true in **Show Spinner**. Or enter a merge field whose value is true, such as {requireResponse}. The user sees a spinner image and a dimmed page while waiting. Default is false. 2. Select the right arrow under **Actions** next to the default **Action** label to reveal properties to configure. 3. (Optional) To distinguish this action from other actions on this element, update **Action Label**. This label is only visible within the designer in Design view. 4. Select the type of action to execute from the **Action Type** dropdown. See [Flexcards Actions Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_actions_reference.htm&release=264.0.0&type=5 "For the managed package runtime, select from multiple ways to execute an action from a Flexcard. Create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). 5. Before Spring '22, configure one action to execute: 6. (Optional) To create another action that executes after the previous one completes, select **\+ Add New**, and repeat steps a through e. Before Spring '22, configure one action to execute: 1. Select the type of action from the **Action Type** dropdown. See [Flexcards Actions Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_actions_reference.htm&release=264.0.0&type=5 "For the managed package runtime, select from multiple ways to execute an action from a Flexcard. Create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). 2. Before Spring '22, configure one action to execute: 4. (Optional) To update the visible label for the action, enter a new label in the **Label** field. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning Summer '21, **Label** supports concatenated strings. Combine plain text and supported merge fields. For example, Update {AccountName}. 5. (Optional) To update the default icon, from the **Icon** field, perform one of these tasks: - Enter the name of the icon, such as utility:arrowdown. See [Salesforce Lightning Design System](https://www.lightningdesignsystem.com/icons/). - Click the search icon in the input field, and perform one of the following tasks: - Click to select an icon from the list available, and click **Save**. - Search for an icon in the search field, click an icon to select it, and click **Save**. 6. (Optional) To show an icon without text, check **Show Only Icon**. 7. (Optional) To show a label without an icon, check **Hide Icon**. 8. (Optional) To display the action link as a button: 1. Check **Display As Button**. 2. Select a style option from the **Variant** dropdown. For a description of each variant, see [Variations](https://lightningdesignsystem.com/components/buttons/#Variations). 9. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). What’s next: (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - **[Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5)** For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle. - **[Flexcards Actions Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_actions_reference.htm&release=264.0.0&type=5)** For the managed package runtime, select from multiple ways to execute an action from a Flexcard. Create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more. - **[Flexcards Action Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Action element properties are configurable from the Properties panel in the Flexcard Designer when you select an Action element. With the Action element, create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more. - **[Flexcards Sequential Actions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_sequential_actions.htm&release=264.0.0&type=5)** For the managed package runtime, enable an element or an event listener to execute sequential actions on a Flexcard. When there are multiple actions, the first action fires, completes, and then triggers the next action. You can use the response from the previous action to perform subsequent actions. - **[Flexcard Card Actions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcard_card_actions.htm&release=264.0.0&type=5)** For the managed package runtime, the Flexcard Card action type enables you to trigger actions specific to a record item on a Flexcard or the Flexcard itself. - **[Navigate from a Flexcard with the Navigate Action (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_navigate_from_a_flexcard_with_the_navigate_action.htm&release=264.0.0&type=5)** For the managed package runtime, navigate to an external web address, or within Lightning Experience, Lightning communities, or the Salesforce mobile app from a Navigate Action element on a Flexcard. For example, allow a user to navigate to a Policy record page by clicking an action element on a Flexcard that lists Account Policies. - **[Add a Vlocity Action to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_vlocity_action_to_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, add a reusable action to a Flexcard with a Vlocity Action element. Vlocity Actions launch Omniscripts, components, web pages, or external applications. - **[Launch a Flyout from an Action on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_launch_a_flyout_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, create a flyout to display additional information when a user clicks an action on a Flexcard. For example, a Flexcard that displays Account information can display the Primary Contact's name and email address in a flyout. - **[Launch an Omniscript from a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_launch_an_omniscript_from_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, launch an Angular or LWC Omniscript from an Omniscript Action element on a Flexcard. For example, launch a form that updates Account information based on the account Id passed from the Flexcard to the Omniscript. - **[Update an Omniscript from a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_update_an_omniscript_from_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, create an action that updates an Omniscript's data JSON from the Flexcard embedded in the Omniscript. You can embed a Flexcard inside an Omniscript as a Custom LWC. - **[Call a Data Source from an Action on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_call_a_data_source_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, trigger a data source from an action to get data from a server or post data to a server. When data is fetched from the server, the incoming data is appended to the data JSON in the card's record object or to a data node you name. If you choose to send the request without getting a response from the server, the data JSON does not update. To confirm your request is sent successfully, in Preview, view the requested data in the Action Debugger's **response**. - **[Trigger a Custom Event from an Action on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_trigger_a_custom_event_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, notify a Flexcard of an event occurring from an action on an element. Then execute an action based on the event. Custom Events are used to communicate between a child to its parent, whether it's between a child Flexcard and its parent, or between an element and the Flexcard it's on. - **[Trigger a Pubsub Event from an Action on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_trigger_a_pubsub_event_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, enable an action on a Flexcard to notify another component, such as another Flexcard on a page or application, of an event occurring. For example, update a list of products on one Flexcard from a filter on another Flexcard on the same page or application. - **[Register Dynamic Custom and Pubsub Events (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_register_dynamic_custom_and_pubsub_events.htm&release=264.0.0&type=5)** For the managed package runtime, register events based on dynamic event and channel names. Use a parent attribute, a recordId, or a session variable within the **Channel Name** and **Event Name** of a pubsub event, or the **Event Name** of a custom event. - **[Flexcards Reserved Event and Channel Names (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_reserved_event_and_channel_names.htm&release=264.0.0&type=5)** For the managed package runtime, when configuring pubsub and custom events, there are some event names and channel names that are reserved for specific purposes. These reserved names are listed here. # Add Aggregation Steps (Managed Package) For the managed package runtime, if the input to the calculation procedure is an array—for example, multiple family members are applying for insurance and want to view the total premium—the calculation procedure runs for each input. Using an aggregation step, you can aggregate the procedure results and execute additional calculations on the aggregated result. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. On the Vlocity Calculation Procedure Version Detail page, scroll down to the Pricing Calculation section. 2. In the Aggregation Step area, click **Add Step**. 3. Select **Aggregation**. 4. In the first field, enter one of the following operators: - **SUM** - **AVG** - **MIN** - **MAX** 5. Enter the variable to be aggregated enclosed in parentheses. For example, (price). 6. In the second field, enter a variable to represent the aggregated variable. For example, totalPrice. 7. Create all the other aggregation steps you need to complete the aggregation. 8. Click **Save Calculation Procedure**. # Add AI Relationship Research to Lightning Record Pages After you configure AI Relationship Research, add the relationship graph component to the Lightning Record Pages where your users work. | Permission | Required for | | --- | --- | | AI Relationship Research User | Edit Lightning Record Pages | 1. From Setup, in the Quick Find box, enter Lightning App Builder, then select **Lightning App Builder**. 2. Select the Lightning Record Page you want to edit, then select **Edit Page**. 3. In the component panel on the left, search for and select **AI Relationship Research**. 4. Drag the **AI Relationship Research** component to the position on the page where you want it to appear. 5. In the component properties panel on the right, from the **Configuration Name** list, select the AI Relationship Research configuration you activated. 6. Click **Save**, then click **Activate** if the page is not already active. After adding the component, open a record of the type you selected as an anchor object. The AI Relationship Research component appears on the page. Click **Start Research** to run your first insight generation and confirm the component is configured correctly. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-ai_relationship_research-264-0-0-production-enus/e8a67f6d-976f-4c49-88aa-357807c9081e/images/icon_tip.png) Tip Add the AI Relationship Research component to the pages your users visit most frequently during deal management, typically the Opportunity, Contact, and Account record pages. You can add the component to multiple pages using different configurations. # Add AI Solutions to Your Setup Some Einstein features require you to accept terms and review usage limitations before turning them on. Also, review which data is used for global models. - **[Turn Einstein Features On or Off](https://help.salesforce.com/s/articleView?id=xcloud.admin_einstein_features_setup.htm&release=264.0.0&type=5)** See if your Sales Cloud, Service Cloud, or Lightning Platform license comes with included Einstein features. Access to included Einstein features may be subject to usage limitations and your acceptance of additional terms. - **[Einstein and Data Usage](https://help.salesforce.com/s/articleView?id=xcloud.admin_einstein_features_data_usage.htm&release=264.0.0&type=5)** Einstein intelligence is built on data. As an Einstein customer, it’s important for you to know what data is being used in your Einstein products. Click on each product to see the data usage for all features in Commerce Cloud, Lightning Platform, Marketing Cloud Account Engagement, Marketing Cloud Growth, Salesforce Personalization, Sales Cloud, Service Cloud, Tableau Generative AI, and Slack AI. # Add an Action Message (Managed Package) For the managed package runtime, display an action message beneath the loading spinner while the action is running.Beginning with Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20, LWC Omniscripts support custom Action messages. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In an Action, expand the User Messages property. 2. Check **Enable Action Message**. 3. In **Action Message**, enter a custom message, or leave the default message. # Add an Action to Update Field Values on a Flexcard (Managed Package) For the managed package runtime, with a Card Action, create an action that updates specific field values on a Flexcard. For example, allow your customer service reps to update the status of a case to closed when the case is resolved. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From the Flexcard Designer, drag an **Action** element into a state. 2. Select **Card** from the **Action Type** dropdown. 3. From the **Type** dropdown, select **Set Values**. 4. To add the fields to update, in the **Set Values** section, click **\+ Add New**. 5. In the **Key** field, enter the name of a field returned from a data source. Or enter a session variable to update, such as {Session.time}. See [Flexcards Context Variables](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, global and local context variables are available to a Flexcard to provide context to data sources, actions, and other components. All variables are case sensitive."). 6. In the **Value** field, enter a new field value as a string or merge field, such as New Value or **{Name}**. 7. (Optional) To configure other options common among all action properties, see [Flexcards Action Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Action element properties are configurable from the Properties panel in the Flexcard Designer when you select an Action element. With the Action element, create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). What’s next: To style your action element, click Style to open the Style panel, and see [Flexcards Action Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_style_properties.htm&release=264.0.0&type=5 "For the managed package runtime, configure style properties specific to the Action element from the Style panel in the Flexcard Designer."). # Add an Apex Class Permissions Checker (Managed Package) For the managed package runtime, enable specific access to the VlocityOpenInterface Apex class used by remote action APIs for each user or profile, permission set, or permission set group. Use the Apex class check setting to enable users with permission sets or permission set groups to call allowlisted Apex classes remotely. Configure an Apex class permissions checker to ensure that users require explicit access to the Apex class that administers the remote action called from an Omniscript, Integration Procedure, Flexcard, Classic Card, or REST API. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). For example, after you create a Lightning Platform site, publicly available APIs are enabled for the Site User profile based on the profile's Apex class access to RestResource Apex classes. When you add an Apex class permissions checker, you ensure that unauthorized users, such as a [guest user](https://developer.salesforce.com/docs/atlas.en-us.community_templates.meta/community_templates/rss_config_guest_user_profile.htm), can't access classes through the Vlocity/V1/GenericInvoke/ API. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Enable the `ApexClassCheck` setting to ensure the principle of least privilege and that unintentional unauthorized access isn’t provided to guest users through the Vlocity/V1/GenericInvoke/ API. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important During the week of February 2, 2026, Salesforce enables the ApexClassCheck setting by default to enhance org security. Review and prepare your configuration for a seamless transition and to prevent potential service interruptions. Previously, Apex class checks were performed only for the Apex classes assigned to the user’s profile. With the new advanced Apex class check setting, perform Apex class checks for both the Apex classes assigned to the user’s profile and the Apex classes assigned to the user's permission sets or permission set groups. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note In Vlocity Industries managed package orgs, Apex class validation during direct Integration Procedure execution is enforced through the ApexClassCheckForIP flag, as this scenario is not covered by the ApexClassCheck flag alone. This behaviour applies to Insurance (INS), Communications, Media, and Energy (CME), and Financial Services Cloud – Insurance (FSC-INS). See [Advanced Apex Class Check for Integration Procedures in Omnistudio for Managed Packages](https://help.salesforce.com/s/articleView?id=xcloud.os_ip_advanced_apex_class_check.htm&release=264.0.0&type=5 "The advanced Apex class check is performed through the ApexClassCheckForIP security flag. The ApexClassCheckForIP flag strengthens Omnistudio security by enforcing Apex class access checks during Integration Procedure execution. This enhancement makes sure that users have the required permissions to run custom Apex classes referenced within Integration Procedures."). If you're an Omnistudio customer, review your configuration for these insecure configurations, which could provide broader unintentional access to unauthorized Apex classes than desired: - Implemented the `InvokeMethod` of `VlocityOpenInterface` class within an Omniscript, Integration Procedure, a Flexcard, or a Data Mapper. - Added sensitive implementation inside `InvokeMethod`. - Provided Apex class access to the `BusinessProcessDisplayController`, `ApplicationService`, and `ComponentController` classes for the guest user profile. - Disabled the `ApexClassCheck` setting. 1. If the Omnistudio license isn’t available in your Salesforce org (for example, if you have installed Omnistudio as part of the CME or Insurance managed package), enable the `ApexClassCheck` setting from the General Settings section. 1. From Setup, in the Quick Find box, enter Custom Settings, and then select **Custom Settings**. 2. Click **General Settings**. 3. Click **Manage**. 4. Click **New**. 5. In Name, enter ApexClassCheck. 6. In Value, enter true. ![ApexClassCheck in General Settings](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/os_apex_class_check.png) 7. Save your changes. 2. If the Omnistudio license is enabled in your org, enable the `ApexClassCheck` setting from the Omni Interaction Configuration section: 1. From Setup, in the Quick Find box, enter Omni Interaction Configuration, and then select **Omni Interaction Configuration**. 2. Click **New Omni Interaction Configuration**. 3. In Name and in Label, enter ApexClassCheck. 4. In Value, enter true. ![New Omni Interaction Configuration](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/os_vlocity_new_omni_interaction_config.png) 5. Save your changes. # Add an Authentication Provider to Your Experience Cloud Site’s Login Page After you set up an authentication provider, make it easy for customers and partners to use it by adding it to your Experience Cloud site’s login page. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Professional, Enterprise, Unlimited, and Developer Editions
User Permissions Needed
To customize an Experience Cloud site:
  • Be a member of the site AND Create and Set Up Experiences

    OR

  • Be a member of the site AND View Setup and Configuration AND be an experience admin, publisher, or builder in that site
To publish an Experience Cloud site:
  • Be a member of the site AND Create and Set Up Experiences

    OR

  • Be a member of the site AND an experience admin or publisher in that site
To edit the authentication provider settings:

Customize Application

AND

Manage Auth. Providers

1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **All Sites**. 2. Next to your site, click **Workspaces**. 3. Select **Administration**, and then select **Login & Registration**. 4. Under Login Page Setup, select an authentication provider to show on the login page. 5. Save your settings. 6. To see your changes, click **Settings**, and then open your site URL in a private (incognito) browser. Your authentication provider appears as a button under the login form. When users click the button, they’re redirected to the provider to log in. # Add an Authentication Provider to Your Org’s Login Page After you set up an authentication provider, make it easy for your employees to use it by adding it to your org’s login page. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **My Domain**. 2. Next to Authentication Configuration, click **Edit**. 3. For Authentication Service, select your authentication provider. 4. Save the settings. 5. In a private (incognito) browser, open your Salesforce login URL. Your authentication provider appears as a button under the login form. When users click the button, they’re redirected to the provider to log in. # Add an Email Address When you log in with your email address again, the page lists previous email addresses that you signed in with. You can choose an email address from the list or log in with a different email address. ### Required Editions
Available in: Lightning Experience
Available in: all editions
![Log in with an email address that is not in the list.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/gid_welcome_back.png) 1. Open the Log In with Email page. The Welcome Back page displays your previously verified email addresses. 2. Select **Use a Different Login**. 3. Enter the email address for the account that you want to log in with, and click **Continue**. 4. Complete the login process. # Add an Email Input Element to a Flexcard (Managed Package) For the managed package runtime, add an Email Input element on a Flexcard to enable users to enter a valid email address. From the Properties panel, configure properties and custom attributes, add an action, and add conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Build panel, click **Inputs**, and drag the **Date** element onto the canvas. 3. (Optional) From the Properties panel, update the element name in the **Element Name** field. 4. Configure properties common to all Input elements: - (Optional) In **Field Binding**, bind the value of the input element to an existing or new data field. See [Bind a Flexcard Input Value to a Data Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_bind_a_flexcard_input_value_to_a_data_field.htm&release=264.0.0&type=5 "For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input."). - In **Field Label**, enter the label that appears next to the element. - (Optional) In **Placeholder**, enter temporary text that displays inside the input field and which suggest to the user what content to enter. - (Optional) Check **Required** if the user must enter or select a value for this input element. - (Optional) Check **Read-only** to disable the ability to modify the input values. - (Optional) In **Help Text**, enter helpful text about the purpose of the input field. This feature adds an info icon (i) next to the element's label, which when hovered over displays the text. 5. (Optional) Click into **Default Value** to select a default input value from a merge field. Or, enter a value as plain text. 6. (Optional) To configure additional properties available to the element, click **\+ Add New** in the **Custom Attributes** section. For each new attribute, perform the following tasks: 1. Click into the **Attribute** field to select from an attribute in the dropdown. See [Input Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_input_lightning_web_component_readme.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains an Input LWC ReadMe for each Vlocity release.") for available attributes. 2. In the **Value** field, enter a value for the attribute. 7. To execute an action when a user interacts with the input element, click **\+ Add Action**, and see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 8. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 9. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - **[Flexcards Email Input Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_email_input_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Email Input element properties are configurable in the Properties panel when you select an Email element in the Flexcard Designer. Enable users to enter a valid email address. # Add an Event Listener to a Flexcard (Managed Package) For the managed package runtime, add an event listener that listens for an event fired from a component and performs an action in response. With a Pubsub Event, listen for an event from another component, such as another Flexcard on the same Lightning page. With a Custom event, listen for an event fired from a child Flexcard or from an element on the card. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) example Example: Update Product List Let's say you want to create a Lightning page that displays a filterable list of products. You need two Flexcards, one that triggers an event, and another that listens for the event and executes an action. Your Filter Flexcard displays the filters, and has an Apply button that when clicked triggers an event. Your Product List Flexcard displays product information, listens for the triggered event, and then executes an action. When a user selects a filter, such as <$2000, and clicks the Apply button from the Filter Flexcard, only products that cost less than $2000 are visible in the Product List Flexcard. The event triggers an action that updates the product list. Before You Begin Create the Custom or Pubsub event. To create the Custom event, see [Trigger a Custom Event from an Action on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_trigger_a_custom_event_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, notify a Flexcard of an event occurring from an action on an element. Then execute an action based on the event. Custom Events are used to communicate between a child to its parent, whether it's between a child Flexcard and its parent, or between an element and the Flexcard it's on."). To create the Pubsub event, see [Trigger a Pubsub Event from an Action on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_trigger_a_pubsub_event_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, enable an action on a Flexcard to notify another component, such as another Flexcard on a page or application, of an event occurring. For example, update a list of products on one Flexcard from a filter on another Flexcard on the same page or application."). 1. In the Flexcard Designer, click **Setup** to open the Setup panel. 2. In the **Event Listener** section, click **\+ Add New**. 3. Select a [Custom](https://help.salesforce.com/s/articleView?id=xcloud.os_trigger_a_custom_event_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, notify a Flexcard of an event occurring from an action on an element. Then execute an action based on the event. Custom Events are used to communicate between a child to its parent, whether it's between a child Flexcard and its parent, or between an element and the Flexcard it's on.") or [Pubsub](https://help.salesforce.com/s/articleView?id=xcloud.os_trigger_a_pubsub_event_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, enable an action on a Flexcard to notify another component, such as another Flexcard on a page or application, of an event occurring. For example, update a list of products on one Flexcard from a filter on another Flexcard on the same page or application.") **Event Type**. 4. To configure a Custom event, in the **Event Name** field, enter the name of the event, such as reloadCard. Beginning Spring '22, to register dynamic events based on a parent attribute or a session variable, **Event Name** supports `{Parent.attr}` (on a [child Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_embed_flexcard_inside_another_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, embed a reusable Flexcard as a child inside another Flexcard. The child Flexcard can have its own data source. Or, the parent can override the child's data source with its own data source. The parent can also pass specific data to the child, such as its recordId to use as the child's contextId.") only), `{recordId}`, and `{Session.var}` context variables. For example, enter an event name such as event\_{Parent.name} or evnt{Session.recordLimit}. See [Register Dynamic Custom and Pubsub Events (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_register_dynamic_custom_and_pubsub_events.htm&release=264.0.0&type=5 "For the managed package runtime, register events based on dynamic event and channel names. Use a parent attribute, a recordId, or a session variable within the Channel Name and Event Name of a pubsub event, or the Event Name of a custom event."). 5. To configure a PubSub event: 1. In the **Channel Name** field, enter the channel in which the event is posted. Beginning Winter '22, **Channel Name** supports registering dynamic events based on the `{recordId}`. For example, enter a channel name such as productViewCard\_{recordId}. You must define the context variable in your Flexcard's datasource configuration to see expected results in Preview. Beginning Spring '22, to register dynamic events based on a parent attribute or a session variable, **Channel Name** supports the `{Parent.attr}` (on a [child Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_embed_flexcard_inside_another_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, embed a reusable Flexcard as a child inside another Flexcard. The child Flexcard can have its own data source. Or, the parent can override the child's data source with its own data source. The parent can also pass specific data to the child, such as its recordId to use as the child's contextId.") only) and `{Session.var}` context variables. For example, enter a channel name such as chnl{Parent.name} or channel\_{Session.recordLimit}. See [Register Dynamic Custom and Pubsub Events (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_register_dynamic_custom_and_pubsub_events.htm&release=264.0.0&type=5 "For the managed package runtime, register events based on dynamic event and channel names. Use a parent attribute, a recordId, or a session variable within the Channel Name and Event Name of a pubsub event, or the Event Name of a custom event."). 2. In the **Event Name** field, enter the name of the event, such as reloadCard. 3. If your action type is [Card](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_reload_action_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, with a Card Action, create an action that reloads a Flexcard. For example, create a FLexCard that listens for an event from another Flexcard and reloads itself when the event is fired."), and type is **remove**, in the **Record Index** field, update the index to indicate which record to remove. For example, enter 0, to remove the first record, or 3 to remove the fourth record. 6. To create the action, perform the following tasks: 1. In the **Action Properties** section, select an **Action Type** from the dropdown. See [Flexcards Actions Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_actions_reference.htm&release=264.0.0&type=5 "For the managed package runtime, select from multiple ways to execute an action from a Flexcard. Create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). 2. To configure the selected Action Type, see [Flexcards Action Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Action element properties are configurable from the Properties panel in the Flexcard Designer when you select an Action element. With the Action element, create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). 3. (Optional) Beginning Winter '22, to execute the action depending on the value of a data field, in the **Conditions** section, click + **Add New**. See [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 4. Click **Save**. 5. (Optional) Beginning Winter '22, execute sequential actions from an event listener. See [Trigger Sequential Actions from an Event Listener on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_trigger_sequential_actions_from_an_event_listener_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, enable an event listener to execute multiple actions sequentially on a Flexcard. When an event listener has multiple actions, the first action fires, completes, and triggers the next action in the sequence. You can use the response from the previous action to perform subsequent actions. For example, create an event listener that updates to the value of a data field with a Set Values action, then passes the updated value to an Omniscript with an Update Omniscript action."). - **[Trigger Actions on Record Change (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_trigger_actions_on_record_change.htm&release=264.0.0&type=5)** For the managed package runtime, from an Event Listener, enable a Flexcard to listen for changes on a record the Flexcard is on, then trigger actions. - **[Flexcards Event Listener Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_event_listener_properties.htm&release=264.0.0&type=5)** For the managed package runtime, event Listener properties are configurable from the Setup panel in the Flexcard Designer. Add a listener for a PubSub or Custom event that is triggered when a user performs an action. # Add an Existing Document Search for or provide the link to an existing Quip document to link it to a Salesforce record. ### Required Editions
Available in: Lightning Experience
You can add a document to the Quip Document component only if your admin configured the component to let you do so. 1. In the Quip Document component, click **Choose Document**. ![Before you embed a document, the Quip Document component includes three buttons: Choose Document, New Document, and Open Template Library.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_document_component.png) 2. Search for your document, or provide the URL to it in the Add By URL tab. ![The window includes a Search tab with a search bar and an Add by URL tab with a text field.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_document_component_choose_document.png) 3. Click **Update**. The document appears in the Quip Document component. In the background, Salesforce links the document to the record. If the record also includes the Quip Associated Documents component, the document is listed there when the link is complete. #### See Also - [Considerations for Working with Embedded Documents](https://help.salesforce.com/s/articleView?id=xcloud.quip_sf_considerations_for_working_with_embedded_documents.htm&release=264.0.0&type=5 "You can generally work with an embedded document like any other document, and there are a few things to keep in mind.") # Add an Icon or an Image to a Flexcard Add icons or images to a Flexcard from an existing library or use your own. Then, add actions, CSS classes, and configure their dimensions to fit your company or institution. 1. From the App Launcher, find and select **Flexcards**. 2. Expand a Flexcard and select a version. 3. If needed, deactivate the Flexcard for editing the Flexcard. 4. Drag the **Icon** or **Image** element from the elements panel to the canvas. 5. Enter the icon name or image source information: 1. To use a custom icon or image from an external source, enter the absolute URL of the image. Ensure that you add that URL to the trusted URLs list. See [Manage Trusted URLs](https://help.salesforce.com/s/articleView?id=xcloud.security_trusted_urls_manage.htm&type=5&language=en_US). 2. To use an existing file, search for it by clicking the magnifier icon. When you upload a local image, Salesforce copies it to the Content Document library for reuse. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Salesforce recommends using an image or icon as a static resource instead of uploading it. 3. For images and icons, to use a file uploaded as a static resource (Image: Image source; Icon: Icon Source URL), enter /resource/resourceName, where resourceName is the name of the static resource. To create a static resource, see [Define Static Resources](https://help.salesforce.com/s/articleView?id=platform.pages_static_resources_create.htm&type=5&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Images used in Flexcards on Experience Cloud pages must be static resources. 6. Enter the remaining information as needed. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note For images, the Title field supports concatenated strings, including a combination of plain text and supported merge fields, such as `{Label.AccountName} > {Name}`. # Add an Icon to a Flexcard (Managed Package) For the managed package runtime, display an SVG Icon on a Flexcard. Select from a Salesforce SVG icon or a custom action. You can also link the icon to an action. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From the Flexcard Designer, drag an Icon element from the Build panel into a state on the canvas. 2. (Optional) From the Properties panel, update the element name in the **Element Name** field. 3. From the **Type** dropdown, select an icon type. 4. To configure a **Custom** icon, enter the source of the icon in the **Source** field. 5. To configure **Salesforce SVG** icon properties: 1. To select the icon, from the **Icon** field, perform one of the following tasks: - Enter the name of the icon, such as utility:arrowdown. See [Salesforce Lightning Design System](https://www.lightningdesignsystem.com/icons/). - Click the search icon in the input field, and perform one of the following tasks: - Click to select an icon from the list available, and click **Save**. - Search for an icon in the search field, click an icon to select it, and click **Save**. 2. (Optional) Select a style variant from the **Variant** dropdown. 6. (Optional) To update the size of the icon, select a new size from the **Size** dropdown. 7. To link the icon to an action, click **\+ Add Action**. To configure action properties, see [Flexcards Action Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Action element properties are configurable from the Properties panel in the Flexcard Designer when you select an Action element. With the Action element, create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). 8. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 9. (Optional) To style your icon element, click **Style** to open the Style panel, and see [Flexcards Icon Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_icon_style_properties.htm&release=264.0.0&type=5 "For the managed package runtime, configure style properties specific to the Icon element from the Style panel of the Flexcard Designer."). What’s next: Preview your Flexcard. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). - **[Flexcards Icon Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_icon_properties.htm&release=264.0.0&type=5)** For the managed package runtime, icon element properties are configurable in the Property Panel when you select an Icon element in the Flexcard Designer. With the Icon element, display a Salesforce SVG Icon or a custom icon on a Flexcard. # Add an Image to a Flexcard (Managed Package) For the managed package runtime, add an image to a Flexcard in the Flexcard Designer. With the Image element, upload an image from your computer, use an image from a Salesforce library, enter a URL, or use a merge field from a data source. Link the image to an action, add classes, and adjust the size of the image relative to the canvas size. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note All labels in the Properties panel have Custom Label support. Omniscripts and Flexcards support all image file types by default. If set, the lightning-file-upload `accept` attribute filters file types in the user's file browser. If set, the **Don't allow HTML uploads as attachments or document records** security setting disallows .svg image files. See [Lightning Web Component File Upload](https://developer.salesforce.com/docs/component-library/bundle/lightning-file-upload/documentation). 1. From the Flexcard Designer, drag an **Image** element from the Build panel into a state on the canvas. 2. (Optional) From the Properties panel, update the element name in the **Element Name** field. 3. Select the **Image Source** from one of these options: 1. To display an image from an external source, enter the absolute URL of the image. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If your image doesn't show, add the URL of the image to the Trusted URLs list in your org. If you're adding your Flexcard to a site, you must add the URL to the Trusted URLs list. See [Manage Trusted URLs](https://help.salesforce.com/s/articleView?id=xcloud.security_trusted_urls_manage.htm&type=5&language=en_US). 2. To upload a file from your computer, click the search icon, then click **Upload Files**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Uploaded files are saved to your org's library of documents for reuse. 3. To use a file from a library in your Salesforce CRM Content or Salesforce Files, click the search icon, then select an image from the **Select an Image from Content Document** dropdown. 4. To use a file uploaded as a static resource, enter /resource/resourceName , where resourceName is the name of the static resource. To create a static resource, see [Define Static Resources](https://help.salesforce.com/s/articleView?id=platform.pages_static_resources_create.htm&type=5&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Images used in Flexcards on Experience Cloud pages must be static resources. 4. (Optional) To adjust the size of the image relative to the canvas size, select an option from the **Size** dropdown. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note By default, **Fit Content** is selected, enabling the image to fill the container of the Image element, or the container of a [Block](https://help.salesforce.com/s/articleView?id=xcloud.os_group_elements_inside_a_block_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, combine logical groups of elements inside a collapsible container with the Block element on a Flexcard. For example, group an Account's basic information together, and separately, group the account's Contact information together.") element that it's inside. On the canvas, adjust the element size to fit your image as needed. 5. For accessibility, in the **Alternative Text** field, enter text describing the image. 6. (Optional) Enter a Newport, SLDS, or [custom CSS](https://help.salesforce.com/s/articleView?id=xcloud.os_create_custom_css_within_the_flexcard_designer.htm&release=264.0.0&type=5 "For the managed package runtime, create custom CSS classes within the Flexcard Designer to apply to Flexcard elements or supported fields inside elements. Create custom CSS classes when the design interfaces in the Style panel do not meet your design needs.") class in the **Extra Class** field. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note By default, `slds-image--card slds-align_absolute-center` populate the field. 7. (Optional) To display an image caption, enter text in the **Title** field. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning with Summer '21, **Title** supports concatenated strings. Combine plain text and supported merge fields. For example, {Label.AccountName}>{Name}. 8. (Optional) To style the image caption, enter a class in the **Title Class** field. 9. (Optional) To launch an action on click of the element, see [Add a Click Event to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_click_event_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element on a Flexcard to perform an action when clicked. Supported elements include Image, Block, Icon, and Toggle."). 10. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 11. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). What’s next: Preview your Flexcard. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). - **[Flexcards Image Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_image_properties.htm&release=264.0.0&type=5)** For the managed package runtime, image element properties are configurable in the Property Panel when you select an Image element in the Flexcard Designer. With the Image element, display an image on a Flexcard. # Add an LWC Omniscript to a Lightning or Experience Page (Managed Package) For the managed package runtime, add an Omniscript to a Lightning or Experience page by adding the Lightning web component generated when you activate an Omniscript. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before you begin, deploy an LWC Omniscript to make it available in the Experience Builder and the Lightning App Builder. Then review the options for launching an LWC Omniscript from a Lightning or Experience Page. See [Activate and Deploy an LWC Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_and_deploy_an_lwc_omniscript.htm&release=264.0.0&type=5 "For the managed package runtime, activate and deploy Omniscripts to make them available to Experience sites, Lightning pages, custom LWCs, and Lightning tabs.") and [Launch LWC Omniscripts from Lightning and Experience Pages (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_launch_lwc_omniscripts_from_lightning_and_experience_pages.htm&release=264.0.0&type=5 "For the managed package runtime, launch LWC Omniscripts in Experience and Lightning pages using the generated Omniscript Component or the LWC Omniscript Wrapper component."). - **[Add your Omniscript to a Lightning Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_your_omniscript_to_a_lightning_page.htm&release=264.0.0&type=5)** For the managed package runtime, add your Omniscript to a Salesforce Lightning page. - **[Add your Omniscript to an Experience Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_your_omniscript_to_an_experience_page.htm&release=264.0.0&type=5)** For the managed package runtime, add your Omniscript to a Salesforce Experience page. # Add an Omniscript Component to an Adobe Experience Manager Page (Managed Package) For the managed package runtime, after ceating the Adobe Experience Manager (AEM) page, add the Omniscript component to the page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From the AEM page, change the mode from **Design** back to **Edit**. 2. Once in **Edit** mode, click on **Drag Components Here**, and click the **\+** icon. 3. Connect the page to Salesforce by selecting the **Salesforce Cloud Services Authentication** component. 4. Configure the new component by selecting the component, and clicking on the configuration icon. 5. In the **Edit Dialog** modal, click the **Configuration** field, select the name of your Connected App, enter a **Salesforce Namespace Override**, and click **Save**. 6. (Optional) Add a proxy in the Proxy URL field. 7. To add an Omniscript component, click on **Drag Components Here**, click the **\+** icon, and select **Omniscript Universal**. 8. Configure the Omniscript Universal component by selecting the component, and clicking on the configuration icon. 9. For the path, enter the query and path you use for your active Omniscript with the following exception: If merge indicators are included, e.g., `{0}`, remove them or replace them with hardcoded values. 10. (Optional) Apply Newport styling by adding the parameter layout=Newport to the path. 11. Save the configuration and view the Omniscript in the component to ensure the connection was successful. # Add an Omniscript Lightning Web Component to OmniOut (Managed Package) For the managed package runtime, download and configure an Omniscript to use it off-platform in OmniOut. Download your Omniscript LWC from the LWC Omniscript Designer, add the component folder to the OmniOut project, and configure files for HTML and CSS. Before you begin: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Install OmniOut's required dependencies. See [Install OmniOut Dependencies (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_install_omniout_dependencies.htm&release=264.0.0&type=5 "For the managed package runtime, configure and install the OmniOut dependencies using a command-line-tool. Install the tools necessary to build your OmniOut app and view it locally.") 2. (Optional) Configure Omniscript to include nested custom Lightning web components in OmniOut. See [Include Nested Custom LWCs in Your OmniOut Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_include_nested_custom_lwcs_in_your_omniout_omniscript.htm&release=264.0.0&type=5 "For the managed package runtime, map nested custom Lightning web components in your Omniscript to include them in your OmniOut project. Lightning web components that override or map to an Omniscript element are automatically downloaded with the off-platform Omniscript LWC."). To add an Omniscript Lightning Web component to OmniOut: 1. Open an Omniscript in your Salesforce org, and click **Activate**. 2. Click the **Download Off Platform LWC** button and uncompress the downloaded file. ![The Download Off-Platform LWC button's location in the LWC OmniScript Designer.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/download_off_platform_button.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If your Omniscript includes Custom LWCs from a managed package, the Custom LWCs may not work. Custom LWCs that exist in a managed package only work if they’re off-platform compatible. 3. Copy the component in the lwc folder of your downloaded component into the **./src/modules/vlocityomniscript** folder of your **OmniOut LWC** project. 4. In an Omniscript Designer, copy the Omniscript tag using one of these options: - In the LWC Omniscript Designer, click the dropdown menu, click **How To Launch**, and copy one of the component tags. ![Embed component tags for LWC OmniScripts in the LWC OmniScript Designer](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/two_omniscript_component_tags.png) - In the Classic Designer, copy the LWC Omniscript component tag from the Script Configuration properties. ![Embed component tag for LWC OmniScripts in the Classic Designer's Script Configuration section](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/classic_component_tag.png) - In the Classic Designer, copy the LWC Omniscript component code from one of the examples found in the **How to Launch activated script section** of the Omniscript. ![Embed component tags for LWC OmniScript components in the Classic Designer.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/classic_lwc_embed.png) 5. In Visual Studio Code, open the **./src/index.html** file and replace the component tag with your Omniscript component tag. 6. Edit your component tag by replacing `c--` with `vlocityomniscript-` and save the file. ![OmniScript component tag example in an index.html file](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/component_tag_omniout.png) 7. To import and define your component, open the **./src/index.js** file and take these steps: 1. Replace the sample component import with your component's file path. ``` import VlocApp from 'vlocityomniscript/typeExampleSubtypeExampleEnglish'; ``` ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/omniout_import_component.png) 2. Replace the sample component tag with your modified component tag and remove the closing tag and angle brackets. ``` customElements.define('vlocityomniscript-type-example-subtype-example-english', buildCustomElementConstructor(VlocApp)); ``` ![OmniOut Component Tag](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/omniout_component_tag.png) 8. (Optional) In the Omniscript component tag, remove the `run-mode="localScriptDef"` attribute to check if the Omniscript is active in Salesforce. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note When running a multi-language Omniscript, the `run-mode="localScriptDef"` attribute forces the Omniscript to use the locally defined custom labels. If `run-mode` isn’t present, a connection is made to retrieve the custom labels. 9. (Optional) In the Omniscript component tag, add `dir="rtl"` to force the Omniscript styles to load right-to-left regardless of the Omniscript language. Without this attribute, right-to-left languages still load with right-to-left styling. Omniscript provides beta support for right-to-left styling. ``` ``` 10. (Optional) In **Index.html**, uncomment the Newport style sheets to apply Newport styling. ``` ``` 11. In **Index.html**, uncomment the appropriate Script file for each of these elements that exist in your Omniscript:

Element

Script File

PDF Action

<script src="/vlocityresources/javascript/VlocityPdf.js"></script>

Type Ahead Block using Google Maps

Uncomment this file, and in the key parameter, enter your API key.

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key={YOUR_API_KEY_HERE}&libraries=places">
</script>
12. In **Index.html**, include the SLDS styles even when using Newport styles, if these elements exist in your Omniscript:

Element

Style Sheets

Note

File

<!-- SLDS styles -->
<link rel="stylesheet" type="text/css" href="/slds/assets/styles/salesforce-lightning-design-system.css">
<link rel="stylesheet" type="text/css" href="/vlocityresources/slds/styles/OmniLwcUtilsCss.css">

LWC OmniOut supports file uploads up to 30 MB.

Image

<!-- SLDS styles -->
<link rel="stylesheet" type="text/css" href="/slds/assets/styles/salesforce-lightning-design-system.css">
<link rel="stylesheet" type="text/css" href="/vlocityresources/slds/styles/OmniLwcUtilsCss.css">

LWC OmniOut supports image uploads up to 30 MB.

13. Save your file. 14. To restart the server and view your Omniscript, run the command `npm run watch` in your terminal console. What’s next: [Create a Connected App for OmniOut (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_connected_app_for_omniout.htm&release=264.0.0&type=5 "For the managed package runtime, enable the external connection to interact with Salesforce by configuring a Connected App in Salesforce. Create a Connected App to make external calls from OmniOut. Connected Apps provide OmniOut with an access token that enables proxies and login authentication to work."). # Add and Configure a Type Ahead Block (Managed Package) For the managed package runtime, configure how users can create and edit records in Edit Block. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Add the **Type Ahead Block** element to the Omniscript canvas. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Place a Type Ahead Block directly inside a Block element only. Omniscript does not support nesting a Type Ahead Block inside a Block at depth 2 or deeper. The designer prevents this configuration, and the Type Ahead Block does not render even when added through JSON. A Block element that contains a Type Ahead Block supports only one Block element. Adding multiple nested Blocks causes errors. 2. Add an Action element into the Type Ahead Block to retrieve data or seed the Type Ahead Block with data. Type Ahead Blocks only support using a single action. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Prior to Vlocity Insurance and Health Spring '20, in an LWC Omniscript, if an action returns nested response data, you must trim the path in the **Response JSON Node** field. For example, if **Response JSON Path** is set to the nested node %data:years%, the **Response JSON Node** must be set to %years% or VlocityNoRootNode.
Supported Data Sources Description Type Ahead Example

Data JSON

Accesses an array of data present in the Omniscript's data JSON.

Use Type Ahead Block With Data JSON (Managed Package)

Data Mapper Extract Action

Retrieves internal or external Salesforce data from an Omnistudio Data Mapper Extract.

Use Type Ahead Block with Omnistudio Data Mapper (Managed Package)

Google Maps Auto Complete

Calls a Google Maps API to retrieve Google Maps data.

Using Google Maps Autocomplete with Omniscript (Managed Package)

HTTP Action

Retrieves external data.

Make an HTTP Call from a Type Ahead Block (Managed Package)

Remote Action

Retrieves data from an Apex class.

—
3. Add Input elements into the Type Ahead Block to map response data. To hide an element, such as an Id, from the user, prefill it with data from the TypeAhead using these steps: 1. From the element properties panel, click **Edit as JSON**. The JSON definition of the element is displayed. 2. Set the **hide** property's value to **true**. 3. Check the box labeled **Available for Prefill When Hidden**. 4. Configure additional properties in the Edit Block to set a user's data access. See [Type Ahead Block Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_type_ahead_block_properties.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains information on Type Ahead Block properties."). 5. Beginning with Vlocity Insurance and Health Spring '20, Add custom styling and behavior by overriding LWC Type Ahead Block components. The **LWC Component Override** field only overrides the Type Ahead Component.

Type Ahead Block LWCs

Description

omniscriptTypeahead

Overrides the Type Ahead component that lists the data results.

omniscriptTypeaheadBlock

Overrides the Type Ahead Block component that embeds the Type Ahead component.

progressBar

LWC Type Ahead Blocks display a progress-bar when retrieving data results. See Base Vlocity LWC ReadMe Reference (Managed Package).

# Add and Edit Components Add a component to a screen and configure its properties. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Foundations, or Agentforce 1 or Einstein 1 Editions
User Permissions Needed
To add and edit components: Manage mySalesforce Apps
1. In the Design tab, open the components panel. 2. Drag a component onto a highlighted drop area on the canvas. 3. Drop the component in the required position. It snaps into place, and neighboring components adjust. 4. Select the component. 5. Change its fields in the properties panel. The canvas updates as you make changes. 6. Select an empty area of the canvas to clear the selection. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mobile_ama-264-0-0-production-enus/07b30a64-6461-4c63-9451-e94162994712/images/icon_note.png) Note You can also use the Agentforce panel to add and edit components. Use natural language prompts to make changes to the components. Make edits manually or using Agentforce until you reach your desired effect. # Add and Modify Account Attributes (Managed Package) For the managed package runtime, an Omnistudio Data Mapper Load adds or modifies Profile Attributes for the account with the specified Id. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before you create this Data Mapper Load, you must create the Profile Attributes. Follow the steps at [Create New Profile Attribute Categories (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_new_profile_attribute_categories.htm&release=264.0.0&type=5 "For the managed package runtime, the type of attribute is defined at the Attribute Category level. Attributes Categories must created before you can add attributes to the category. Typically, Profile Attributes are used with Vlocity Intelligence and can be automatically assigned (see ).") and [Create New Profile Attributes (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_new_profile_attributes.htm&release=264.0.0&type=5 "For the managed package runtime, attributes act like tags that provide more information about the entity in the profile. Typically, Profile Attributes are used with Vlocity Intelligence and can use attribute assignment rules. Product attributes are used with Policy Product Management.") to create these objects: - An Attribute Category with: - **Name** — AccountLevel - **UI Control Type** — **On-Off** - **Applicable Type** — **Account** - **Applicable Subtype** — **Profile Attribute** - An Attribute Category with: - **Name** — AccountStrength - **UI Control Type** — **1-5 Scale** - **Applicable Type** — **Account** - **Applicable Subtype** — **Profile Attribute** - An Attribute in the AccountLevel Attribute Category with a **Name** and **Code** of GoldStarAcct - An Attribute in the AccountStrength Attribute Category with a **Name** and **Code** of NumberOfStars The input JSON for this Data Mapper Load contains the Account Id and values for the two Profile Attributes, for example: ``` { "Id": "0014N00001goyP8QAI", "GoldStarAcct": "On", "NumberOfStars": 5 } ``` To create this example Data Mapper Load: 1. Navigate to the **Omnistudio Data Mapper** tab and click **New**. The **Create: Data Mapper Interface** dialog is displayed. 2. Enter settings as follows and click **Save**: - **Data Mapper Interface Name**: A descriptive name of your choice - **Interface Type**: Load - **Input Type**: JSON - **Output Type**: SObject 3. On the Objects tab, click **Add Object** and choose **Account**. 4. Go to the Fields tab and the Account subtab. Click the **+** icon and add the following mappings:

Input JSON Path

Domain Object Field

Other Settings

Id

Id

Upsert Key

GoldStarAcct

@GoldStarAcct

Output Data Type: String

NumberOfStars

@NumberOfStars

Output Data Type: Integer

5. On the Preview tab, test the Data Mapper using input with the same structure as the sample input above, substituting an Account Id from your org and Profile Attribute values of your choice. 6. After you create this example, you can use a Data Mapper Extract to view the data. See [Extract Account Attribute Data (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_extract_account_attribute_data.htm&release=264.0.0&type=5 "For the managed package runtime, an Omnistudio Data Mapper accepts an Account Id and returns Profile Attribute values for that Account."). - **[Create New Profile Attributes (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_new_profile_attributes.htm&release=264.0.0&type=5)** For the managed package runtime, attributes act like tags that provide more information about the entity in the profile. Typically, Profile Attributes are used with Vlocity Intelligence and can use attribute assignment rules. Product attributes are used with Policy Product Management. - **[Create New Profile Attribute Categories (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_new_profile_attribute_categories.htm&release=264.0.0&type=5)** For the managed package runtime, the type of attribute is defined at the Attribute Category level. Attributes Categories must created before you can add attributes to the category. Typically, Profile Attributes are used with Vlocity Intelligence and can be automatically assigned (see ). # Add and Remove Local Salesforce Objects and Fields from Data Sync Update data sync to keep up with your changing business by adding local Salesforce objects, removing objects, and managing which fields are synced. Synced data is stored in Salesforce Data Pipelines as objects that you can use in recipes. ### Required Editions
Available in: Lightning Experience
Available with Salesforce Data Pipelines, which is available for an extra cost in Enterprise, Performance, and Unlimited Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note For help with managing data sync for remote objects, see [Add and Remove Remote Objects and Fields from Data Sync](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_replicate_connection.htm&release=264.0.0&type=5 "Update data sync for connected external data sources to keep up with your changing business by adding objects, removing objects, and managing which fields are synced. Synced data is stored in Salesforce Data Pipelines as objects that can be used in recipes."). 1. From Data Manager, click the **Connections** tab. All objects configured to sync are listed under their connection name. The default local connection is SFDC\_LOCAL. 2. To add an object and its fields: 1. Next to a local connection, click ![Actions button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/actions_button.png) and select **Edit Objects**. 2. Find the object to add by scrolling or use the search bar, and select it. 3. Select the fields that you want to sync. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note When importing amount fields containing currencies, if the source currency is different, the imported values are converted to the destination org's default currency (Integration User currency). If the source amount is in the destination org's default currency, no conversion is made. 4. Optionally, edit the field’s attributes or filter the data synced to Salesforce Data Pipelines from Data Sync Filter. 5. Click **Save**. 3. To add or remove a field from data sync for an object already configured for sync: 1. From the Connections tab, select the connection associated with the object. Use the search bar to find the connection and object if you have many connections. The connection's associated objects are listed. 2. Click the name of the object to see its columns. Fields already included for sync are selected. 3. To add a field, select the checkbox next to the field. To remove a field, deselect the checkbox next to the field. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note If you delete any sync-enabled field or make any sync-enabled field inaccessible to the Analytics Integration User profile, an object's data sync fails. [Undelete the field](https://help.salesforce.com/articleView?id=fields_managing_deleted_fields.htm&type=5&language=en_US), restore access for the Analytics Integration User profile, or deselect the field from data sync to ensure that sync runs successfully. 4. Click **Save**. 4. To remove, or disconnect, an object from data sync: 1. From the Connections tab, select the connection associated with the object. Use the search bar to find the connection and object if you have many connections. The connection's associated objects are listed. 2. Click the menu ![Actions button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/actions_button.png) to the right of the object that you want to remove. 3. Click **Disconnect Object**. 4. Click **Disconnect**. If the locally synced object is used in one or more recipes, the disconnect fails. If possible, remove the object from any recipes and try again. For a complex recipe, you can download the recipe JSON, delete it, and then create a new recipe and upload the recipe JSON. Now, the disconnected object shows up as an error, but you can switch the input to direct data or a different synced object. Keep in mind that using direct data impacts recipe limits and performance. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note The most recently saved local Salesforce object field attributes are applied to the database. Field attributes can be modified in Data Manager or using a dataflow’s SFDCdigest node. If you use dataflows, check both places before saving to avoid overwriting the field metadata. # Add and Remove Remote Objects and Fields from Data Sync Update data sync for connected external data sources to keep up with your changing business by adding objects, removing objects, and managing which fields are synced. Synced data is stored in Salesforce Data Pipelines as objects that can be used in recipes. ### Required Editions
Available in: Lightning Experience
Available with Salesforce Data Pipelines, which is available for an extra cost in Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create a connection: Edit CRM Analytics Dataflows
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note For help with managing data sync for local Salesforce objects, see [Add and Remove Local Salesforce Objects and Fields from Data Sync](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_local_add_remove_objects.htm&release=264.0.0&type=5 "Update data sync to keep up with your changing business by adding local Salesforce objects, removing objects, and managing which fields are synced. Synced data is stored in Salesforce Data Pipelines as objects that you can use in recipes."). 1. From Data Manager, click the **Connections** tab. All objects configured to sync are listed under their connection name. 2. To add an object and its fields: 1. Click the dropdown ![Actions button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/actions_button.png) next to the connection. An object’s associated connection determines its sync schedule. 2. Select **Edit Objects**. 3. Find the object to add by scrolling or use the search bar. Select the checkbox next to the object. 4. Select the checkbox next to the fields that you want to sync. 5. Optionally, edit the field's attributes with ![Click the field attributes button to see attributes in a replication](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_replication_field_attributes_button.png). To use the field as a primary key for the object, enable the **Is Unique ID** attribute. Using defined primary keys allows updates to massive datasets in minutes by only processing changed records. 6. If you’re using a connector that supports filtering the data synced to Salesforce Data Pipelines, use the Data Sync Filter. 7. Click **Save**. 3. To add or remove a field from data sync for an object already configured for sync: 1. From the Connections tab, select the connection associated with the object. Use the search bar to find the connection and object if you have more than one connection. The connection's associated objects are listed. 2. Click the name of the object to see its columns. Fields already included for sync are selected. 3. To add a field, select the checkbox next to the field. To remove a field, deselect the checkbox next to the field. 4. Click **Save**. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_important.png) Important Only field names with combinations of alphanumeric, dot, underscore, or dash characters are supported. If a connector includes field names that contain other characters,such as spaces or brackets, the sync fails. 4. To remove, or disconnect, an object from data sync: 1. From the Connections tab, select the connection associated with the object. Use the search bar to find the connection and object if you have more than one connection. The connection's associated objects are listed. 2. Click the menu ![Actions button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/actions_button.png) to the right of the object that you want to remove. 3. Click **Disconnect Object**. 4. Click **Disconnect**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note Remove the object from all recipes before you disconnect. Data sync stops pulling data from the data source to Salesforce Data Pipelines when you disconnect an object. This impacts recipes and other assets that use this synced data. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note - Only field label changes appear in the preview data. - The default value and precision must be consistent between combined data sources. Review other data sources’ configuration when changing the value and precision. - For existing non-S3 connected objects, you can change measure and date field types to text. If you change a field to text and want to change it back, return to the field selection screen. Deselect the field, and select the field again. The field’s original type is restored when you continue to the preview screen. - For new S3 connected objects, you can change any field type to any other field type. For existing connected S3 objects, you can change field types if you remove the object and fields then recreate them, or transform them after extraction. - If the connection with your remote system times out, no rows load in the data preview. You can continue to edit field attributes and save, or cancel and try again to see if we're able to pull the data. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_important.png) Important Connected objects are synced the next time the sync runs for the connection. To make the data immediately available in a recipe, sync manually. #### See Also - [Salesforce External Connections](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_external_settings.htm&release=264.0.0&type=5 "Use a Salesforce external connector to sync data from another Salesforce org to Salesforce Data Pipelines. External connectors require OAuth 2.0 for server to server communication.") # Add and Remove Topics from Records in Lightning Experience Add topics to records to organize the records around common themes and view them on topic detail pages. ### Required Editions
Available in: Lightning Experience
Available in: Essentials, Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To add new topics to a record

Read and Edit on the record

AND

Create Topics

To add existing topics to a record

Read and Edit on the record

AND

Assign Topics

To remove topics from a record

Read and Edit on the record

AND

Assign Topics

Your admin must add the Topics component to Lightning record pages before you can add and remove topics from records. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note All topic names are public and appear in search results, but the visibility of records that have topics isn’t affected. - In the topic editor, start typing your text. As you type, you can pick a topic from the list of suggestions or keep typing to create your own unique topic. Press Enter to add the topic to the record. Closing square brackets ( \] ) aren’t supported in topic names. Other punctuation, symbols, and separators are supported. ![Add and remove topics from records](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/topics_component_ui.png) Records can have up to 100 topics. Topics on records become links to topic detail pages. If Chatter is enabled, the Feed tab on the topic detail page shows posts and comments with the topic. Whether Chatter is enabled or not, the Related tab shows records with the topic. Topics on posts on a record aren’t automatically added to a record’s topics; you must add the topics to the record. Topics are added to a file automatically when the topics are added to:a post with the file attachment or comments on a post with the file attachment. - In the Topics component, click X next to a topic name to remove it from a record. Removing a topic unassigns the topic from the record but doesn’t delete the topic. Before you remove a topic from a record, consider whether someone else added it; they could be using the topic to track the record. # Add Apex Class Permissions Checkers Enable specific access to the classes used by remote action APIs for each user profile, permission set, or permission set group. Configure Apex class permissions checkers to ensure that users require explicit access to the Apex class that administers the remote action called from an Omniscript, Flexcard, Integration Procedure, or REST API. For example, after you create a Lightning Platform site, publicly available APIs are enabled for the Site User profile based on the profile's Apex class access to some Apex classes. When you add an Apex class permissions checker, you ensure that unauthorized users, such as a guest user, can't access classes through the ApexRemote call implementing the Callable interface. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_important.png) Important Enable the `ApexClassCheck` setting to ensure the principle of least privilege and that unintentional unauthorized access isn’t provided to guest users. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Users who use Remote Actions in Integration Procedures must have access to the object and record they're invoking through the action. If they receive an access error, they must be granted object and record access at the profile, permission set, or permission set group level. Enable the `ApexClassCheck` setting. 1. From Setup, in the Quick Find box, enter Omni Interaction Configuration, then select **Omni Interaction Configuration**. 2. Click **New**. 3. For Name and Label, enter ApexClassCheck. 4. For Value, enter true. 5. Save your changes. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_important.png) Important During the week of February 2, 2026, Salesforce enables the ApexClassCheck setting by default to enhance org security. Review and prepare your configuration for a seamless transition and to prevent potential service interruptions. See [Security Checks for Omnistudio](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_security_updates_overview.htm&release=264.0.0&type=5 "The security checks for Omnistudio enforce stricter validation of access and permissions. These checks make sure that users, including guest, authenticated, and non-authenticated users, have the appropriate access to objects and fields used within Omnistudio components."). # Add B2B Referral Code to Deal Registration If your org uses B2B referrals, add referral code capture to the Partner Deal Registration flow. ### Required Editions
Available in: Lightning Experience
Available in: Partner Cloud with Deal Registration for Partners enabled in Salesforce Go, with B2B referrals enabled.
User Permissions Needed
Edit and activate Partner Deal Registration flow Manage Flow
Channel managers Manage B2B referrals
Partners Access B2B referrals
Confirm that you enabled B2B referrals and that partner users have the loyalty and referral permissions they need. 1. In Setup, open the active deal registration flow used for partner submissions. You can also open your custom **Save As** version. 2. Open the Create Lead Record element. Map the referral code field. 3. Save and activate the updated flow. 4. If you didn’t enable B2B referrals, remove the referral code input from the partner-facing flow screen to avoid confusion. # Add Benefit Mappings Create qualifying criteria for your benefits to differentiate them by product category, region, and other business-specific dimensions. To introduce the criteria into the benefit structure, map similar fields in the Program Rebate Type Benefit and the Transaction Journal objects. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
User Permissions Needed
To create a Program Rebate Type Benefit Mapping Rebate and Accrual Management Advanced Admin permission set
1. Open the record of the rebate program that you want to activate, and select the Benefit Mappings related list on the Related tab. Or from App Launcher search, enter Program Rebate Type Benefit Mappings, and then select Program Rebate Type Benefit Mappings. 2. Click New. 3. Provide these details, and then save your changes.
Field Value
Program Rebate Type Name of the rebate type for which you create a mapping. When you create benefit mappings from the Related tab of a rebate type, this value defaults to the current rebate type.
Benefit Field Field on the Program Rebate Type Benefit object.
Source Field

Field on the Transaction Journal object. In the Advanced engine, map directly to Transaction Journal fields that serve as the source for benefit criteria matching.

When benefit mappings are configured, the engine uses exact matching between the benefit's mapped field value and the transaction data. If no exact match is found, benefit isn't applied to the transaction.

Payout Source Field

Field on the Payout Source (e.g., Product) used in Advanced Rebate Management to map payout data directly to benefit criteria.

Unlike Classic Rebate Management (which mapped via Rebate Member Product Aggregate), the Advanced engine uses the Payout Source Field on Benefit Mappings. This enables direct mapping between payout source attributes (such as Product or Product ID) and benefit fields.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note - You can add up to ten benefit mappings for a rebate type. - Ensure that benefit mapping source fields are selected in the Transaction Journal datasource node and mapped to the appropriate anchor in the Writeback to Accrual and Payout Input Ingest DLO node in your cloned Data Preparation DPE. # Add Benefits and Benefit Mappings for a Rebate Type Create benefits for a rebate type to define the thresholds of an incentive and how payouts are scaled for varying quantities and amounts. Add benefit tiers with a range of sales targets and applicable benefit values. Introduce granularity to the incentive structure by adding benefit-mapping criteria. With additional criteria, you can differentiate benefits by account territory, product category, ship-from location, and more. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
- **[Create Benefits for a Rebate Type](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_create_benefits.htm&release=264.0.0&type=5)** Add benefits to a rebate type to define qualifying ranges and benefit values for each range. View and edit benefits from the Benefits tab on a Rebate Type record. - **[Add Mappings to Vary Benefits by Criteria](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_create_benefit_mapping.htm&release=264.0.0&type=5)** Create qualifying criteria for your benefits to differentiate them by product category, region, and other business-specific dimensions. To introduce the criteria into the benefit structure, map similar fields in the Program Rebate Type Benefit and the Rebate Member Product Aggregate objects. # Add Benefits and Benefit Mappings for a Rebate Type Create benefits for an advanced rebate type to define thresholds and how payouts are scaled. You can introduce granularity by adding benefit-mapping criteria, which the engine uses as Anchors during high-volume processing in Data Cloud. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
- Define Tiers: Add benefit tiers with a range of sales targets (Min/Max) and the applicable benefit value. - Configure Mappings: Use the Benefit Mapping related list to differentiate benefits by account territory, product category, or custom fields. - Advanced Logic: Ensure the mapped fields exist on both the Program Rebate Type Benefit and the Transaction Journal so the engine can match records correctly in DPE on Data Cloud. Benefit mappings and anchor criteria must be the same. Benefits with different products or anchor values can only be created if the corresponding benefit mappings are configured. The engine uses only exact matching between the benefit's mapped field value and the transaction data. If no exact match is found, benefit will not be applied to the transaction. - **[Create Benefits](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_adv_create_benefits.htm&release=264.0.0&type=5)** Add benefits to a rebate type to define qualifying ranges and benefit values for each range. View and edit benefits from the Benefits tab on a Rebate Type record. - **[Add Benefit Mappings](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_adv_add_benefit_mappings.htm&release=264.0.0&type=5)** Create qualifying criteria for your benefits to differentiate them by product category, region, and other business-specific dimensions. To introduce the criteria into the benefit structure, map similar fields in the Program Rebate Type Benefit and the Transaction Journal objects. # Add Benefits and Promotions After you configure the eligibility criteria of the club, you can add the benefits that your club offers, and the promotions that are exclusive to your club members. You can create promotions for club members or offer the company’s already running promotions. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Advanced
1. To add benefits to your club: 1. On the Benefits section of the Clubs Configuration page, click **Add Benefits**. 2. Select a benefit category. 3. Enter a benefit type and click **Save and Next**. 4. Click **Add Benefit** and enter a benefit name. 5. Click **Save**. 2. To add promotions to your club: 1. On the Promotions section of the Clubs Configuration page, click **Create Promotions**. For more information about creating promotions, see [Quick Promotion Wizard Steps](https://help.salesforce.com/s/articleView?id=mktg.global_promotions_management_design_promotion_wizard.htm&language=en_US). 2. To associate promotions, click **Associate Promotion**. 3. Search and select the promotions that you want to associate with the club. 4. Click **Save**. # Add Benefits to a Tier Add the benefits of your loyalty program to a tier. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
1. Select a Loyalty Tier. 2. On the Related tab, under Loyalty Tier Benefits, click **Add Benefits**. 3. Search for the available benefits in the tier. 4. Select the benefits. 5. Save your changes. - **[Benefit Actions](https://help.salesforce.com/s/articleView?id=xcloud.benefit_actions.htm&release=264.0.0&type=5)** Benefit Actions are actions that can be triggered for a benefit. Benefit Actions are executed when a benefit is assigned to a member. For example, when a member is upgraded from Silver to Gold tier, the member gets priority support as an entitlement. This benefit requires a downstream action to create a priority service entitlement record in the Service Cloud. The record is created in the Service Cloud through benefit actions. The benefit action is executed to create the Priority Support Entitlement record when the Priority Support benefit is assigned to the member. - **[Assign Member Tier Benefits](https://help.salesforce.com/s/articleView?id=xcloud.assign_member_tier_benefits_action.htm&release=264.0.0&type=5)** The Assign Member Tier Benefits is a flow action used as part of tier assessment. The action creates, updates, or expires records in the Member Benefits table. The action is based on the tiers associated with member benefits that include a defined Benefit Action. - **[Assign Dynamic Benefits to Members](https://help.salesforce.com/s/articleView?id=xcloud.benefits_dynamic_assign_member.htm&release=264.0.0&type=5)** Use dynamic benefits to reward members based on the members' level of engagement with their loyalty program regardless of their current tier. For example, Early Access to Level X shoes is a benefit that is given to members who have completed a survey. - **[Process Member Benefit Action](https://help.salesforce.com/s/articleView?id=xcloud.process_member_benefit_action.htm&release=264.0.0&type=5)** The Process Member Benefit Action is a flow action used to execute the Benefit Action associated with a benefit in a Member Benefit record. # Add Benefits to the Benefit Type Add benefits within the Benefit Type. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
1. In the Loyalty Programs tab, open a Benefit Type record. 2. On the Related tab, click **Benefits**. 3. Click **New**. 4. Enter a name and description for the benefit. 5. Enter the Priority Sequence for the benefit. Priority Sequence is used to rank the benefits within a Benefit Type. If there’s a conflict, the benefit with the higher Priority Sequence is assigned. 6. If there’s a value associated with the benefit, enter a value. For example, you can provide value of the weight for a baggage allowance or discount percentage, if there’s discounts. 7. Select a unit of measure associated with the value, such as Percentage or Kilograms. 8. Select **Active**. 9. Save your changes. # Add Calculation Steps (Managed Package) For the managed package runtime, a calculation step includes one or more mathematical operations and/or functions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. On the Procedure Calculation tab of the calculation procedure's page, scroll down to the Calculation Steps section. 2. Click **\+ Add Step** 3. Select **Calculation**. 4. In the first field, enter a constant or a variable, then press Return. 5. Enter an operator and press Return. Choose from the following operators: - **+** (plus sign) - **–** (minus sign) - **\*** (asterisk) - **/** (backslash) - **^** (caret) - **(** (open parentheses) - **)** (closed parentheses) 6. Enter the next item and press Return. 7. Keep entering operators and items until you've completed the calculation. 8. To make this calculation step conditional, select **Conditional Step**. Enter the condition that will invoke this calculation step. 9. To include the calculation output in the calculation output data, select **Include in Calculation Output**. 10. Click **Save Calculation Procedure**. # Add Campaign Marketplace to a Partner Experience Cloud Site Give partner users a site page where they can browse approved campaigns and start the campaign sign-up process. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions in Agentforce for Sales with Partner Ecosystem Management - Members, Partner Ecosystem Management - Login.
User Permissions Needed
To add Campaign Marketplace to a partner Experience Cloud site: Create and Set Up Experiences AND View Setup and Configuration
Turn on Channel Marketing and Campaign Marketplace for partners. Add the partner site as a channel in the Marketing Cloud CMS workspace. 1. From Setup, open **Digital Experiences**, and then open **All Sites**. 2. Open Experience Builder for the partner site. 3. Open the page where partners browse marketing campaigns. 4. From the **Components** panel, drag the **Campaign Marketplace** component to the page. 5. In the component properties, select the campaign attributes that appear on each campaign card. 6. Preview the page as a partner user and verify that partner-facing campaigns appear. 7. Publish the site. # Add Cancel Options to a Navigate Action (Managed Package) For the managed package runtime, prior to Vlocity Insurance and Health Summer ’20, add cancel functionality to an LWC Omniscript by using the Navigate Action. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Add a Navigate Action before the first Step in the Omniscript. 2. In the Navigate Action’s **Element Name** field, enter CANCEL in all uppercase letters. Ensure that the **CANCEL OPTIONS** property section is present in the Navigate Action after you set the Element Name. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cancel_action_lwc_os_designer.png) 3. In the Label field, enter the Cancel option’s display text. The text displays as a clickable link in every Step. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Cancel functionality can’t be activated or deactivated for individual steps. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cancel_lwc_os_designer.png) 4. (Optional) Prevent confirmation prompts from being displayed to users by deselecting **Prompt before cancel?**. 5. (Optional) In the Cancel Message field, enter a custom message to display to users in the confirmation prompt. 6. (Optional) To collapse the script and view the current page, set the Navigate Action’s PageReference type to **Current Page** with no additional configuration. 7. (Optional) Determine where the cancel option directs users by configuring the Navigate Action. What’s next: Deploy the Omniscript and add it to a page to test the cancel functionality. See [Deploying an Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploying_an_omniscript.htm&release=264.0.0&type=5 "For the managed package runtime, Vlocity Omniscripts can be deployed within the Vlocity application, or within an iFrame either on a Salesforce Community or an external website. Once embedded within the page, the script can be versioned, modified, and activated without the need to reconfigure the page."). # Add Certificate-Based Authentication to Your My Domain Login Page After you enable certificate-based authentication in Identity Verification, add the Certificate-Based Login button to your My Domain login page. Users can click the button to authenticate using their unique user authentication certificate. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience in All editions
User Permissions Needed
To add certificate-based authentication to a login page: Customize Application
Make sure that you’ve completed these steps before adding certificate-based authentication to your My Domain login page. - Enable certificate-based authentication. See [Enable Certificate-Based Authentication](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_enable.htm&release=264.0.0&type=5 "To use certificates to authenticate individual users to your org, you must enable certificate-based authentication."). - Upload user certificates for authentication. See [Upload a User Authentication Certificate](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_upload.htm&release=264.0.0&type=5 "After enabling certificate-based authentication, you can upload PEM-encoded X.509 digital certificates to authenticate individual users to your org.") 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **My Domain**. 2. Under Authentication Configuration, click **Edit**. 3. For Authentication Service, select **Certificate**. ![Select Certificate as an Authentication Service](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/security_cert_based_auth_my_domain.png) 4. Click **Save**. The Certificate-Based Login button is now on your My Domain login page. ![Certificate-Based Login button on My Domain login page](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/security_cert_based_auth_my_domain_login.png) #### See Also - [Log In to Your Org with Certificate-Based Authentication](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_user_login.htm&release=264.0.0&type=5 "If your Salesforce org supports certificate-based authentication as a login method, you can log in with your unique user authentication certificate instead of a username and password.") - [Enable Certificate-Based Authentication](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_enable.htm&release=264.0.0&type=5 "To use certificates to authenticate individual users to your org, you must enable certificate-based authentication.") - [Customize Your My Domain Login Page with Your Brand](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_login_branding.htm&type=5&language=en_US) # Add Conditional Styles to a Flexcard Element (Managed Package) For the managed package runtime, conditionally apply styles to a Flexcard element. Change style features such as text color, background image, and responsiveness when a condition based on the value of a data field is met. For example, add a red border around a billing Flexcard when the bill status is past due. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Summer '21.

1. Select the element on a state in your Flexcard, and click **\+ Add Conditional Style** from the Style panel. 2. In **Conditional Style Name**, enter a unique name for the visible label for your conditional style. The name must be different than any other conditional style name on the same element. 3. To add a condition based on the value of a data field, click **\+ Add Condition**. See [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer.") on how to configure conditions. 4. Click **Save**. 5. Your new condition appears below the **Default**. When you add a conditional style, a **Default** section is added to the top of the Style panel. When your conditions aren’t met, the default styles apply. ![FlexCard Style panel, default conditional style](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/default_conditional_style.png) 6. (Optional) To determine what conditions are applied, hover over the tooltip "i" icon next to the conditional style name. 7. (Optional) To edit a conditional style, click its pencil (![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/pencil_edit_icon.png)) icon. 8. (Optional) To switch between how your element looks when the conditions are applied and not applied, select the conditional style's toggle button (![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/toggle_conditional_style.png)). 9. (Optional) To delete a conditional style, click its trash (![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/trash_icon.png)) icon. What’s next: Preview your Flexcard. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). - **[Flexcards Conditional Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_conditional_style_properties.htm&release=264.0.0&type=5)** For the managed package runtime, add Conditional Style properties are configurable from the Style panel in the Flexcard Designer when you select an element. Conditionally apply styles to an element depending on the value of a data field. # Add Conditions and Actions to a Rule Add conditions and actions in a rule to decide how you want a transaction journal to be processed by the rule. Use conditions to decide the transaction journals that you want the rule to process. Use actions to get information about the member, update member records, and run flows and standard type decision tables that are created by admins. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
To add conditions and actions for a rule, access the Rule Builder by clicking the name of the rule on the associated Loyalty Program Process record. Each condition and action that you add in a rule is called a step. After you add a condition or an action, click **Done** (1) on its window to save the condition or action. After you save all the new or updated steps, on the Rules Builder, click **Save** (2) to save all your changes. To revert your rule to the previously saved version and discard all the recent changes, on the Rules Builder, click **Discard** (3). ![Rules Builder](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/loyalty_management/images/promotion_setup_rules_builder_one.png) ## Add Conditions You can add a condition as a parent step (2), and you can add multiple conditions, condition groups, and actions as child steps (1) of the condition. When a transaction journal meets the filter criteria of a condition, the child steps process the transaction journal. A condition group can have conditions, condition groups, and actions as child steps. In a condition group, you can add one child action for each condition. The default path of a condition group can have only one child action. ![Rules Builder of Promotion Setup.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/loyalty_management/images/promotion_setup_rules_builder_two.png) ## Add Actions You can't add child steps for an action. You can associate an action as a child to a condition or condition group. You can also add an action as a parent step. ## Select Resources in Conditions and Actions When adding a condition or an action, select a resource to provide the value in a condition or an action. Resources consist of: - Parameters that are already defined for the related loyalty program process. - Aliases that are defined for loyalty program processes. - Fields of the Transaction Journal object and its related objects. When selecting a resource, search for the resource by entering at least the first three characters of the name of the resource. You can find resources like related object fields in a cascading list. You can select a resource by searching up to three levels. If a field is four or more levels away from the parent object, manually go to the field and select it. ## Sequence of Processing Transactions The steps of a rule process a transaction in the sequence in which they’re saved. If a rule has two actions, the first action in the sequence processes the transaction first. After the first action completes processing the transaction journal, the second action starts to process the transaction journal. When a rule has multiple parent steps and each parent step has child steps, the first parent step and its child steps process the transaction journal. The child steps also process the transaction journal in the sequence in which they’re saved. After all the child steps of a parent step have competed processing the transaction journal, the next parent step in the sequence starts to process the transaction journal. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip When you add steps and use the output of one step as the input of another, keep in mind the sequence in which transactions are processed in the rule. After you add all required steps to your rule, activate the rule. Only active rules process transaction journals. If the rule is associated with a promotion, then it’s automatically activated on the start date of the promotion. To change an active rule, ensure that you deactivate it first. # Add Conditions to a Flexcard Element (Managed Package) For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Applying conditions to a state works differently than with other elements. See [Add Conditions to a Flexcard State (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_state.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard states enable the presentation of different CRM interactions for each state. Set conditions to determine if, when, and how data displays on a Flexcard."). Beginning Winter '22, apply conditions to an action on an event listener or individual actions on the Menu element. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Applied conditions are visible in Preview only. 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. Depending where you add a condition, perform one of the following tasks. - To add a condition to an element, select the element from the canvas and click **+Add New** next to **Conditions** in the Properties panel. - To add a condition on an action on an event listener, click Setup, click **\+ Add New** in the **Event Listener** section, and click **+Add New** next to **Conditions**. - To add a condition to an action on a Menu element, select a Menu element on the canvas. In the Properties panel select an action to edit (or click **\+ Add New Action**), and click **+Add New** next to **Conditions**. 3. (Optional for conditions applied to an Element) Beginning Winter '22, deselect the **Preload Conditional Component** checkbox to improve performance on conditional elements. By default, all elements on a Flexcard are preloaded. They’re added to the rendered HTML and, if the condition is false, are hidden with CSS. See [Disable Preload on Conditional Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_disable_preload_on_conditional_elements.htm&release=264.0.0&type=5 "For the managed package runtime, improve performance on Flexcards with conditional elements by removing hidden elements from the Document Object Model (DOM), or the rendered HTML. By default, all elements on a Flexcard are preloaded, which means they’re added to the DOM and then, if the condition is false, are hidden with CSS. The element's HTML is still rendered."). If the condition returns false, the element isn’t rendered in the HTML. 4. Click **\+ Add Condition**. 5. Create basic conditions. 1. Click **Data Field**, and from the list of data fields, select a data field to filter. For example, select Status for a Case record. 2. To define the relationship between the data field and a value, select the **Operator** from the dropdown, such as **\=**. 3. In the **Value** field, enter the value to check against. For example, enter Escalated. Variables aren’t supported. Only the `Parent.attr` context variable is supported for conditions on a State element in a child Flexcard. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note To check against an empty value, enter undefined as the **Value** or leave **Value** blank. 4. If adding another condition, click **\+ Add Condition** and select **AND** or **OR** between conditions. Select **AND** if all conditions must be met. For example, Status is Escalated and Priority is High. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If you have only one condition, that condition must be met to display cards. Select **OR** if any condition can be met. For example, Status is Escalated or Priority is High. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If you have only one condition, that condition doesn’t need to be met to display cards. 6. If needed, build nested conditions. 1. Click **\+ Add Group** after creating a condition. 2. Click **\+ Add Condition** and enter values for all fields for each condition. 3. Select **AND** or **OR** from the dropdown between conditions. - **[Disable Preload on Conditional Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_disable_preload_on_conditional_elements.htm&release=264.0.0&type=5)** For the managed package runtime, improve performance on Flexcards with conditional elements by removing hidden elements from the Document Object Model (DOM), or the rendered HTML. By default, all elements on a Flexcard are preloaded, which means they’re added to the DOM and then, if the condition is false, are hidden with CSS. The element's HTML is still rendered. - **[Flexcards Conditions Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_conditions_properties.htm&release=264.0.0&type=5)** For the managed package runtime, the properties for conditions are configurable for all elements in the Properties panel in the Flexcard Designer. Conditionally display Flexcard elements based on the value of a data field. # Add Conditions to a Flexcard State (Managed Package) For the managed package runtime, Flexcard states enable the presentation of different CRM interactions for each state. Set conditions to determine if, when, and how data displays on a Flexcard. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) example Example: Policy Information Flexcard A Flexcard displays policy information for an Account. If the Policy is up to date, the default state displays data fields, and an action to update Account information. If the Policy is about to expire, the Policy has a red border, an alert notification, and an action to renew the Policy. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note When arranging the order of your states on the canvas, place the states in a logical order, where the first condition is checked against the next, and so on. Typically, states with complex conditions precede states with simple ones, followed by a state with no conditions, and then a Blank Card State. The Flexcard displays the first state whose conditions evaluate to true. For example, the order of the states for the previous example would be: 1. State 1 - Condition: DaysToExpiration < 31 && DaysToExpiration != Null (empty) 2. State 2 - No conditions 3. State 3 - Blank Card State (no records returned) ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Applied conditions are visible in Preview only. 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. Select a state, and click the pencil icon next **Conditions** in the Properties panel. 3. Click **\+ Add Condition**. 4. To create basic conditions: 1. Click into the **Data Field**, from the list of data fields, select a data field to filter, such as DaysToExpiration. 2. To define the relationship between the data field and a value, select an operator from **Operator** dropdown, such as <. 3. In the **Value** field, enter the value to check against the data field, such as 31. Enter literal values. Variables are not supported. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning Summer '21, if your Flexcard is a [child Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_embed_flexcard_inside_another_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, embed a reusable Flexcard as a child inside another Flexcard. The child Flexcard can have its own data source. Or, the parent can override the child's data source with its own data source. The parent can also pass specific data to the child, such as its recordId to use as the child's contextId."), use the `{Parent.attributeName}` to check against the value of an attribute passed to the child from the parent Flexcard. See [Flexcards Context Variables (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, global and local context variables are available to a Flexcard to provide context to data sources, actions, and other components. All variables are case sensitive."). 4. If adding another condition, click **\+ Add Condition** and select **AND** or **OR** from the dropdown between conditions: - Select **AND** if all conditions must be met. - For example, the policy status is purchased AND the expiration date is less than 31 days. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If there’s only one condition, that condition must be met to display cards. - Select **OR** if any condition can be met. - For example, the policy status is closed OR the expiration date is less than 31 days. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If there’s only one condition, that condition doesn’t need to be met to display cards. 5. To build nested conditions: 1. Click **\+ Add Group** after creating a condition, such as DaysToExpiration < 31. 2. Click **\+ Add Condition** and enter values for all fields for each condition. 3. Select **AND** or **OR** from the dropdown between conditions. For example, use the conditions feature to build the conditional expression DaysToExpiration < 31 AND ( PolicyType = Universal Life OR PolicyType = Universal Variable Life) to filter for policies about to expire, and whose policy type is either Universal Life or Universal Variable Life. ![FlexCard Conditions ­Group](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_conditons_group.png) # Add Connected Accounts to Your Partner Experience Cloud Site Add the Connected Accounts component so that partner users can authorize Google or Microsoft accounts for Einstein Activity Capture calendar sync. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions with Partner Ecosystem Management - Members or Partner Ecosystem Management - Login
User Permissions Needed
To add Connected Accounts to a partner Experience Cloud site: Create and Set Up Experiences AND View Setup and Configuration
Create and activate an Einstein Activity Capture configuration for external partner users. Add the Connected Accounts component to an authenticated page that partner users can access. Partner users use the component to authorize their own external accounts. 1. From Setup, open **All Sites**. 2. Open Experience Builder for the partner site. 3. Open the page where partner users manage their calendar connection. 4. Drag the **Connected Accounts** component onto the page. 5. Configure the component properties and page visibility for authenticated partner users. 6. Publish the site. # Add Contributors to a CMS Workspace In the Digital Experiences app (previously named Salesforce CMS), add users or public groups as contributors to a specific CMS workspace by assigning them an access role. A contributor’s access role is specific to a CMS workspace. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To manage contributors in a CMS workspace: A CMS workspace contributor role of content admin
1. From the App Launcher, find and open **Digital Experiences**. 2. Open a workspace. 3. Select **Contributors** and click **Add Contributors**. 4. Search for users or public groups. 5. Next to the users or public groups that you want to add, click ![Add](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_access_control_plus_icon.png). 6. Click **Next**. 7. For each user or public group, assign a contributor role. 8. Click **Finish**. #### See Also - [Role-Based Access in Experience Builder](https://help.salesforce.com/s/articleView?id=experience.networks_access_control_overview.htm&type=5&language=en_US) - [Control Chatter Access Through Permission Sets](https://help.salesforce.com/articleView?id=collab_pbr_perm_sets.htm&type=5&language=en_US) # Add Custom Attributes to a Connected App After you’ve created the connected app, you can add custom attributes. With custom attributes, you can get more information about a user’s identity like an address or job title. Custom attributes specify SAML metadata or specify OAuth parameters that are read at OAuth runtime. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

User Permissions Needed
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage Connected Apps

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. 1. Open the list of apps. From Setup, enter Apps in the Quick Find box, then select **App Manager**. 2. Locate the connected app, click ![Action dropdown](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/dropdown.png), and then select **View**. 3. Under Custom Attributes, click **New**. Each custom attribute must have a unique key and must use fields available from the Insert Field menu. For example, assign a key name, such as `country` and insert the field `$Organization.Country`. When using SAML, attributes are sent as SAML attribute statements. When using OAuth, attributes are available as a `custom_attributes` object in the user’s Identity URL. # Add Custom Branding to Your Surveys Customize surveys to reflect your company's brand and style.
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
With a survey open in the Survey Builder, go to the Branding tab to change the survey's look and feel. ## Background Image Replace the default background image with an image that's less than 750 KB (Windows) and 763 KB (macOS). For optimal viewing on high-definition monitors and mobile devices, upload landscape images with an aspect ratio of 16:9, such as 1920 × 1080. Images that don't conform to the orientation and resolution are cropped on the top and sides. ## Logo To add your company’s logo to the survey, click **Upload Logo**. ## Logo Background Adjust the color and the opacity of the logo background. ## Button Labels Enter custom labels for the Back, Next, Pause, and Finish buttons. If you don’t provide custom labels, the default button labels are displayed. ## Content Card Change the opacity of the content card that displays survey questions. ## Question Change the text color of questions in the survey. ## Answer Choices Change the text color, button color, and opacity of answer choices for multiple selections, ranking, and single selection questions. ## Start, Next, and Finish Buttons Change the text and button colors of the Start, Next, and Finish buttons. ## Previous Buttons Change the text and button colors of the Previous button. ## Branded Email Templates Customize a survey invitation email template with your brand’s logo and colors, and then use it to send survey invitations. # Add Custom Fields in the Promotion Object The Promotion Extract, Transform, Load (ETL) jobs in Marketing Cloud Personalization (formerly Interaction Studio) require three fields that aren't available in the Promotion object. Before you send your Promotion object data to Marketing Cloud Personalization, add the required fields in the Promotion object. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions.
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license, Data Cloud, and Interaction Studio in Marketing Cloud enabled.
These are the required fields in the Promotion object. | Custom Field Label | Custom Field API Name | Field Type | Required | | --- | --- | --- | --- | | URL | URL\_\_c | URL | Yes | | Image URL | ImageURL\_\_c | URL | Yes | | Content Zones | ContentZones\_\_c | Text | Yes | To filter promotions that you don't want to send to Marketing Cloud Personalization, add another Checkbox type field. For example, you can name the field as SendToInteractionStudio\_\_c Add the custom fields to the page layouts of Promotion. After you update the page layouts, ensure that loyalty program managers add values for the custom fields in new and existing Promotion records that you want to send to Interaction Studio.
Custom Field Value
URL For more information about the values that you can add to these fields, see Promotion ETL File Format.
Image URL
Content Zones
# Add Custom Fields to Your Page Layout If your flow uses custom fields, add them to your record page layout so that your users can see them. For example, if you created a custom Jira Status field that belongs on the Case page, use Lightning App Builder to add it to that page layout. 1. From the Suites Home page, select **Quick Settings** (gear icon) in the top-right corner. 2. Select **Open Advanced Setup**. 3. In the Quick Find box, search for and select **Lightning App Builder**. 4. From the list section, locate the record page to modify, such as Lead, Opportunity, and Case, and select **Edit**. 5. From the left-hand column, select the **Details** tab. 6. Locate your custom field and drag it to the center canvas. Place the field into the section and order where you want it to appear. 7. In the top-right corner, save your changes. 8. If it's your first time editing this page, select **Activation** and select **Assign as Org Default** so all your users can see it immediately. # Add Custom Labels to Supported Fields on a Flexcard (Managed Package) For the managed package runtime, add custom labels to supported Flexcard element fields with the `{Label}` merge field. Custom labels are custom text values that can be accessed from Apex classes, Visualforce pages, or Lightning components. Add custom labels if your Flexcard supports multiple languages. The values can be translated into any language Salesforce supports. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before You Begin Confirm available custom labels in your org at Setup > Custom Labels. See [Custom Labels](https://help.salesforce.com/articleView?id=cl_about.htm&type=5&language=en_US). Enable multi-language support. See [Enable Multi-Language Support on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_enable_multi_language_support_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, enable multi-language support on a Flexcard from the Flexcard Designer. When the multi-language support feature is on, all custom labels are updated and not cached."). You can use HTML markup to format a custom label's **Value** or **Translation Text**. For example, to begin on a new line, use `
`. 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. Select a supported element. Flexcards support the `{Label}` merge field on the following elements:

Element

Supported Fields

Field

Label, Placeholder

Text

Inside the Rich Text Editor

Action

Label

3. From the Properties panel, enter `{Label.customLabelName}` in a supported field. For example, to display the **AccountName** custom label as the **Label** for a Field element that displays the name of an Account, enter {Label.AccountName}. ![FlexCard custom label merge field](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_custom_label_merge_field.png) # Add Custom Lightning Web Components to an Omniscript (Managed Package) For the managed package runtime, after you create a custom Lightning web component for an Omniscript, apply the component’s new behavior by adding it to an Omniscript. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Use the custom component to override an individual Omniscript element’s component, override all Omniscript element components of one element type, or add an entirely custom component that doesn’t extend an element’s component.

Mapping Option

Description

Override an individual element's LWC.

Override the LWC for every element of a specific element type—for example, override the element Types Text or Currency.

Add custom LWCs that don’t extend an existing Omniscript element using the Custom LWC element.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Before previewing an Omniscript that uses custom Lightning web components, you must activate the Omniscript. If the Omniscript isn’t active, custom Lightning web components don’t render in Preview. If you deploy changes to a custom Lightning web component embedded in an active Omniscript, the Omniscript displays the changes. - **[Override an Element's Lightning Web Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_override_an_element_s_lightning_web_component.htm&release=264.0.0&type=5)** For the managed package runtime, override an element's component using the element's LWC Component Override. The custom LWC must extend the element's component because Omniscript passes in properties specific to the original component that the custom component is overriding. - **[Map an Element Type to a Custom Lightning Web Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_map_an_element_type_to_a_custom_lightning_web_component.htm&release=264.0.0&type=5)** For the managed package runtime, override all elements of one type with a custom Lightning web component by mapping the element type to the Custom LWC. The custom Lightning web component must extend the element type's Lighting web component. For example, to override all of the Text elements in the Omniscript, the custom component must extend the OmniScriptText component. - **[Add a Custom Lightning Web Component to a Custom LWC Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_custom_lightning_web_component_to_a_custom_lwc_element.htm&release=264.0.0&type=5)** For the managed package runtime, add custom Lightning web components that don’t extend an Omniscript element's component by using the Custom LWC element. # Add Custom Style Sheets to Your OmniOut Application (Managed Package) For the managed package runtime, include custom styling in your OmniOut project by using style sheets. Custom stylesheets aren’t included in the Omniscript or Flexcard off-platform download metadata. You must add them to your application before building the `dist` folder. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Custom styling done without using a style sheet for a custom LWC is included automatically in the downloaded off-platform LWC. Before You Begin 1. For Omniscripts, create, then add a custom style sheet to your Omniscript. See [Apply Custom Styling to Omniscripts with Static Resources (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_apply_custom_styling_to_omniscripts_with_static_resources.htm&release=264.0.0&type=5 "For the managed package runtime, to apply CSS changes to an Omniscript using SLDS or Newport styling, refer to a CSS file static resource in the Styling Options section of the LWC Omniscript Designer. For example, a CSS sheet can change the text color for every Number element in an Omniscript without using a custom Lightning web component to override the Number element."). 2. Build an OmniOut `dist` folder and move the folder's contents into your app. See [Move OmniOut into Your App (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_move_omniout_into_your_app.htm&release=264.0.0&type=5 "For the managed package runtime, generate a compiled dist folder to move OmniOut into your app project before deploying your app to a content management system."). 1. In Salesforce Setup's Quick Find box, enter Static Resources, and click **Static Resources**. 2. Locate and click the static resource that contains your CSS style sheet. 3. To download the static resource, click **View File**. 4. Copy the downloaded file into your app's primary styles folder. 5. To load the custom style sheet, add a reference to that file in your app's index.html file. **Example** ``` ``` What’s next: [Connect Your OmniOut App (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_connect_your_omniout_app.htm&release=264.0.0&type=5 "For the managed package runtime, OmniOut connects your CMS to Salesforce through a proxy or directly. Configure a connection object to connect to the Salesforce Connected App. Connections are unique to your app's requirements and must be configured outside the scope of OmniOut."). # Add Data to the Generate Receipt Step (Managed Package) For the managed package runtime, the Messaging Framework of the Generate Receipt step stores the data format for the selected device. For the example, only the DeviceName is a merge field. The remaining values are hard-coded. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Click the **Generate Receipt** step. 2. In the Messaging Framework properties for the step, make sure the **Window postMessage**, **Pub/Sub**, and **Session Storage** boxes are checked. 3. Add the following Message Key/Value pairs:

Key

Value

eventName

purchase

currencyCode

USD

eventAction

purchase

category

Ecommerce

action

Purchase

transactionId

T-%DeviceName%

couponCode

JUNE_SALE

quantity

1

shipping

19.9

tax

17.35

revenue

736.25

productDetails

(leave blank)

4. Open the JSON Editor and replace the `null` value or empty quotes after the `productDetails` node with the following JSON array: ``` [ { "name": "%DeviceName%", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 } ] ``` 5. Exit the JSON Editor. 6. Click **Activate Version**. What’s next: [Add a Business Event to the Example Card (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_business_event_to_the_example_card.htm&release=264.0.0&type=5 "For the managed package runtime, you can't define complex JSON structures in a Flexcard. However, you can specify key/value pairs in Setup in the Custom Fields section. After creating the tracking configuration and adding event types, you can use merge fields to add the values to a complex JSON structure."). # Add Data to the Provide Payment Step (Managed Package) For the managed package runtime, the Messaging Framework of the Provide Payment step stores the data format for the selected device. For the example, only the DeviceName is a merge field. The remaining values are hard-coded. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Click the **Provide Payment** step. 2. In the Messaging Framework properties for the step, make sure the **Window postMessage**, **Pub/Sub**, and **Session Storage** boxes are checked. 3. Add the following Message Key/Value pairs:

Key

Value

eventName

checkout

currencyCode

USD

eventAction

checkout

category

Ecommerce

action

Checkout

checkoutStep

3

transactionId

T-%DeviceName%

couponCode

JUNE_SALE

quantity

1

shipping

19.9

tax

17.35

revenue

736.25

productDetails

(leave blank)

4. Open the JSON Editor and replace the `null` value or empty quotes after the `productDetails` node with the following JSON array: ``` [ { "name": "%DeviceName%", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 } ] ``` 5. Exit the JSON Editor. What’s next: [Add Data to the Generate Receipt Step (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_data_to_the_generate_receipt_step.htm&release=264.0.0&type=5 "For the managed package runtime, the Messaging Framework of the Generate Receipt step stores the data format for the selected device. For the example, only the DeviceName is a merge field. The remaining values are hard-coded."). # Add Data to the Review Cart and Shipping Address Steps (Managed Package) For the managed package runtime, the Messaging Framework of the Review Cart and Shipping Address steps stores the data format for the selected device. For the example, only the DeviceName is a merge field. The remaining values are hard-coded. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Click the **Review Cart** step. 2. In the Messaging Framework properties for the step, make sure the **Window postMessage**, **Pub/Sub**, and **Session Storage** boxes are checked. 3. Add the following Message Key/Value pairs:

Key

Value

eventName

checkout

currencyCode

USD

eventAction

checkout

category

Ecommerce

action

Checkout

checkoutStep

1

productDetails

(leave blank)

4. Open the JSON Editor and replace the `null` value or empty quotes after the `productDetails` node with the following JSON array: ``` [ { "name": "%DeviceName%", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 } ] ``` 5. Exit the JSON Editor. 6. Repeat this procedure for the **Shipping Address** step. Add the same data, except assign a `checkoutStep` value of `2`. What’s next: [Add Data to the Provide Payment Step (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_data_to_the_provide_payment_step.htm&release=264.0.0&type=5 "For the managed package runtime, the Messaging Framework of the Provide Payment step stores the data format for the selected device. For the example, only the DeviceName is a merge field. The remaining values are hard-coded."). # Add Data to the Script Setup (Managed Package) For the managed package runtime, the Messaging Framework of the Script Setup stores the master list of product impressions sent to Google Analytics Ecommerce. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In the Vlocity Omniscript Designer tab, expand **Documentation/OmniAnalytics** and click **E-commerce Buyflow Omniscript (Version 1)**. 2. Open the general properties of the Omniscript. - In the old Omniscript Designer, click **Script Configuration**. - In the new Omniscript Designer, click **Setup** in the Properties pane. 3. Create a new version. - In the old Omniscript Designer, click **Create Version**. - In the new Omniscript Designer, click **New Version**. 4. Scroll to the Messaging Framework section and expand it. 5. Make sure the **Window postMessage**, **Pub/Sub**, and **Session Storage** boxes are checked. 6. Add the following Message Key/Value pairs:

Key

Value

account

Omni-Analytics

impressions

(leave blank)

7. Edit the general properties as JSON code: - In the old Omniscript Designer, scroll to the top and click **Edit as JSON**. - In the new Omniscript Designer, scroll to the bottom and click **Edit Properties as JSON**. 8. Replace the `null` value or empty quotes after the `impressions` node with the following JSON array. Make sure a colon precedes the opening bracket and a comma follows the closing bracket. ``` [ { "name": "Apple iPhone 7", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "position": 1, "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 }, { "name": "Apple iPhone 8", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "White", "list": "Search Results", "position": 2, "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 }, { "name": "Apple iPhone X", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "position": 3, "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 }, { "name": "Apple iPhone 11", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "position": 4, "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 }, { "name": "Apple iPhone XR", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "position": 5, "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 } ] ``` 9. Exit the JSON editor. - In the old Omniscript Designer, scroll to the top and click **Edit as Properties**. - In the new Omniscript Designer, scroll to the bottom and click **Close JSON Editor**. What’s next: [Add Data to the Select Device Step (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_data_to_the_select_device_step.htm&release=264.0.0&type=5 "For the managed package runtime, the Messaging Framework of the Select Device step stores the master list of product impressions sent to Google Analytics Ecommerce."). # Add Data to the Select Device Step (Managed Package) For the managed package runtime, the Messaging Framework of the Select Device step stores the master list of product impressions sent to Google Analytics Ecommerce. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Click the **Select Device** step. 2. In the Properties pane, click **Properties** to display the step properties. 3. Scroll to the Messaging Framework section and expand it. 4. Make sure the **Window postMessage**, **Pub/Sub**, and **Session Storage** boxes are checked. 5. Add the following Message Key/Value pairs:

Key

Value

eventAction

detail

products

(leave blank)

6. Edit the step properties as JSON code: - In the old Omniscript Designer, scroll to the top and click **Edit as JSON**. - In the new Omniscript Designer, scroll to the bottom and click **Edit Properties as JSON**. 7. Replace the `null` value or empty quotes after the `products` node with the following JSON array. Make sure a colon precedes the opening bracket and a closing brace follows the closing bracket. ``` [ { "name": "Apple iPhone 7", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "position": 1, "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 }, { "name": "Apple iPhone 8", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "White", "list": "Search Results", "position": 2, "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 }, { "name": "Apple iPhone X", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "position": 3, "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 }, { "name": "Apple iPhone 11", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "position": 4, "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 }, { "name": "Apple iPhone XR", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "position": 5, "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 } ] ``` 8. Exit the JSON editor. - In the old Omniscript Designer, scroll to the top and click **Edit as Properties**. - In the new Omniscript Designer, scroll to the bottom and click **Close JSON Editor**. What’s next: [Add Data to the View Quote and View Cart Steps (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_data_to_the_view_quote_and_view_cart_steps.htm&release=264.0.0&type=5 "For the managed package runtime, the Messaging Framework of the View Quote and View Cart steps stores the data format for the selected device. For the example, only the DeviceName is a merge field. The remaining values are hard-coded."). # Add Data to the View Quote and View Cart Steps (Managed Package) For the managed package runtime, the Messaging Framework of the View Quote and View Cart steps stores the data format for the selected device. For the example, only the DeviceName is a merge field. The remaining values are hard-coded. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Click the **View Quote** step. 2. In the Messaging Framework properties for the step, make sure the **Window postMessage**, **Pub/Sub**, and **Session Storage** boxes are checked. 3. Add the following Message Key/Value pairs:

Key

Value

eventName

productClick

eventAction

click

list

Search Results

action

Product Click

category

Ecommerce

productDetails

(leave blank)

4. Open the JSON Editor and replace the `null` value or empty quotes after the `productDetails` node with the following JSON array: ``` [ { "name": "%DeviceName%", "price": 699, "brand": "Apple", "category": "Mobile", "variant": "Black", "list": "Search Results", "quantity": 1, "shipping": 19.9, "tax": 17.35, "revenue": 736.25 } ] ``` 5. Exit the JSON Editor. 6. Repeat this procedure for the **View Cart** step, adding the same data. What’s next: [Add Data to the Review Cart and Shipping Address Steps (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_data_to_the_review_cart_and_shipping_address_steps.htm&release=264.0.0&type=5 "For the managed package runtime, the Messaging Framework of the Review Cart and Shipping Address steps stores the data format for the selected device. For the example, only the DeviceName is a merge field. The remaining values are hard-coded."). # Add Debugging Data to Test Procedure Event Tracking When you run a Test Procedure in the Preview tab, JSON data for debugging is included in the Errors/Debug Output pane. To include this debugging data in `VlocityTrackingEntry__c` object records under the `StepDebugInfo` JSON node, you can set the value of the OmniAnalyticsTrackingDebug custom setting to `True`. These steps apply if you use Omnistudio. 1. Go to Setup. - In Lightning Experience, click the gear icon and select **Setup** from the menu. - In Salesforce Classic, click the user menu and select **Setup** from the menu. 2. In the **Quick Find** box, type omni, then select **Omni Interaction Configuration**. 3. Click **New Omni Interaction Configuration**. 4. In the **Label** field, type OmniAnalyticsTrackingDebug. 5. In the **Value** field, type True. 6. Click **Save**. # Add Debugging Data to Test Procedure Event Tracking (Vlocity) (Managed Package) For the managed package runtime, when you run a Test Procedure in the Preview tab, JSON data for debugging is included in the Errors/Debug Output pane. To include this debugging data in `VlocityTrackingEntry__c` object records under the `StepDebugInfo` JSON node, you can set the value of the OmniAnalyticsTrackingDebug custom setting to `True`. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Although OmniAnalytics manages the data collection, the Test Framework uses the data. The OmniAnalyticsTrackingDebug custom setting isn’t dependent on the OmniAnalyticsEnabled custom setting. These steps apply if you use Omnistudio for Managed Packages. 1. Go to Setup. - In Lightning Experience, click the gear icon and select **Setup** from the menu. - In Salesforce Classic, click the user menu and select **Setup** from the menu. 2. In the Quick Find field, enter Custom Settings. 3. Click **Custom Settings**. 4. Click the letter **G** in the index across the top. ![The Custom Settings page lists settings with names that begin with G.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/customsettingsg.png) 5. To the left of **General Settings**, click **Manage**. ![The Custom Settings page lists General Settings.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/generalsettings.png) 6. Click **New**. 7. Enter a **Name** of OmniAnalyticsTrackingDebug and a **Value** of True. 8. Click **Save**. # Add Dynamic Branding to Custom Pages For custom pages used to log in, verify identity, reset passwords, and self-register, you can implement dynamic URLs with a custom login Apex controller. Use the Apex methods `getExperienceId` and `setExperienceId` of the `System.Site` class to retrieve and store the expid value. The brand that appears at run time depends on the expid dynamic URL that you specify on the Apex page. For example, the dynamic URL, https://www.my-cms.com/{expid}/logo.png, displays the Fix Coffee brand when the login URL is https://fix.my.site.com/?expid=coffee. In this example, the background image of the login page depends on the value of expid. ```java body { background-image: url(“https://www.my-cms.com/{!ExpID}/promo.jpg}”); width: 500px; clear: both; margin: 40 px 50px; vertical-align: middle; } h2 { color:#5F9EA0; } ``` In your custom login controller, include code to extract the expid value from the query parameter. ```java Global CustomLoginController() {        ... Expid = getExpidFromURL(); //Get the expid parameter from query string Public string getExpidFromURL() {    String expid = '';    expid = ApexPages.currentPage().getParmeters().get('expid');    Return expid; }        ... } ``` In your custom login controller, also include the `setExperienceId` method of the `System.Site` class to store the expid value in the user’s browser. When stored, you can retrieve it at any time during the lifetime of the user’s session. ```java Global CustomLoginController() {        ... Expid = getExpidFromURL(); site.SetExperienceId(expId);        ... } ``` # Add Einstein Predictions to a Loyalty Member Page To display predictions on the likelihood of member inactivity on a member page, add the Einstein Predictions component on the Loyalty Program record page and configure the component visibility settings. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited editions that have Loyalty Management enabled.
1. Open the loyalty member record page to which you want to add the predictions. 2. Drop the Einstein Predictions component where you want it on the page. 3. Use the Prediction lookup to find and select **Likelihood of a Member Being Inactive**. 4. Select **Set Component Visibility**, and then select the **Advanced** filter type. 5. Define the filter criteria for the field **Program Name**. 1. Under Field, click **Select**. 2. Click ![dropdown](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/loyalty_management/images/dropdown_icon.png), and then select **Record**. 3. Click ![dropdown](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/loyalty_management/images/dropdown_icon.png), and then select **Loyalty Program**. 4. Click ![dropdown](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/loyalty_management/images/dropdown_icon.png), and then select **Program Name**. 5. Click **Done** 6. Select Equal as the operator. 7. In the Value field, enter the program name. 8. Click **Done** # Add Elements to a Flexcard Build your card by dragging elements into a state on the canvas. Add data fields, display, and input elements to your Flexcard. Show data generated dynamically from the Flexcard’s data source, or add static information. Rearrange, clone, delete, and adjust the widths of your elements as needed. Style an element and configure its properties in the Flexcard designer. 1. From the App Launcher, find and select **Flexcards**. 2. Expand a Flexcard and select a version. 3. If needed, deactivate the Flexcard for editing the Flexcard. 4. To add an element to a Flexcard: - From the elements panel, drag an element from the Elements panel to the canvas. - In the designer for a managed package, drag an element from the **Build** tab. - Fields: Display data fields generated from the Flexcard's data source. For example, display policy information for an account. - Display: Add elements that show information, execute actions, or send data. For example, for a customer service portal, include the priority of a case, a button to close a case, or a banner to navigate to your company website. - Inputs: Add elements where users enter or select information from the defined values that you provide. For example, your portal users can enter their phone number, or select a date for an appointment. 5. Select an element on the canvas, and then add or update its properties: - To open the property panel, click ![Properties panel icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/properties_panel_252_designer.png). - In the designer for a managed package, click the **Properties** tab. In the properties panel, specify the element’s characteristics such as the name, the size, or [show conditions](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element_35370.htm&release=264.0.0&type=5 "Apply conditions to Flexcards elements to show only relevant information to your users based on data field values. For example, on a Flexcard that summarizes the terms of a contract, only show reminder text when the contract renewal date is within a defined range.") 6. On the Style tab, specify the element’s look and feel, such as the alignment, the color, or [apply a custom style](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements_38751.htm&release=264.0.0&type=5 "Configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. Configure backgrounds, text, and borders; adjust dimensions and element spacing; apply classes and inline styles; make your element responsive; and more."). - **[Flexcards Display Elements](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_display_elements_reference_28421.htm&release=264.0.0&type=5)** Show relevant information to your users by adding display elements to Flexcards such as data fields, actions, states, data tables, and more. While we provide info bubbles for most element properties directly in the app, some elements are more complex to set up, such as custom Lightning web components. Review the considerations and requirements for those elements. - **[Flexcards Input Elements](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_input_elements_reference_31222.htm&release=264.0.0&type=5)** Add input elements to Flexcards so that your users can provide data, which then updates the JSON data. You can also configure an element to run an action when a user interacts with the element. # Add Elements to a Flexcard (Managed Package) For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Beginning Winter '22, add Input elements on a Flexcard to enable users to enter data or select from a list of options you provide. Configure an action to update the data source with the user selected data. Beginning with Vlocity Insurance and Health Summer '20 , the Flexcard Designer enables you to preview while you build dynamic context-specific user interfaces for customer interactions using a drag interface with WYSIWYG editing. The Flexcard Designer is LWC only and does not support Angular. See [Flexcard Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcard_designer.htm&release=264.0.0&type=5 "For the managed package runtime, the Flexcard Designer is a declarative tool with a drag interface and WYSIWYG editing that makes it easy to build user interface (UI) Lightning web components without code. Build interfaces rich in information and with actions relevant to your customer's context. You can also create the look and feel of your Flexcard by styling individual elements from graphic user interfaces (GUIs) built into the designer."). Before You Begin 1. Create a Flexcard, and configure basic settings and a data source. See [Create a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."). 2. Configure Setup options as needed. See [Flexcard Setup Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcard_setup_reference.htm&release=264.0.0&type=5 "For the managed package runtime, the Setup panel in the Flexcard Designer provides multiple configuration options that enable a user to define the behavior of the Flexcard further. For example, update the data source and add session variables."). 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. (Optional) To adjust the width of the canvas while building your Flexcard, select a size from the canvas size dropdown. See [Flexcards Element Responsiveness (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_element_responsiveness.htm&release=264.0.0&type=5 "For the managed package runtime, in the Flexcard Designer, enable responsiveness on one or more elements to set the width to change as the visible area of a page, called the viewport, changes. By default, the width of an element is the same regardless of the width of the viewport device on which the user views the Flexcard. The width of an element is 1 to 12 parts of a 12 column grid. For example, a field element that is 6 columns wide takes up 50% of the available horizontal space."). ![FlexCard Designer viewport breakpoint dropdown](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/canvas_size_dropdown.png) 3. To add an element to a state from the Build panel, perform one of these tasks: - To add an element from a search: 1. In the search field, enter the name of an element, such as **Action**. You can also search for a specific Field element generated from your data source and available in the Fields section of the Build panel. For example, if your data source returns data field named Email, search for the Email Field element. 2. Drag the element from search results into a state on the canvas. - To add an element from the lists of available elements: - To add data fields, perform one of these tasks: - Click **Fields**, to view a list of data fields available from the data source, and drag one or more fields into a state on the canvas. - From the **Elements** list, drag the **Field** element into a state on the canvas. - To add a display component such as an Action, drag the element from the **Elements** list into a state on the canvas. See [Flexcards Display Elements Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_display_elements_reference.htm&release=264.0.0&type=5 "For the managed package runtime, select from a number of display elements to add to your Flexcard. Add elements such as data fields, actions, states, data tables, and more."). - Beginning Winter '22, to add an input component such as a Typeahead, drag the element from the **Inputs** list into a state on the canvas. See [Flexcards Input Elements Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_input_elements_reference.htm&release=264.0.0&type=5 "For the managed package runtime, add input elements on a Flexcard to enable users to enter data or select from a list of options you provide. When a user enters, selects or updates a value, the change is reflected in the data JSON. You can configure an element to execute an action when a user selects an option or enters data. Input elements are available in the Inputs section of the Build panel of the Flexcard Designer."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note When you drag an element next to another element, it takes up the remaining width of the container. For example, if you drag an Icon element next to a Field element whose width is 10 parts of the 12-column grid, the Icon element takes up the remaining 2 columns. See [Flexcards Element Responsiveness (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_element_responsiveness.htm&release=264.0.0&type=5 "For the managed package runtime, in the Flexcard Designer, enable responsiveness on one or more elements to set the width to change as the visible area of a page, called the viewport, changes. By default, the width of an element is the same regardless of the width of the viewport device on which the user views the Flexcard. The width of an element is 1 to 12 parts of a 12 column grid. For example, a field element that is 6 columns wide takes up 50% of the available horizontal space."). 4. To configure the element, click the element to update its properties from the Properties panel. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_tip.png) Tip To easily distinguish between elements, update the **Element Name**. When you hover over or click an element on the canvas, the element name is viewable in a blue tab with white text. Beginning with the Summer '21 release, hover over the element to see its name. ![FlexCards element name tab](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_element_name_tab.png) 5. (Optional) To adjust the width of the element, hover over the square box on the right border until your mouse pointer icon becomes a drag icon. Click and slide the square box right or left to increase or decrease the width. ![FlexCards adjust width](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_adjust_width.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note To make the width of the element responsive to the viewport, see [Create Responsive Elements on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_responsive_elements_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element's width to change when the viewport updates. For example, make the widths of the fields for First Name and Last Name of a Contact take the full width of the page on smaller devices, but shrink to 50% on larger devices such as laptops and desktops."). 6. (Optional) To style your element, click **Style** to open the Style panel, and see [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). 7. (Optional) To add conditions that must be met for the element to display, see [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 8. (Optional) To add another state, drag the State element from the **Elements** list in the Build panel onto the canvas, and follow steps 4 through 7. See [Add a State to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_state_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add a state to a Flexcard to present different interactions and layouts based on specified conditions. Each Flexcard has a default state that cannot be deleted. Add a State element to the canvas of a Flexcard, or clone a state already on the canvas."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Each Flexcard has a default state that can’t be deleted. 9. To rearrange, duplicate, or delete elements, see [Arrange, Duplicate, and Remove Elements on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_arrangeduplicateand_remove_elements_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, arrange, duplicate, and delete elements on the canvas of a Flexcard in the Flexcard Designer. Drag elements onto the canvas, and rearrange them by dragging them below, above, and next to other elements. Duplicate and remove elements with one click."). What’s next: Preview your Flexcard. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). - **[Flexcards Common Display Element Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_common_display_element_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Flexcard elements have properties shared by all Flexcard elements. For example, any element can be shown or hidden based on conditions set with the Conditions property. # Add Embedded Login Meta Tags to Your Web Page You enter meta tags on your web page where you want to add login capabilities with Embedded Login. You specify the Salesforce site URL, what the login form looks like, and the location of the CSS style sheet. ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_warning.png) Warning In Summer ’24, Salesforce made Embedded Login disabled by default. We recommend that you use the [web server flow](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_web_server_flow.htm&type=5&language=en_US), the [user-agent flow](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_user_agent_flow.htm&type=5&language=en_US), or another redirect-based OAuth 2.0 flow instead of Embedded Login. Embedded Login relies on third-party cookies, which are blocked or restricted in most browsers. And Embedded Login works only on Google Chrome and only as long as third-party cookies are allowed there by default. On the web page where you want to add to login capabilities, add Embedded Login information within the `` HTML element. 1. Open the web page that you want to add login capabilities to. 2. In the `` HTML element at the top of the file, enter these required meta tags, specifying the values from your configuration. - salesforce-community - salesforce-client-id - salesforce-redirect-uri - salesforce-mode - salesforce-target - salesforce-login-handler - salesforce-logout-handler - salesforce-server-callback (required if you’re using a server-side callback) 3. Optionally, enter these meta tags. - salesforce-forgot-password-enabled - salesforce-self-register-enabled - salesforce-register-starturl-enabled - salesforce-mask-redirects - salesforce-use-min-js - salesforce-cache-max-age - salesforce-save-access-token 4. Enter the link to the location of CSS resources. The CSS resides on a static endpoint hosted by your site. `` 5. Add this Embedded Login script, replacing the site URL https://embeddedlogin-dev-ed.my.site.com/demo with your own. `` # Add Formulas and Functions to a Spreadsheet Use functions to create formulas and perform calculations on your data. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. From a spreadsheet, select a cell. 2. Type an equal sign, and then enter the name of the function. The function auto-completes as you type. - **[Supported Formulas and Functions in Quip](https://help.salesforce.com/s/articleView?id=xcloud.quip_supported_formulas_and_functions.htm&release=264.0.0&type=5)** Quip supports formulas and over 400 common functions. # Add Functionality to an Authentication Provider After you set up single sign-on (SSO) with an authentication provider, Salesforce generates several client configuration URLs, such as the Single Sign-On Initialization URL. These client configuration URLs support request parameters, which you can use to add functions to your authentication provider. For example, use these parameters to get customized permissions from the third party or direct users to a specific location after authenticating. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

Salesforce generates these client configuration URLs. - Test-Only Initialization URL—Use this URL to test whether you set up the third party correctly. Open the URL and log in to the third party. Then, you’re redirected back to your Salesforce org with a map of attributes. - Single Sign-On Initialization URL—Use this URL to direct users to perform SSO into your org from the third party. The user opens the URL and logs in to the third party. The third party creates or updates a user account and then logs the user into Salesforce with that account. - Existing User Linking URL—Use this URL to link users in your org to an existing account in the third party. The user opens this URL, logs in to the third party, and logs in to Salesforce, creating a link between accounts. - OAuth-Only Initialization URL—Use this URL to obtain OAuth access tokens after the user authenticates. This flow provides for third-party data access but not SSO. - Callback URL— For each of the other client configuration URLs, the authentication provider sends information back to the callback URL. Add request parameters to your client configuration URLs as needed. For example, you want to link users in your org to their existing Facebook account and then allow Facebook to request profile access. Add a scope parameter to the Existing User Linking URL. When users go to this URL, they log in to Facebook and your org and receive a request for Facebook to access their Salesforce profile information. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note For Janrain providers, add request parameters to the appropriate callback URL. - (Salesforce authentication providers only) [Authorization Endpoint](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_authorization.htm&release=264.0.0&type=5 "When you set up a Salesforce authentication provider, use an authorization endpoint host request parameter to send users to a specific page to approve authorization requests. You can use this parameter only for Salesforce authentication providers. You can’t use it to send users to an authorization page outside of a Salesforce domain.")—Sends the user to a specific endpoint for authorization, such as a custom domain. - [Experience Cloud](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_community.htm&release=264.0.0&type=5 "When you set up single sign-on (SSO) with an authentication provider, use the Experience Cloud site URL request parameter to send users to a specific site after authenticating. With the site parameter, you can determine whether a user logs in to your Salesforce org or in to an Experience Cloud site. This parameter can also change what type of user the registration handler creates.")—Sends the user to a specific site after authentication. - [Expid](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_expid.htm&release=264.0.0&type=5 "When you set up single sign-on (SSO) with an authentication provider for your Salesforce Experience Cloud site, use the expid request parameter to deliver different experiences to users.")—Delivers different user experiences. For example, use the expid parameter to provide different registration processes for users based on what language they speak. - [Prompt](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_prompt.htm&release=264.0.0&type=5 "When you set up single sign-on (SSO) with an authentication provider, you can optionally add the prompt URL request parameter to client configuration URLs. This parameter specifies how the authorization server prompts the user to log in again and reapprove data access. For example, you can make a user log in again after signing up for an account.")—Specifies how the authorization server prompts the user for reauthentication and reapproval. For example, prompt a user to log in again after creating an account. - [Scope](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_scope.htm&release=264.0.0&type=5 "When you set up single sign-on (SSO) with an authentication provider, use the scope parameter to customize data requests to a third party, like Facebook. For example, request access to the email address listed on a user’s Facebook profile. You can use this parameter with every authentication provider except Janrain.")—Customizes what the third party is allowed to request from users. For example, allow the third party to request access to a user’s profile information. - [Site](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_site.htm&release=264.0.0&type=5 "When you set up single sign-on (SSO) with an authentication provider, use the site request parameter to log in users to a site. You can also link to a site user.")—Enables you to use the authentication provider with a site. - [Protected URL Redirect Parameters](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_redirect.htm&release=264.0.0&type=5 "When you set up single sign-on (SSO) with an authentication provider, use protected URL redirect parameters to redirect users to *.force.com pages and prevent malicious redirects.")—Send the user to a specified location after authentication or after clicking the **Back**, **Save**, or **Cancel** buttons. ## Configuration Help - **[Dynamically Add Functionality to an Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_param_forward_allowlist.htm&release=264.0.0&type=5)** For the most flexibility with authentication provider functionality, create your own URL parameter forwarding allowlist. With an allowlist, you can dynamically add allowlisted parameters to your client configuration URLs at runtime and forward them to the third-party provider. For example, forward the user's language preferences to the third-party provider so that the provider's login page displays in the user's desired language. - **[Control Where You Send Users for Authorization](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_authorization.htm&release=264.0.0&type=5)** When you set up a Salesforce authentication provider, use an authorization endpoint host request parameter to send users to a specific page to approve authorization requests. You can use this parameter only for Salesforce authentication providers. You can’t use it to send users to an authorization page outside of a Salesforce domain. - **[Direct Users to an Experience Cloud Site after Authentication](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_community.htm&release=264.0.0&type=5)** When you set up single sign-on (SSO) with an authentication provider, use the Experience Cloud site URL request parameter to send users to a specific site after authenticating. With the site parameter, you can determine whether a user logs in to your Salesforce org or in to an Experience Cloud site. This parameter can also change what type of user the registration handler creates. - **[Control Your Authentication Provider User Experience](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_expid.htm&release=264.0.0&type=5)** When you set up single sign-on (SSO) with an authentication provider for your Salesforce Experience Cloud site, use the expid request parameter to deliver different experiences to users. - **[Prompt Users to Reauthenticate and Reauthorize](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_prompt.htm&release=264.0.0&type=5)** When you set up single sign-on (SSO) with an authentication provider, you can optionally add the prompt URL request parameter to client configuration URLs. This parameter specifies how the authorization server prompts the user to log in again and reapprove data access. For example, you can make a user log in again after signing up for an account. - **[Customize Relying Party Data Requests](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_scope.htm&release=264.0.0&type=5)** When you set up single sign-on (SSO) with an authentication provider, use the scope parameter to customize data requests to a third party, like Facebook. For example, request access to the email address listed on a user’s Facebook profile. You can use this parameter with every authentication provider except Janrain. - **[Support Salesforce Sites for an Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_site.htm&release=264.0.0&type=5)** When you set up single sign-on (SSO) with an authentication provider, use the site request parameter to log in users to a site. You can also link to a site user. - **[Redirect Users to Secure URLs](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_redirect.htm&release=264.0.0&type=5)** When you set up single sign-on (SSO) with an authentication provider, use protected URL redirect parameters to redirect users to \*.force.com pages and prevent malicious redirects. # Add Google Tag Manager Data to the Example Omniscript Setup The Messaging Framework of the Script Setup stores the complete list of product impressions that’s sent to Google Analytics Ecommerce and the Google Tag Manager. 1. From the App Launcher, find and select **Omnistudio**, then click **Omniscripts**. 2. In the Omniscript list, expand **Documentation/OmniAnalytics** and click **E-commerce Buyflow Omniscript (Version 1)**. 3. Click **New Version**. The new version is Version 2. The previous version without the Google Tag Manager data is Version 1. 4. In the Properties pane, click **Setup**. 5. Select **Enable Tracking**. 6. Expand the Messaging Framework section. 7. Make sure the Window postMessage, Pub/Sub, and Session Storage boxes are selected. 8. Under Message, add these Key/Value pairs:

Key

Value

eventAction

view_item_list

products

(leave blank)

9. Scroll to the bottom and click **Edit Properties as JSON**. 10. Replace the empty quotes after the `products` node with this JSON array. Make sure a colon precedes the opening bracket and a closing brace follows the closing bracket. ``` [ { "item_name": "Apple iPhone 7", "item_brand": "Apple", "item_category": "Mobile", "item_variant": "Black", "price": 699, "quantity": 1 }, { "item_name": "Apple iPhone 8", "item_brand": "Apple", "item_category": "Mobile", "item_variant": "Black", "price": 699, "quantity": 1 }, { "item_name": "Apple iPhone X", "item_brand": "Apple", "item_category": "Mobile", "item_variant": "Black", "price": 699, "quantity": 1 }, { "item_name": "Apple iPhone 11", "item_brand": "Apple", "item_category": "Mobile", "item_variant": "Black", "price": 699, "quantity": 1 }, { "item_name": "Apple iPhone XR", "item_brand": "Apple", "item_category": "Mobile", "item_variant": "Black", "price": 699, "quantity": 1 } ] ``` 11. Click **Close JSON Editor**. After you add Google Tag Manager data to the example Omniscript Setup, [Add Google Tag Manager Data to the Example Omniscript Steps](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_add_gtm_data_omniscript_steps_std.htm&release=264.0.0&type=5 "The Messaging Framework of each step stores the product data that’s sent to Google Analytics Ecommerce and the Google Tag Manager."). # Add Google Tag Manager Data to the Example Omniscript Steps The Messaging Framework of each step stores the product data that’s sent to Google Analytics Ecommerce and the Google Tag Manager. If you aren't in the Omniscript, from the App Launcher, find and select **Omnistudio**, then click **Omniscripts**. In the Omniscript list, expand **Documentation/OmniAnalytics** and click **E-commerce Buyflow Omniscript (Version 2)**. Perform these steps for each Step element in the Omniscript: 1. Click the Step element. 2. In the Properties pane, click **Properties** to display the Step element properties. 3. Expand the Messaging Framework section. 4. Make sure the Window postMessage, Pub/Sub, and Session Storage boxes are checked. 5. Under Message, add a Key/Value pair with eventAction as the key. The value depends on the Step element you're editing:

Step Element

Value of eventAction Key

Select Device

view_item_list

View Quote

select_item

View Cart

add_to_cart

Review Cart

begin_checkout

Shipping Address

add_shipping_info

Provide Payment

add_payment_info

Generate Receipt

purchase

6. Add a Key/Value pair with transID as the key. You can leave the value blank for all the steps except the Generate Receipt step. For that step, you can use any value. For example, you can use a timestamp. If your Google Analytics configuration processes all events in the same way, all events require the same parameters, even if some events don't use them. 7. Add a Message Key/Value pair with products as the key, and leave the value blank. 8. Click **Edit Properties as JSON**. 9. Replace the empty quotes after the `products` node with one of these JSON arrays. Make sure a colon precedes the opening bracket and a closing brace follows the closing bracket. For the Select Device step, use this JSON array: ``` [ { "item_name": "Apple iPhone 7", "item_brand": "Apple", "item_category": "Mobile", "item_variant": "Black", "price": 699, "quantity": 1 }, { "item_name": "Apple iPhone 8", "item_brand": "Apple", "item_category": "Mobile", "item_variant": "Black", "price": 699, "quantity": 1 }, { "item_name": "Apple iPhone X", "item_brand": "Apple", "item_category": "Mobile", "item_variant": "Black", "price": 699, "quantity": 1 }, { "item_name": "Apple iPhone 11", "item_brand": "Apple", "item_category": "Mobile", "item_variant": "Black", "price": 699, "quantity": 1 }, { "item_name": "Apple iPhone XR", "item_brand": "Apple", "item_category": "Mobile", "item_variant": "Black", "price": 699, "quantity": 1 } ] ``` For all other steps, use this JSON array: ``` [ { "item_name": "%DeviceName%", "item_brand": "Apple", "item_category": "Mobile", "item_variant": "Black", "price": 699, "quantity": 1 } ] ``` 10. Click **Close JSON Editor**. This is the final task in the current workflow. For the next task in the parent workflow, see [Setting Up Third-Party Tracking and Event Types](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_workflow_configure_external_std.htm&release=264.0.0&type=5 "An External Tracking Definition specifies a third-party analytics account and tag manager that the OmniAnalytics tracking data is sent to. External Tracking Event Types specify data formats for specific events."). # Add Identity Providers to the My Domain Login Page Users can authenticate with alternate identity provider options from your My Domain login page. If you enabled single sign-on (SSO) and configured SAML, or if you set up external authentication providers, you can display them on the login page. Users are sent to the identity provider’s login screen to authenticate and then redirected to Salesforce. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To customize a My Domain login page: Customize Application
Available authentication services include all providers configured as SAML SSO identify providers or external authentication providers, except Janrain. You can’t use Janrain for authentication from the login page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Authentication configuration settings apply to your org’s deployed and provisioned My Domains. 1. From Setup, in the Quick Find box, enter My Domain, and then select **My Domain**. 2. Under Authentication Configuration, click **Edit**. 3. Select the authentication services that you want to make available on the login page. 4. Save your changes. You can list all your org’s available SSO identity providers on your login page. If you have several, consider setting up your login page with the Login Discovery page type. #### See Also - [Configure My Domain Settings](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_settings.htm&release=264.0.0&type=5 "Customize your login page with your brand and determine the user experience when they log into your Salesforce org via your My Domain.") - [Customize Your My Domain Login Page with Your Brand](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_login_branding.htm&release=264.0.0&type=5 "My Domain gives you a point-and-click way to brand the page that prompts users to log in to your Salesforce org. You can replace the Salesforce logo with your own and change your background and login button colors. You can also display content to the right of your login form. Branding options apply to the entire login experience, including pages for users to verify their identity and reset passwords. They also apply to login flows.") # Add Inline Styles to a Flexcard Element (Managed Package) For the managed package runtime, when styling options available from the design interfaces in the Flexcard Designer don't meet your design needs, add inline CSS styles to an element on a Flexcard. Override classes and target specific elements or element components. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_tip.png) Tip Use this feature as needed and sparingly to optimize performance. 1. In the Flexcard Designer, click an element on the canvas, and click **Style** to open the Style panel. 2. In the **Inline CSS Styles** field of the **Custom** section, enter CSS properties and their values. For example, font-variant: small-caps; word-spacing: 30px;. What's next: Preview your Flexcard. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). # Add Inputs to an Edit Block (Managed Package) For the managed package runtime, when you create or edit multiple records in an Edit Block, you edit the fields in those records by entering data into Input elements. For example, editing Contact records requires Input elements for fields such as Name and Phone. You can add other types of elements to an Edit Block, such as Formulas and Actions. For a complete list, see ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Compatible Elements in [Configure an Edit Block (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_edit_block.htm&release=264.0.0&type=5 "For the managed package runtime, Edit Blocks enable a user to add and edit multiple entries in a single array. For example, you can use an Edit Block to list and edit an Account's list of Contacts. Edit Blocks are repeatable blocks by default. You can prefill repeatable blocks with data by using an array format."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You can't nest Edit Blocks within other Edit Blocks, and you can add only one level of Block inside an Edit Block. Also, Edit Blocks don’t support the Custom LWC Element. 1. In the Omniscript Designer, from the Build tab, expand **Groups**. 2. Drag an Edit Block into a Step. 3. Click the Edit Block's **Enable Edit Mode** icon. 4. From the Build tab, expand **Inputs** or another element category. 5. Drag the elements you need into the Edit Block. For example, for a Phone field, drag a Telephone element into the Edit Block. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note An Edit Block with an Edit Block Mode of Table can have up to six elements, or columns. Including more than six elements makes the columns small and uneven, resulting in odd word wrapping. 6. Where applicable, name the elements to match the field names. For example, for a Phone field, change the Telephone element's **Name** property from the Telephone1 default to Phone. # Add Integration Procedure Components to an Upgraded Org (Managed Package) For the managed package runtime, to use new components after upgrading an org, add Integration Procedure components to the Omniscript Element Type picklist. This article describes the process of adding components and provides a list of the added components by release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To add a new Integration Procedure component: 1. Click **Setup**. 2. In the Quick Find/Search box enter Object, and click **Object Manager**. 3. Click **Vlocity Omniscript Element**. 4. Click **Fields & Relationships**. 5. Click the **Type** Picklist field. 6. Scroll down to the **Values** section, and click **New**. ![The Values section lists the existing picklist values, and the New button in that section lets you create new picklist values.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/omniscript_element_new_value.png) 7. Enter the new Element name to the picklist, and click **Save**. # Add Languages to a CMS Workspace Offer translated content to your publishing channels by adding languages to CMS workspaces. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To manage languages in a CMS workspace: A CMS workspace contributor role of content admin
All of the languages supported by your Salesforce org are available to add as translation languages in both a CMS workspace and an enhanced CMS workspace. You select the default language for your workspace when you create a workspace. You can add translation languages to a workspace but you can’t remove them after you save. The procedure to add languages to a CMS workspace is slightly different from the procedure to add languages to an enhanced CMS workspace. 1. In Lightning Experience, from the App Launcher, open the Digital Experiences app (previously named Salesforce CMS). 2. To add a language to a CMS workspace, take these steps. 1. Open the CMS workspace and click **Languages**. 2. Move languages from the Available Languages list to the Selected Languages list, and then save your changes. 3. To add a language to an enhanced CMS workspace, take these steps. 1. Open the enhanced CMS workspace. 2. From the workspace settings menu, click **![Workspace Settings Menu icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_workspace_settings.png)**, and then select **Languages**. 3. Move languages from the Additional Language list to the Selected Additional Language list, and then save your changes. # Add Lists in Spreadsheet Cells Format a Quip spreadsheet cell as a bulleted list, a numbered list, or a checklist. You can include one list type per cell. ### Required Editions
Available in: Quip desktop app and Quip on web
Action Instructions
Add a bulleted list.
  • Spreadsheet Toolbar: From the spreadsheet toolbar, select the format menu, and then choose Bulleted List.
  • @Mention: @Bulleted List
  • Keyboard Shortcut: Command+Shift+8 (Mac), Ctrl+Shift+8 (Windows)
Add a numbered list.
  • Spreadsheet Toolbar: From the spreadsheet toolbar, select the format menu, and then choose Numbered List.
  • @Mention: @Numbered List
  • Keyboard Shortcut: Command+Shift+7 (Mac), Ctrl+Shift+7 (Windows)
Add a checklist.
  • Spreadsheet Toolbar: From the spreadsheet toolbar, select the format menu, and then choose Checklist
  • @Mention: @Checklist
  • Keyboard Shortcut: Command+Shift+9 (Mac), Ctrl+Shift+9 (Windows)
Add a new item in a list.

While editing list contents in a cell, use a keyboard shortcut.

  • Option+Return
  • Alt+Enter (Windows)
Check or uncheck a checklist item.

While editing a checklist in a cell, use a keyboard shortcut.

  • Command+Return (Mac)
  • Ctrl+Enter (Windows)
Change a list type in a cell. Use your cursor to select a cell, and then choose a new list type from the format menu in the toolbar. To change the list type while editing cell contents, use the list type's keyboard shortcut.
Paste a list from a Quip document into a spreadsheet cell.

Copy the list from the Quip document, double-click a cell in the spreadsheet to edit its contents, and then use a keyboard shortcut to paste. Lists with more than one hierarchy level convert to a single level in the cell.

If you don't double-click to edit a cell's contents, the list pastes into separate cells.

Paste a list from a spreadsheet cell into a Quip document.

Copy a single cell that contains a list, and then paste it into the Quip document.

If you copy more than one cell, the cells paste into a Quip document as an embedded spreadsheet.

## Limitations for Lists in Cells These actions aren’t supported for lists in spreadsheet cells. - Changing horizontal text alignment in cells with lists. - Dragging to reorder list items in a cell. - Customizing numbering in numbered lists. - Indenting lists in cells. # Add Local Name Fields to a Page Layout in Lightning Experience By default, local name fields don’t appear in page layouts for accounts, contacts, or leads. To see a local name field on one of these pages, add it to the page layout and then make it visible using Field-Level Security settings. 1. From Setup, select **Object Manager**. 2. Select the object with the local name field. 3. Select **Page Layout** and click the page layout to edit it. 4. Drag the local name field to the record section. 5. Click **Save**. 6. From Setup, select **Home**, then **Security**, and then select **Field Accessibility**. 7. Select the object with the local name field. 8. Select **View By Fields.** 9. Select the local name field and make it visible to your desired profiles. 10. Click **Save**. # Add Local Name Fields to a Page Layout in Salesforce Classic By default, local name fields don’t appear in page layouts for accounts, contacts, or leads. To see a local name field on one of these pages, add it to the page layout and then make it visible using Field-Level Security settings. 1. From Setup, select **Customize**. 2. Select the object with the local name field. 3. Select **Page Layout** and click **Edit**. 4. Drag the local name field to the record section. 5. Click **Save**. 6. From Setup, select **Security Controls** and then select **Field Accessibility**. 7. Select the object with the local name field. 8. Select **View By Fields.** 9. Select the local name field and make it visible to your desired profiles. 10. Click **Save**. # Add Mappings to Vary Benefits by Criteria Create qualifying criteria for your benefits to differentiate them by product category, region, and other business-specific dimensions. To introduce the criteria into the benefit structure, map similar fields in the Program Rebate Type Benefit and the Rebate Member Product Aggregate objects. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
User Permissions Needed
To create a Program Rebate Type Benefit Mapping Rebate Management Admin permission set
1. Open the record of the rebate program that you want to activate, and select the **Benefit Mappings** related list on the Related tab. Or from App Launcher search, enter Program Rebate Type Benefit Mappings, and then select **Program Rebate Type Benefit Mappings**. 2. Click **New**. 3. Provide these details, and then save your changes. | Field | Value | | --- | --- | | Program Rebate Type | Name of the rebate type for which you create a mapping. When you create benefit mappings from the Related tab of a rebate type, this value defaults to the current rebate type. | | Aggregate Field | Field on the Rebate Member Product Aggregate object or any other custom aggregation object. | | Benefit Field | Field on the Program Rebate Type Benefit object. | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note You can add up to ten benefit mappings for a rebate type. #### See Also - [How Are Rebate Payouts Calculated?](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_how_are_payouts_calculated.htm&release=264.0.0&type=5 "Review the necessary steps to calculate rebate payouts for the members in a rebate program. Transaction Journal records are used as the input for calculation, and the output is stored in Rebate Member Payout records.") - [Refine Rebates and Incentives with Benefit Mappings](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_refine_rebates_and_incentives.htm&release=264.0.0&type=5 "Use benefit mappings to create benefits for a rebate program that vary by additional criteria such as product category, partner territory, member enrollment status, and industry segment. For example, a volume-based rebate type can have benefits in which the rebate amount varies by product category for the same benefit tier.") - [Run a Rebate Program for AMER and LATAM Partners (Example)](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_run_rebate_program_example.htm&release=264.0.0&type=5 "This example shows how an automotive company creates a rebate program to reward its partners in the AMER and LATAM regions.") # Add Matrix Lookups (Managed Package) For the managed package runtime, a matrix lookup step calls a calculation matrix, supplying input to the matrix and returning its output. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In the Calculation Steps area, click **Add Step**. 2. Select **Matrix Lookup**. 3. In the **Matrix Name** field, enter the name of the calculation matrix. After you select the calculation matrix, the calculation step displays the matrix inputs and outputs. The system adds all columns to the Variables section. Vlocity grays out variables it adds for matrix lookups, so you can't accidentally modify or delete them. A link to the calculation matrix also appears on the calculation step. 4. To make this calculation step conditional, select **Conditional Step**. Enter the condition that will invoke this matrix lookup. 5. To include the matrix lookup output in the calculation output data, select **Include in Calculation Output**. 6. Click **Save Calculation Procedure**. # Add Members to a Group After you create a group, you can add Individual or Corporate type loyalty program members to the group. Members of a group can contribute nonqualifying points to the group's point balances. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
To add an Individual or a Corporate type member to a group, use these ways: - Click **Add Member** on the Group Members related list on a Group type Loyalty Program Member record. - Click **Add Member to Group** on the Associated Groups related list on an Individual or a Corporate type Loyalty Program Member record. - From the App Launcher, find and select Loyalty Program Group Member Relationships. Click **New**. When adding a member to a group, provide these details:
Field Description
Group The group to which you intend to add the Individual or Corporate member.
Loyalty Program Member The Individual or Corporate member you intend to add to a group. Ensure that the member and the group are part of the same loyalty program.
Contribution Percentage The percentage of points that a member intends to transfer to the group. Members can contribute up to 100% of their points across all groups that they’re a part of.
Member can redeem group points

This field is optional and not used.

Admins can customize your company's instance of Loyalty Management to use this field to indicate which members can redeem points from the group.

A member can be added to a maximum of 100 groups. Members can view the details of the groups they’re a part of in the loyalty program site created using the Loyalty Member Portal template. On the Member Groups related list on a member's Loyalty Program Member record, the member can open their groups' records and review the group details. - **[View the Name of a Group Member](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_group_member_name.htm&release=264.0.0&type=5)** The Member Name field of the Loyalty Program Group Member Relationship object stores the contact or account name of a group's Individual or Corporate member. Admins must provide access to users to view the Member Name field; by default, users don’t have the permission to view this field. # Add NASA as a Remote Site To invoke NASA REST APIs from your org, you must add NASA as a Remote Site. 1. From Setup, in the Quick Find box, type remote, then click **Remote Site Settings**. 2. Click **New Remote Site**. 3. For the **Remote Site Name**, enter NASA. 4. For the **Remote Site URL**, enter https://api.nasa.gov. 5. Save your changes. What’s next: [Get an API Key from NASA](https://help.salesforce.com/s/articleView?id=xcloud.os_get_an_api_key_from_nasa_53171.htm&release=264.0.0&type=5 "You must specify an API key every time you invoke a NASA REST API. You can get this key from NASA."). # Add NASA as a Remote Site (Managed Package) For the managed package runtime, to be able to invoke NASA REST APIs from your org, you must add NASA as a Remote Site. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From Setup, in the Quick Find box, type remote, then click **Remote Site Settings**. 2. Click **New Remote Site**. 3. For the **Remote Site Name**, enter NASA. 4. For the **Remote Site URL**, enter https://api.nasa.gov. 5. Click **Save**. What’s next: [Get an API Key from NASA (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_get_an_api_key_from_nasa.htm&release=264.0.0&type=5 "For the managed package runtime, you must specify an API key every time you invoke a NASA REST API. You can get this key from NASA."). # Add New Fields to the Sustainability Scorecard Page Layout Add the new fields to your page layout so that internal users and suppliers can see and edit them. ### Required Editions
Available in: Lightning Experience
Available with the Supplier Management AddOn license and the External Supplier Management AddOn license, included with Net Zero Cloud and the Manufacturing, Automotive, and Consumer Goods Cloud SKUs (and other industry Cloud SKUs). See required licenses and permissions.
User Permissions Needed
To edit page layouts Customize Application
1. From **Setup**, in the **Quick Find** box, enter Object Manager, and then select **Object Manager**. 2. Select **Sustainability Scorecard**, and then select **Page Layouts**. 3. Add the fields you want internal users or suppliers to see, such as Assurance Level or the SBTi target fields. 4. Save your changes. # Add Objects to a Data Management Policy To define which records your Data Management Policy masks or deletes, add one or more objects. You can apply unique record filters and data transformation rules to each object on a policy. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Privacy Center license.
User Permissions Needed
To create, edit, and schedule Data Management Policies: Manage Privacy Center Policies
Before you begin: - Review [Considerations for Processing Objects](https://help.salesforce.com/s/articleView?id=xcloud.privacy_center_object_processing.htm&release=264.0.0&type=5 "To achieve your data management goals more effectively, review key concepts around ordering objects and deleting data with privacy policies. And be aware of how errors or missing data can affect your implementation."). - These objects and data types aren't supported in Privacy Center. - External objects - Big objects - Setup objects - Unstructured data (such as data within an attached PDF) Complete these tasks for each object that you want to add to a policy. - **[Filter Records on an Object](https://help.salesforce.com/s/articleView?id=xcloud.filters_conditions_data_management_policies.htm&release=264.0.0&type=5)** Specify records to process with your Data Management Policy by selecting an object and setting filter conditions. You can process records that meet any condition, all conditions, or a custom arrangement of conditions. - **[Mask or Delete Records on an Object](https://help.salesforce.com/s/articleView?id=xcloud.mask_delete_data_management_policies.htm&release=264.0.0&type=5)** Define how an object’s records are masked or deleted from your org, and determine how related files and attachments are handled. - **[Retain Records on an Object](https://help.salesforce.com/s/articleView?id=xcloud.retention_data_management_policies.htm&release=264.0.0&type=5)** Choose whether you want to copy records to an external data store for retention. # Add Objects to a Legacy Salesforce Archive Policy To specify the records and files that you want to archive, add an object to your Legacy Salesforce Archive policy. While configuring the object, you determine which records to process, how to handle related files and attachments, and which related objects to archive in addition to the primary object. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Salesforce Archive license.
User Permissions Needed
To create, edit, and schedule Archive Policies: Manage Archive Policies
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Legacy Salesforce Archive. Read about the Archive managed package in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). To configure an object, complete these tasks. - **[Identify Object Records that You Want to Archive](https://help.salesforce.com/s/articleView?id=xcloud.archive_object_filter.htm&release=264.0.0&type=5)** Select an object and apply filter conditions. You can archive records that meet any condition, all conditions, or a custom set of conditions in Legacy Salesforce Archive. - **[Configure Files and Attachments for Archived Records in Legacy Salesforce Archive](https://help.salesforce.com/s/articleView?id=xcloud.archive_files_attachments.htm&release=264.0.0&type=5)** Select what happens to files and attachments when their associated records become archived in Legacy Salesforce Archive. - **[Archive Related Objects in Legacy Salesforce Archive](https://help.salesforce.com/s/articleView?id=xcloud.archive_related_objects.htm&release=264.0.0&type=5)** Select any related objects in Legacy Salesforce Archive that you want to archive in addition to the primary object. # Add Omni Interaction Configuration Settings for DocuSign Provide DocuSign authorization by adding two Omni Interaction Configuration entries for DocuSign. Before you begin: [Create an OAuth 2.0 Named Credential to Connect to DocuSign](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_named_credential_for_docusign_23641.htm&release=264.0.0&type=5 "Add a Named Credential using authentication provider information to create a secure connection. Omniscripts and Integration Procedures use these credentials to connect with DocuSign. Create a named credential for the admin who manages templates and your DocuSign account. You can also create a Send on Behalf named credential to send or sign DocuSign forms on behalf of other users.") 1. From Setup, enter Omni Interaction Configuration in the Quick Find box, then select **Omni Interaction Configuration**. 2. Click **New**. 3. For Name and Label, enter DocuSignAccountId. 4. For Value, enter the API Account ID of your DocuSign Account. The API Account ID is present on DocuSign's Apps and Keys page. 5. Click **Save**. 6. Click **New**. 7. For Name and Label, enter DocuSignNamedCredential. 8. For Value, enter DocuSign. What’s next: [Set Up Send on Behalf of Another User for Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_setup_send_on_behalf_of_another_user.htm&release=264.0.0&type=5 "To send or sign DocuSign on behalf of another user, create a Send On Behalf field in the User object and assign the Send on Behalf named credential from that field in the user’s page. If you want multiple users to send or sign on behalf of another user, assign the named credential to each user. When you log in, Salesforce checks whether a Send On Behalf setup exists. If it doesn’t, Salesforce sends or signs DocuSign using the default admin user."). # Add Omniscript to a Page in Adobe Experience Manager (Managed Package) For the managed package runtime, to use Omniscript as a paragraph component in Adobe Experience Manager, it is first necessary to ensure that the Omniscript page exists in Salesforce or a locally defined Omniscript has been added to Adobe Experience Manager. Once the Omniscript is confirmed in Salesforce or locally defined, you can create a page in AEM that uses Omniscript. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Create a Page in Adobe Experience Manager for an Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_omniscript_to_page_in_aem_create.htm&release=264.0.0&type=5)** For the managed package runtime, create a page in Adobe Experience Manager to add your Omniscript. - **[Add an Omniscript Component to an Adobe Experience Manager Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_omniscript_to_page_in_aem_add.htm&release=264.0.0&type=5)** For the managed package runtime, after ceating the Adobe Experience Manager (AEM) page, add the Omniscript component to the page. - **[Use a Local Omniscript Definition in Adobe Experience Manager (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_omniscript_to_page_in_aem_local_def.htm&release=264.0.0&type=5)** For the managed package runtime, after creating the Adobe Experience Manager (AEM) page, use a local Omniscript definition in AEM. - **[Use a local Omniscript Definition with Salesforce Cloud Services Authentication (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_omniscript_to_page_in_aem_sf_clloud.htm&release=264.0.0&type=5)** For the managed package runtime, beginning with Vlocity Insurance Winter '19, Omniscripts defined locally can connect to the Salesforce backend using the **Salesforce Cloud Services Authentication** component. Use a local Omniscript definition with **Salesforce Cloud Services Authentication**. # Add Omniscripts to Adobe Experience Manager (Managed Package) For the managed package runtime, add Omniscripts to Adobe Experience Manager using OmniOut. Omniscripts hosted in AEM require a Salesforce connection to send data between servers. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before You Begin 1. Learn about OmniOut. See [OmniOut (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_omniout.htm&release=264.0.0&type=5 "For the managed package runtime, run LWC Omniscripts and Flexcards off-platform on third-party websites with OmniOut for Omniscripts and OmniOut for Flexcards. Display Omniscripts and Flexcards and connect to Salesforce from a content management system's (CMS) external website. Run an Omniscript or Flexcard on your external site by adding the component to the OmniOut project, integrating OmniOut into your application, and deploying your application to your CMS."). 2. Test your Omniscripts in OmniOut's development mode. See [Run OmniOut in Development Mode (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_run_omniout_in_development_mode.htm&release=264.0.0&type=5 "For the managed package runtime, view and test your Omniscript and Flexcard before adding it to your application by running it in development mode. Use a jsForce connection to request data from your org."). 1. Create a Salesforce connection in AEM. See [Integrate Salesforce Cloud Services into Adobe Experience Manager (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_integrate_salesforce_cloud_services_into_adobe_experience_manager.htm&release=264.0.0&type=5 "For the managed package runtime, create a Salesforce connection in Adobe Experience Manager (AEM). The connection setup isn’t part of the Vlocity package."). 2. Set resource paths in OmniOut to load Lightning and Newport styles into your app. See [Set the OmniOut Resource Path (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_set_the_omniout_resource_path.htm&release=264.0.0&type=5 "For the managed package runtime, load your custom styling resources into your Adobe Experience Manager application by setting the correct resource paths."). 3. Deploy OmniOut to AEM. See [Deploy OmniOut to Adobe Experience Manager (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_omniout_to_adobe_experience_manager.htm&release=264.0.0&type=5 "For the managed package runtime, add your AEM credentials to OmniOut and deploy it to your AEM server. The deployment adds a Vlocity LWC OmniOut component to AEM. The Vlocity LWC OmniOut component allows you to add your Omniscripts to an AEM page."). 4. Add the OmniOut component to an AEM page. See [Add the Vlocity LWC OmniOut Component to Adobe Experience Manager (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_the_vlocity_lwc_omniout_component_to_adobe_experience_manager.htm&release=264.0.0&type=5 "For the managed package runtime, launch Omniscripts from an AEM page by adding the Vlocity LWC OmniOut Component. The Vlocity LWC OmniOut component hosts the Omniscript and uses the Salesforce Cloud Services configuration to make calls to Salesforce."). - **[Integrate Salesforce Cloud Services into Adobe Experience Manager (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_integrate_salesforce_cloud_services_into_adobe_experience_manager.htm&release=264.0.0&type=5)** For the managed package runtime, create a Salesforce connection in Adobe Experience Manager (AEM). The connection setup isn’t part of the Vlocity package. - **[Set the OmniOut Resource Path (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_set_the_omniout_resource_path.htm&release=264.0.0&type=5)** For the managed package runtime, load your custom styling resources into your Adobe Experience Manager application by setting the correct resource paths. - **[Deploy OmniOut to Adobe Experience Manager (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_omniout_to_adobe_experience_manager.htm&release=264.0.0&type=5)** For the managed package runtime, add your AEM credentials to OmniOut and deploy it to your AEM server. The deployment adds a Vlocity LWC OmniOut component to AEM. The Vlocity LWC OmniOut component allows you to add your Omniscripts to an AEM page. - **[Add the Vlocity LWC OmniOut Component to Adobe Experience Manager (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_the_vlocity_lwc_omniout_component_to_adobe_experience_manager.htm&release=264.0.0&type=5)** For the managed package runtime, launch Omniscripts from an AEM page by adding the Vlocity LWC OmniOut Component. The Vlocity LWC OmniOut component hosts the Omniscript and uses the Salesforce Cloud Services configuration to make calls to Salesforce. # Add Opportunity Team Members to a Close Plan Automatically add an Opportunity’s Team Members to a Close Plan when an Opportunity is created. Also add Opportunity Team Members to existing Close Plans already linked to an Opportunity so they always have a 360-degree view. ### Required Editions
Available in: Lightning Experience
Use a flow to automatically populate add Opportunity Team Members to an Opportunity Close Plan. Use Process Builder to create a Close Plan from a template when an Opportunity is created. After you create a document from the template, the flow adds the Opportunity Team Members to the Close Plan. Process Builder then also adds Opportunity Team Members to an Opportunity’s existing Close Plan. ## Set Up the Quip Document Component Set up the Quip Document component on the Opportunity page layout. Create a Close Plan custom URL field to store Close Plans created from your template. 1. Navigate to an Opportunity record in Lightning Experience. 2. Click the gear icon, and select **Edit Page** to go to the Lightning App Builder. 3. Create a new tab called Close Plan. 4. In the left pane, select **Quip Document** and drag it to your new tab. ![Quip Document component in Lightning App Builder](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_doc_component_setup_one_template_for_each_record.png) 5. Select **One template for each record**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note One template for each record lets you add a template via Flow Builder or lets your users manually add a template. To use Flow Builder only, select **Different Docs for each record**. 6. Click **![Edit icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/button_edit_pencil.png).** You can either paste your Close Plan template URL or select a template from the Template Library. 7. Click **Next** and validate the template. The validation checks that you have access to the document, that link sharing is turned on, that the document is marked as a template, and that it isn’t a slide. 8. To create a custom URL field to store the new document URLs, select **Create a new field**. 9. Enter Close Plan as the field label and the field name. You can make changes later from the Object Manager. ![Create a Custom Field modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_custom_url_field_modal_228.png) 10. Save and activate the action. To automatically add Opportunity Team Members to a Close Plan created from the embedded template, create an autolaunched flow. ## Build a Flow to Add Opportunity Team Members to a Close Plan Create an autolaunched flow in Flow Builder that automatically adds an Opportunity’s team members when a Close Plan is created from the template. 1. From the Quick Find box in Setup, enter Flows. 2. Click **New Flow**. 3. Select **Autolaunched Flow** and click **Next**. Flow Builder displays the flow in the Auto-Layout flow layout. You can access Interactions, Logic, and Data via the plus icon. Process Builder later launches the flow when an Opportunity stage is changed. 4. From the Manager tab, click **New Resource**. 5. Select **Variable** as the Resource Type, enter the API name OpportunityTeamMembers, select **Record** as the Data Type, and select **Opportunity Team Member** as the Object. Select **Allow multiple values (collection)**, and then **Available for input** and **Available for output**, and click Done. ![OpportunityTeamMember resource with fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_new_resource_opp_team_members.png) 6. From the Manager tab, click **New Resource**. 7. Select **Variable** as the Resource Type. 8. Enter the API name OpportunityRecord. 9. Select **Record** as the Data Type. 10. Select **Opportunity** as the Object. 11. Select **Available for input** and click **Done**. 12. From the Elements tab, drag **Get Records** onto the canvas. 13. Enter a name for the action. Here, we use Get Related Opportunity Team Members. Select **Opportunity Team Member** as the Object, and set conditions. Here, we set All Conditions to be met, and OpportunityId to equal {!OpportunityRecord.id}. ![Get Records window with required fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_get_records_opp_team_members.png) 14. Under How Many Records to Store, select **All records**. Select **Choose fields and assign variables (advanced)**, then enter OpportunityTeamMembers collection as the Record Collection. 15. Under Select Opportunity Team Member Fields to Store in Variable, select **ID** and **UserId** 16. Select **When no records are returned, set specified variables to null**, then click **Done**. 17. Connect the elements on the canvas. Save the flow and enter a name. Here, we use Add Opportunity Team Members to Close Plan. 18. From the Elements tab, drag **Loop** onto the canvas. 19. Enter a name for the loop. Here, we use Loop Through Opportunity Team Members. Enter OpportunityTeamMembers as the Collection Variable, and select **First item to last item** as the Direction. Click **Done**. ![Required fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_loop.png) 20. Connect the Get Records and Loop elements on the canvas and click**Save**. 21. From the Manager tab, click **New Resource**. 22. Select **Variable** as the Resource Type, enter the API name UserEmailAddresses, and select **Text** as the Data Type. Select **Available for input** and **Available for output**, and click Done. ![Text variable with required fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_new_variable_emails.png) 23. From the Elements tab, drag **Get Records** onto the canvas. 24. Enter a name for the action. Here, we use Get Opportunity Team User Record. Select **User** as the Object, and set conditions. Here, we set All Conditions to be met, and Id to equal {!Loop\_Through\_Oportunity\_Team\_Members.UserId}. ![Get Records window with required fields](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_get_records_emails.png) 25. Under How Many Records to Store, select **Only the first record**. Select **Choose fields and assign variables (advanced)**, then select **In separate variables**. 26. Under Select Variables to Store User Fields, select **Email** and **UserEmailAddresses**. 27. Select **When no records are returned, set specified variables to null**, then click **Done**. 28. Connect the Loop and new Get Records action on the canvas. Select **For each item in the collection**, and click **Done**. 29. From the Elements tab, drag a new action onto the canvas. 30. Select **Quip** and enter Add Members to Document. 31. Name the action Add Opportunity Members to Documents. ![Required fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_add_members_to_doc_action.png) 32. For the Document URL, enter {!OpportunityRecord.Close\_Plan\_\_c}, where Close\_Plan\_cc is the API name of your custom URL field. 33. To give Opportunity Team Members edit and sharing access to an Opportunity’s Close Plans, include **Add Full-Access Members by Email Address**, and select **UserEmailAddresses**. Click **Done**. 34. Connect the **Get Opportunity Team User Record** Get Records element and your new action. To complete the flow, connect the action and the loop, then click **Save**. ![Final canvas with elements connected](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_add_opp_members_final_canvas.png) 35. Activate the flow. ## Build a Process to Launch the Flow When an Opportunity Is Created Create a process in Process Builder that automatically creates a Close Plan from a template when an Opportunity is created. Launch the previous flow to add the Opportunity’s Team Members to new and existing Close Plans. 1. From the Quick Find box in Setup, enter Process. Select **Process Builder**. 2. Click **New**. ![New Process modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_new_process.png) 3. Name the process Create Close Plan. To auto-create the API name, press **Tab**. 4. Select **A record changes** as the process trigger. Click **Save**. 5. Click **\+ Add Object** and select **Opportunity** as the object type. Start the process **only when a record is created** and click **Save**. 6. Click **\+ Add Criteria**. ![Required fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_process_conditions.png) 7. Name the criteria Close Plan URL is Null. 8. To determine when to trigger the process, select **Conditions are met**. 9. Set the conditions:
FieldOperatorTypeValue
[Opportunity].Close_Plan__cIs nullBooleanTrue
10. Under Conditions, click **All of the conditions are met (AND)**. 11. Click **Save**. 12. Click **\+ Add Action**. 13. Select **Quip** as the Action Type, and name the action Create Close Plan from Template. ![Copy Document action with required fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_create_doc_process_example.png) 14. Select **Copy Document** as the Quip Action, and enter the URL of the document you want to use as your Close Plan template. 15. Under Advanced, enter \[Opportunity\].Id as the Source Salesforce Record. To store Close Plans created from the template in your Close Plan custom field, select **Close Plan** as the Target Record URL Field. ![Source Salesforce Record and Target Record URL Field highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_process_close_plan_advanced.png) 16. Save the action. 17. To add Opportunity Team Members to existing documents linked to Opportunities, click **\+ Add Criteria**. ![Close Plan URL is Filled In](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_process_not_null.png) 18. Name the criteria Close Plan URL is Filled In. 19. To determine when to trigger the process, select **Conditions are met**. 20. Set the conditions:
FieldOperatorTypeValue
[Opportunity].Close_Plan__cIs nullBooleanFalse
21. Under Conditions, click **All of the conditions are met (AND)**. 22. Click **Save**. 23. Click **\+ Add Action**. 24. Select **Flows** as the Action Type. 25. Name the action Call Flow to Add Opportunity Team Members to Close Plan. ![Required fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_process_launch_flow.png) 26. Select the flow **Add Opportunity Team Members to Close Plan**. 27. Set the flow variables:
Flow Variable Type Value
OpportunityRecord Field Reference

[Opportunity]

Represents the Opportunity record that started the process.

28. Click **Save** and then **Activate**. ![Final process canvas](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_final_process_canvas.png) Your flow and process are ready to go! To see them in action, create an Opportunity in Salesforce. - A Close Plan is automatically created and attached to the Opportunity record. - The Opportunity Team Members are added to the Close Plan. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note Make sure you have Opportunity Team Members set up and that their Salesforce emails match their Quip emails. - If you edit an existing Opportunity with a linked Close Plan, the process launches your flow and adds the Opportunity Team Members to the Close Plan. # Add Options for Selects, Multi-Selects, and Radio Buttons To add options for Select, Multi-Select, and Radio Button elements, go to the **Options** section of the element properties and click **\+ Add New Option**. If no values are defined for a Select element, an Undefined Value is returned. Each option has a Value and Label pair. The Value is the language-independent data that gets passed in and out of the Omniscript remotely, through an Omnistudio Data Mapper, a Remote action, or an HTTP (REST) action. It’s also referenced when setting up a Conditional View. The Label is displayed in the Omniscript UI. The Value and Label can be identical or different. For example, an ethernetlink element has four options: | Option | Value | | --- | --- | | No Link to an Ethernet Device | EN | | No Link to the IDSL Network | NW | | Integrated Services Router Crashes | IS | | Hardware Crashes | HW | The value of one of these options is `EN`, and its label is `No Link to an Ethernet Device`. If an end user clicks **No Link To An Ethernet Device**, the data returned is `EN`. For Multi-Select elements, if the user selects multiple options, a semicolon-delimited list of data is returned. For example, selecting **No Link to an Ethernet Device** and **Hardware Crashes** returns `EN;HW`. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note If the values change frequently, enable the **Fetch Picklist Values at Script Load** to ensure that the Omniscript elements contain the most up-to-date set of values. Salesforce sources include picklists and custom classes. - **[Using Salesforce Picklists with Omniscript Inputs](https://help.salesforce.com/s/articleView?id=xcloud.os_tie_a_picklist_to_salesforce_21624.htm&release=264.0.0&type=5)** You can dynamically populate a Select, Multi-Select, or Radio element in an Omniscript with values from a picklist in your Salesforce org or with a custom Apex class. - **[Populating Picklist Values in Omniscript Inputs from Apex](https://help.salesforce.com/s/articleView?id=xcloud.os_populating_picklist_values_from_apex_21650.htm&release=264.0.0&type=5)** You can populate Select, Multi-select, and Radio elements from a Callable Apex class. The values for the element are obtained during the Omniscript's activation. - **[Populating Dependent Picklist Values in Omniscript Inputs with Apex](https://help.salesforce.com/s/articleView?id=xcloud.os_populating_dependent_picklist_values_with_apex_21668.htm&release=264.0.0&type=5)** You can populate Select, Multi-select, and Radio elements from a Callable implementation. The values for the element are obtained during the Omniscript's activation. - **[Use Images for Buttons in Omniscript](https://help.salesforce.com/s/articleView?id=xcloud.os_use_images_for_buttons_in_omniscript_19198.htm&release=264.0.0&type=5)** Use images as buttons for both radio and multi-select options in Omniscript. # Add Options for Selects, Multi-Selects, and Radio Buttons (Managed Package) For the managed package runtime, to add options for Select, Multi-Select, and Radio Button elements, go to the **Options** section of the element properties and click **\+ Add New Option**. If no values are defined for a Select element, an Undefined Value is returned. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Each option has a Value and Label pair. The Value is the language-independent data that gets passed in and out of the Omniscript remotely, through an Omnistudio Data Mapper, a Remote action, or an HTTP (REST) action. It’s also referenced when setting up a Conditional View. The Label is displayed in the Omniscript UI. The Value and Label can be identical or different. For example, the ethernetlink element shown in this image has four options: ![Example OmniScript options](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/os_options_value_labels.png) The value of one of these options is `EN` and its label is `No Link To An Ethernet Device`. If an end user clicks **No Link To An Ethernet Device**, the data returned is `EN`. For Multi-Select elements, if the user selects multiple options, a semicolon-delimited list of data is returned. For example, selecting **No Link To An Ethernet Device** and **Hardware Crashes** returns `EN;HW`. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If the values change frequently, enable the **Fetch Picklist Values at Script Load** to ensure that the Omniscript elements contain the most up-to-date set of values. Salesforce sources include picklists and custom classes. # Add or Delete a Component Add cards to customize your mobile home page layout. ### Required Editions
Setup for the Salesforce mobile app available in: both Salesforce Classic and Lightning Experience
Setup available in Salesforce Classic in: all editions except Database.com
Setup available in Lightning Experience in: Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To add or delete a component: Customize Application
1. Drag the component from the Components panel to the canvas. The component is now available to customize, reorder, or delete. If the component has configurable properties, they appear in the property pane on the right. Configure options such as the card label, object type, list view, or display settings. 2. In the canvas, hover over the component you want to delete. 3. Click the delete icon in the menu. 4. Click **Delete** to confirm. # Add or Modify a Customer Story Icon (Managed Package) For the managed package runtime, in the Customer Story, each story object type has an associated icon that appears next to the title of the story item. The icons are automatically retrieved based on the object type. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To modify the icon for a particular object type, you can update its associated LWC template. See [Extending a Template to Create a Custom LWC Card State Template (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_extending_a_template_to_create_a_custom_lwc_card_state_template.htm&release=264.0.0&type=5 "For the managed package runtime, extend an existing template to create a custom LWC card state template. For example, use the CardActiveState LWC template to overwrite methods and HTML templates."). If using the Angular story-slds (Version 2) card layout, see [Creating a Template with the Template Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_template_with_the_template_designer.htm&release=264.0.0&type=5 "For the managed package runtime, customize the layout of a card state or card layout by creating custom templates for Omniscript elements or Cards Framework components with the Vlocity Template Designer."). The Vlocity Customer Story displays a timeline of all interactions with the customer in a single, chronological feed. See [Vlocity Customer Story (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_vlocity_customer_story.htm&release=264.0.0&type=5 "For the managed package runtime, a Customer Story is a history of events for an Account or a Contact. Customer stories are driven by metadata configuration. It displays a timeline of all interactions with the customer in a single, chronological feed."). # Add or Remove a Channel from a CMS Workspace CMS channels deliver content from a CMS workspace to an audience. Content published in a CMS workspace is available to all the channels added to the workspace. To control where your content is available, you can add and remove channels. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create a channel in the Digital Experiences app:

Modify All Data

OR

Create CMS Workspaces and Channels

To add or remove channels in a CMS workspace:

A CMS workspace contributor role of content admin

AND

if adding Experience Cloud site channels, Create and Set Up Experiences

## Add a Channel to a CMS Workspace To make the content in a CMS workspace available to your audience, add a CMS channel to the workspace. The steps for adding channels to a CMS workspace are different from adding channels to an enhanced CMS workspace. 1. In Lightning Experience, from the App Launcher, open the Digital Experiences app. 2. On the Digital Experiences Home tab, find the workspace in the All CMS Workspaces list. 3. To add a channel to a CMS workspace, complete these steps. 1. Open the workspace, and click **Channels**. 2. Click **Add Channel**. 3. Select or create a channel. To save your changes, click **Add**. You receive an email when your workspace’s channels are updated. 4. To add a channel to an enhanced CMS workspace, complete these steps. Enhanced CMS workspaces support public and restricted CMS channels, enhanced LWR sites, and Aura sites. 1. Open the enhanced workspace. 2. Click **![Workspace Settings Menu icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_workspace_settings.png)**, and select **Channels**. 3. Click **Manage Channels**. 4. Select or create a channel, and save your changes. You receive an email when your workspace’s channels are updated. ## Remove a Channel from an Enhanced CMS Workspace You can remove enhanced LWR site channels, Aura site channels, and public or restricted channels from enhanced CMS workspaces. Before you can remove an enhanced LWR site channel from your workspace, open the site in Experience Builder, and remove any CMS content from the site. 1. Open your enhanced CMS workspace. 2. Click ![Workspace Settings Menu icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_workspace_settings.png), and select **Channels**. 3. Click **Manage Channels**. 4. To select a channel to remove, click ![Check mark Button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_channels_remove.png). 5. Save your changes. You receive an email when your workspace’s channels are updated. #### See Also - [Display Salesforce CMS Content in Your LWR Site](https://help.salesforce.com/s/articleView?id=experience.exp_cloud_build_lwr_cms_content.htm&language=en_US) # Add or Subtract Days or Months In Salesforce Data Pipelines, return the column date with the specified days or months added or removed. ### Required Editions ## Add or Subtract Days or Months
User Permissions Needed
To create a recipe: Edit CRM Analytics Dataflows OR Edit Dataset Recipes
1. In a Transform node of a Data Prep recipe, select one date column in the Preview tab. 2. Select the Formula button (![Formula button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_transformation_formula.png)) in the Transform toolbar. 3. Select **Add or Subtract Days or Months**. 4. Configure the transformation. ![Configure the Add or Subtract Days or Months function.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_date_difference.png) 1. Start Date Column is automatically filled with the date column you previously chose. Cancel and restart to choose a different Start Date. 2. Choose **Days** or **Months** to add or subtract. 3. Select the number to add or subtract with the plus and minus buttons. 4. Choose the date format of the output column. 5. Optionally, change the label of the column that stores the result data in the Column Label field. 6. Click **Apply** to add the transformation to the Transform node. The Preview tab shows the new calculated date column. ![Preview shows the new calculated date column.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_calculated_date_outcome.png) 7. To view the Graph area, click the Collapse button (![Collapse button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_button_collapse.png)). 8. Save the recipe. # Add Partner Products You can associate products or product categories that are applied to a particular promotion. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
Before you add products or product categories for your program partner, create products in the Product object and categories in the Categories object. 1. In the Loyalty Programs tab, select your loyalty program. 2. On the Loyalty Experiences tab, select the promotion. 3. On the Related tab, click **Loyalty Partner Products**. 4. In the Loyalty Partner Products related list, click **Add Products** or **Add Product Categories**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The loyalty program associated with the partner product must match the promotion’s loyalty program. 5. Search for and select the products or product categories that you want to add. 6. Click **Done**. You can click a listed product and review the details. You can update the partner-incurred cost of the product during promotion in the **Partner’s Product Cost** field of the Partner Product Details page. # Add Person Accounts with the Data Import Wizard To add person accounts to your Salesforce org, launch the Data Import Wizard from the accounts home page. ### Required Editions
Data Import Wizard available in both Salesforce Classic and Lightning Experience
Data Import Wizard available in All Editions except Database.com

Person accounts available in: both Salesforce Classic and Lightning Experience

Person accounts available in Professional, Enterprise, Performance, Unlimited, and Developer Editions

User Permissions Needed
To create person accounts that you own via the Data Import Wizard:

Create on accounts

AND

Edit on accounts

AND

Import Personal Contacts

To create person accounts owned by others via the Data Import Wizard:

Create on accounts

AND

Edit on accounts and contacts

AND

Modify All Data

Before you begin, make sure that your import file is in CSV format and contains values for these fields. - First Name - Last Name - Email - Phone ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip To obtain Salesforce IDs or other values from your org, run reports and then export the report data. These steps describe one recommended method of importing data. You can import data into Salesforce fields that aren’t listed here. You can also customize your import by using other options that appear in the Data Import Wizard. 1. From the accounts home page, click **Import Person Accounts**. The Data Import Wizard appears. 2. Select **Person Accounts**, then select **Add new and update existing records**. 3. Set Match Account by to **Email**. 4. Select the CSV file that contains your import data, and click **Next**. 5. Map column headers from your CSV file to these fields. - First Name - Last Name - Email - Phone 6. Click **Next**. 7. Review the import settings, and then click **Start Import**. When we finish importing your data, we notify you by email. Review the results and resolve any errors that occurred. # Add Product Items to an Inventory Count Plan Inventory managers can easily add product items to inventory count plans and assign the inventory auditors to count the product items. For each set of product items added to a count plan, inventory managers define if the count is a blind count and provide count instructions to auditors. After product items are added to count plans, Inventory Count Plan Item records are created. These records are created or updated: Inventory Count Assessment and Inventory Count Product Item. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To create inventory count plans:

Inventory Count Manager permission set

Ensure that the inventory count plan that you want to add product items to is active. 1. From the App Launcher, find and select **Product Items**. 2. If necessary, open the list view with the required product items or filter the list to find the required product items. See [Create or Clone a List View in Lightning Experience](https://help.salesforce.com/s/articleView?id=xcloud.customviews_lex.htm&language=en_US). 3. Select product items that have the same location to add to an inventory count plan, and click **Add to Inventory Count Plan.**. A window appears where you specify plan details. 4. Find and select the inventory count plan that the product items must be added to. 5. Find and select the assignee for the count. 6. For Blind Count, select an option to indicate if the expected quantity information is hidden from the assignee during the inventory count. - Yes - No A blind count hides expected inventory quantities from auditors during counting to ensure unbiased results. 7. If necessary, enter a comment to give additional context, guidance, or instructions for the count. 8. Save your changes. You receive notifications after product items are added to inventory count plans. # Add Products and Licenses with the Your Account App Purchase new products and licenses for your Salesforce org using the Your Account app. Products are pieces of Salesforce functionality, such as Sales Cloud, Sales Dialer, or extra file storage. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: Starter, Pro Suite, Professional, Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To use the Your Account app: Manage Billing or the Manage Subscriptions in Your Account: Identity User permission set
To purchase new products or buy additional licenses and consumption-based resources: 1. Launch the [Your Account app](https://help.salesforce.com/s/articleView?id=xcloud.users_launch_subscription_mgmt.htm&release=264.0.0&type=5 "Open the Your Account app from one of these areas depending on your edition."). 2. Click **Browse & Buy**. 3. In the Product Catalog, select a contract. If users with a custom profile have the Product Catalog tab settings set to hidden or off, users can’t access the feature. See [View and Edit Tab Settings in Permission Sets](https://help.salesforce.com/s/articleView?id=platform.users_tab_visibility.htm&type=5&language=en_US). 4. To buy new products, select the **Shop Available Products** tab and find the product you want to buy. Some products have an information page with a product tour. The names of the products with information pages are links. ![Product card with blue title text highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/your_account_product_information_card_view.png) 5. To buy additional licenses and consumption-based resources, select the **Manage Your Products** tab and find the product that you want to add. ![Product Catalog page](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/your_account_product_catalog.png) 6. To specify the products that you want, select the quantity (1) and add to your cart (2). ![The Products page with selection made to purchase a product](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/users_subscription_management_6.png) For Marketing Cloud Engagement product subscriptions you own, you select the quantity in a popup. See the example that follows. ![Options shown for a Marketing Cloud Additional Business Unit subscription](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/users_add_products_subscription_mgmt_mktg_cloud.png) 7. Open your cart. ![Products page with the cart open](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/youraccount_cart_management.png) 8. Review your order and enter promo codes if availble. Then click **Check Out**. 9. Review your payment and signature details: 1. If you pay by credit card, review your order total (before tax) and agree to the Subscription Agreement. 2. If you pay with a method other than a credit card, such as check, wire transfer, or direct debit, you don’t have payment information to review. You also don’t agree to a subscription agreement in this step. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note If you’re preparing a purchase that requires a different signer, you must use a payment method other than a credit card. You can [assign an approver to complete the process in Docusign](https://help.salesforce.com/s/articleView?id=xcloud.users_subscription_management_change_signer.htm&release=264.0.0&type=5 "If you prepare a purchase but need someone else to sign for it, you can pass the documents to another person to complete the signing process."). 10. Use either of these steps to proceed: 1. If you pay by credit card, click **Place Order**. 2. If you pay with a method other than a credit card, click **Order & Sign**. To sign for your order immediately, click **Sign Now** to open Docusign in a new window. To sign later, click **Sign Later** and complete the steps in the email sent by Docusign or [reassign to a different approver](https://help.salesforce.com/s/articleView?id=xcloud.users_subscription_management_change_signer.htm&release=264.0.0&type=5 "If you prepare a purchase but need someone else to sign for it, you can pass the documents to another person to complete the signing process."). 11. Your licenses are typically available within 45 minutes of purchase. To view your license: 1. From Setup, in the Quick Find box, enter Company Information, and then select **Company Information**. 2. See the User Licenses related list. 3. If you don’t see your license after 45 minutes, contact Support. 12. To assign licenses to users: 1. From Setup, in the Quick Find box, enter Users, and then select **Users**. 2. Click **Edit** on the user’s record, or click **New User**. 3. Select the license from the **User License** list. - **[Find Your New Products and Licenses Purchased with the Your Account App](https://help.salesforce.com/s/articleView?id=xcloud.users_your_account_view_licenses_and_upgrades.htm&release=264.0.0&type=5)** After you buy products or licenses in the Your Account app, locate them quickly so you can put them to work. #### See Also - [Get Support with the Your Account App](https://help.salesforce.com/s/articleView?id=xcloud.users_support_for_subscription_management.htm&release=264.0.0&type=5 "Ask product questions, manage billing, get technical support, and send us feedback, all from the Your Account app. Find these contact options on the app’s home page.") # Add Products or Product Categories Before you add products or product categories for your program partner, create products in the Product object and categories in the Categories object. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
Before you add products or product categories for your program partner, create products in the Product object and categories in the Categories object. 1. In the Loyalty Programs tab, open the loyalty program record. 2. On the Setup tab, open the program partner record. 3. Click **Add Products**. 4. Select **Add Product Categories** or **Add Products**, and click **Next**. 5. Search for and select the product categories or products to add for your partner. 6. Save your changes. You can click any of the listed products and review the details. You can add or modify the partner-incurred cost of the product during promotion in the **Partner's Product Cost** field of Partner Product Details page. # Add Products to the Assortment Add valid products to an assortment to define the SKUs that customer accounts or warehouse locations are authorized to order. ### Required Editions

View supported editions

1. Open the assortment record that you created. 2. On the **Related** tab, in the Assortment Products related list, click **New**. 3. Select the product (Product2) to add to the assortment. 4. (Optional) Set the **Valid From** and **Valid To** dates for individual product eligibility. 5. Select **Active**. 6. Save your changes. Repeat this step for all products included in the listing. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-advanced_orders-264-0-0-production-enus/3f520262-6313-4d80-b68f-bf760562aa0b/images/icon_note.png) Note Assortments define the product catalog subset that customer accounts or warehouse stock points are authorized to buy. During order creation, the system evaluates assortments to prepopulate the line-item grid or enforce closed listing rules. # Add Referral Code during Member Enrollment When a customer joins your loyalty program, you can allow the member to specify a referral code or allow Loyalty Management to automatically generate a referral code for the member. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
The Referral Code field in a Loyalty Program Member record allows you to store the referral code of the member. When a Loyalty Program Member record is created, either specify a referral code for the member or don’t specify a referral code so that Loyalty Management can automatically generate a referral code. Automatically generated referral codes consist of eight alphanumeric characters. Based on how your loyalty program enrolls members, you can add referral codes for members during enrollment: | Scenario | How to Add Referral Code | | --- | --- | | A customer service representative creates a Loyalty Program Member record on the Loyalty Management app. | Use the Referral Code field in the Loyalty Program Member record to specify the member’s referral code. | | [SOAP API](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyaltyprogrammember.htm) is used to create Loyalty Program Member records. | Use the ReferralCode field in the Loyalty Program Member object to specify the referral codes of members. | | [Business APIs](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/loyalty_management_apis_resources.htm) are used to create Loyalty Program Member records. | Use the ReferralCode field within the additionalMember​FieldValues property to specify the referral codes of members. | | The [Create or Update Records action](https://help.salesforce.com/s/articleView?id=xcloud.promotion_setup_rule_actions.htm&type=5&language=en_US) in a loyalty program process rule is used to create Loyalty Program Member records. | Add the Referral Code field as an input parameter and specify the referral codes of members. | If you don’t specify a referral code when enrolling a member in any of these ways, the member’s referral code is automatically generated. A Loyalty Program Member record can’t be added without a referral code. # Add Replay Detection for Cache-Only Keys Replay detection protects your cache-only keys if a callout is fraudulently intercepted. When enabled, replay detection inserts an autogenerated, unique marker called a RequestIdentifier into every callout. The RequestIdentifier includes the key identifier, a nonce generated for that callout instance, and the nonce required from the endpoint. The RequestIdentifier serves as a random, one-time identifier for each valid callout request. After you set up your key service to accept and return the RequestIdentifier, any callout with missing or mismatched RequestIdentifiers is aborted. ### Required Editions
User Permissions Needed
To create, edit, and delete named credentials: Customize Application
To allow cache-only keys with BYOK:

Customize Application

AND

Manage Encryption Keys

To generate, destroy, export, import, upload, and configure tenant secrets and customer-supplied key material: Manage Encryption Keys
1. Update your key service to extract the nonce generated for the callout instance from the RequestIdentifier. Here’s what the nonce looks like. `e5ab58fd2ced013f2a46d5c8144dd439` 2. Echo this nonce in the JWE protected header, along with the algorithm used to encrypt the content encryption key, the algorithm used to encrypt the data encryption key, and the unique ID of the cache-only key. Here’s an example. ``` {"alg":"RSA-OAEP","enc":"A256GCM","kid":"982c375b-f46b-4423-8c2d-4d1a69152a0b","jti":"e5ab58fd2ced013f2a46d5c8144dd439"} ``` 3. From Setup, in the Quick Find box, enter Encryption Settings, and then click **Encryption Settings**. 4. In the Advanced Encryption Settings section, turn on **Enable Replay Detection for Cache-Only Keys**. You can also enable replay detection programmatically. For more information, see [EncryptionKeySettings](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_encryptionkeysettings.htm) in the Metadata API Developer Guide. From now on, every callout to an external key service includes a unique RequestIdentifier. ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_warning.png) Warning If you enable replay detection but don’t return the nonce with your cache-only key material, Salesforce aborts the callout connection and displays a POTENTIAL\_REPLAY\_ATTACK\_DETECTED error. #### See Also - [Object Reference for Salesforce and Lightning Platform: RemoteKeyCalloutEvent](https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_remotekeycalloutevent.htm) # Add Segments You can add the segments targeted for a particular promotion. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions.
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license, and Data Cloud enabled.
You can view the segments created from Data Cloud and map the promotions using **Add Segments**. 1. In the Loyalty Programs tab, select your loyalty program. 2. On the Loyalty Experiences tab, select the promotion. 3. On the Related tab, click **Promotion Segments**. 4. In the Promotion Segments, click **Add Segments**. 5. To add segments for the promotion, search and select the segments. 6. Save your changes. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note After you associate a promotion with a segment, sometimes loyalty program process rules or Flow actions aren’t able to filter members based on their segments when applying promotions. It takes around one hour for loyalty program process rules and Flow actions to update after segments are associated with promotions. # Add Session Variables to a Flexcard (Managed Package) For the managed package runtime, set attributes available from a component, or store values from data sources or external systems to access globally on a Flexcard. For example, set an API key or track pagination. Use the merge field {Session.var} to parse the value. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). This table lists the elements that support Session Variables:

Element

Supported Input Fields

Action (any)

Label

Custom Event Action

Beginning Summer '21: Input Parameter > Value

Field

Label, Placeholder, and Output

Text

Inside the rich text editor

1. In the Flexcard Designer, click **Setup** to open the Setup panel. 2. Click **\+ Add New** next to **Session Variables**. 3. Enter a **Key**, such as APIkey. 4. Enter a **Value**, such as 123456dk489384A1sdjsk. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important You can’t use datasource values as session variables. 5. Apply the session variable as a merge field to an element field. For example, enter {Session.APIkey} to a REST data source **Endpoint** URL. # Add Ship and Debit Program Members Rebate program managers can enroll partners and customers to ship and debit programs by creating Rebate Program Member records. Add partners, distributors, or dealers who get the ship and debit rebates to a ship and debit program as accounts. Specify ship-to partners and customers to whom distributors must sell products to get the ship and debit incentives as ship-to accounts. ### Required Editions
Available in: Developer, Enterprise, and Unlimited Editions that have Ship and Debit Process Management enabled
User Permissions Needed
To create a Ship and Debit Program Member Ship and Debit Process Management Admin permission set
Make sure that your Salesforce admin added the Ship To Account field to the Rebate Program Member page layout. 1. On a Rebate Program record, on the Members related list of the Related tab, click **Add Member**. 2. Find and select the account of the partner, distributor, or dealer to enroll. 3. Select a status for the member being enrolled. 4. Enter an alias for the account. If you don’t enter a name, the account name is used as the member’s name. 5. For Ship To Account, select the end-customer account to which the partner, distributor, or dealer must sell to get special benefits. 6. If you don’t want to calculate payouts for the member, enable Skip Payout Calculation. 7. Save your changes. ![A rebate program member](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/channel_revenue_mgmt/images/shipdebit_program_member.png) # Add Source Objects to a Configuration Add standard or custom source objects to a research configuration so AI Relationship Research reads the CRM data that you choose. | Permission | Required for | | --- | --- | | AI Relationship Research Admin | Access and complete setup flows | A custom object must have a tab in the App Launcher to be available as a source object. You add source objects while you configure data sources for a research anchor object. For the full configuration flow, see [Configure AI Relationship Research](https://help.salesforce.com/s/articleView?id=xcloud.airr_configure.htm&release=264.0.0&type=5 "Configure AI Relationship Research by selecting the Salesforce objects to research, the data sources to use, and the relationship types to prioritize."). For an overview of standard and custom source objects, see [AI Relationship Research Source Objects](https://help.salesforce.com/s/articleView?id=xcloud.airr_source_objects.htm&release=264.0.0&type=5 "Source objects define which CRM data AI Relationship Research searches when it generates relationship insights for a research anchor object. Choose from a set of standard source objects delivered for each anchor object, and add your own custom objects to extend research to the data that's unique to your business."). 1. From Setup, in the Quick Find box, enter AI Relationship Research, then select **AI Relationship Research Setup**. 2. On the setup landing page, click **New AI Relationship Research Configuration** or edit an existing configuration. 3. Enter a configuration label, description, and then click **Save and Continue**. 4. Select a research anchor object and click **Save and Continue**. 5. Select data sources, and add standard or custom source objects. 1. Click **Set Up**. 2. Select your data sources. If you select **CRM** as a data source for relationship insights, the **AI Relationship Research Source Objects** section shows the standard source objects delivered for your anchor object. You can also add custom source objects. 3. To include a standard source object, select its checkbox. To exclude one, clear its checkbox. Review the **Record Count** column for each object to judge whether it holds too much data to process well. For guidance, see [AI Relationship Research Source Objects](https://help.salesforce.com/s/articleView?id=xcloud.airr_source_objects.htm&release=264.0.0&type=5 "Source objects define which CRM data AI Relationship Research searches when it generates relationship insights for a research anchor object. Choose from a set of standard source objects delivered for each anchor object, and add your own custom objects to extend research to the data that's unique to your business."). 4. To add a custom source object, click **Add Object**, and then select your custom object from the **Object** list. A custom object must have a tab in the App Launcher to be available for research. Available objects reflect current permissions and licenses. 5. Under **Text Fields to Search**, select the fields that contain relationship-relevant text, such as a description field, and then click **Next**. AI Relationship Research doesn't restrict the field types that you can select, so choose fields that contain meaningful text. Number, phone, and picklist fields rarely add value. 6. Connect the custom object to the anchor object. - If the custom object is directly related to the anchor object, click **Save**. - If the custom object isn't directly related to the anchor object, click **Next**. AI Relationship Research shows this message: This object is not directly related to the Anchor Object. Define the relationship path to connect them. In the **Relationship Path to Anchor** field, enter the path that connects the custom object to the anchor object: - For a direct, one-hop relationship, enter the API name of the lookup field that points to the anchor object. For example, `Account__c`. - For an indirect, multi-hop relationship, enter the relationship name for each step, ending with the field that reaches the anchor object. For example, to traverse from the custom object to Case and then to Account, enter the Case relationship name followed by the Account lookup. Click **Save**. AI Relationship Research validates the path. If the path is incorrect, a validation error appears and the configuration isn't saved. Correct the path, and then click **Save** again. 6. Set the access context. 7. Save the configuration. The objects that you enable appear in the source object list and in the configuration summary. For each custom object that you add, use the edit control on its row to update its fields or relationship path, or to remove it. # Add Space Around Your Flexcard Element (Managed Package) For the managed package runtime, create space around the container of a Flexcard element. Add margins between adjacent elements on your Flexcard. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In the Flexcard Designer, click on an element in a state, and click **Style** to open the Style panel. 2. From the **Margin Type** dropdown, select where to add your margin. For example, to add space around the entire element, select Around. To add space above and below your element, select Horizontal. 3. From the **Margin Size** dropdown, select how much spacing to add, such as Medium, x-Small, and so on. See [SLDS Padding](https://lightningdesignsystem.com/utilities/padding/). 4. Click the plus icon. 5. Repeat steps 1 through 3 to add more margins. # Add Space Inside a Flexcard Element (Managed Package) For the managed package runtime, create space inside the container of a Flexcard element. Add padding to create space between the boundary of your element and the contents inside your element. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In the Flexcard Designer, click on an element in a state, and click **Style** to open the Style panel. 2. From the **Padding Type** dropdown, select where to add your padding. For example, to add padding on all sides of the content, select Around. To add padding to both the top and the bottom, select Horizontal. 3. From the **Padding Size** dropdown, select how much padding to add, such as Medium, x-Small, and so on. See [SLDS Padding](https://lightningdesignsystem.com/utilities/padding/). 4. Click the plus icon. 5. Repeat steps 1 through 3 to add more padding. # Add Steps to an Omniscript Each Step element in an Omniscript presents a page to the user that prompts for input or displays information. For navigation, all Steps except the first have a Next button, and all except the last have a Previous button. You can drag any Omniscript element into a step except a child Omniscript or another step. An action element in a step renders as a button that performs the action when clicked. Whether fields are required or validated isn't set at the step level, but in the properties for the elements within the Step. However, if a required field has no value or a field fails validation, the user can't proceed to the next step. 1. From the elements panel, select the default step or drag a **Step** element to the canvas. 2. From the properties panel of a step, update these properties: | | | | --- | --- | | Chart Label | Label for the step in the Step Chart, which lists all the steps and shows which step the user is in. If no Chart Label is specified, the Field Label is used. | | Instruction | Add instructions to explain to the user what to do in the step. Supports merge fields, rich text, and images. | | Allow Save for Later | Displays the **Save for later** button on the page if selected, which is the default. | 3. Configure the buttons in the step:
Previous Label

Label for the button to move to the previous page. The default label is Previous.

Next Label

Label for the button to move to the next page. The default label is Next. You can change it to a value such as Add to Cart or Place Order.

Previous Width, Next Width Width of the button on the page, with a range of 1-12. The default value is 3.
Save Label

Label for the Save for Later button to save and resume an Omniscript. The default label is Save for later.

Save Message

Label for the Save for Later confirmation prompt. The default is Are you sure you want to save it for later?

4. Configure Knowledge Options, Error Messages, Messaging Framework, and Conditional View, as required. ## Hide the Next and Previous Buttons Hide a step's Next and Previous buttons when using auto-advance options or when you do not want the user to navigate steps. 1. In the Step's properties, expand the **Button Properties** section. 2. Drag the Previous or Next **Width** slider to **0**. 3. Save your Omniscript and preview the new behavior. # Add Stock Rotation Incentive Program Members Channel Partner Managers can enroll partners to stock rotation programs by creating Rebate Program Member records. Add partners who get the stock rotation rebates to a stock rotation program as accounts. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Stock Rotation enabled.
User Permissions Needed
To enroll a Stock Rotation Program Member: Stock Rotation Admin permission set
1. On a Rebate Program record, on the Members related list of the Related tab, click **Add Member**. 2. Find and select the account of the partner to enroll. 3. Select a status for the member being enrolled. 4. Enter an alias for the account. If you don’t enter a name, the account name is used as the member’s name. 5. If you don’t want to calculate payouts for the member, enable **Skip Payout Calculation**. 6. Save your changes. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note Make sure all members are in Active status for the program to run successfully. # Add Survey Related Lists and Lightning Components to Record Pages Customize the record detail pages for objects commonly used with surveys so that users can easily find invitations and responses, and work efficiently with surveys. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
User Permissions Needed
To assign permission sets: System administrator profile
- **[Add the Survey Invitations and Responses Related List to Object Record Pages](https://help.salesforce.com/s/articleView?id=xcloud.task_add_survey_subject_related_list.htm&release=264.0.0&type=5)** Use the Survey Invitations and Responses related list to view the survey invitations and responses related to an object’s records. You can add the related list to the record detail pages of any object that Survey Subjects supports. - **[Add the Survey Invitations Related List to Standard Object Record Pages](https://help.salesforce.com/s/articleView?id=xcloud.task_survey_invitation_related_list.htm&release=264.0.0&type=5)** Use the Survey Invitations related list to view the surveys a contact, person account, lead, or user is invited to take. The related list populates invitations related to a participant. - **[Add a Survey to Any Lightning Record Page](https://help.salesforce.com/s/articleView?id=xcloud.task_lightning_component_survey.htm&release=264.0.0&type=5)** Use the Surveys component to add surveys to object records that support Lightning components. Your users can respond to the survey from the record page. You can also add the Surveys component to Experience Cloud sites to gather responses from guest users. - **[Add Topics to Survey Records](https://help.salesforce.com/s/articleView?id=xcloud.task_lightning_component_topic.htm&release=264.0.0&type=5)** Use the Topics component to add themes to Survey, Survey Question, Survey Question Choice, and Survey Question Response records. You can analyze trending topics and learn how different areas of your business are performing in the Topic Analysis dashboard in Customer Lifecycle Analytics. # Add Tableau Next to a Salesforce Mobile App Customize your mobile app’s navigation bar with Tableau Next. ### Required Editions
View supported editions.
User Permissions Needed
To enable Tableau Next Mobile: Tableau Next Admin permission set
Add ‌Tableau Next to a Mobile App 1. In the Quick Find box, enter App Manager. 2. Locate the App Name you want to update with the Tableau Next tab. Its App Type must be Lightning. 3. Click on the action menu and click **Edit**. 4. From the Lightning App Builder, click **Navigation Items**. 5. Select **Tableau Next Hub** then click the right arrow to add it to the app. 6. Use the arrows to position Tableau Next Hub to a top four position. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note Don’t ignore this step. This ensures that Tableau Next Hub appears in the horizontal menu at ‌the bottom of the app. Another option within a mobile app is to click **Menu** then **Edit** to update tab ordering. 7. Click **Save**. 8. Verify Tableau Next appears in the Salesforce Mobile App 1. Log in to your Salesforce mobile app. 2. From the App Launcher, navigate to the specific Salesforce app you configured to include Tableau Next Hub. 3. Metrics that users are added to as followers appear on the overview page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note Following metrics is done on the full desktop site. #### See Also - [About Following Metrics](https://help.salesforce.com/s/articleView?id=analytics.tua_metric_follow_about.htm&language=en_US) # Add Test Data to an Omniscript (Managed Package) For the managed package runtime, add test data to an Omniscript from the Omniscript Designer. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From Omniscript, click **Preview**. 2. If your Omniscript does not have a SetValues action that defines a ContextId, to preview the form with data, enter a record ID in the **Context ID** field. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Confirm that a ContextId is defined in your data source. For example, if you have an Omnistudio **Data Mapper Extract Action** that gets account records, you must have an Input Parameter whose **Data Source** is ContextId, and whose **Filter Value** is the Data Mapper Extract's output name, such as AccountId. # Add the Archive Component to Lightning Pages Add an Archive component to Lightning Experience record pages with one of these recommended procedures. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note For more information on Lightning pages, see [Create and Configure Lightning Experience Record Pages](https://help.salesforce.com/s/articleView?id=platform.lightning_app_builder_customize_lex_pages.htm&type=5&language=en_US). ## Create a Custom Tag 1. Drag one of the Archive components under Standard Components from the left menu to the newly created custom tab. 2. Complete the Default Child Objects as required. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important A child object appears in **Archive component search** only if a policy is configured for it. 3. Save your work. 4. Click **Activation**. The results appear to your users as defined, with an overview of the total number of archived records shown. To expand the results, click a component. For example, if you want Customer Support users to view archived Cases through the Archive Single Objects component, set Case as the default child object. Only users with a Customer Support profile can see the component. ## Create a Custom Component 1. Go to Setup. 2. Select the Object Manager tab. 3. Select the object to insert the component on its page, such as Account. 4. To access the layout editor, select **Lightning Record Pages**. 5. Select the existing record page or create one. 6. Select **Edit**. 7. Select the location to insert the component on the page. 8. On the Components toolbar, search and select the Archive Single Object or Archive Multiple Objects component. 9. Drag the component to the location. 10. Save your work. 11. Make sure that the page is activated. 12. To return to the object, click **Close**. ## Archive Component Access and Download Control Standard users can't access archived data through the Archive component and can encounter a `system.security.NoAccessException` error. Optionally, to turn on component access, assign the Archive View Archived Records user permission. 1. In Setup, locate Permission Sets. 2. Select **Archive View Archived Records**. 3. To assign the user permission to relevant users, click **Manage Assignments**. 4. Click **Add Assignments**. # Add the Archive Component to Page Layouts in Salesforce Classic Add Archive components to Salesforce Classic page layouts so users can view archived related records directly from primary records. You can configure either a single-object component that shows one child object, or a multi-object component that shows records across multiple related objects. Turn on Lightning Out in your org. This feature is required to embed Lightning components in Visualforce pages. Assign the Archive Admin permission set to the appropriate users. Required User Permissions | Task | User Permissions Needed | | --- | --- | | Create and edit Visualforce pages | Customize Application | | Edit page layouts | Customize Application | 1. Create a Visualforce page for the Archive component. Before you add the component to a layout, create a Visualforce page that serves as the container for the Lightning component. 2. From Setup, in the Quick Find box, enter Visualforce Pages, and then select **Visualforce Pages**. 3. Click **New**. 4. Enter a label and name (for example, `Account_Archive_Single`). 5. Select **Available for Salesforce mobile apps and Lightning Experience**. 6. In the Visualforce markup tab, replace the existing code with the snippet for your use case. Option A: Single-object component Use this snippet to show archived records for one object. Replace Account with your primary object and Case with the archived entity to display. ```
``` Option B: Multi-object (list) component Use this snippet to show archived records for up to 10 objects. Update the archivedEntitiesNames array with the object API names. ```
``` Option C: EmailMessage Archive component Use this snippet to view archived attachments or data for a specific email. ```
``` 7. Save your changes. 8. Add the Visualforce page to a page layout. After you create the page, add it to the relevant object page layout. 9. From Setup, go to the object you want to update (for example, Account or Email Message). 10. Open **Page Layouts**, and select the layout you want to edit. 11. In the palette, select **Visualforce Pages**. 12. Drag your Visualforce page into a section on the layout. 13. Click the wrench icon (**Properties**) for the Visualforce page, and configure these settings. - Width (Pixels or %): `100%` - Height (Pixels): at least `400` (or `600` for the list component) - Show scrollbars: selected 14. Click **OK**, and then save your changes. ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_warning.png) Warning If the Archive component appears blank, verify that Lightning Out is enabled in your org and that users have the required Archive App permissions. # Add the DocuSign Login Page as a Trusted URL DocuSign runs on an iFrame. To allow the content to show on Experience Cloud sites, add the DocuSign login page as a trusted URL and allow iFrame content. To add the DocuSign login page as a trusted URL, perform these tasks. 1. From Setup, find and select **Trusted URLs**. 2. Click **New Trusted URL**. 3. Provide an API Name such as DocuSignAccount. 4. In the URL field, enter https://account-d.docusign.com. 5. Select the **Active** checkbox. 6. In the Content Security Policy (CSP) Settings section, select the **frame-src (iframe content)** checkbox. You may also select other checkboxes as per your business needs. 7. Save the trusted URL. # Add the Field History Explorer Lightning Component Add the Lightning component to a record page to view the audit trail of tracked field changes, who changed what and when, without leaving the record. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer editions.
To add the Lightning component to a record: 1. On the record page, click the Setup Menu icon. 2. Select Edit Page. 3. In the Standard section, on the bottom of the left column, drag "FieldHistoryExplorer" to the desired location. 4. Click "Save" and "Activate" for all users before exiting the Lightning App Builder. # Add the Inventory Allocation Component to Record Pages Add the Inventory Allocation component to Order and Work Order record pages, allowing users to view and trigger allocations for products available as line items. The Inventory Allocation component can be added to the record pages using the Lightning App Builder. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To enable Inventory Allocation: Customize Application
1. From an Order and Work Order record page, click the gear icon and select **Edit Page**. 2. In the Lightning App Builder, search for the Inventory Allocations component in the left-hand pane. 3. Drag and drop the component onto the record page. 4. Save and activate your changes to make the component visible to users. # Add the Leads to Review Component to the Channel Management Console Add the Leads to Review component to the Channel Management Console so channel managers can review deals that partners register from their Experience Cloud sites. ### Required Editions
Available for channel managers in Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Sales Cloud or Service Cloud. You must have at least one PRM add-on license.
User Permissions Needed
To set up the console:

Customize Application

AND

View Setup and Configuration

By default, Leads to Review displays leads from the list view, Leads Created by Partners This Month. That list view shows only leads that are related to partner accounts. Leads to Review performs best when you make sure that relating partner accounts to your leads is a required part of your indirect sales process. Likewise, verify from the Object Manager in Setup that the Partner Account field is visible from the Lead object. If your company prefers not to use partner accounts, consider changing which list view is used when you customize the default experience. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-partner_cloud-264-0-0-production-enus/cd9c08c3-2648-4867-ab9d-a0251a8a86a5/images/icon_note.png) Note Each time you open the channel management console home page from the Channel Management page in PRM Setup, a new version of the default home page is created. To edit an existing version of the home page that you created previously, go to the Lightning App Builder page in Setup and open the existing home page from that location. 1. From Setup, in the Quick Find box, enter PRM, and then select **Channel Management**. 2. Under the Manage Channels from a Console App section, from the Add the Leads to Review Component step, click **Go to App Builder**. The default Channel Management Console home page opens in Lightning App Builder. 3. Under Components, search for Leads to Review and drag it onto the console layout. 4. [Customize the Leads to Review Component](https://help.salesforce.com/s/articleView?id=slack.salesforce_prm_setup_cmc_leads_to_review_customize.htm&type=5&language=en_US). 5. Click **Save**. 6. From App Builder, set this page as the home page for the Channel Management App. 1. Click Activation. 2. Click the App Default tab. 3. Click Assign to Apps. 4. Select the Channel Management app and click Next. 5. Click Save. 7. Verify that the Approved and Rejected picklist values are added to the Status field on the Lead object. 1. From Setup, in the Quick Find box, enter Object Manager, and then select **Object Manager**. 2. Click **Lead** and then click **Fields & Relationships**. 3. Click **Lead Status**. 4. Check the Lead Status Picklist Values section for the Approved and Rejected values. If you see those values, skip this step. If you see those values in the Inactive Values section, activate them. If you don’t see those values, click **New** in the Lead Status Picklist Values section to add them. Return to the Channel Management page in Setup to [finish setting up the Channel Management Console](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_prm_setup_cmc.htm&release=264.0.0&type=5 "To give channel managers access to the Channel Management Console, Salesforce admins must enable the console, assign permissions, and share default components with channel managers, such as the Channel Management Overview Dashboard. Salesforce admins can customize the console some aspects of the console directly from PRM Setup, such as adding custom objects, adding the Leads to Review component, and setting Channel Management as the default app for channel managers. Salesforce admins can customize the console further from the App Builder by altering the Leads to Review component or creating other useful components and adding them to the console."). # Add the Lightning Components for Rebates to Page Layouts After activating your screen flow, add the Program Rebate Types Panel to your record page to allow users to view and apply incentives. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
1. From the **App Launcher**, find and select your target object (e.g., **Sales Agreement**). Click a record name from the list view. 2. Click **Setup**, and select **Edit Page**. 3. Drag the **Program Rebate Types Panel** component to the desired section on the page. 4. In the component properties pane, configure the Flow settings: - **Flow**: Select the active screen flow you created (e.g., Add Rebates to Sales Agreement). - **Eligible Program Rebate Types Variable**: Select the collection variable from your flow (e.g., `SelectedRebateTypes`). - **Record Variable**: Select the single record variable from your flow (e.g., `CurrentRecord`). 5. Select the **Show eligible rebate types** and **Show applied rebate types** checkboxes to enable both tabs in the UI. 6. Optionally, drag the **Program Rebate Types Tab** component to a wider section of the page for an expanded view of applied benefits. 7. Click **Save** and then **Activate**. #### See Also - [Eligible and Applied Rebate Types on a Transactional Object](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_eligible_and_applied_rebate_types.htm&release=264.0.0&type=5 "Account managers can view rebate types that are eligible for or applied to a target record, such as a Sales Agreement, Contract, or Quote, directly within the sales process. The Program Rebate Types panel provides real-time visibility into incentives, helping users drive larger deals by understanding potential and confirmed payouts.") - [Create a Screen Flow to Add Rebate Types to a Sales Agreement](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_design_screen_flow_to_add_rebate_types.htm&release=264.0.0&type=5 "Design a screen flow to automate the business process of adding eligible rebate types to a target record, such as a Sales Agreement. Account managers can select multiple rebate types from the Eligible tab of the Program Rebate Types panel and confirm the selections by adding the associated account to a rebate program. Using a flow ensures that reference records are created systematically, linking the transaction to the correct incentives.") - [Lightning App Builder](https://help.salesforce.com/s/articleView?id=platform.lightning_app_builder_overview.htm&type=5&language=en_US) # Add the New Document Global Action Manually To let your users create a document no matter where they are in Lightning Experience, add the New Document global quick action manually to individual global publisher layouts. ### Required Editions
Available in: Lightning Experience
User Permissions Needed
To create actions: Customize Application
To customize action layouts and page layouts: Customize Application
To view page layouts: View Setup
1. In Salesforce Setup, from the Quick Find box, enter Publisher Layouts, and then select **Publisher Layouts**. 2. Under Global Publisher Layout, find Global Layout, and click **Edit**. ![Edit button highlighted next to Global Layout](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_edit_global_layout.png) 3. Select **Mobile & Lightning Actions** (1). Find **New Document** (2) and drag it to the Salesforce Mobile and Lightning Experience palette (3). ![Global Publisher Layout page with Mobile & Lightning Actions, New Document, and Salesforce Mobile and Lightning Experience palette highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_drag_new_document_action.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note If it’s your first time editing the Salesforce Mobile and Lightning Experience palette, select **override the predefined actions**. 4. To reorder your actions, select an action and drag it to a new position. 5. Save the action. #### See Also - [Create a Document in Lightning Experience](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_create_doc_lex.htm&release=264.0.0&type=5 "Create a document no matter where you are in Lightning Experience and link it to a record. Use the New Document global action to take freeform notes that stay open as you move around Lightning Experience.") - [Action Limits and Limitations](https://help.salesforce.com/s/articleView?id=platform.actions_limitations.htm&type=5&language=en_US) # Add the New Document Global Action to All Global Publisher Layouts To let your users create a document no matter where they are in Lightning Experience, add the New Document global quick action to all of your global publisher layouts automatically. ### Required Editions
Available in: Lightning Experience
User Permissions Needed
To create actions: Customize Application
To customize action layouts and page layouts: Customize Application
To view page layouts: View Setup
1. From Setup, enter Quip in the Quick Find box, and then select **Quip(Salesforce Anywhere)**. 2. Under Create a Document from Anywhere, click **Add Global Action**. The New Document global quick action is automatically added to all global publisher layouts. #### See Also - [Create a Document in Lightning Experience](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_create_doc_lex.htm&release=264.0.0&type=5 "Create a document no matter where you are in Lightning Experience and link it to a record. Use the New Document global action to take freeform notes that stay open as you move around Lightning Experience.") - [Action Limits and Limitations](https://help.salesforce.com/s/articleView?id=platform.actions_limitations.htm&type=5&language=en_US) # Add the New Order Action to the Account Record Page To let telesales reps start an order directly from a customer account, make sure the New Order action is available on the account record page layout in the Service Console for Telesales. ### Required Editions

View supported editions

User Permissions Needed
To create and save Lightning pages in the Lightning App Builder: Customize Application
The Action Launcher component exposes the New Order action, which launches the guided order-creation flow. 1. From the App Launcher, find and select **Service Console for Telesales**. 2. Open an account record in the Service Console for Telesales. 3. Click the Setup gear, and then click **Edit Page**. 4. Drag the Action Launcher component onto the canvas where you want the action list to appear. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-advanced_orders-264-0-0-production-enus/3f520262-6313-4d80-b68f-bf760562aa0b/images/icon_note.png) Note Add only one Action Launcher component per Lightning page. 5. In the Properties panel, set the Action Launcher Configuration and select the deployment scoped to the Service Console for Telesales app. 6. Confirm that the New Order action appears in the launcher. 7. Click **Save**, and then click **Activate** if the page is not already assigned as the org default or app-specific record page. # Add the Program Rebate Types Panel to Accounts Add the Program Rebate Types Panel Lightning component to an account record page so that your account managers can view the applicable rebate types for an account. They can also view the rebates and incentives attainment for an account. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
Enable account managers to view attainment snapshots by adding the component to the Account record page. 1. From **Setup**, open the **Account** record page in the **Lightning App Builder**. 2. Drag the **Program Rebate Types Panel** component to a section where you want the component to appear on the page. 3. In the properties pane, select **Show applied rebate types**. 4. Deselect **Show eligible rebate types** because this tab is intended for transactional context rather than account snapshots. 5. Click **Save**, and then click **Activate**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note You can also add this component to Experience Cloud sites to share these visualizations directly with partner users. # Add the Quip Associated Documents Component Add the Quip Associated Documents component to your page layouts so that documents are easy to access. You can add the component to accounts, opportunities, leads, most other standard objects, and your custom objects. ### Required Editions
Available in: Lightning Experience
User Permissions Needed
To add the Quip Lightning component: Administrator Permissions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note The Quip Associated Documents component isn’t available for user record pages or file details pages, nor when a record page is viewed from within an Experience Cloud site. To add the Quip Associated Documents component: 1. From the Setup menu on a record page, click **Edit Page**. 2. Under Components, select **Quip Associated Documents**. 3. Drag the component to the column on the right. 4. Click **Save** and then click **Activation**. 5. On the Activation: Account Record Page, click **Assign as Org Default** and close the page. ![The Quip component appears in the column on the right](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_associated_doc_full.png) # Add the Quip Document Component to a Lightning Page You can use the Lightning App Builder to add the Quip Document component to a Salesforce Lightning page. ### Required Editions
Available in: Lightning Experience
User Permissions Needed
To add the Quip Lightning component: Administrator Permissions
Before you add a document: - To configure different documents for a Salesforce record, [create a custom field](https://help.salesforce.com/s/articleView?id=xcloud.admin_files_quip_create_field_for_url.htm&release=264.0.0&type=5 "If you want to use different documents or templates for your Salesforce records, create a custom field. Quip stores the URL of the embedded document or template in the custom field of the Salesforce object. If each record uses the same document, you don’t need to create the fields."). To configure different templates, you can create a second custom field to store the template URL. - [Connect your Quip and Salesforce accounts](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_turn_on.htm&release=264.0.0&type=5 "Connect your Quip site to Salesforce. When you set up your site, we create permission sets, an Auth. provider, and external data source for you."). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_important.png) Important Quip is retiring slides on January 31, 2021. After this date, existing slides are view-only and new ones can’t be created. [Tell Me More](https://help.salesforce.com/articleView?id=000355252&language=en_US&mode=1&type=1) 1. Navigate to the Salesforce page where you want to add a Quip Document component, such as a customer’s Account page. 2. Click the gear icon, and select **Edit Page** to go to the Lightning App Builder. 3. In the left pane, select **Quip Document** (1) and drag it to your canvas (2). The right pane shows the four Quip Document component configuration options with the "One template for each record" option (3) selected. ![Lightning App Builder showing an Account page with a new tab called Account Plan and a Quip Document embedded in it.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/admin_files_quip_lap_doc.png) 4. In the right pane, select a configuration option that describes [how you want the document to behave](https://help.salesforce.com/s/articleView?id=xcloud.admin_files_quip_doc_component.htm&release=264.0.0&type=5 "With the Quip Document Lightning component you can work with fully functional documents and spreadsheets directly within Salesforce records. All of your favorite features are there—comments, @mentions, live apps, and more. It's all the collaboration that you need, right where you need it."), and enter values into the required fields. The required fields depend on the option you chose.
Different docs for each recordEnter the name of the custom field that stores the document URL. Users can either embed existing documents or create and embed new documents from scratch or from templates. Administrators can optionally pre-populate a field with a specific document if they create an Apex trigger on the field or use Flow Builder or Process Builder.
Same doc on every recordEnter the URL of the document. For users, the document is embedded on the page and every record associated with it.
One template for each recordSelect a template from the Template Library or enter the template URL(4). Select or create the custom field that stores the document URL (5). Users create documents on each record based on the template.
Different templates for different recordsEnter the name of the custom field that stores the document URL and the name of the field that stores the URL of the Quip template. Administrators are required to prepopulate the template field. They can create an Apex trigger on the field or use Flow Builder or Process Builder. Users choose which template to create a document from.
5. If you selected **One template for each record**, click **![Edit icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/button_edit_pencil.png).** 1. To choose a template in the Template Library, use the Template Library section. Select a gallery name, then the template name, and click **Next**. ![Choose a template window](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_library_app_builder.png) 2. To enter a template URL, select **Template URL**. Enter the URL and click **Next**. 3. To make sure that your template is ready to add to the component, validate the template. The validation checks that you have access to the document, that link sharing is turned on, that the document is marked as a template, and that it isn’t a slide. ![Validate Template modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_validate_template_modal.png) - To create a document from a template, users need view access to the source template. To turn on view-only link sharing for your document from the Lightning App Building, click **Turn On Link Sharing**, - To differentiate regular documents from templates and keep your templates organized, click **Go to Quip**, and [mark your document as a template](https://help.salesforce.com/s/articleView?id=xcloud.quip_mark_as_template.htm&release=264.0.0&type=5 "To differentiate documents that your team uses as templates, mark your documents as templates in Quip. See what documents are embedded in Salesforce based on the object, convert your embedded documents to templates, and access them from the Template Library in Quip."). - After you address the errors, click **Validate Template**, and click **Done**. 6. Specify whether other users can view, edit, or request access to documents created from the template. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip Turn on Synced Sharing to manage user access to documents created from a template or linked to a Salesforce record. [Tell Me More](https://help.salesforce.com/s/articleView?id=xcloud.admin_files_quip_synced_permissions.htm&release=264.0.0&type=5 "Manage user access at the org level via Synced Sharing for your documents associated with Salesforce records. Grant users with access to a record view, comment, or edit access to its linked documents, or align document access with Salesforce record permissions.") 7. (Optional) Enter a custom label for the embedded document in the Custom Component Label field. 8. Enter the component’s pixel height. [See Component Size Recommendations](https://help.salesforce.com/s/articleView?id=xcloud.admin_files_quip_doc_component.htm&release=264.0.0&type=5 "With the Quip Document Lightning component you can work with fully functional documents and spreadsheets directly within Salesforce records. All of your favorite features are there—comments, @mentions, live apps, and more. It's all the collaboration that you need, right where you need it.") 9. Click **Save**, and click **Activation**. 10. On the Activation: Account Record Page, click **Assign as Org Default** and close the page. 11. To exit Lightning App Builder, click **Back**. The Quip Document component appears where you dragged it. ![The Quip Document component appears in a tab of an Account.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/admin_files_quip_doc_in_action.png) If you select **Different templates for different records**, create an Apex trigger on the template field to prepopulate it with the template URL. You can also use Flow Builder or Process Builder. This step is optional if you select **Different docs for each record**. # Add the Send Survey Action to Object Page Layouts Give your users access to the Send Survey action on record pages of any standard or custom object. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Feedback Management - Starter and Feedback Management - Growth licenses
User Permissions Needed
To add an action to record pages: Customize Application
The Send Survey quick action is available by default on the record pages of accounts, contacts, and cases. Add it to other standard or custom objects as needed. 1. From the object management settings for the object, go to Page Layouts. 2. Open the page layout to which you want to add the quick action. 3. In the page layout palette, click **Mobile & Lightning Experience**. 4. Drag the Send Survey action from the palette to the Standard Buttons area of the Salesforce Mobile and Lightning Experience Actions section. 5. Save your changes. # Add the Survey Invitations and Responses Related List to Object Record Pages Use the Survey Invitations and Responses related list to view the survey invitations and responses related to an object’s records. You can add the related list to the record detail pages of any object that Survey Subjects supports. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
User Permissions Needed
To add a related list: System Administrator profile
1. From Setup, in Object Manager, select the object to which you want to add the related list. 2. Click **Page Layouts** and select the page layout that you want to add the related list to. 3. In the Layout panel, click **Related Lists**. 4. Drag the **Survey Invitations and Responses** related list onto the page layout. 5. Click ![Related List Properties icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/related_list_properties.png) for the Survey Invitations and Responses related list. 6. In the Related List Properties dialog box, select the fields to display in the related list and the order in which the fields appear. To see survey invitation and survey response fields in the Related List Properties dialog box, the survey invitation and survey response records must be related to the survey subject records. 7. Click **OK**, and save your changes. If you use Support Settings or Case Auto-Response Rules to email survey invitations, survey invitations are related to the case records. You can view the survey invitations after you add the related list to Case object’s page layout. You can use the related list to track invitations that a process emails. The invitation is related to the record that triggers the email. To view responses from a participant, click ![quick action](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/surveys_list_page_dropdown_menu_icon.png) in a related list row, and select **View Responses**. You can't view the responses if an invitation receives more than one response. # Add the Survey Invitations Related List to Standard Object Record Pages Use the Survey Invitations related list to view the surveys a contact, person account, lead, or user is invited to take. The related list populates invitations related to a participant. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
User Permissions Needed
To view survey invitations: System Administrator profile
1. From Setup, in Object Manager, select the object to which you want to add the related list. 2. Click **Page Layouts** and select the page layout that you want to add the related list to. 3. In the Layout panel, click **Related Lists**. 4. Drag the **Survey Invitations** related list onto the page layout. 5. Click ![Related List Properties icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/related_list_properties.png) for the Survey Invitations related list. 6. In the Related List Properties dialog box, select the fields to display in the related list and the order in which the fields appear. 7. Click **OK**, and save your changes. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_example.png) Example If you use the Get Survey Invitation quick action to generate an invitation for a lead, the invitation is related to the lead record. The Survey Invitations related list on the lead record lists this invitation. # Add the Timesheets Component to Field Service Mobile Add the Timesheets Lightning Web Component to the Field Service Mobile App so that technicians can access it from their app. ### Required Editions
Available in: Lightning Experience
Available in: All editions of Field Service Plus for Energy & Utilities, and all editions of Asset Service Lifecycle Management
User Permissions Needed
To configure Field Service Mobile Apps Field Service Mobile License
1. Add [LSDK permission to technician profiles](https://help.salesforce.com/s/articleView?id=service.mfs_builder_setup_perms.htm&type=5&language=en_US). 1. From Setup, in the Quick Find box, enter Users, and then select **Permission Sets**. 2. Select the permission set that's assigned to mobile workers (likely Field Service Resource Permissions). See [Give Users Access to the Field Service Mobile App.](https://help.salesforce.com/s/articleView?id=service.mfs_perms_standard.htm&type=5&language=en_US) 3. Click System Permissions, and then click Edit. 4. Enable Lightning SDK for Field Service Mobile and Custom Applications for Field Service Mobile. 5. Save the permission set. 2. From Setup, in the Quick Find box, enter Field Service Mobile, and then select **Field Service Mobile App Builder**. 3. Click **New Configuration**. 4. In Name, enter Timesheets, then save your changes. The new configuration opens in Field Service Mobile App Builder. 5. From Components, drag **LWC Attributes** and drop it in the tabs section. 6. In the LWC Attributes component, in Lightning Web Component, select **timeSheetLandingPage**. 7. In Tab Label, enter Timesheets. 8. If necessary, change the icon. 9. Save your changes. 10. Click **Publish**. 11. To allow your technicians to view your Timesheets configuration in the Field Service App, select the profile you created for the field service technician. For example, select **Technician**. 12. Click **Publish**. # Add the Vlocity Action Toolbar to a Lightning Record Page (Managed Package) For the managed package runtime, open a card, Omniscript, Experience Cloud site page, web page, document, or external application from the Vlocity Action Toolbar on a Lightning record page. For example, add the toolbar to an account page to update an account and perform other Vlocity Actions available to accounts. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important The Vlocity Action Toolbar is no longer updated or enhanced. If you use Vlocity Actions and have Managed Package Runtime enabled, display Vlocity Actions in a Flexcard instead. You can configure up to 70 Vlocity Actions for a Flexcard. 1. On a Lightning record page such as account, click ![Setup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/setup_icon.png) and then select **Edit Page**. 2. Drag **Vlocity Action Toolbar** from the list of Custom - Managed components onto an editable area of the page. 3. Update properties in the Properties pane. See [Configure the Vlocity Action Toolbar (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_the_vlocity_action_toolbar.htm&release=264.0.0&type=5 "For the managed package runtime, configure the optional properties that control the toolbar layout and the available actions."). # Add the Vlocity Actions Toolbar to an Experience Cloud Site Record Page (Managed Package) For the managed package runtime, open a card, Omniscript, another Experience Cloud site page, web page, document, or external application from the Vlocity Action Toolbar on an Experience Cloud site record page. For example, add the toolbar to an account page to update an account and perform other Vlocity Actions available to accounts. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important The Vlocity Action Toolbar is no longer updated or enhanced. If you use Vlocity Actions and have Managed Package Runtime enabled, display Vlocity Actions in a Flexcard instead. You can configure up to 70 Vlocity Actions for a Flexcard. 1. From Setup, in the Quick Find box, enter All Sites, and then select **All Sites**. 2. Click **Builder** next for the site to which you want to add the toolbar. 3. Click ![Components panel icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/site_component_icon.png) and then drag **Vlocity Action Toolbar** from the list of custom components to an editable area of the page. 4. Update properties in the Properties pane. See [Configure the Vlocity Actions Toolbar](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_the_vlocity_action_toolbar.htm&release=264.0.0&type=5 "For the managed package runtime, configure the optional properties that control the toolbar layout and the available actions."). # Add the Vlocity LWC OmniOut Component to Adobe Experience Manager (Managed Package) For the managed package runtime, launch Omniscripts from an AEM page by adding the Vlocity LWC OmniOut Component. The Vlocity LWC OmniOut component hosts the Omniscript and uses the Salesforce Cloud Services configuration to make calls to Salesforce. Before you begin: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. [Set the OmniOut Resource Path (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_set_the_omniout_resource_path.htm&release=264.0.0&type=5 "For the managed package runtime, load your custom styling resources into your Adobe Experience Manager application by setting the correct resource paths."). 2. [Integrate Salesforce Cloud Services into Adobe Experience Manager (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_integrate_salesforce_cloud_services_into_adobe_experience_manager.htm&release=264.0.0&type=5 "For the managed package runtime, create a Salesforce connection in Adobe Experience Manager (AEM). The connection setup isn’t part of the Vlocity package."). 3. [Deploy OmniOut to Adobe Experience Manager (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_omniout_to_adobe_experience_manager.htm&release=264.0.0&type=5 "For the managed package runtime, add your AEM credentials to OmniOut and deploy it to your AEM server. The deployment adds a Vlocity LWC OmniOut component to AEM. The Vlocity LWC OmniOut component allows you to add your Omniscripts to an AEM page."). To add the Vlocity Lightning Web OmniOut component to Adobe Experience Manager: 1. From an AEM page, click the **+** symbol to add a component. A window opens with a list of components. 2. Select the **Vlocity LWC OmniOut** component. 3. From the component, click the configure icon, a wrench symbol, to open the component's Edit Dialog. 4. From the Vlocity LWC OmniOut **Edit Dialog**, configure these Vlocity LWC OmniOut component options: 1. In **Configuration**, select the Salesforce cloud connection that connects your Salesforce Connected App. 2. In **Namespace**, enter the namespace of your Vlocity package. 3. In **LWC Element Name**, enter the name of your Omniscript using the component tag name without brackets. For example, if your Omniscript had these properties: - **Type**: doc - **SubType**: Test - **Language**: English The correct syntax to use is `vlocityomniscript-doc-test-english`. 4. In **Layout**, select the Lightning or Newport design system. 5. (Optional) In **Prefill Attribute**, enter serialized JSON data to prefill elements. 6. (Optional) In **Google Maps API Key**, enter a Google Maps API Key if one is used in your Omniscript. 7. (Optional) Check **Use Proxy** if your application is using a proxy to connect to your Salesforce instance. 8. (Optional) In **Proxy URL**, enter your proxy URL. 9. (Optional) Check **Use Local Definition** to use the local Omniscript definition. The component can’t be verified if the Omniscript is active in your Salesforce org. 10. (Optional) Check **Load SLDS Resources** to load SLDS styles, images, and icons into your Omniscript. This option is required if you use File or Image in your Omniscript. 11. (Optional) Check **Load Newport Resources** to load Newport styles into your Omniscript. 12. (Optional) Check **Load PDF Resources** if you’re using a PDF Action in your Omniscript. 5. Save your component and publish your AEM application. 6. Test your AEM application and run the Omniscript. # Add Topics to Records in Salesforce Classic Add topics to quickly organize records around common themes, retrieve them in list views, and (with Chatter) view them on topic detail pages. ### Required Editions
Available in: Salesforce Classic
Available in: all editions
User Permissions Needed
To add topics to a record:

Read and Edit on the record

AND

Assign Topics to add existing topics

OR

Create Topics to add new topics

Topics for objects must be enabled before you can add topics to records of that object type. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note All topic names are public and appear in search results, but this doesn’t affect the visibility of records that have topics. 1. On the top of the record detail page under the record name, click **Click to add topics**. If the record already has topics, click **Topics**. ![Add topics to records](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/add_topics_records1.png) If your administrator enabled feed-based layouts, click **Add Topics** in the sidebar of the feed view. ![Add topics to records with feed-based layout](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/add_topics_records_feed-based.png) 2. In the topic editor, start typing your text. As you type, you can pick a topic from the list of suggestions, or keep typing to create your own unique topic. To add more than one topic, type a comma after each topic. Commas ( , ) and closing square brackets ( \] ) automatically end a topic. Other punctuation, symbols, and separators are supported in topic names. Records can have up to 100 topics. 3. When you’re done adding topics, click **Done** or press **Enter**. You can now use topics you add to records to filter your list views. If your administrator enabled Chatter, topics added to records become links to topic detail pages, where the Records tab shows all associated records. While you can enable topics for tasks, the Records tab is not supported for tasks. Topics on posts on a record aren’t automatically added to a record’s topics; you must add the topics to the record. Topics are added to a file automatically when the topics are added to the post with the file attachment or to comments on the post with the file attachment. # Add Topics to Survey Records Use the Topics component to add themes to Survey, Survey Question, Survey Question Choice, and Survey Question Response records. You can analyze trending topics and learn how different areas of your business are performing in the Topic Analysis dashboard in Customer Lifecycle Analytics. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
User Permissions Needed
To enable Topics and add the Topics component: System Administrator profile
Enable Topics for Survey objects and then add the Topics component to the record pages. 1. From Setup, enter Topics for Objects in the Quick Find box, and select **Topics for Objects**. 2. Select the Survey objects one at a time. 3. Select **Enable Topics**. 4. Save your changes. 5. Open a record of any Survey object to which you want to add the Topics component. 6. Click ![Setup icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/sfm_gear_icon.png) and select **Edit Page**. 7. In the Lightning App Builder, drag the Topics component to where you want it to appear on the page. 8. Configure the Topics component properties. 9. Save your changes and then click **Activate**. # Add Tracked Components to a Lightning App Page Users interact with Omniscripts and Flexcards via Lightning App Pages. However, instead of directly adding Omniscripts and Flexcards to pages, you add wrapper components that make the Omniscripts and Flexcards available to OmniAnalytics. 1. From Setup, in the Quick Find box, enter lightning app, and then select **Lightning App Builder**. 2. Click **New**. 3. Select **App Page**, then click **Next**. 4. In Label, type Analytics Test Page, then click **Next**. 5. Click **One Region**, then click **Done**. The new page opens in Lightning App Builder. 6. Drag the **Omniscript** standard component onto the page canvas. 7. In the component properties, set the Type to `Documentation` and the SubType to `OmniAnalytics`, then select **Enable Omnistudio Analytics**. 8. Drag the **Flexcard** standard component onto the page canvas below the first component. 9. In the component properties, set the Flexcard Name to `DocumentationTestCard` and select **Enable Omnistudio Analytics**. 10. Save your changes and click **Activate**. 11. On the Activation page, click **Lightning Experience**, select **Sales**, click **Add page to app**, then save your changes. 12. To exit Lightning App Builder, click **Save**, then click **Back**. 13. From the App Launcher, go to the Sales app and Analytics Test Page. 14. Verify that the Analytics Test Page looks like this: ![The Analytics Test Page contains the Omniscript and Flexcard created in the previous step. The first step of the Omniscript is Select Device, which has a Choose a device field and a Next button. Steps listed are Select Device, View Quote, Cart Details, Review Cart, Shipping Address, Provide Payment, and Order Receipt. Select Device is highlighted. The Flexcard displays a user Id and Name and has NavigateAction and NavigateActionNewWindow buttons.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/oapage.png) After you create the Lightning App Page, [View Tracked Data in the Tracking Group](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_view_data_tracking_group_std.htm&release=264.0.0&type=5 "After you add tracked components to a Lightning App page, you generate and view reports of the tracked data in the tabs for these components on the Tracking Group page.") to view tracked data. # Add Users to Your Quip Site To give your users access to your Quip site, add them manually, upload a CSV, or automatically grant access to all users from a Salesforce org. ### Required Editions
Available in: Enterprise, Performance, Professional, Developer, and Unlimited Editions
Salesforce permissions don’t affect which users can access your Quip site, only which users can use Quip Advanced features in Lightning Experience. 1. Go to [https://admin.quip.com](https://admin.quip.com). 2. Log in using your Quip admin email and password. 3. Click **Site Members**, and then **Provision Members**. ![Provision New Members modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_add_users.png) 4. To add a small number of users to your site, enter the users’ names and emails in the text box. 5. To add a large number of users to your site, upload a CSV with name and email pairs. 6. To let anyone from a Salesforce org automatically connect to your site, select **Provision everyone from a Salesforce org**, and log in to the Salesforce org. 7. Click **Continue**. 8. Choose whether you want to send your users a welcome email, onboarding emails, and email digests. You can customize the welcome email to help your users get up and running. After you add users to your Quip site, they can be @mentioned in documents and messages before they even log in for the first time. # Add Validation to a Custom Lightning Web Component in Omniscript Add validation to custom Lightning web components that extend an Omniscript element's component by using Vlocity's built-in validation methods. The omniscriptValidation component provides the Omniscript element's component with the functions to enable validation. For information on using validation in custom components that do not extend an Omniscript element's component, see [Extend the OmniscriptBaseMixin Component](https://help.salesforce.com/s/articleView?id=xcloud.os_extend_the_omniscriptbasemixin_component_17717.htm&release=264.0.0&type=5 "Enable a custom Lightning web component to interact with an Omniscript by extending the OmniscriptBaseMixin component. The OmniscriptBaseMixin includes methods to update an Omniscript's data JSON, pass parameters, and more."). ## Omniscript Validation ReadMe View validation examples for custom Lightning web components in the Omniscript Validation ReadMe. See [Omniscript ReadMe Reference](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_readme_reference_24281.htm&release=264.0.0&type=5 "This page lists the Lightning web components ReadMes available for Omniscripts. Extend Lightning web components to add custom behavior and styling."). # Add Validation to a Custom Lightning Web Component in Omniscript (Managed Package) For the managed package runtime, add validation to custom Lightning web components that extend an Omniscript element's component by using Vlocity's built-in validation methods. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The omniscriptValidation component provides the Omniscript element's component with the functions to enable validation. For information on using validation in custom components that do not extend an Omniscript element's component, see [Extend the OmniScriptBaseMixin Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_extend_the_omniscriptbasemixin_component.htm&release=264.0.0&type=5 "For the managed package runtime, enable a custom Lightning web component to interact with an Omniscript by extending the OmniScriptBaseMixin component. The OmniScriptBaseMixin includes methods to update an Omniscript's data JSON, pass parameters, and more."). ## Omniscript Validation ReadMe View validation examples for custom Lightning web components. See [LWC Omniscript ReadMe Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_lwc_omniscript_readme_reference.htm&release=264.0.0&type=5 "For the managed package runtime, this page lists the Lightning web components ReadMes available for LWC Omniscripts. Extend Lightning web components to add custom behavior and styling."). # Add Validation to a Lead or Contact Record Page Attach a validation-enabled research configuration to a Lead or Contact record page so that the relationship graph flags employer discrepancies for your users. | Permission | Required for | | --- | --- | | AI Relationship Research User | Edit Lightning Record Pages | Enable Employer Verification on the configuration before you add it to a record page. See [Set Up Secondary Research Validation](https://help.salesforce.com/s/articleView?id=xcloud.airr_set_up_secondary_validation.htm&release=264.0.0&type=5 "Add secondary research data validation to a Contact or Lead configuration so that AI Relationship Research checks employer information and flags discrepancies on the AI Relationship Research graph."). 1. From Setup, in the Quick Find box, enter Lightning App Builder, then select **Lightning App Builder**. 2. Select the Lead or Contact Lightning Record Page that you want to edit, then select **Edit Page**. 3. If the **AI Relationship Research** component isn't already on the page, search for it in the component panel and drag it to the position on the page where you want it to appear. 4. Select the **AI Relationship Research** component. Then, in the component properties panel, from the **Configuration Name** list, select the configuration that has Employer Verification enabled. 5. Click **Save**, then click **Activate** if the page isn't already active. After you save the page and refresh the relationship graph, the discrepancies that Employer Verification detects appear as warning icons on the graph. To resolve a flagged discrepancy, see [Review and Resolve an Employment Discrepancy](https://help.salesforce.com/s/articleView?id=xcloud.airr_review_resolve_discrepancy.htm&release=264.0.0&type=5 "Resolve an employment discrepancy from the AI Relationship Research graph by keeping the CRM value or confirming the researched value."). # Add Values to List Items by Using VALUELOOKUP In this example, an Integration Procedure adds a dynamic value to each item in a list using the VALUELOOKUP function. The values aren't hard-coded in the Integration Procedure. Use this approach if you don't know the set of possible values in the input. Here's some sample input, with `uservalue` values initially set to `null`. The `uservalue` nodes don't have to be included in the input, but it's easier to compare input to output if they are. ``` { "Labels": { "OfferType": "Remediation", "BillingCycle": "Immediate" }, "productAttributes": { "records": [ { "record": { "uservalue": null, "label": "BillingCycle" } }, { "record": { "uservalue": null, "label": "OfferType" } } ] } } ``` The `LabelValue` formula in the Loop Block's Set Values component looks under `Labels` for the node with the name specified in the `label` value of the current list item, then returns the value of that node. The output looks like this, with `uservalue` values set according to the `label` value in each list item. ``` { "Labels": { "OfferType": "Remediation", "BillingCycle": "Immediate" }, "productAttributes": { "records": [ { "record": { "uservalue": "Immediate", "label": "BillingCycle" } }, { "record": { "uservalue": "Remediation", "label": "OfferType" } } ] } } ``` Here's a list of the components and their configurations. - A Loop Block named LoopBlock1, configured with these settings:
 

Property

Loop List

Additional Loop Output

- A Set Values component within the Loop Block, configured with these settings:

Property

Description

Element Name

GetValueForListItem

Element Value Map

  • Element Name: LabelValue
  • Value:
    =VALUELOOKUP(Labels, productAttributes:records:record:label)

Response JSON Path

LabelValue

Response JSON Node

productAttributes:records:record:uservalue

- A Set Values component after the Loop Block, configured with these settings:

Property

Description

Element Name

AssembleOutput

Element Value Map

  • Element Name: productAttributes
  • Value: %LoopBlock1:productAttributes%

Element Value Map

  • Element Name: Labels
  • Value: %Labels%
- A Response Action below the last Set Values component, with its **Send JSON Path** property set to `AssembleOutput`. # Add Variables and Constants (Managed Package) For the managed package runtime, all calculation procedures require constants, variables, or both. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You can't use the same name for a variable that you use for a constant. Variables and constants use the same namespace. Here's how you add both variables and constants: 1. Add variables: 1. In the Variables and Constants section, click **+Add Variable**. 2. Enter variable data: - **Name**: A unique name for the variable. - **Data Type**: Choose one from the list. - **Precision**: Optional. Enter the level of precision you want Vlocity to adhere to for this variable. For example, enter 0.25 to make this variable's value precise to the nearest quarter of an integer. For a dollar value example, enter 10 to make the variable precise to the nearest $10. Enter 0 if this calculation procedure must use the precise value of this variable, with no slippage. - **Default Value**: Optional. Enter a value if this calculation procedure requires a value for this variable (it can't use a null). If you don't enter a default value, Vlocity sets this variable to null if no value is entered for the variable. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Before you enter output variables, check the calculation matrices this calculation matrix will use. An input variable that requires a user input cannot be used as an output variable. 2. Add constants: 1. In the Variables and Constants section, click **+Add Constant**. 2. Enter the constant data: - **Name**: A unique name for the constant. - **Data Type**: Choose one of the available types. - **Precision**: Optional. Enter the level of precision you want Vlocity to adhere to for this constant. For example, enter 0.25 to make this constant's value precise to the nearest quarter of an integer. For a dollar value example, enter 10 to make the constant precise to the nearest $10. Enter 0 if this calculation procedure must use the precise value of this constant, with no adjustment. - **Value**: The value of this constant. 3. Click **Save Calculation Procedure**. # Add Videos to Content from the Rich Text Editor Embed video in rich text fields to enliven your content with product reviews, promotional videos, instructional walk-throughs, and more. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create, edit, or clone content: Any CMS workspace contributor role
To publish or unpublish content: A CMS workspace contributor role of content admin or content manager
To tag or untag content:

View Content Taxonomy

AND

any CMS workspace contributor role

Video domains must be configured with https and hosted on an approved site. ## Approved video hosting domains: - scormanywhere.secure.force.com - scormanywhere.secure.force.com - youtube.com - youtube-nocookie.com - youtube.ca - youtube.jp - youtube.com.br - youtube.co.uk - youtube.nl - youtube.pl - youtube.es - youtube.ie - youtube.fr - player.vimeo.com - play.vidyard.com - players.brightcove.net bcove.video - player.cloudinary.com - fast.wistia.net - i1.adis.ws - s1.adis.ws To add video from the rich text editor: 1. In the RTE toolbar, click ![Video icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_content_video_icon.png) to add a video. 2. Enter the URL of the video on your hosting domain. 3. Adjust width and height of your video, if needed. 4. Click **Save**. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/images/icon_tip.png) Tip - If your video doesn’t show in the editor, add the URL link to the [Cross-Origin Resource Sharing (CORS) allowed programs list](https://help.salesforce.com/articleView?id=extend_code_cors.htm&type=5&language=en_US) so Salesforce can access the link and show the video. - To set up your video to play automatically, replace watch with embed in the video URL. Type autoplay=1 and mute=1 in the URL to give your users a better video experience. ![Embed video in URL for autoplay](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_video_rte_embed.png) ![Set autoplay and mute to 1 in video URL for autoplay](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_video_rte_autoplay.png) # Add Work Source for Work Estimation Provides a guided, multi-screen process to select and add various types of work sources to the quote. You can add work sources such as Asset, QLI, Order Product, and Work Type Group to your current Quote. ## Input Fields These are the parameters to configure Quote Work Sources.
Field NameDescription
Quote ID(Mandatory)Specifies the Quote ID for work source addition.
Enable LoaderIndicates whether the component shows the spinner when fetching data.
Account ID InputSpecifies the account ID to list valid work sources.
Launch Record IDSpecifies the ID from which this LWC or the related flow is triggered or launched.
Price Book ID InputShows the ID to list the valid work sources.
Launch Action TypeShows the value as ConfigureQuote when launched from Quote for asyn quote edit operations else it shows an empty value.
Event Co-Relation IDSpecifies the ID to track produced or consumed events through LMS.
Work Source Load CountGives the number of records to be shown when you browse a list of specific work sources.
## Output Fields None ## Published LMS Events and Triggers These are the events and their trigger condition while configuring Quote Work Sources.
Event Name Trigger Condition
showtoast (Operation Type: graphql error, Operation Status: false)

This event triggers if an error occurs when fetching these data:

  • Existing work sources on the quote.
  • Account ID or Price Book ID from the quote.
  • Valid Product families of the Product2 sObject for filtering.
  • Work sources for selection, such as Assets, Quote Line Items (QLIs), Order Products, or Work Type Groups.
modalnavigation This event triggers when you click Cancel or Add in the pop-up that appears when you try to leave the page.
createworksource This event triggers if you create a work source.
## LMS Events Monitored None # Add Your Apps to Salesforce Essentials Want to extend the functionality of your Salesforce platform? Not sure where to start? While Salesforce Essentials doesn't come with API access, our support coaches have gathered what they believe are the _most essential_ apps to extend functionality. Check out our **[AppExchange](https://appexchange.salesforce.com/appxStore?type=App)** to integrate some of the tools you already use and love with Salesforce. # Add Your Company’s Voucher Definitions Voucher definitions are templates that are used to issue vouchers. You set up a voucher definition one time and then use the voucher definition to issue vouchers on demand or by configuring flows and loyalty program rules. Based on your requirements, createas many voucher definitions as needed and use each of them for different purposes. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To create a voucher definition:

Loyalty Management permission set

AND

Manage Loyalty Programs permission set

Here's how you can map your business requirements to key voucher definition fields when you create a voucher definition record:
Business Requirement Voucher Definition Configuration Example
Voucher definition issues vouchers that offer one-time discounts worth only specific amounts

Select Fixed Value as the type and enter a face value.

In orgs that have multiple currencies set up, you can select the currency ISO code of the fixed value.

Get US $10 off on your next purchase
Voucher definition issues vouchers that offer only percentage discounts Select Discount Percentage as the type and enter the discount in percentage. Get 25% off on your next purchase
Voucher definition issues vouchers that offer free products or services Select Product or Service as the type and select the product that the voucher can be redeemed for or the product category from which the voucher can be redeemed for any product. Get a pair of shoelaces for free when you sign up for on the Cloud Kicks app
Voucher definition issues vouchers that offer a fixed value discount, but the value can be redeemed across multiple orders Select the Partially Redeemable checkbox. Get US $20 off on your next four purchases
Voucher definition issues vouchers from a specific date
  • For voucher definitions that are used by an automated process, such as a flow or a loyalty program rule, activate the voucher definition and activate the flow or the rule on the day from which the voucher definition must start issuing vouchers.
  • For voucher definitions that are used to issue vouchers on demand, activate the voucher definition on the day from when the voucher definition must start issuing vouchers.

After the Active checkbox is selected for a voucher definition, the voucher definition can start issuing vouchers.

Get US $10 off on a purchase between May 1, 2024 and June 1, 2024
Voucher recipients can redeem a voucher only after a specific date or date time
  • Date: Specify an effective date time from when the issued vouchers can be redeemed.
  • Date Time: Select the Time-Based Voucher Period checkbox and specify an effective date and time.
Shop in the next 30 days and get 10% off
Issued vouchers expire on a specific date or date time
  • Date: Specify an expiration date after which the vouchers are no longer available for redemption.
  • Date Time: Select the Time-Based Voucher Period checkbox and specify an expiration date and time after which the vouchers are no longer available for redemption.
Get US $10 off on a purchase between May 1, 2024 and June 1, 2024
The issued vouchers must expire a specific period after its effective date or date time
  • Date: Specify the expiration period unit and expiration period after which the vouchers are no longer available for redemption.
  • Date Time: Select the Time-Based Voucher Period checkbox and specify the expiration period unit and expiration period after which the vouchers are no longer available for redemption.
Shop in the next 30 days and get 10% off
The voucher definition must issue vouchers to members of the loyalty program and not all customers Specify the loyalty program that the voucher definition is a part of. Members only offer to get a free pair of shoelaces
The voucher definition must issue vouchers to members of a loyalty program as part of a promotion Buy Level X shoes and get a $15 voucher
The voucher definition must issue vouchers to members, which can be redeemed to get a partner product or service Specify the account of the partner who is offering their product or service as part of the voucher. Buy Cloud Kicks shoes and get a free spa at Relax Spa
The issued vouchers must consist of a unique code Ask your admin to turn on the setting to automatically generate a voucher code. See Automatic Generation of Voucher Codes
The issued vouchers must consist of a unique code with a specific pattern Enter the code's prefix and suffix
The issued vouchers' codes must be of a specific length

Enter the autogenerated voucher code length

If you don't enter a value, the default length is 8 characters.

The liability incurred by the loyalty program for the issued vouchers must be calculated

Enter the liability that's incurred for each issued voucher

In orgs that have multiple currencies set up, you can select the currency ISO code of the liability.

N/A
![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip Voucher definitions contain information about the discount offered and the validity period. The values can be changed in the automated processes that issue vouchers or when issuing vouchers on demand. 1. To create a voucher definition for loyalty program members: 1. Open the loyalty program for which you want to create the voucher definition. 2. From the launchpad, click **Add Voucher**. 3. Define the voucher definition. 4. Save the voucher definition. 2. To create a voucher definition for contacts: 1. From the App Launcher, find and select **Voucher Definitions**. 2. Click **New**. 3. Define the voucher definition. 4. Save the voucher definition. # Add Your Omniscript to a Lightning Page In Omnistudio standard runtime, add the standard Omniscript component to a Lightning page after activation. 1. In your org, go to **Setup** | **Lightning App Builder** and click **Edit** for an existing Lightning app to open the Lightning App Builder. Or, on a Lightning record page, from the Setup menu, click **Edit Page**. 2. Drag the Omniscript component from the **Standard** section of the Components pane onto the canvas. When you add the Omniscript component, it pulls in the first active Omniscript. The component shows up on the canvas as a placeholder, and the type and subtype are pre-filled in the dropdown from the first active Omniscript. 3. If the retrieved Omniscript isn’t the script you must use, select another type and subtype option from the dropdown menu. 4. Select a **Theme**. For example, the Salesforce Lightning Design System (SLDS) or Newport. You can switch themes at any time. 5. For **Display**, choose whether you want the Omniscript to display on the page, or use a button to open the Omniscript. If you select a button to open Omniscript, you can apply one of the SLDS styles for the button variant. 6. Select the **Language** to use for Omniscript. Depending on the language you select, you can select either Left to Right or Right to Left for your **Language Direction**. 7. To modify the component's visibility by adding filters, set **Component Visibility**. See [Dynamic Lightning Pages](https://help.salesforce.com/articleView?id=lightning_page_components_visibility.htm&type=5&language=en_US). 8. To configure activation options, click **Activation**. See [Activate Your Lightning App Page](https://help.salesforce.com/articleView?id=lightning_page_getting_into_salesforce1.htm&type=5&language=en_US). # Add your Omniscript to a Lightning Page (Managed Package) For the managed package runtime, add your Omniscript to a Salesforce Lightning page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In a Lightning Page's App Builder, search for the name of your Omniscript by entering the Omniscript's unique Type, SubType, and Language. Use the syntax **Type/SubType/Language** to search as the search does not ignore forward slashes. ![The name of an LWC OmniScript component as it appears in Community and Lightning component lists.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/component_name_os.png) 2. Drag the component into the Lightning Page. In the Lightning App Builder, Omniscripts aren't available in the Components section when page type is Home Page. Omniscripts are available for Record Page, App Page, Community Default, and Community Page types. 3. (Optional) Apply Newport styling by entering **newport** into the layout field in the component's properties panel. Lightning styling is the default styling when the layout property is blank. ![The Lightning and Newport layout options for an LWC OmniScript component.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/lightning_os_layout.png) 4. (Optional) Configure the inline options. See [Display Inline Omniscripts on Lightning and Community Pages (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_display_inline_omniscripts_on_lightning_and_community_pages.htm&release=264.0.0&type=5 "For the managed package runtime, enable LWC Omniscripts to run inline without leaving the context of a page. An inline Omniscript renders as a button that, when clicked, launches the Omniscript inline. The record id of a page passes into an inline Omniscript as a Context Id automatically. You can render more than one inline Omniscript on a page beginning in Vlocity Insurance and Health Summer '20 and CME Fall '20 ."). 5. (Optional) Control how right-to-left languages display. Omniscript provides beta support for right-to-left languages. In the **dir** field, select whether the Omniscript displays ltr or rtl. Available beginning with Vlocity Insurance and Health and Vlocity CME Summer '20 6. (Optional) Modify the component's visibility by adding filters. For more information, see [Dynamic Pages](https://help.salesforce.com/articleView?id=lightning_page_components_visibility.htm&type=5&language=en_US). 7. (Optional) Change the device view of the App Builder to Phone to see how the Omniscript displays on a mobile device. Available beginning with Vlocity Insurance and Health and Vlocity CME Summer '20 # Add Your Omniscript to an Experience Cloud Page In the Omnistudio standard runtime, add the standard Omniscript component to an Experience Builder page after activation. You can add an Omniscript to an Aura-based Experience Cloud site, or a Lightning Web Runtime (LWR) Experience Cloud site. To add an Omniscript to an LWR site, you must first contact Salesforce Customer Support to enable this capability. Once done, you can perform these tasks. 1. To access the Experience Builder, see [Navigate Experience Builder](https://help.salesforce.com/s/articleView?id=experience.community_designer_ui.htm&type=5&language=en_US). 2. To open the Components pane, click the lightning bolt icon. 3. Drag the Omniscript component from the **Process Automation** section onto the canvas, if you're using an Aura-based Experience Cloud site. On the LWR-based Experience Builder, find the Omniscript component in the Customer Interactions section. When you add the Omniscript component, it pulls in the first active Omniscript. The component shows up on the canvas as a placeholder, and the type and subtype are pre-filled in the dropdown from the first active Omniscript. 4. If the retrieved Omniscript isn’t the script you must use, select another type and subtype option from the dropdown menu. 5. Configure your script by using the choices from the dropdown menu. 6. Select a **Theme**. For example, the Salesforce Lightning Design System (SLDS) or Newport. You can switch themes at any time. 7. For **Display**, choose whether you want the Omniscript to display on the page, or use a button to open the Omniscript. If you select a button to open Omniscript, you can apply one of the SLDS styles for the button variant. 8. Select the **Language** to use for Omniscript. Depending on the language you select, you can select either ltr (left to right), or right to left for your **Language Direction**. 9. To preview, click **Preview**. See [Preview Your Experience Builder Site](https://help.salesforce.com/s/articleView?id=experience.community_designer_preview.htm&language=en_US). ## Considerations for Using Omniscripts with Lightning Web Runtime Sites Both existing and newly created Omniscripts can be used on Lightning Web Runtime (LWR) Experience Cloud sites. Learn about some key considerations before you choose an Omniscript to embed in your LWR sites. You can use the Omniscripts through the LWR site builder under the Customer Interactions category. To make sure that your Omniscripts display correctly and function well, note these pointers and choose only compliant Omniscripts for your LWR sites. - If you make changes to your Omniscript, make sure that you republish the sites that use it. Child Omniscripts must also be republished after a change is made. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Before republishing your sites via the site builder, consider other elements from other products that you've embedded in your site. Only republish if everything production-ready. - Lightning pages, Experience Cloud Aura sites and LWR sites all implement their own styling. To reuse an Omniscript with a modified UI appearance, enter the token overrides in the Omniscript corresponding to the consuming page or site. - To use the Open Omniscript option on an LWR site, make sure that you select the **Load Omniscript from URL** checkbox in the Properties section of the page. This checkbox is added to the Omniscript component and loads the Omniscript present in the URL configured via the Action Type. You must also create an lwcos page for this action to work. For more information, see [Launch an Omniscript from an Omniscript Action on a Flexcard in Experience Cloud](https://help.salesforce.com/s/articleView?id=xcloud.os_launch_an_lwc_omniscript_from_an_omniscript_action_on_a_flexcard_in_a_community_27646.htm&language=en_US&type=5). - Custom LWCs are supported. However, due to a technical limitation, nested custom LWCs require a workaround to work as expected. Because LWR sites work on cached data, they look for Flexcards and Omniscripts nested within your custom LWCs on the site. If present, they load the appropriate component at runtime. To do this, you can pick one of the two methods outlined here. - Create a page on your site and add all nested components in your main LWC component to this page. Hide the page so it doesn’t show up for users as a navigation option. - On the page that you’re adding your custom LWC, add the dependent Flexcards and Omniscripts. Then, for each component, control the visibility via the Visibility tab. For instance, you can switch the Show Component on Desktop toggle on and add a condition that says “User ID” equals “Invalid\_User”. In most orgs, this condition is never true, so the dependent components stay hidden for the user but are available to the LWR site to read from. - The Style and Visibility tabs on LWR sites don't work with Omniscript elements. You can continue to control the style and visibility of the Omniscript through the options available within the Omniscript designer, but they aren't compatible with the settings native to the LWR site builder. - When you open an LWR site from the Digital Experiences page, the site considers you an unauthenticated user and shows only Flexcards that have data available to guest users. To make sure that you see the full data, implement a login page on your site. Then, go to the **Workspaces** link next to the site name. Click **Administration** and find the **Login & Registration** tab in the left navigation pane. Make sure that the Login Page Type dropdown has a value and that the **Allow employees to log in directly to an Experience Cloud site** checkbox is selected. - ![The Login & Registration page showing the Login Page Setup options](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/login_on_lwr.png) # Add your Omniscript to an Experience Page (Managed Package) For the managed package runtime, add your Omniscript to a Salesforce Experience page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In an Experience Builder, click on the **Components** tab. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/owc_community_components.png) 2. Search for the name of your Omniscript by entering the Omniscript's unique Type, SubType, and Language. Use the syntax **Type/SubType/Language** to search as the search does not ignore forward slashes. ![The name of an LWC OmniScript component as it appears in Community and Lightning component lists.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/component_name_os.png) 3. Drag the component into the Experience page. 4. (Optional) Apply Newport styling by entering **newport** into the layout field in the component's properties panel. Lightning styling is the default styling when the layout property is blank. ![Configuration fields for an LWC OmniScript component in a Community.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/community_lwc_os.png) 5. (Optional) Configure the inline options. See [Display Inline Omniscripts on Lightning and Community Pages (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_display_inline_omniscripts_on_lightning_and_community_pages.htm&release=264.0.0&type=5 "For the managed package runtime, enable LWC Omniscripts to run inline without leaving the context of a page. An inline Omniscript renders as a button that, when clicked, launches the Omniscript inline. The record id of a page passes into an inline Omniscript as a Context Id automatically. You can render more than one inline Omniscript on a page beginning in Vlocity Insurance and Health Summer '20 and CME Fall '20 ."). 6. (Optional) Control how right-to-left languages display. Omniscript provides beta support for right-to-left languages. In the **dir** field, select whether the Omniscript displays ltr or rtl.Available beginning with Vlocity Insurance and Health and Vlocity CME Summer '20. 7. (Optional) Change the device view in the Experience Builder to Phone or Tablet to see how the Omniscript displays on a mobile or tablet device. Available beginning with Vlocity Insurance and Health and Vlocity CME Summer '20. # Add, Edit, and Delete Records with Edit Block Actions Enable users to add, edit, and delete records by using Edit Block's default remote actions. To add custom functionality, configure additional actions. Edit Block supports these actions: - HTTP Action - Integration Procedure Action - Remote Action ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Word wrap isn't supported in an Edit Block. - **[Create, Edit, and Delete Records with Default Actions and sObject Mapping](https://help.salesforce.com/s/articleView?id=xcloud.os_addeditand_delete_records_with_edit_block_actions_14582.htm&release=264.0.0&type=5)** Add sObject Mapping functionality by adding Remote Actions to the Edit Block for each option you want to make available to the User. These Remote actions will access Apex classes built for the Edit Block and the sObject Mapping tool. The Default Actions use the sObject mapping property to determine how the entries map to an sObject. - **[Add Custom Actions to an Omniscript Edit Block](https://help.salesforce.com/s/articleView?id=xcloud.os_addeditand_delete_records_with_edit_block_actions_14582.htm&release=264.0.0&type=5)** Add custom actions to include additional functionality in your Edit Block. - **[Add Global Actions to an Omniscript Edit Block](https://help.salesforce.com/s/articleView?id=xcloud.os_addeditand_delete_records_with_edit_block_actions_14582.htm&release=264.0.0&type=5)** Run actions on the entire JSON for the Edit Block by adding global actions. Global actions display outside of the Edit Block entries. ## Create, Edit, and Delete Records with Default Actions and sObject Mapping Add sObject Mapping functionality by adding Remote Actions to the Edit Block for each option you want to make available to the User. These Remote actions will access Apex classes built for the Edit Block and the sObject Mapping tool. The Default Actions use the sObject mapping property to determine how the entries map to an sObject. 1. To allow a user to create entries, edit entries, or delete entries: 1. Add a **Remote Action** to the Edit Block. 1. Configure the Edit Block using the Element naming convention, Class, and Method for each of these table entries:

Element Name

Class

Method

(Edit Block Element Name)-New

DefaultOmniScriptEditBlock

new

(Edit Block Element Name)-Edit

DefaultOmniScriptEditBlock

edit

(Edit Block Element Name)-Delete

DefaultOmniScriptEditBlock

delete

2. Map the Edit Block entries to Salesforce objects by using the SOBJECT MAPPING property. Fields hidden from the user, such as an Id, remain available for mapping. To add mapping entries to the Edit Block: 1. Click **SObject Mapping** to expand the section. 2. Click **Select Object** and select a Salesforce object. 3. Add an SObject Field Mapping. 4. In the Edit Block Element field, select the name of an element that is in the Edit Block. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note By default, new entries are added, and existing entries are updated. To create a record instead of updating an existing one, select **Duplicate Key**. 5. In the sObject field, select an sObject field. The element will map to this field. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note You must add a Text element to store the ID of the record in the Edit Block. The element containing the `record Id` must map to the sObject's ID field in the SObject Mapping section. To hide the element from displaying in the UI, see [Using the Hide Property on Omniscript Components](https://help.salesforce.com/s/articleView?id=xcloud.os_hide_omniscript_elements_19515.htm&release=264.0.0&type=5 "Hide elements and child elements using the Hide property available on Omniscript Input Components, Blocks, Steps, Groups, Formulas, and Aggregate elements."). ## Add Custom Actions to an Omniscript Edit Block Add custom actions to include additional functionality in your Edit Block. To add a custom action: 1. Add an action element into the Edit Block. 2. Name the element. Actions in the Edit Block will appear in the dropdown beneath the default actions by default. 3. To have an action replace the default New, Edit, or Delete actions, name the Action element, and append the action type.

Replace Action

Example Element Name

New

AddUserNew

Edit

ChangeAddressEdit

Delete

RemoveAccountDelete

4. Add a **Label** to the Action. 5. Configure the Action. ## Add Global Actions to an Omniscript Edit Block Run actions on the entire JSON for the Edit Block by adding global actions. Global actions display outside of the Edit Block entries. 1. Add an action element into the Edit Block. 2. Name the element and append Global to the element name. 3. Add a label to the action. 4. Configure the action. # Add, Edit, and Delete Records with Edit Block Actions (Managed Package) For the managed package runtime, enable users to add, edit, and delete records by using Edit Block's default remote actions. Add custom functionality by configuring additional actions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Edit Block supports these Actions: - HTTP Action - Integration Procedure Action - Remote Action ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Word wrap isn't supported in an Edit Block. - **[Creating, Editing, and Deleting Records with Default Actions and sObject Mapping (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creatingeditingand_deleting_records_with_default_actions_and_sobject_mapping.htm&release=264.0.0&type=5)** For the managed package runtime, add sObject Mapping functionality by adding Remote Actions to the Edit Block for each option you want to make available to the User. These Remote actions will access Apex classes built for the Edit Block and the sObject Mapping tool. The Default Actions use the sObject mapping property to determine how the entries map to an sObject. - **[Adding Custom Actions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_custom_actions_edit_block.htm&release=264.0.0&type=5)** For the managed package runtime, add custom actions to include additional functionality in your Edit Block. - **[Adding Global Actions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_global_actions_edit_block.htm&release=264.0.0&type=5)** For the managed package runtime, run Actions on the entire JSON for the Edit Block by adding global actions. Global actions display outside of the Edit Block entries. # Add, Remove, and Manage the Objects and Fields That Sync to Salesforce Data Pipelines As your analytics and business needs change, the data synced to Salesforce Data Pipelines change, too. Add, remove, and change the settings for the objects and fields included in data sync. For help with managing data sync for local Salesforce objects, see [Add and Remove Local Salesforce Objects and Fields from Data Sync](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_local_add_remove_objects.htm&release=264.0.0&type=5 "Update data sync to keep up with your changing business by adding local Salesforce objects, removing objects, and managing which fields are synced. Synced data is stored in Salesforce Data Pipelines as objects that you can use in recipes."). For help with managing data sync for remote objects, see [Add and Remove Remote Objects and Fields from Data Sync](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_replicate_connection.htm&release=264.0.0&type=5 "Update data sync for connected external data sources to keep up with your changing business by adding objects, removing objects, and managing which fields are synced. Synced data is stored in Salesforce Data Pipelines as objects that can be used in recipes."). # Add, Remove, and Organize Your Tabs in Salesforce Classic Salesforce Classic uses tabs as starting points for viewing, adding, and editing information for an object. Different apps can have different sets of tabs. Add tabs for items you use frequently in any app. ### Required Editions
Available in: Salesforce Classic
Available in: all editions except Database.com
It doesn’t matter which app you’re using when you open the Customize My Tabs page. From there, you can edit the tabs for any app you have access to. 1. In any app, click ![Icon of plus sign.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/tab_plus_icon.png) to the right of your current tabs. 2. Click **Customize My Tabs**. 3. To configure tabs for a different app, select one from the dropdown. The Custom App field shows your current app by default. 4. Select a tab from the Available Tabs list and use the right arrow to move it into the Selected Tabs list. To reorder the selected tabs, use the up and down arrows. 5. Save your work. # Added Dimensions in the Matrix (Managed Package) For the managed package runtime, you might want to look up additional dimensions in the Matrix. For example, to look up Age Range Band by gender, create two rows for each age: one for Male applicants, the other for Female applicants. Additional dimensions require additional rows. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![The first input column is Age Today, a range, with values 17, 17, 18, 18, 25, 25, 30, 30, and so on. The second input column is Gender, with alternating values of Female and Male. The first output column is Age Range Band, with values 1, 1, 2, 2, 3, 3, and so on. The second output column is Ages Included. Its first two values are "17.9999999 and under", its second two values are "18 - 24.9999999", and so on.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/adddimensionsmatrix.png) # Adding a Card Layout to a Zone (Managed Package) For the managed package runtime, to embed a card layout inside a zone: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/zones_layout_preview.png) 1. Expand a zone, and click into the **Layouts** input field to select an active card layout from the dropdown. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/zones_add_card_layouts.png) 2. Click **\+ Add Layout**. # Adding a Card to a Layout (Managed Package) For the managed package runtime, add a card to a layout. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In your org, click the App Launcher, click Vlocity Cards, click a version of card layout to open. 2. In the Cards section of your layout, click **\+ Add Card**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/add_card.png) 3. To select an existing card, in the **Choose Existing** column, select the checkboxes next to one or more cards. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/choose_existing_card.png) 4. To create a new card, in the **Blank Card** column, enter the values for these properties: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/choose_blank_card.png) - **Card Name**: Create a unique name for your card, such as **CustServ Account Cases**. - **Card Title**: Enter the visible name of your card, such as Cases. - (Optional) **Card Author**: Update the user organization that created the record. The best practice is to use author names that describe the team creating the content. For example, MeriCommCustServ. See [Understanding the Author of a Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_understanding_the_author_of_a_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, the Author property in templates, layouts, and cards specify the user organization that created the record."). 5. Click **Add**. 6. Beginning with Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20, if your layout is LWC enabled, click the **Deploy** button next to Enable LWC in the Layout pane to save changes to the card layout. # Adding a Card to a Layout (Managed Package) For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Add cards to your layout after creating the layout and fetching data. See [Creating a Card Layout Using Card Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_card_layout_using_card_designer.htm&release=264.0.0&type=5 "For the managed package runtime, create a card layout to build visual components to your customer interactions by adding data, enabling actions, and using custom or Vlocity templates to determine the look and feel."). See [Creating an LWC Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components."). Because cards are portable components added to one or more layouts, changes made to existing cards apply to that same card on any layout containing that card. For example, if you add a card named CustServ Account Cases to a layout named public-accounts and a layout named account-policies, updating the card on one of these layouts automatically updates that card on the other layout. A card can have its own data source independent of the layout data source. See [Configuring Data Sources for Cards Components (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_data_sources_for_cards_components.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source on a card, layout, or flyout to retrieve data from a Salesforce object or an external database. Display the returned data on cards in a layout or flyout."). Before you begin, create a card layout. See [Creating a Card Layout Using Card Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_card_layout_using_card_designer.htm&release=264.0.0&type=5 "For the managed package runtime, create a card layout to build visual components to your customer interactions by adding data, enabling actions, and using custom or Vlocity templates to determine the look and feel.") and [Creating an LWC Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components."). - **[Adding a Card to a Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_card_to_a_layout_1.htm&release=264.0.0&type=5)** For the managed package runtime, add a card to a layout. - **[Configuring a Card (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_a_card.htm&release=264.0.0&type=5)** For the managed package runtime, to configure a card on a layout, set these optional properties: - **[Limit User Access to a Card Layout in a Managed Package (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_limit_user_access_to_a_card_layout_in_a_managed_package.htm&release=264.0.0&type=5)** For the managed package runtime, in the managed package in your org, the `VlocityRequiredPermissionCheck` Apex Class must exist in Setup > Apex Classes for the **Required Permissions** feature to work. The **Required Permissions** feature enables you to limit user access to a card layout. Enter a list of custom permissions to specify which users can see your layout. - **[Configuring Card Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_card_properties.htm&release=264.0.0&type=5)** For the managed package runtime, configure card properties on your card layout. # Adding a Card to a Zone (Managed Package) For the managed package runtime, to add a card to a zone: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/zones_preview_tab.png) 1. Expand a zone, and click **\+ Add Card**. 2. To select the cards to add to the zone, select the checkbox for each card. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/zones_choose_cards_to_add_to_zone.png) 3. Click **Add**. # Adding a Custom Action to a Card (Managed Package) For the managed package runtime, add actions directly on a card with Custom Actions. Custom Actions perform faster than standard Vlocity Actions but have fewer configuration options. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). For reusable actions with additional configuration options, see [Vlocity Actions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_vlocity_actions.htm&release=264.0.0&type=5 "For the managed package runtime, Vlocity Actions are automatically generated URLS that launch Vlocity Omniscripts, Vlocity Cards components, web pages, or external applications. Actions are typically specific to a given object type, such as Account, Contact, Policy, or Asset."). Beginning with the Summer '19 release, Vlocity supports Salesforce's Lightning Web Components programming model with Vlocity Lightning Web Components. Vlocity Lightning Web Components include components, functionalities, and templates exclusive to LWC Cards. See [LWC Cards Considerations (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_lwc_cards_considerations.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model.") and [Configure Smart Actions on an LWC Card (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_smart_actions_on_an_lwc_card.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model."). 1. Open a card from the Vlocity Cards tab and click **Add Custom Action** in the card state. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cards_custom_action.png) 2. In the **Id** field, to distinguish the action from other actions in the card designer, enter a unique name. For example, ActiveAccountUpdate. 3. In the **Display Name** field, enter the name to display to the user. For example, **Update Account**. 4. In the **URL** field, enter the URL to which the action links. See [Target URL and URL Parameters (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_target_url_and_url_parameters.htm&release=264.0.0&type=5 "For the managed package runtime, to launch Vlocity Omniscripts, Vlocity Cards components, web pages, or external applications from a Vlocity Action, enter an Apex page, or a URL with parameters as the Target URL. LWC components, such as LWC Omniscripts, LWC Cards, and Flexcards, are not URL addressable and so can't be accessed directly from a URL and must embedded on a page."). 5. (Optional) Enter values for these properties: - **Vlocity Icon**: Select a Vlocity icon or an [SLDS icon](https://www.lightningdesignsystem.com/icons/) to display next to the action link. For a complete list of Vlocity Icons, go to the Vlocity Actions tab, open any action, and click the **Vlocity Icons** header label to reveal the list of icons. - **Open URL in**: Select **Current Window** or **New Tab/Window** to indicate where to open the URL. - Check the **Actions Options** checkbox to add **Custom Parameters**, **Conditions**, and to invoke an Apex class. See [Configuring Action Options (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_action_options.htm&release=264.0.0&type=5 "For the managed package runtime, configure additional options for Vlocity Actions, Omniscript Actions, and Custom Actions on a card state by enabling the Action Options feature."). # Adding a Custom Action to an LWC Card (Managed Package) For the managed package runtime, add actions directly on a card with Custom Actions. Custom Actions perform faster than standard Vlocity Actions but have fewer configuration options. For reusable actions with additional configuration options, see Vlocity Actions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Beginning with the Summer '19 release, Vlocity supports Salesforce's Lightning Web Components programming model with Vlocity Lightning Web Components. Vlocity Lightning Web Components include components, functionalities, and templates exclusive to LWC Cards. In the code samples below, replace NameSpace with your org's Vlocity namespace prefix. See [Viewing the Namespace and Package Version of Omnistudio for Managed Packages (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_viewing_the_namespace_and_version_of_the_omnistudio_vlocity_package.htm&release=264.0.0&type=5 "For the managed package runtime, to check the namespace and version of your Omnistudio for Managed Packages installation."). 1. Open a card from the Vlocity Cards tab and click **Add Custom Action** in the card state. ![Add Custom Action highlighted in image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cards_custom_action.png) 2. In the **Id** field, to distinguish the action from other actions in the card designer, enter a unique name. For example, ActiveAccountUpdate. 3. In the **Display Name** field, enter the name to display to the user. For example, **Update Account**. 4. In the **URL** field, enter the URL to which the action links. See [Target URL and URL Parameters (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_target_url_and_url_parameters.htm&release=264.0.0&type=5 "For the managed package runtime, to launch Vlocity Omniscripts, Vlocity Cards components, web pages, or external applications from a Vlocity Action, enter an Apex page, or a URL with parameters as the Target URL. LWC components, such as LWC Omniscripts, LWC Cards, and Flexcards, are not URL addressable and so can't be accessed directly from a URL and must embedded on a page."). 5. Beginning with Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20, in LWC Cards, Custom Actions support Salesforce PageReference Types that enable navigation within Lightning Experience, within Communities, or to an external web address. See [PageReference Types](https://developer.salesforce.com/docs/component-library/documentation/lwc/reference_page_reference_type). From the **Target Type** drop-down, select a page reference type: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/choose_target_type.png) **App**: Navigates to a standard or custom app available from the App Launcher in an org.

Property

Description

App Target

The app that you are navigating to. Pass either the appId or appDeveloperName to the appTarget.

Type

The standard or custom app available from the App Launcher.

Action Name

Enter the name of the action.

API Name

Enter the API name of the app.

RecordId

Enter the record Id of the record to navigate to.

**Login**: Navigate to a page for authentication into a community.

Property

Description

Target Actions

Enter a valid action name to call.

Target Parameters

Click Add Parameters to pass contextual data as key-value pairs. See Add Query Parameters.

**Component**: Navigates to a Lightning component or a Lightning Web Component, such as a card or an Omniscript.

Property

Description

Component Name

Enter the component name. For example, NameSpace__vlocityLWCOmniWrapper.

Target Parameters

Click Add Parameters to pass contextual data as key-value pairs. For example, enter parameters to get a specific Omniscript and set the layout type to Newport Designing System instead. In the first key-value pair, enter NameSpace__target as the key and NameSpace:GetAccountDetails as the value. In the second key-value pair, enter layout as the key and newport as the value.

**Knowledge Article**: Navigates to a Knowledge Article.

Property

Description

Article URL

Enter the article's urlName. For example, Client-Updates.

Target Article Type

Enter the API name of the Knowledge Article record. For example, client_updates.

Note
Note

In Lightning Knowledge, standard record types replace custom article types.

**Object**: Navigates to a standard or custom object.

Property

Description

Object API Name

Enter the API name of the standard Salesforce object or custom object. For example, Account for a standard object, or NameSpace_Application__c for a custom object.

Target Action

Enter action names to call. Valid values are home, list and new. See PageReference Types.

**Record**: Navigates to a record.

Property

Description

Object API Name

Enter the API name of the object, such as Account.

Target Action

Enter a valid action name to call. Valid values are clone, view, and edit. Communities do not support clone or edit.

Target Id

Enter the record ID.

**Record Relationship**: Navigates to a relationship on a particular record. Only related lists are supported.

Property

Description

Object API Name

Enter the API name of the object, such as Account.

Target Action

Enter the valid action name to call. A valid value is view.

Target Id

Enter the record ID that defines the relationship, such as an account's case record Id.

Target Relationship

Enter the API name of the related object, such as Case.

**Named Page**: Navigates to a standard Lightning page with a unique name.

Property

Description

Page Name

Enter the name of a standard page in Lightning Experience. For example, enter NameSpace__VlocityCardHome to navigate to the Vlocity Cards tab or home to navigate to the landing page of your org.

Target Parameters

Click Add Parameters to pass contextual data as key-value pairs. See Add Query Parameters.

**Navigation Item**: Navigates to a Custom Tab. Visualforce tabs, web tabs, Lightning Pages, and Lightning Component tabs are supported.

Property

Description

Custom Tab Name

Enter a custom tab name, such as NameSpace_Households for a Vlocity managed tab or Console_Home for an unmanaged tab.

Target Parameters

Click Add Parameters to pass contextual data as key-value pairs. See Add Query Parameters.

**Web Page**: Navigates to a web address.

Property

Description

URL

Enter an external web address, such as https://vlocity.com/.

**Community Named Page**: Navigates to a Community page.

Property

Description

Community Page Name

Enter a community page name. For example, contactsupport directs to the community url + '/contactsupport'.

Target Parameters

Click Add Parameters to pass contextual data as key-value pairs. See Add Query Parameters.

6. (Optional) Enter values for these properties: - **Vlocity Icon**: Select a Vlocity icon or an [SLDS icon](https://www.lightningdesignsystem.com/icons/) to display next to the action link. For a complete list of Vlocity Icons, go to the Vlocity Actions tab, open any action, and click the **Vlocity Icons** header label to reveal the list of icons. - **Open URL in**: Select **Current Window** or **New Tab/Window** to indicate where to open the URL. What’s next: To configure the action to invoke an Apex class, see [Configuring Action Options (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_action_options.htm&release=264.0.0&type=5 "For the managed package runtime, configure additional options for Vlocity Actions, Omniscript Actions, and Custom Actions on a card state by enabling the Action Options feature."). # Adding a Flyout to a Card State (Managed Package) For the managed package runtime, add a flyout to a card state to display additional information about the record displayed on the card when you click the card. For example, the base Vlocity flyout template `[flyout-grid-slds](https://help.salesforce.com/s/articleView?id=xcloud.os_base_ui_and_card_templates.htm&release=264.0.0&type=5 "For the managed package runtime, the following tables list the base templates that are available for use with Vlocity Cards. When editing a template, it’s best practice to clone the existing template first and to edit the cloned version.")` displays overflow actions from the parent card. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To add a flyout to a card state: 1. In your org, click the App Launcher, click Vlocity Cards, and click a version of a card to open the Card Designer. 2. In the **Flyouts** section of a card state, select a flyout layout template from the **Flyout Layout** dropdown. See [Creating a Flyout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_flyout.htm&release=264.0.0&type=5 "For the managed package runtime, create a flyout to display additional information about the record displayed on the card when you click the card. For example, a flyout can display information from long text strings that do not fit in the standard card field, or data from child records, such as open cases for an account, or additional actions."). Only active flyouts are visible in the list. 3. To display specific records, set the **Flyout Data Object**: ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note The parent context variable always gets passed into the flyout. See [Creating a Flyout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_flyout.htm&release=264.0.0&type=5 "For the managed package runtime, create a flyout to display additional information about the record displayed on the card when you click the card. For example, a flyout can display information from long text strings that do not fit in the standard card field, or data from child records, such as open cases for an account, or additional actions."). - **null**: leave the field blank to pass in the parent context of the card. - **$scope.obj.\[children\]**: where \[children\] represents an array inside the data source object such as PolicyLineItems for a Policy. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_flyout.png) # Adding a Line Break in an Omniscript To help separate other elements in a step, you can create a line break in the Omniscript wherever it exists. Elements placed after a line break start on the next line regardless of another element's width. Place the Line break element directly above the element that should begin on a new line. From the properties panel, add additional padding in pixels below the line break. A line separates the elements surrounding the Line Break element. # Adding a Local Omniscript Definition to Adobe Experience Manager (Managed Package) For the managed package runtime, to obtain a local definition of an Omniscript and store it in Adobe Experience Manager the Omniscript JSON must be saved and stored locally before being loaded into Adobe Experience Manager. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To obtain and store the local definition: 1. In Salesforce, switch to Salesforce Classic. 2. Open an Omniscript in the **Omniscript Designer**. 3. Click the page's URL and remove the relative path, leaving only the record id. For example, the highlighted text in this URL: `https://MyDomainName--c.vf.force.com/apex/example_namespace__omniscriptdesigner?id=a1L61000001e5TIEAY` would be removed, resulting in this URL: `https://MyDomainName--c.vf.force.com/a1L61000001e5TIEAY` . 4. Navigate to Omniscript record page by entering the new URL. 5. Click **Edit Layout**. 6. Add the Omniscript definition to the record page by clicking **Related Lists** in the Omniscript Layout editor, and dragging **Omniscript Definitions** into the **Related Lists** section, and click **Save**. 7. From the Omniscript record page, click the Omniscript definition listed under the Omniscript Definitions section. 8. From the Omniscript Compiled Definition Detail page, copy the JSON from the Content field. If the Content field is not available, add it by editing the page layout. 9. To add the JSON to your local computer create a file in a text editor with a JSON extension and paste in the copied content. The file name should be saved in the following format, replacing Type, SubType, and Language with your Omniscript's Type, SubType, and Language: `Type_SubType_Language.json` . The Type and SubType cannot include special characters or spaces. 10. To upload your Omniscript into Adobe Experience Manager: 1. In AEM, navigate to your Assets page by clicking the home button in the upper-left corner, then click Assets. 2. From the **Assets** page, click the folder titled oout, then click the folder title scripts. 3. Click **Create** and add the JSON file. If the Omniscript already exists in AEM, update the file by clicking the existing JSON file, then click Add Rendition, and select your new Omniscript JSON file. # Adding a Placeholder to a Card State (Managed Package) For the managed package runtime, add additional fields to a card state by adding placeholders created in the Template Designer. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To insert a placeholder into a card state: ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Your card template must support placeholders. For a list of Vlocity base card state templates that support placeholders, see [Base UI and Card Templates (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_base_ui_and_card_templates.htm&release=264.0.0&type=5 "For the managed package runtime, the following tables list the base templates that are available for use with Vlocity Cards. When editing a template, it’s best practice to clone the existing template first and to edit the cloned version."). To create a custom card state template that supports placeholders, see [Creating a Placeholder (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_placeholder.htm&release=264.0.0&type=5 "For the managed package runtime, create placeholders in the Template Designer to insert additional fields into card states in the Card Designer. For example, to add a unique title for escalated case cards, select the card-active-placeholders-slds card template, and enter Escalated for the value of the Title placeholder."). 1. Select a placeholder from the **Placeholders** dropdown, and click **Add**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/placeholders_card_state_add.png) 2. Enter values for these fields: - **Value**: Enter the value of the placeholder. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note By default, a list of data fields available from the card or card layout data source is visible when you click into this input field. However, any value is acceptable. - (Optional) **Placeholder type**: To update the field type, in the second input field, delete the default string, and choose from the available types in the picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_state_placeholder_types.png) - (Optional) **Label**: If your template displays a label, enter a label for the placeholder. For example: ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note By default, a list of data fields available from the card or card layout data source is visible when you click into this input field. However, any value is acceptable. For example, display an alert for high priority cases using a card state template that displays both the placeholder label and its value in the header of a card. Enter Priority as the label of the alert, and the context variable \['Priority'\] as the placeholder value. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/placeholders_card_state_enter_label_value.png) ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/placeholders_card_state_label_value.png) # Adding a State to a Card (Managed Package) For the managed package runtime, add card states to display data fields from the card or card layout data source, to present different interactions and layouts based on specified conditions, to add actions, and to add flyouts to display additional information about a record. For example, for cards displaying past due policy information, use a card state template, and display actions, fields, and flyouts different from those on cards displaying information for active policies in good standing. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). **Before you begin** - Create a card layout. See [Creating a Card Layout Using Card Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_card_layout_using_card_designer.htm&release=264.0.0&type=5 "For the managed package runtime, create a card layout to build visual components to your customer interactions by adding data, enabling actions, and using custom or Vlocity templates to determine the look and feel."). See [Creating an LWC Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components."). - Add a card. See [Adding a Card to a Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_card_to_a_layout.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model."). - Select a data source for the layout or a card on the layout. See [Configuring Data Sources for Cards Components (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_data_sources_for_cards_components.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source on a card, layout, or flyout to retrieve data from a Salesforce object or an external database. Display the returned data on cards in a layout or flyout."). 1. In your org, click the App Launcher, click Vlocity Cards, and click a version of a card layout to open the Card Designer. 2. In the Cards pane, click the black arrow on a card to expand it. 3. In the States pane, click **\+ Add State**. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_tip.png) Tip When adding multiple states with similar settings, click the **Clone State** icon to create a copy of the card state. The cloned card state appears below the original card state. 4. (Optional) To create a card state to display when there are no records available, select the **Blank Card State** checkbox. For example, if an Account or Contact does not have an insurance policy, create a state with a **card-open-slds** template to display a linked action to add a policy. 5. (Optional) Beginning with Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20, if your card is LWC enabled, select the **Custom LWC** checkbox to embed any Vlocity Lightning Web Component inside an LWC card state. See [Embedding a Vlocity Lightning Web Component Inside an LWC Card State (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_embedding_a_vlocity_lightning_web_component_inside_an_lwc_card_state.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20, LWC Cards support embedding any Vlocity Lightning Web Component, such as an LWC Omniscript, an LWC enabled card, or any other custom LWC, inside an LWC Card state and setting the attributes of the embedded component.") 6. In the **Name** field, enter the name of the state, such as Active Policy. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note The state **Name** is for internal use and does not appear on the card. 7. Select a card state template: - To select a card state template for an Angular card: - Select a template from the **Template** dropdown, such as card-active-slds. See [Base UI and Card Templates (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_base_ui_and_card_templates.htm&release=264.0.0&type=5 "For the managed package runtime, the following tables list the base templates that are available for use with Vlocity Cards. When editing a template, it’s best practice to clone the existing template first and to edit the cloned version."). - To select a card state template for an LWC enabled card: - Select a template from the **State LWC** dropdown, such as card-active-state. See [Base LWC Card and Layout Templates (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_base_lwc_card_and_layout_templates.htm&release=264.0.0&type=5 "For the managed package runtime, the following tables list the LWC card templates and LWC layout templates available in Vlocity Cards. When editing a template, it is best practice to make a copy of the existing template first and to edit the cloned version. For more information on creating and cloning LWC card templates, see Creating Custom LWC Card Templates."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If you want to display data fields, only actions, or both, choose the appropriate template. Some card templates display only actions, only data fields, and both. For example: - Select **card-active-slds** for an active card, such as a policy card that displays policy information and related actions. - Select **card-open-slds** for a Blank Card State, such as a policy card that only displays a Create New Policy action link for an Account or Contact without a policy. 8. (Optional) If the selected template has a placeholder, see [Adding a Placeholder to a Card State (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_placeholder_to_a_card_state.htm&release=264.0.0&type=5 "For the managed package runtime, add additional fields to a card state by adding placeholders created in the Template Designer."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Your card state template must have a placeholder merge field. See [Creating a Placeholder (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_placeholder.htm&release=264.0.0&type=5 "For the managed package runtime, create placeholders in the Template Designer to insert additional fields into card states in the Card Designer. For example, to add a unique title for escalated case cards, select the card-active-placeholders-slds card template, and enter Escalated for the value of the Title placeholder."). 9. To add data fields: 1. Select a field from the **Fields** dropdown, and click **Add**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Fields come from the layout data source unless the card has its own data source. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If you do not see a list of available data fields, click **View Data** in the Card pane or the Layout pane, whichever has the data source configured. 2. (Optional) To enter a field not listed in the dropdown, but that does exist in your data source, select **<>**, and click **Add** For example, if the current record used in the **Test Data Source Settings** does not have a Description in the JSON schema, but is available in the associated Omnistudio Data Mapper, the new field may not display in the Fields list. 3. (Optional) If you selected <> from the **Fields** dropdown, in the first column, enter the name of the field, such as \['Policy Description'\]. 4. To update the field type, in the middle column, delete the default string, and choose from the available types in the picklist. For example, if the field is a date, select date. 5. To update the visible label of the field, in the last column, enter a label. For example, if the field is \['Created Date'\], enter Policy Created. 10. (Optional) To add actions to the card state, see [Using Actions with Cards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_using_actions_with_cards.htm&release=264.0.0&type=5 "For the managed package runtime, cards use Vlocity Actions, OS Actions, and Custom Actions to launch procedures. For example, a card can launch an Omniscript, run an Apex class, redirect to a URL endpoint, and so on."). 11. (Optional) To add a flyout to display additional information about the record displayed on the card, see [Adding a Flyout to a Card State (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_flyout_to_a_card_state.htm&release=264.0.0&type=5 "For the managed package runtime, add a flyout to a card state to display additional information about the record displayed on the card when you click the card. For example, the base Vlocity flyout template flyout-grid-slds displays overflow actions from the parent card.") or [Creating an LWC Flyout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_flyout.htm&release=264.0.0&type=5 "For the managed package runtime, flyouts in Vlocity Cards provide additional information about the record displayed on the card when you click the flyout. For example, a flyout can display information from long text strings that do not fit in the standard card field, or data from child records, such as open cases for an account, or additional actions."). 12. (Optional) To set conditions that must be met for the card state to be visible, see [Adding Conditions to a Card State (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_conditions_to_a_card_state.htm&release=264.0.0&type=5 "For the managed package runtime, set conditions to determine which card state is displayed on a layout or to change appearance based on conditions. For example, on a card that displays policy information, one card state shows action links to update profile and account information for all policies, while another card state includes a renew action link if the policy is about to expire.") . 13. To preview the card, and check that card states are working as expected, click the **Preview** tab. 14. Click **Activate** on each card. What’s next: Preview your cards. See [Previewing a Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_previewing_a_layout.htm&release=264.0.0&type=5 "For the managed package runtime, preview a card layout to see how your cards will look once published to a Lightning or Community page."). - **[Adding Conditions to a Card State (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_conditions_to_a_card_state.htm&release=264.0.0&type=5)** For the managed package runtime, set conditions to determine which card state is displayed on a layout or to change appearance based on conditions. For example, on a card that displays policy information, one card state shows action links to update profile and account information for all policies, while another card state includes a renew action link if the policy is about to expire. # Adding a Vlocity Action to a Card (Managed Package) For the managed package runtime, add reusable actions to a card with Vlocity Actions to launch Vlocity Omniscripts, Vlocity Cards components, web pages, or external applications. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. You must first create a Vlocity Action to add to your card. See [Vlocity Actions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_vlocity_actions.htm&release=264.0.0&type=5 "For the managed package runtime, Vlocity Actions are automatically generated URLS that launch Vlocity Omniscripts, Vlocity Cards components, web pages, or external applications. Actions are typically specific to a given object type, such as Account, Contact, Policy, or Asset."). 2. In your org, click App Launcher, click Vlocity Cards, and select a card layout to open the Card Designer. 3. In the **Actions** section of a card's state, click into the **Salesforce Object Type** input field, and select an sObject from the picklist, such as Contact. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_action_object.png) 4. Click into the **Id Field for Actions**, and select a ContextId from the available list of fields returned from the data source, such as \['ContactId'\]. If **Blank Card State** is enabled: - Click the **Enable Id field for actions** checkbox to display the **Id Field for Actions** input field. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_state_blank_card_state_enable_id_for_actions.png) - By default, the ContextId is `params.id` when **Enable Id field for actions** is disabled. When enabled, in addition to entering a ContextId from a data source, use **Id Field for Actions** to set any page parameter, session variable, or `$root` variable to fetch actions. For example, use the `$root.vlocity` context variable, such as $root.vlocity.userContactId to create an action for a logged-in user. For a list of available context variables, see [Cards Context Variables (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, several variables are available across the framework to provide contexts to cards, data sources, flyouts, templates, and other components."). 5. In the **Actions** section of a card state, next to the **Add** button, select a reusable action from the picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_actions_picklist2.png) ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If you do not see the action you are looking for, confirm you have selected the appropriate sObject from the **Salesforce Object Type** dropdown. 6. (Optional) Check the **Actions Options** checkbox to add **Custom Parameters** and **Conditions**. # Adding a Vlocity Card Component to an AEM Page (Managed Package) For the managed package runtime, to add a Vlocity Card Component (VCC) to a page in Adobe Experience Manager (AEM) page: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Create a page in Adobe Experience Manager. The page does not contain any components yet. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/createaempage.png) 2. Open the Sidebar. Click the **Toggle Sidebar** button in the upper-left hand corner. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/togglesidebaraem.png) 3. Click the **Add Component** button ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/addcomponentaem.png) and type the keyword card in the Search box. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/aemcomponentsearch.png) 4. Drag the Vlocity Card component onto the page. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/dragcardaem.png) 5. Double click the component to display the Card Component that you added. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocitycardsaemoutput.png) # Adding a Vlocity Card to a Lightning or Community Page (Managed Package) For the managed package runtime, configure a Vlocity Cards Lightning component to render a Card Layout on a custom Lightning page or a Community page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note To configure a Vlocity LWC component to render an LWC enabled Card Layout, see [Adding an LWC Card to a Lightning or Community Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_an_lwc_card_to_a_lightning_or_community_page.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model."). To configure a Vlocity Cards Lightning component on a custom Lightning page: 1. In your org, go to Setup > Lightning App Builder. Click the **New** button to create a new app. Or, choose an existing app to open by clicking **Edit** next to its name. For information on the Lightning App Builder, see [Lightning App Builder](https://help.salesforce.com/articleView?id=lightning_app_builder_overview.htm&language=en_US). 2. From the Lightning components pane, drag the **Vlocity Cards** component from the list of Custom - Managed components into the canvas area. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_cards_lightning_component_to_canvas2.png) 3. In the properties pane, select a Card Layout in the **Layout Name** dropdown list. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_cards_lightning_component_layoutname.png) 4. (Optional) Enter values for these properties: - **Disable Cache**: Select this checkbox to prevent the Layout, Cards and Templates from being read from the offline cache. - **Max Height(px)**: To restrict the height and make the component scrollable, add a height in pixels, such as 600. - **Custom Visualforce Page**: To override the default Visualforce page used to render Cards, select a custom Visualforce page from the dropdown list. - **Background**: To override the default #FFFFFF background color, enter a hex color code such as #000000. - **Theme**: To set the CSS style sheet, select **slds** or **newport** from the dropdown list. - **Set Component Visibility**: To control when a component appears on a Lightning page, see [Dynamic Lightning Pages](https://help.salesforce.com/articleView?id=lightning_page_components_visibility.htm&type=5&language=en_US). - **[Configure a Vlocity Card on a Community Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_vlocity_card_to_a_lightning_or_community_page_1.htm&release=264.0.0&type=5)** For the managed package runtime, configure a Vlocity Cards Lightning component on a Community page. # Adding a Zone to a Card Layout (Managed Package) For the managed package runtime, add cards to a zone or nest card layouts inside a zone to arrange cards into sections. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To add a zone to a card layout: 1. In your org, click App Launcher, click Vlocity Cards, and click a version of a card layout to open the Card Designer. 2. In the Layout pane, select a template with zones. 3. Click the black arrow in the **Zones** pane to expand it, and click the black arrow of a zone to expand. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/zones_add_zone_to_card.png) 4. (Optional) Edit the zone **Label**. 5. To add a card to a zone, see [Adding a Card to a Zone (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_card_to_a_zone.htm&release=264.0.0&type=5 "For the managed package runtime, to add a card to a zone:"). 6. To add a card layout to a zone, see [Adding a Card Layout to a Zone (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_card_layout_to_a_zone.htm&release=264.0.0&type=5 "For the managed package runtime, to embed a card layout inside a zone:"). 7. Click **Activate** on the Layout pane. - **[Adding a Card to a Zone (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_card_to_a_zone.htm&release=264.0.0&type=5)** For the managed package runtime, to add a card to a zone: - **[Adding a Card Layout to a Zone (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_card_layout_to_a_zone.htm&release=264.0.0&type=5)** For the managed package runtime, to embed a card layout inside a zone: # Adding an LWC Card to a Lightning or Community Page (Managed Package) For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). After [enabling and activating your LWC Card](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components."), add your card to a Lightning Page or Community Page. 1. To add an LWC Card to a Lightning Page, perform the following tasks: 1. In your org, go to Setup > Lightning App Builder and click **Edit** for an existing Lightning app to open the Lightning App Builder. 2. From the Lightning Components pane, find your generated Card Lightning web component from the list of **Custom** components and drag it to the canvas area. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important By default, active layouts are visible for all page types in the Lightning App Builder. If you don't see your LWC Card, confirm that it is active and available to your Custom, Home, or Record page app. In your Card, check that the correct **Target Name** is checked in your **Show XML Interface** settings. See [Configuring the Metadata Values for an LWC Card (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_the_metadata_values_for_an_lwc_card.htm&release=264.0.0&type=5 "For the managed package runtime, configure the metadata values for an LWC card from a visual editor in the card layout instead of updating the configuration file manually."). 3. (Optional) In the properties pane, set **Component Visibility**. See [Dynamic Lightning Pages](https://help.salesforce.com/articleView?id=lightning_page_components_visibility.htm&type=5&language=en_US). 4. Save and Activate your app. 2. To add an LWC Card to a Community Page, perform the following tasks: 1. In your org, go to Service Setup > All Communities and click **Builder** for an existing Community to open the Community Builder. 2. Click the blue and white lightning bolt icon on the left to open the Components pane. 3. From the list of **Custom Components** in the Components pane, find the name of your generated Card Lightning web component and drag the Card to the canvas area. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If you don't see your LWC Card, confirm that it is active and available to the Community Builder. In your Card, check that the appropriate **Target Name** is checked in your **Show XML Interface** setting. See the Show XML Interface step in [Creating an LWC Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components."). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If your LWC Card uses the `{{params.id}}` context variable in an Input Map to pass a context Id to an Apex Remote, Omnistudio Data Mapper, or Integration Procedure data source, to view the record data on the LWC Card on your Community page, you must create and configure a recordId property. See [Accessing the Context Id of an LWC Card on a Community Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_accessing_the_context_id_of_an_lwc_card_on_a_community_page.htm&release=264.0.0&type=5 "For the managed package runtime, on a Community page, to view record data on an LWC Card that uses the {{params.id}} context variable in an Input Map to pass a context Id to an Apex Remote, Omnistudio Data Mapper, or Integration Procedure data source, you must add and configure a recordId property. Add the recordId property in your LWC Card's configuration file, then configure the property on the Community page."). 4. (Optional) In the properties pane, set **Component Visibility**. See [Dynamic Lightning Pages](https://help.salesforce.com/articleView?id=lightning_page_components_visibility.htm&type=5&language=en_US). 5. Preview or Publish your community. # Adding Cards to a Lightning or Community Page (Managed Package) For the managed package runtime, launch Vlocity Cards from Lightning and Community pages by adding Card Layouts with the Lightning App Builder and the Community Builder. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Adding a Vlocity Card to a Lightning or Community Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_vlocity_card_to_a_lightning_or_community_page.htm&release=264.0.0&type=5)** For the managed package runtime, configure a Vlocity Cards Lightning component to render a Card Layout on a custom Lightning page or a Community page. - **[Adding Profile Attributes to a Lightning (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_profile_attributes_to_a_lightning_or_community_page.htm&release=264.0.0&type=5)** For the managed package runtime, the Vlocity Lightning Profiler component adds profile attributes related to a record to a custom Lightning page. - **[Add a Vlocity Lightning Profiler to a Community (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_profile_attributes_to_a_lightning_or_community_page_1.htm&release=264.0.0&type=5)** For the managed package runtime, the Vlocity Lightning Profiler component adds profile attributes related to a record to a custom Lightning page - **[Reloading a Card Layout After Updating Profile Attributes (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_reloading_a_card_layout_after_updating_profile_attributes.htm&release=264.0.0&type=5)** For the managed package runtime, to reload a Card Layout after updating profile attributes, configure a Vlocity Cards Component Events component. Enable a Vlocity Cards Component Events component on a Lightning Page through the Lightning App Builder and on a Community Page through the Community Builder. - **[Add a Components Event Component to a Community (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_reloading_a_card_layout_after_updating_profile_attributes_1.htm&release=264.0.0&type=5)** For the managed package runtime, add a Vlocity Cards Component Events component to a Community page. # Adding Conditions to a Card State (Managed Package) For the managed package runtime, set conditions to determine which card state is displayed on a layout or to change appearance based on conditions. For example, on a card that displays policy information, one card state shows action links to update profile and account information for all policies, while another card state includes a renew action link if the policy is about to expire. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). If a card has multiple states, it must have logical conditions that determine which state is displayed and when. For example, a card has an active state if there is data to display, and a blank or open state if there is no data and limited actions. To add a condition to a card state: 1. In your org, click the App Launcher, click Vlocity Cards, and click a version of a card to open the Card Designer. 2. In the **Conditions** section of a card state, click **\+ Add Condition**. 3. To create basic conditions: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_state_condition_create.png) 1. Select **AND** or **OR** from the dropdown preceding each condition: - Select **AND** if all conditions must be met. - For example, the policy status is purchased AND the expiration date is less than 31 days. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If there is only one condition, that condition must be met to display cards. - Select **OR** if any condition can be met. - For example, the policy status is closed OR the expiration date is less than 31 days. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If there is only one condition, that condition does not need to be met to display cards. 2. Click into the first input field, from the list of data fields, select a data field to filter, such as \['DaysToExpiration'\]. 3. Select the operator from the dropdown in the middle column, such as <. 4. In the last input field, enter the value to filter, such as 31. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important In an [LWC enabled card](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components."), when adding `params` and `$root.vlocity` [context variables](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, several variables are available across the framework to provide contexts to cards, data sources, flyouts, templates, and other components.") as values to check against in a condition, enclose them in double curly braces. For example, {{params.id}} and {{$root.vlocity.userAccountId}}. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/state_conditions_lwc_enabled_use_curly_braces_for_context_variables.png) 4. To build nested conditions: 1. Click **\+ Add Group** after creating a condition, such as DaysToExpiration < 31. 2. Click **\+ Add Condition** and enter values for all fields for each condition. You must create at least two conditions to form a group. 3. Select **AND** or **OR** from the dropdown between conditions. For example, use the conditions feature to build the conditional expression DaysToExpiration < 31 AND ( PolicyType = Universal Life OR PolicyType = Universal Variable Life) to filter for policies about to expire, and whose policy type is either Universal Life or Universal Variable Life. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_state_condition_add_group.png) # Adding Custom Actions (Managed Package) For the managed package runtime, add custom actions to include additional functionality in your Edit Block. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To add a custom action: 1. Add an Action into the Edit Block. 2. Name the element. Actions in the Edit Block will appear in the dropdown beneath the default actions by default. 3. (Optional)To have an Action replace the default New, Edit, or Delete Actions in the User Interface, name the Action element, and append the action type.

Replace Action

Example Element Name

New

AddUserNew

Edit

ChangeAddressEdit

Delete

RemoveAccountDelete

4. Add a **Label** to the Action. 5. Configure the Action. # Adding Ecommerce Data to the Example Omniscript for OmniAnalytics Google Tag Manager Ecommerce requires specific kinds of data. You must add this data to the Messaging Framework Omniscript properties. When the Omniscript runs, it sends this data to Google Analytics. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Flexcards send a default payload to the Google Tag Manager. For details, see [Create Flexcard Event Types](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_create_flexcard_ext_event_types_std.htm&release=264.0.0&type=5 "External Tracking Event Types arrange Flexcard data in the format that a third-party analytics provider expects. The steps in this task are for Google Analytics Ecommerce."). The example Omniscript and Flexcard communicate with Google Analytics 4 by using the [Google Tag Manager Ecommerce APIs](https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtm). For simplicity, and unlike a production Omniscript, the example Omniscript uses hard-coded data. After you add Google Tag Manager data to the example Omniscript, return to the parent workflow and perform the [Setting Up Third-Party Tracking and Event Types](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_workflow_configure_external_std.htm&release=264.0.0&type=5 "An External Tracking Definition specifies a third-party analytics account and tag manager that the OmniAnalytics tracking data is sent to. External Tracking Event Types specify data formats for specific events."). - **[Add Google Tag Manager Data to the Example Omniscript Setup](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_add_gtm_data_omniscript_setup_std.htm&release=264.0.0&type=5)** The Messaging Framework of the Script Setup stores the complete list of product impressions that’s sent to Google Analytics Ecommerce and the Google Tag Manager. - **[Add Google Tag Manager Data to the Example Omniscript Steps](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_add_gtm_data_omniscript_steps_std.htm&release=264.0.0&type=5)** The Messaging Framework of each step stores the product data that’s sent to Google Analytics Ecommerce and the Google Tag Manager. # Adding Elements to a Step (Managed Package) For the managed package runtime, after creating the structure of an Omniscript, drag the desired elements into the structure. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). You must nest input elements in [Steps](https://help.salesforce.com/s/articleView?id=xcloud.os_steps.htm&release=264.0.0&type=5 "For the managed package runtime, each Step element in an Omniscript presents a page to the user that prompts for input or displays information. For navigation, all Steps except the first have a Next button, and all except the last have a Previous button.") or [Blocks](https://help.salesforce.com/s/articleView?id=xcloud.os_block.htm&release=264.0.0&type=5 "For the managed package runtime, combine logical groups of elements in an Omniscript Step using a Block element."). Action elements render as a button when placed in a Step or Block, and run remotely if placed between steps. For more details on action elements, see [Omniscript Action Elements Reference.](https://help.salesforce.com/s/articleView?id=xcloud.os_common_action_element_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Action elements can be either rendered as a button when placed in a Step or Block or run remotely if placed between steps. In either case, you can specify a redirect page, where the user can proceed to the next Step or Action, or if a button, back to the source Step.") To avoid performance issues, limit the number of elements in each block or step to less than 50. To add an element to an Omniscript: 1. Drag an element from the **Available Components** section to the script structure. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/add_element_to_omniscript_designer.gif) 2. Edit the element properties. Properties vary depending on the element type. Refer to [Common Omniscript Element Properties Definitions](https://help.salesforce.com/s/articleView?id=xcloud.os_common_omniscript_element_properties_definitions.htm&release=264.0.0&type=5 "For the managed package runtime, each element also includes an extensible Property set that's specific to the type of element. Use the Properties pane on the Designer to edit these properties. Some common element properties aren’t available in certain elements.") for a list of the most common properties. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Each row on an Omniscript can have a total Control Width of 12. For example, three elements that reside on the same row can each have a Control Width of 4, or two elements can have a Control Width of 3 and one a Control Width of 6. # Adding Global Actions (Managed Package) For the managed package runtime, run Actions on the entire JSON for the Edit Block by adding global actions. Global actions display outside of the Edit Block entries. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To add a Global Action: 1. Add an Action into the Edit Block. 2. Name the element and append Global onto the Element Name. For example, to make an action with the element name DeleteUsers a global Action, the Element Name must be DeleteUsersGlobal. 3. Add a label to the Action. 4. Configure the Action. # Adding Omniscript Elements to an Upgraded Org (Managed Package) For the managed package runtime, to use new elements after upgrading an org, add Omniscript elements to the Omniscript Element Type picklist. This article describes the process of adding elements and provides a list of the added elements by release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Click **Setup**. 2. In the Quick Find/Search box enter Object, and click **Object Manager**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/os_object_manager.png) 3. Click **Vlocity Omniscript Element**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/os_omniscript_element.png) 4. Click **Fields & Relationships**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/os_fields_and_relationships.png) 5. Click the **Type** Picklist field. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/os_type_picklist.png) 6. Scroll down to the **Values** section, and click **New**. ![The Values section lists the existing picklist values, and the New button in that section lets you create new picklist values.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/omniscript_element_new_value.png) 7. Enter the new Element name to the picklist, and click **Save**. # Adding Profile Attributes to a Lightning (Managed Package) For the managed package runtime, the Vlocity Lightning Profiler component adds profile attributes related to a record to a custom Lightning page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To add a Vlocity Lightning Profiler component to a custom Lightning page: 1. In your org, go to Setup > Lighting App Builder. Click the **New** button to create a new app. Or, choose an existing app to open by clicking **Edit** next to its name. For information on the Lightning App Builder, see [Lightning App Builder](https://help.salesforce.com/articleView?id=lightning_app_builder_overview.htm&language=en_US). 2. In the properties pane, drag the **Vlocity Lightning Profiler** component from the list of Custom - Managed components into the canvas area. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_profiler_app_builder_drag.png) 3. In the **Profile Title** field, enter a visible title for the component. 4. If the Vlocity Profiler component is not used on a record page, enter a specific sObject ID in the **Context ID** field. 5. (Optional) Enter the values for these properties: - **Take Context ID from field on current record**: To enable the Profiler to get attributes based on the relationship field, if present, enter the relationship field name. For example AccountId. - **Use Category Color Codes**: To enable category color codes, select this checkbox. To learn how to set category colors, see [Create New Profile Attribute Categories (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_new_profile_attribute_categories.htm&release=264.0.0&type=5 "For the managed package runtime, the type of attribute is defined at the Attribute Category level. Attributes Categories must created before you can add attributes to the category. Typically, Profile Attributes are used with Vlocity Intelligence and can be automatically assigned (see )."). 6. Save and Activate the app to view the profile attributes on a record page. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_profiler_app_builder_lightning_page.png) # Adding Properties to a Target Name (Managed Package) For the managed package runtime, to add a property to a **Target Name**: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Click the pencil icon. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/target_name_pencil_icon.png) 2. Click the **+** icon next to **Add Properties**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/add_properties_icon.png) 3. In the **Select Property Type (Required)** field, to specify the property data type, select **Integer**, **String**, or **Boolean**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/show_xml_interface_property_type.png) 4. In the **Attributes Added** section, enter a variable name for the **name** attribute, such as debug. The **name** attribute is required for each property. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/show_xml_interface_name_attribute.png) 5. Select additional attributes to add to your property from the **Attributes** dropdown list. See [Configuration File Tags](https://developer.salesforce.com/docs/component-library/documentation/lwc/lwc.reference_configuration_tags) for descriptions of each available attribute. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/show_xml_interface_attributes_dropdown.png) 6. Enter a value for each additional attribute. 7. (Optional) If your **Target Name** is RecordPage, click into the **Object** field to select an object from the picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/add_properties_recordpage_target_name.png) 8. Click **Save**. - **[Edit or Delete a Target Name Property (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_properties_to_a_target_name_1.htm&release=264.0.0&type=5)** For the managed package runtime, edit or delete an existing property for a Target Name. - **[Remove an Attribute from a Target Name Property (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_properties_to_a_target_name_2.htm&release=264.0.0&type=5)** For the managed package runtime, remove an attribute from an existing property of a Target Name. # Additional Command Line Options (Managed Package) For the managed package runtime, the job file additionally supports some build-based options and the options available to the data packs API. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Most options can also be passed in as command line options with `-optionName or --optionName` for boolean values. ## Job Options Pass job options through the job file. | Job Option | Description | Type | Default | | --- | --- | --- | --- | | activate | Activate everything after it’s imported / deployed. | Boolean | true | | addSourceKeys | Generate Global / Unique Keys for Records that are missing this data. Improves the ability to import exported data. | Boolean | false | | autoFixPicklists | Automatically propagates metadata changes across orgs for managed package fields and eliminates errors due to missing metadata. Doesn’t work for Managed Global Value Sets - Like CurrencyCode field. | Boolean | true | | autoRetryErrors | Retry after a deployment. This option checks whether any errors that are due to incorrectly resolved references can be fixed. | Boolean | false | | autoUpdateSettings | Automatically run packUpdateSettings before deployment. | Boolean | true | | buildFile | The target output file from packBuildFile. | String | AllDataPacks.json | | defaultMaxParallel | The number of parallel processes to use for export. | Integer | 1 | | compileOnBuild | Compiled files aren’t generated as part of this export. This option applies primarily to SASS files. | Boolean | true | | continueAfterError | Don't end the job on error. | Boolean | false | | delete | Delete the VlocityDataPack\_\_c file on finish. | Boolean | true | | exportPacksMaxSize | Split data pack export after it reaches this threshold. | Integer | null | | expansionPath | Secondary path after projectPath to expand the data for the job. | String |   | | gitCheck | Use Git hashes to determine changes and greatly speed up deployment. | Boolean | false | | gitCheckKey | Enable checking what the latest git hash was before deploying to the target org. | String | null | | ignoreAllErrors | Ignore errors while running a job. Not recommended. | Boolean | false | | manifestOnly | If true, an export job saves only items specifically listed in the manifest. | Boolean | false | | maxDepth | The max distance of parent or children relationships from initial data being exported. | Integer | \-1 (All) | | maximumDeployCount | The maximum number of items in a single deployment. Setting value to 1 and using preStepApex can allow deployments for a single data pack at a time. | Integer | 1000 | | processMultiple | When false, each export or import runs individually. | Boolean | true | | reactivateOmniScriptsWhenEmbeddedTemplateFound | Run activate for ALL Omniscripts. This option requires that you’re logged in via SFDX authentication. | Boolean | false | | supportForceDeploy | Attempt to deploy data packs which have not had all their parents successfully deployed. | Boolean | false | | supportHeadersOnly | Attempt to deploy a subset of data for certain data pack types to prevent blocking due to Parent failures. | Boolean | true | | useAllRelationships | Determines whether or not to store the \_AllRelations.json file which may not generate consistently enough for version control. Salesforce recommends setting to false. | Boolean | true | | useVlocityTriggers | Turn on / off Vlocity's AllTriggers custom setting during the deployment. | Boolean | true | | disableVlocityTriggers | Turn off Vlocity's AllTriggers custom setting during the deployment. | Boolean | false | | ignoreLWCActivationOS | Don’t compile and deploy LWC Omniscripts. | Boolean | false | | ignoreLWCActivationCards | Don’t compile and deploy LWC Cards. | Boolean | false | | lwcCompilerNamespace | Overrides the namespace of the installed managed package. Useful when using a developer org. Options: vlocity-cme, vlocity-ins, vlocity-ps. | String |   | | lwcCompilerVersion | Overrides the version of the installed managed package. Useful when using a developer org. Example: 900.469 | String |   | | npmRepository | Overrides the npm repository where the LWC compiler is hosted. | String |   | | npmAuthKey | Your customer NPM auth key used to install the LWC compiler package. | String |   | ## Build Options Pass build options at the command line. | Build Option | Description | Type | Default | | --- | --- | --- | --- | | apex | Apex Class to run with the runApex command. | String | none | | folder | Path to folder containing Apex Files when using the runApex command. | String | none | | javascript | Path to javascript file to run when using the runJavaScript command. | String | none | | json | Output the result of the Job as JSON only. Used in CLI API applications. | Boolean | false | | json-pretty | Output the result of the Job as more readable JSON Only. Used in CLI API applications. | Boolean | false | | job | Path to job file. | String | none | | key | Data pack key to export or deploy. | String | none | | manifest | JSON of VlocityDataPackKeys to be processed. | JSON | none | | simpleLogging | Remove the colors from console output. Good for Automation servers. | Boolean | false | | nojob | Run the command without specifying a job file. Default settings are used. | Boolean | false | | propertyfile | Path to property file that can also contain any valid options. | String | build.properties | | query | SOQL Query used for `packExportSingle` command. | String | none | | queryAll | Query all default types. Overrides any project settings. | Boolean | false | | quiet | Don't log any output. | Boolean | false | | sandbox | Set sf.loginUrl to https://test.salesforce.com. | Boolean | false | | sfdx.username | Use Salesforce DX Authorized Username. | String | none | | sf.accessToken | Salesforce Access Token when using OAuth info. | String | none | | sf.instanceUrl | Salesforce Instance URL when using OAuth info. | String | none | | sf.loginUrl | Salesforce Login URL when `sf.username` + `sf.password`. | String |   | | sf.password | Salesforce password + security token when using `sf.username`. | String | none | | sf.sessionId | Salesforce Session Id when using OAuth info. | String | none | | sf.username | Salesforce username when using `sf.password`. | String | none | | type | Data pack type used for `packExportSingle` command. | String | none | | verbose | Show additional logging statements. | Boolean | false | # Additional Configurations for Your Online Store Additional configurations enable you to enhance the functionality and user experience of your online store. ### Required Editions
Available in: Lightning Experience
Available in: Starter and Pro Suite Editions.
User Permissions Needed
To set up or edit an online store: Commerce Admin or Commerce Starter App
The table provides information about additional configurations to enhance your online store's performance and user experience.
Additional configurations to enhance your store's performance and user experience.
Configuration resource

Add more products to your store by using a CSV File.

Import Data Globally Using a CSV File

Import product images and attachments for your store.

Image Import for Commerce Stores

Create a catalog of products that you offer through your store.

Create a Catalog and Assign it to a Store

Create product categories to help make products easier to discover.

Create Product Categories and Subcategories

Add products to product category.

Add Products to Categories

Add promotions to your store.

Configure a Promotion

Configure store search to help shoppers find what they’re looking for.

Store Search

Improve search engine ranking and awareness to drive more traffic to your store.

Search Engine Optimization (SEO) for Commerce

Create an internal user profile for users who help manage your store.

Configure Internal Users for Commerce

# Additional Functions for Formulas In Salesforce Data Pipelines, these versatile functions can be used with the data types text, number, date\_only, and datetime to build logic into your formulas. ## Additional Functions for Formulas When entering a formula use the API name of the column in the expression, not the label. The parameters section is surrounded by parentheses. The `case` function handles if/then logic for formulas. This function can be used with TEXT, NUMBER, DATE\_ONLY, and DATETIME data. The syntax is: ``` case primary_expr(optional) when condition then result_expr ... else default_expr end ``` The syntax includes these keywords and parameters: - **case** and **end** keywords begin and close the expression - **when** and **then** keywords define a conditional statement. You can include one or more conditional statements. - condition is a logical expression that can be evaluated to true or false. Construct this expression with any values, identifiers, logical operator, comparison operator, or scalar functions (including date and math functions) supported by EA SQL. Example: ``` eg xInt < 5 or price > 1000 and price <= 2000 ``` - result\_expr is an expression that can be evaluated by the EA SQL engine. You can include values, identifiers, and scalar functions, including date and math functions. The expression can evaluate to any data type, but the data type must be consistent among all conditional expressions. So if result\_expr is of NUMERIC type, then result\_expr2 … result\_exprN must also be of NUMERIC type. Example: ``` abs(price) ``` - else allows a default expression to be specified. The else statement must follow the conditional when/then statement. There can be only one else statement. This parameter is optional. - default\_expr is an expression that can be evaluated by the EA SQL engine. The outcome if the condition expression evaluates as false. Here’s a `case` function example. Type is a field in the dataset. “New Business” and “Existing Business” are values of the Type field. ``` case when Type = 'New Business' then 'NB' when Type = 'Existing Business' then 'EB' else Type end ``` The `coalesce` function returns the first non-null value in an expression. Otherwise, returns null. This function can be used with TEXT, NUMBER, DATE\_ONLY, and DATETIME data. The syntax is: `coalesce(expr1,expr2)` The syntax includes these parameters: - expr1 is the first field or text string to search for a non-null value - expr2is the next field or text string to search for a non-null value # Additional OmniAnalytics Customizations (Managed Package) For the managed package runtime, additional OmniAnalytics customizations include inclusion rules for Vlocity Web Tracking Event Types, configuration of other third-party analytics vendors aside from Google Analytics, and using a static resource instead of a Visualforce page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Create an Inclusion Rule for an Event Type (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_inclusion_rule_for_an_event_type.htm&release=264.0.0&type=5)** For the managed package runtime, a Vlocity Web Tracking Event Type can have an **Inclusion Rule**, which specifies a true-or-false condition that determines whether an event is sent to a third-party analytics vendor such as Google Analytics. - **[Workflow for Configuring OmniAnalytics for a Third-Party Analytics Vendor (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_configuring_omnianalytics_for_a_third_party_analytics_vendor.htm&release=264.0.0&type=5)** For the managed package runtime, Vlocity OmniAnalytics can support other third-party analytics vendors aside from Google Analytics. - **[Workflow for Using a Static Resource Instead of a Visualforce Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_using_a_static_resource_instead_of_a_visualforce_page.htm&release=264.0.0&type=5)** For the managed package runtime, the code that a Vlocity Web Tracking Configuration uses to communicate with a third-party analytics vendor can reside in either a Visualforce page or a static resource. If you use the Safari browser, your Vlocity Web Tracking Configuration must reference a static resource. # Additional Query Parameters Salesforce Mobile app URL schemes support additional, optional query parameters. These parameters let you create links for users who belong to multiple organizations or Experience Cloud sites such that they can be correctly redirected. The additional query parameters append to the Salesforce URL scheme format: ``` ://sObject//? ``` ## Query Parameters Query parameter values are required for an optimal experience when navigating users via URL schemes. The more query parameters are appended to URL schemes, the more accurately users can be redirected. If no query parameters are appended to URL schemes, the likelihood of users getting misdirected increases. - `s1oid=`: The `orgID` is the organization ID of the organization that contains the content. If users are logged in to the same org ID, they are directed to the content. If users aren’t logged in to the same org ID, they are redirected to the login screen. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note If users aren’t logged in to the same org ID on Android, they aren't redirected to the login screen. - `s1nid=`: The `networkID` is the network ID for the Experience Cloud site that contains the content. The network ID is null if the site is internal or no site is specified. Users are directed to the correct site after the org ID is validated. - `s1uid=`: The `userID` is the user ID of the user who has access to the data. If a user with a different `userID` than the one defined in the query parameter has access to the same org or site, that user gets redirected to the same data. - `iosoru=`: The `URL` is the address where the Salesforce mobile app prompts to redirect users if it can’t direct them to the intended URL scheme. ## View a Record in a Specific Organization Use this URL scheme to navigate to a specific org and view a record detail page. ``` ://sObject//view?s1oid= ``` This example navigates to an Account detail page in a specific org: ``` salesforce1://sObject/001D000000Jwj9v/view?s1oid=00DT00000000ABC ``` ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note If the user isn’t logged in to the specified org, the user is redirected to the login screen. The user must have permission to view the record. ## Edit a Record in a Specific Organization and Experience Cloud Site Use this URL scheme to navigate to a specific org, Experience Cloud site, and edit page for a record. ``` ://sObject//edit?s1oid=&s1nid= ``` This example navigates to an Account detail page: ``` salesforce1://sObject/001D000000Jwj9v/view?s1oid=00DT00000000ABC&s1nid=00UT00000000XYZ ``` ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note If the user isn’t logged in to the specified org or site, the user is redirected to the login screen. The user must have permission to edit the record. # Additional Salesforce Security Customizations Salesforce offers other security products and features that address more complex security and compliance requirements. Use these features for more advanced or stringent data handling and residency, monitoring, and security scenarios. These solutions, some available at an additional cost, work in partnership with the security tools available to every admin. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Edition and license requirements vary by feature. For more specific edition requirements, see each feature's documentation.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note Each of these products and features has its own detailed documentation. When you're ready to get started with any of them, see [Configure Specialized Security Solutions](https://help.salesforce.com/s/articleView?id=xcloud.security_overview.htm&type=5&language=en_US) in Salesforce Help. ## Activations [Activations](https://help.salesforce.com/s/articleView?id=xcloud.security_activation_about.htm&type=5&language=en_US) tracks information about the devices and browsers from which your users verify their identity. When a user logs in from a new device or browser, Salesforce prompts them to confirm their identity. Activations add a layer of security beyond their basic username and password usage. Review verified login IP addresses and client browsers on the Activations page in Setup. ## Salesforce Shield [Salesforce Shield](https://help.salesforce.com/s/articleView?id=xcloud.shield.htm&type=5&language=en_US) is a suite of four products that builds enterprise-grade security, compliance, and governance into your Salesforce apps. Shield products work alongside the rest of Salesforce and are available through Setup or the Shield app. The Shield app is a central hub for your Shield services and includes shortcuts to your configurations in Setup. Setup assistants guide you through each product and insights such as usage metrics, data trends, and job statuses. - [Data Detect](https://help.salesforce.com/s/articleView?id=xcloud.einstein_data_detect.htm&type=5&language=en_US) finds and classifies sensitive data across your org and Data 360 by using native Salesforce technology. Because your data never leaves the platform, there's no need for third-party services or data transfers. Align data with sensitivity levels and categories, then act to protect what matters most. - [Event Monitoring](https://help.salesforce.com/s/articleView?id=xcloud.real_time_event_monitoring_overview.htm&type=5&language=en_US) tracks detailed performance, security, and usage data across your Salesforce apps. See who's accessing critical business data, when, and from where, then build policies that proactively keep data secure. Machine learning surfaces information about potential threats. Bring Event Monitoring data into tools such as CRM Analytics, Splunk, or New Relic for deeper analysis. Then use Platform Event-Triggered Flows and Transaction Security Policies to define and monitor security policy enforcement in near real-time. - [Field Audit Trail](https://help.salesforce.com/s/articleView?id=xcloud.field_audit_trail.htm&type=5&language=en_US) preserves the state and value of your data at any point in time. Control your data retention strategy for regulatory compliance, internal auditing, and forensic investigations. Building on top of Field History Tracking, Field Audit Trail expands how much data you can retain. - [Shield Platform Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_overview.htm&type=5&language=en_US) natively encrypts data at rest, including individual fields, the transactional database, and Data 360, with data store-specific keys. You can generate and store key material outside Salesforce for full control over your key lifecycle. When you encrypt your most sensitive data, you manage your security and compliance posture and address privacy policies, regulatory requirements, and contractual obligations. ## Security Center [Security Center](https://help.salesforce.com/s/articleView?id=xcloud.security_center.htm&type=5&language=en_US) shows your security, privacy, and governance posture across all your Salesforce orgs and tenants. It surfaces data across more security metrics data than Security Center Essentials. See health check scores, access settings, and user and login metrics and trends. Use Security Center to spot risks faster, shorten security review cycles, and respond to suspicious activity before it becomes a problem. Security Center with Agentforce streamlines and organizes incident and security data so that you can track and respond to incidents faster with guided remediations. ## Private Connect [Private Connect](https://help.salesforce.com/s/articleView?id=xcloud.private_connect_overview.htm&type=5&language=en_US) creates a fully managed, private network connection between your Salesforce org and your Amazon Web Services (AWS) Virtual Private Cloud (VPC). Route cross-cloud traffic through this private connection instead of the public internet to reduce your exposure to external security threats. ## Frontdoor.jsp [Frontdoor.jsp](https://help.salesforce.com/s/articleView?id=xcloud.security_frontdoorjsp.htm&type=5&language=en_US) bridges an existing web session into Salesforce from a custom web interface, such as a Salesforce site. Use Frontdoor.jsp to connect users to Salesforce by using their existing session ID and server URL without requiring a separate login. These bridges are useful for custom portals or web apps that integrate with your org. # Additional Security Enhancements You can add an extra layer of security for your iOS users by clearing the contents of their clipboard whenever the mobile app is in the background. Users may copy and paste sensitive data as a part of their day-to-day operations, and this enhancement ensures any data they copy onto their clipboards is cleared whenever they background the app. ## MDM Settings for More Security Enhancements To clear the clipboards of your iOS users when the mobile app is in the background, you configure key-value pair assignments through your MDM suite. Here’s the supported key: | Key | Data Type | Platform | Description | | --- | --- | --- | --- | | `ClearClipboard​OnBackground` | Boolean | iOS | If true, the contents of the iOS clipboard are cleared when the mobile app is backgrounded. This prevents the user from accidentally copying and pasting sensitive data outside of the app. | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mobile_security-264-0-0-production-enus/aa5de880-f40d-4478-acb7-729eee2b5d4e/images/icon_note.png) Note If the mobile app stops working unexpectedly, the copied data can remain on the clipboard. The contents of the clipboard are cleared when the user starts and backgrounds the mobile app. This security functionality is available for Android devices running OS 5.0 and greater, and that have Android for Work set up. Contact your MDM provider to configure this functionality for your Android users. # Adjust Payout Amounts Adjust payout amounts for a member and get the updates approved. Program managers can adjust the system-calculated payout amount for a period to reverse or roll back the payouts for a member. Typical use cases include changes in incentive terms, or when the payout amounts are adjusted for other amounts such as enrollment fee, or previous balance. Adjustments can be submitted for approval using the standard approval flow. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
User Permissions Needed
To adjust payouts Rebate Management Admin permission set
1. On a Rebate Program Member Payout record, click **New** on the Adjustments related list. 2. Provide the following details:
Field Description Example Value
Name Name of the adjustment record. Adjustment for participation fee.
Member Payout This field is autopopulated when you create adjustments from the Adjustments related list of a member payout record. Acme Jan FY21 Payout
Adjustment Amount The amount to be adjusted from the current payout amount. Enter a positive or negative value. -250
Comment Reason for adjustment. Deducting the annual fee for participating in rebate programs.
Status

Status of the adjustment.

  • Under Review: An adjustment is created with this status.
  • Approved: If the adjustment is approved, the status is changed to approved.
  • Rejected: If the adjustment is rejected, the status is changed to rejected.
Under Review
Approval Date Autopopulated when the approval process is triggered and the adjustment is processed. This field is blank when the record is created.
3. Click **Save**. ![The New Rebate Payout Adjustment page.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/channel_revenue_mgmt/images/adjust_payout_amounts.png) After an adjustment is approved through an approval process, view the updated payout amount on the Payouts tab of a Member record. You can’t make further updates to an adjustment after it’s approved or rejected. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note You can’t create adjustments for payouts in Approved or Rejected statuses. # Adjust Points Use Adjust Points to manually adjust member’s credited or debited points. The adjustments happen in real time. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions that have Loyalty Management enabled.
When you adjust traceable currency points, the action creates a corresponding debit or credit ledger. - For positive adjustments, credit ledgers are created similar to an accrual transaction. When you adjust a traceable currency, the currency subtypes aren’t updated, which means that the credit loyalty ledgers don’t contain a value for the currency subtype. - For negative adjustments, debit ledgers are created and processed similar to any debit transaction. The event type is Manual Adjustment. See [How Currency Subtypes Are Debited](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_currency_subtype_debit_sequences.htm&release=264.0.0&type=5 "Use the Debit Points action in a loyalty program process or flow to debit member points. To process redemption transactions, define the sequence in which currency subtypes are used."). When you adjust points to debit points from a member, the member's points balance is updated in real time. When you adjust to credit points, points are credited in real time but the points balance is updated in these ways: | Scenario | Action | | --- | --- | | Qualifying points are credited. | Run the Credit Qualifying Points to Members Data Processing Engine definition. | | The Salesforce org has real-time non-qualifying points balance update turned on and non-qualifying points are credited. | The points are automatically credited to the member's points balance as soon as you make the adjustment. | | The Salesforce org credits non-qualifying points in batches. | Run the Credit Non-Qualifying Points to Members Data Processing Engine definition. | 1. From the Loyalty Programs tab, select your loyalty program. 2. On the Setup tab, click **Loyalty Program Members**. 3. Select a loyalty program member, and then click **Adjust Points**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note To view the Adjust Points quick action, ensure that the Journal Type record named Manual Points Adjustment is available in the org. 4. Select **Points Type**. 5. Select **Adjustment**. - To add points, click +. - To remove points, click \-. 6. To adjust the points, enter a value. 7. Associate the adjustment with a promotion. 8. If fixed-type non-qualifying points are adjusted, enter the expiration date. If you specify an expiration date, the system overwrites the expiration date that's automatically calculated based on the currency's expiration period. 9. To adjust points for a different tier group, click **Add Adjustment**. 10. Select the category for adjusting the points. The default categories are Service Recovery and Resolve Disputed Points. But you can add new values to the category for adjusting the points. 11. Enter comments for the adjustment, if any. 12. Click **Adjust**. # Adjust Points for a Transaction Journal Use Adjust Points to manually adjust a member's credited or debited points. The system makes these adjustments in real time. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions that have Loyalty Management enabled.
When you adjust points for multiple transaction journals to debit points from associated members, the system updates the members' points balance in real time. When you adjust to credit points, points are credited in real time but the points balance can be updated in these ways. | Scenario | Action | | --- | --- | | Qualifying points are credited. | Run the Credit Qualifying Points to Members Data Processing Engine definition. | | The org has real-time non-qualifying points balance update enable, and non-qualifying points are credited. | The points automatically credit to the associated members' points balance as soon as you make the adjustment. | | The org credits non-qualifying points in batches. | Run the Credit Non-Qualifying Points to Members Data Processing Engine definition. | 1. From the Loyalty Management app, select a loyalty program. 2. On the Setup tab, click **Transaction Journals**. 3. Select the transaction journal that you want to adjust the points for. 4. Click **Adjust Points**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note To view the Adjust Points quick action, ensure that the Journal Type record named Manual Points Adjustment is available in the org. 5. For Points Type, select **Points**. 6. From Adjustment, add or remove points: - To add points, click +. - To remove points, click \-. 7. To adjust the points, enter a value. 8. Associate the adjustment with a promotion. 9. If fixed-type non-qualifying points are adjusted, enter the expiration date. If you specify an expiration date, the system overwrites the expiration date that's automatically calculated based on the currency's expiration period. 10. To adjust points for a different tier group, click **Add Adjustment**. 11. Select the category for adjusting the points. The default categories are Service Recovery and Resolve Disputed Points. But you can add new values to the category for adjusting the points. 12. Enter comments for the adjustment, if any. 13. Click **Adjust**. # Adjust Points for Multiple Transaction Journals You can manually adjust points for multiple transaction journals for loyalty program members in real time. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions that have Loyalty Management enabled.
When you adjust points for a transaction journal to debit points from the associated member, the member's points balance is updated in real time. When you adjust to credit points, points are credited in real time but the points balance can be updated in these ways: | Scenario | Action | | --- | --- | | Qualifying points are credited. | Run the Credit Qualifying Points to Members Data Processing Engine definition. | | The Salesforce org has real-time nonqualifying points balance update turned on and nonqualifying points are credited. | The points automatically credit to the associated member's points balance as soon as you make the adjustment. | | The Salesforce org credits nonqualifying points in batches and nonqualifying points are credited. | Run the Credit Non-Qualifying Points to Members Data Processing Engine definition must be run. | 1. From the Loyalty Management App navigation menu, click **Transaction Journals**. 2. Select the transaction journals that you want to adjust points for. 3. Click **Adjust Points**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note To view the Adjust Points quick action, ensure that the Journal Type record named Manual Points Adjustment is available in the org. 4. Select the **Points Type**. 5. From Adjustment, add or remove points: - To add points, click +. - To remove points, click \-. 6. To adjust points, enter a value. 7. Associate the adjustment with a promotion. 8. If fixed-type non-qualifying points are adjusted, enter the expiration date. If you specify an expiration date, the system overwrites the expiration date that's automatically calculated based on the currency's expiration period. 9. To adjust points for a different tier group, click **Add Adjustment**. 10. Select the category for adjusting the points. The default categories are Service Recovery and Resolve Disputed Points. But you can add new values to the category for adjusting the points. 11. Enter comments for the adjustment, if any. 12. Click **Adjust**. # Adjust Ship and Debit Claim Amounts Ship and debit claim analysts can adjust the calculated amount of a rebate claim and get the adjustment approved. They can create adjustments to account for the changes in incentive terms, inflation, enrollment fees, previous balances, and so on. Adjustments can be submitted for approval by using the standard approval process. ### Required Editions
Available in Developer, Enterprise, and Unlimited Editions that have Ship and Debit Process Management enabled
User Permissions Needed
To create a Ship and Debit Program: Ship and Debit Process Management User permission set
Make sure that your Salesforce admin added the Rebate Claim Adjustment related list to the Rebate Claim page layout. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note You can’t create adjustments for rebate claims in the Approved or Rejected statuses. 1. On a Rebate Claim record, click **New** in the Adjustments related list. 2. Enter a name for the adjustment. 3. Specify the rebate claim record to be adjusted. This field is automatically populated when you create adjustments from the Adjustments related list of a rebate claim. 4. Specify the amount to be adjusted from the current payout amount. You can enter a positive or negative value. 5. Enter any comments for the adjustment. 6. Specify the status of the adjustment. - Under Review - Approved - Rejected ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note After a rebate claim adjustment is approved or rejected, you can’t update it. 7. Save your changes. You can view the sum of all adjustments made for a rebate claim on the Total Adjustment Amount field on the Rebate Claim record. Rejected adjustments aren’t considered in the total adjustment amount. # Adjust the Height of an Element on a Flexcard (Managed Package) For the managed package runtime, update the height of an element on a Flexcard from the Style panel in the Flexcard Designer. Enter any CSS supported values, such as length units (`px`, `cm`, and so on), `inherit`, `auto`, and so forth. Or enter a CSS function, such as `calc(2em * 5)`. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Percentage (%) is not supported for height. 1. In the Flexcard Designer, click an element on the canvas, and click **Style** to open the Style panel. 2. To update the height of your element, open the **Dimensions** section, and enter a CSS supported value for one or more of the following properties: ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For example, enter 20, 150px, or calc(2em \* 5), auto, and so on. If you enter just a number, the length unit defaults to `px`. - To set a fixed height, enter a CSS supported value in the **Height** field. - To set a minimum height, enter a CSS supported value in the **Minimum Height** field. - To set a maximum height, enter a CSS supported value in the **Maximum Height** field. What’s next: Preview your Flexcard. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). # Adjust the Width of an Element on a Flexcard (Managed Package) For the managed package runtime, after dragging an element from the Build panel into a state, adjust its width along a 12-column horizontal grid. The width of an element is 1 to 12 parts of a 12 column grid. For example, a field element that is 6 columns wide takes up 50% of the available horizontal space. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). When an element is dragged next to another element that is less than 12 columns wide, the new element takes up the remaining width of the horizontal space available. And when the width of an element is adjusted from less than 12 to 12 columns wide, any elements next to it will move below it. 1. In the Flexcard Designer, click an element in a state. 2. To adjust the width of an element inside a state, perform these tasks: 1. Hover over the square box on the right border until the mouse pointer icon becomes a drag icon. 2. Click and slide the square box right or left to make the element more narrow or wider. ![FlexCards adjust width](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_adjust_width.png) 3. To adjust the width from the Style panel for any element, including a state, perform these tasks: 1. Click **Style** to open the Style panel 2. In the **Dimensions** section, under **Default**, move the slider left or right to adjust the element width. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Only Child Flexcards enable you to adjust the width of a State element, and only from the Style panel. When you adjust the width of the state, if the width is less than 6 columns wide, records display side by side, mimicking the behavior of elements inside states. See [Display Records Side-By-Side on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_display_records_side_by_side_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, display records side-by-side instead of stacked on top of each other by embedding a child Flexcard and adjusting the widths of its states. By default, records display one on top of the other regardless of the widths of individual elements in the Flexcard."). # Adjust Your Existing Customizations Most of your existing point-and-click and programmatic customizations work seamlessly in Lightning Experience. But some customizations aren’t useful or relevant outside of Salesforce Classic. And some aspects of your classic implementation require adjustment for best results in Lightning Experience. Here’s a look at issues to consider. ## Salesforce Apps and the Navigation Bar The Salesforce apps you created in Salesforce Classic work in Lightning Experience without any modifications. But users can’t personalize the objects, tabs, and other items that appear in the Lightning Experience navigation bar until you upgrade the Classic app. It’s easy to upgrade Classic apps to Lightning apps with the App Manager in Setup. The other advantage to upgrading apps is that you can then customize them with: - A unique color and logo - Standard and custom objects - Lightning component tabs - Visualforce tabs - Lightning page tabs See [Upgrade Classic Apps to Lightning Apps](https://help.salesforce.com/s/articleView?id=platform.apps_lightning_upgrade_from_classic.htm&language=en_US) in Salesforce Help. ## Page Layouts, Compact Layouts, and Utility Bars Record page customizations made in Salesforce Classic—for custom and standard objects—also affect record pages in Lightning Experience. However, some page elements display differently in Lightning Experience, and some aren’t supported. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip You can create a custom Lightning Experience record page with the Lightning App Builder, and assign different record pages to different Lightning apps, record types, and profiles. Compact layouts play the same role in Lightning Experience and the Salesforce mobile app: displaying a record’s key fields in the highlights panel on a record page. In Lightning Experience, the highlights panel shows the first seven fields from your current compact layout. The Salesforce mobile app shows up to ten fields from the compact layout. Provide instant access to productivity tools, like integrated voice, by adding a utility bar to Lightning apps. The utility bar displays in the Lightning Experience footer. ## Actions and Buttons If you’ve already created and used actions in Salesforce Classic, you know that they appear in the Chatter publisher, while standard and custom buttons appear above the details on a record page. And if you use the Salesforce mobile app, you know that all action types and buttons are co-mingled on the action bar. In Lightning Experience, we continue to blur the line between actions and buttons. But instead of displaying in a single place, actions and buttons are grouped by type in several different areas on the record page. By default, Lightning Experience includes the actions and buttons defined in the Salesforce Mobile and Lightning Experience Actions section on the global publisher layout. Or you can customize what’s available using the same section on object page layouts. Here’s the logic that determines where on the record page an action or button appears. - Global actions with the Log a Call action type or the Create a Record action type for events, notes, and tasks display in the Global Actions menu in the header. - Most quick actions, productivity actions, standard buttons, and supported custom buttons are added to the action menu in the highlights panel. - Object-specific activities-related actions, such as Log a Call, New Event, New Task, and Email, display in the composer on the Activity tab if you’re using the activity timeline. Otherwise they appear in the activities related lists. - Standard Chatter actions appear in the composer on the Chatter tab. The order of actions in each area is based on the order in which they’ve been added to the global publisher or object page layout. See [Actions in Lightning Experience](https://help.salesforce.com/s/articleView?id=platform.actions_in_lex.htm&language=en_US) in Salesforce Help. ## Custom Buttons Custom buttons and links that use a JavaScript content source aren’t supported in Lightning Experience. Custom buttons that define the content source as a URL or Visualforce page work as you’d expect. ## Attachments and Classic Notes For a better experience, convert existing attachments to Salesforce Files and classic notes to enhanced notes. See [Convert Attachments and Classic Notes](https://help.salesforce.com/s/articleView?id=xcloud.lex_magic_mover_tool.htm&release=264.0.0&type=5 "Does your org use attachments and notes? In Lightning Experience, users get a better experience if you convert existing attachments to Salesforce Files and classic notes to enhanced notes. You can automate this conversion work with the handy Magic Mover for Notes and Attachments tool."). ## Salesforce Knowledge Moving your Classic knowledge base into Lightning Knowledge gives users a seamless experience and a much better workflow. See [Migrate Your Classic Knowledge Base to Lightning Knowledge](https://help.salesforce.com/s/articleView?id=xcloud.lex_lightning_knowledge.htm&release=264.0.0&type=5 "If your company uses Classic Knowledge, Lightning Experience users must switch to Salesforce Classic to do things like find or create Knowledge articles. Moving your Classic knowledge base into Lightning Knowledge gives your users a seamless experience and much better workflow. When you’re ready, the Lightning Knowledge Migration Tool does most of the heavy lifting for you."). ## Visualforce and Lightning Components Visualforce is supported in Lightning Experience and most of your existing Visualforce pages work without any revisions needed. But some pages may need tweaking, and things have moved around in the new interface, so do some testing to confirm that your Visualforce pages behave as expected. If you find problems, check out [Update Visualforce Markup for Lightning Experience](https://help.salesforce.com/s/articleView?id=xcloud.lex_prepare_vf.htm&release=264.0.0&type=5 "Some Visualforce pages may need tweaking to work in Lightning Experience. Don’t worry if you don’t have Visualforce experience—the workarounds show you exactly what to do each step of the way. Always test your Visualforce page in Lightning Experience first—most work as-is. If the listed issue is preventing the page from working properly, follow the instructions to tweak the markup and make it work. If a Visualforce page requires significant refactoring, move it to a Lightning component."). Here are a few other considerations. - If your Visualforce pages use JavaScript, there are things you should check. Visualforce doesn’t “own” the whole page when shown in Lightning Experience, and because of that, your JavaScript code needs to play by some new rules. - If your Visualforce pages use the built-in standard components, their look-and-feel matches Salesforce Classic, whether users access them in the new or old interface. But it’s easy to assign the Lightning Experience stylesheets so pages have classic styling in Salesforce Classic and Lightning styling in Lightning Experience. - We recommend checking out the Salesforce Lightning Design System (SLDS) for a collection of design patterns, components, and guidelines for creating interfaces that fit in with Lightning Experience. The SLDS is available at [www.lightningdesignsystem.com](https://www.lightningdesignsystem.com). What about UI customization? The Lightning Component framework is our UI framework for developing dynamic web apps for both desktop and mobile devices. You can use it or Visualforce in your new projects. ## Canvas Canvas allows you to easily integrate third-party applications in Salesforce. Canvas functionality in Lightning Experience is the same as in Salesforce Classic. You can still embed Canvas apps in Visualforce pages and everywhere else they’re supported, with the bonus that you can expose Canvas apps in Lightning components. ## Salesforce APIs and Apex Most of the programmatic tools and processes you’re used to are largely unaffected by Lightning Experience. We’ve kept our promise that our new releases won’t break your dependencies on Salesforce APIs. Your development environment is the same as ever. While your Apex classes and API calls work fine, some features aren’t yet supported in Lightning Experience. If a user is in the new interface and executes some Apex code that interacts with an unsupported feature, the user can’t complete the task. To address this scenario, we’ve added capabilities to determine a user’s interface preference from both the API and Apex. You can use this functionality to add logic to your existing code so that your users don’t encounter errors. See “Understand Changes to Other Development Tools" in the Lightning Experience Development Trailhead module for full details. ## AppExchange Apps Many apps from AppExchange feature customizations, including custom objects, custom buttons, Visualforce pages, and more. Salesforce partners have tested their apps in Lightning Experience and applied for Lightning Ready and Powered by Lightning certification. Apps that are Lightning Ready work in Lightning Experience and fit in with other apps and pages in the interface. If an app is supported in Lightning Experience, a Lightning Ready sash appears on its AppExchange listing. If an app isn’t supported in Lightning Experience, use it in Salesforce Classic instead. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Your org can use apps without Lightning Ready certification in Lightning Experience, but some features might not be available or work as expected. These apps can also appear visually inconsistent with Lightning Experience because they use Salesforce Classic styling. For the best experience, use apps that aren’t certified as Lightning Ready in Salesforce Classic. # Admin and Developer Resources with Loyalty Management Lite Learn about the developer resources that are included with Loyalty Management Lite license available with Partner Ecosystem Management.
Capability Invocable Actions DATA PROCESSING ENGINE templates Business APIs
Corporate Member Management Generate Referral Code Not Available
Points Management

The Data Processing Engine templates for crediting, aggregating, and expiring points are only run in real time. The template for qualifying points reset is run in batches.

Not Available
Tier Management Not Available Not Available
Voucher Management Issue Voucher Action Not Available Redeem Voucher
# Administer Quip Get your users up and running with Quip. - **[Change Your Company Information in Quip](https://help.salesforce.com/s/articleView?id=xcloud.quip_change_company_info.htm&release=264.0.0&type=5)** Update your company’s Quip site information, such as the company name, quip.com subdomain, and company logo. - **[Turn Off Live Paste Automatic Updates](https://help.salesforce.com/s/articleView?id=xcloud.quip_turn_off_live_paste.htm&release=264.0.0&type=5)** You can turn off automatic updates for content that users paste with Live Paste. When automatic updates are off, only members of the source document can update Live Pasted content. - **[Create and Manage Group Folders](https://help.salesforce.com/s/articleView?id=xcloud.quip_create_group_folders.htm&release=264.0.0&type=5)** Help your site members manage documentation across the organization. - **[Restricted Sharing in Quip](https://help.salesforce.com/s/articleView?id=xcloud.quip_restricted_sharing.htm&release=264.0.0&type=5)** Quip makes it easy to balance security with collaboration. To keep your content secure, you can prevent users from sharing content with external organizations. You can also limit sharing to a trusted allowlist. Restricting sharing doesn’t change users’ access to documents or folders that are already shared. - **[Quip Templates and Automation Limits](https://help.salesforce.com/s/articleView?id=xcloud.quip_considerations_for_templates_and_automation.htm&release=264.0.0&type=5)** These limits govern the use of Quip templates and automation. Make sure to stay within them for best performance. # Administering, Deploying, and Launching Omniscripts (Managed Package) For the managed package runtime, import, version, launch, and deploy Omniscripts. Omniscripts can be launched from Experience Cloud sites, object pages, Console Apps, and remote sites. Omniscripts can be deployed to Salesforce sites and external services, such as Adobe External Manager and Heroku. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Omnistudio isn’t certified to work with mobile devices (smartphones and tablets). - **[Managing Omniscripts (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_managing_omniscripts.htm&release=264.0.0&type=5)** For the managed package runtime, the following topics tell you how to manage your Omniscripts. - **[Deploying an Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploying_an_omniscript.htm&release=264.0.0&type=5)** For the managed package runtime, Vlocity Omniscripts can be deployed within the Vlocity application, or within an iFrame either on a Salesforce Community or an external website. Once embedded within the page, the script can be versioned, modified, and activated without the need to reconfigure the page. - **[Launch Omniscripts (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_launching_omniscripts.htm&release=264.0.0&type=5)** For the managed package runtime, launch Omniscripts in Salesforce from Communities, Object detail pages, and Vlocity Card Actions. - **[Embed an Omniscript in Another Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_embed_an_omniscript_in_another_omniscript.htm&release=264.0.0&type=5)** For the managed package runtime, an Omniscript can be reused in one or more existing Omniscripts. Reusing Omniscripts enables you to build a variety of smaller scripts and then piece them together into one or more parent scripts. Embedded Omniscripts behave just like other Omniscript elements. - **[Configuring Community Profiles for Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_community_profiles_for_omniscript.htm&release=264.0.0&type=5)** For the managed package runtime, to allow deployment of an Omniscript from an Experience page, configure the following sharing settings and profile access. # Adopt a Recovery-First Mindset When an incident occurs, recover availability first then fix the root cause. Minimize the impact of an incident by focusing on recovering availability quickly before fixing the issue. It can be difficult and time-consuming to fix the root cause, which often equates to longer downtime and a negative impact to your business and users. Adopt a recovery-first mindset that encourages your team to focus on bringing your org back to a stable, online state before deploying fixes. Then your team can take time to research and understand the incident cause and develop thoughtful solutions rather than knee-jerk reactions. Here are ways to incorporate a recovery-first mindset during incidents. | Potential Cause | First Try | Instead of | | --- | --- | --- | | System or service outage (Salesforce or other systems). | Using a business continuity plan through which the IT operations team attempts to recover the system or service and minimize business impact. | Determining why the system or service is down and then trying to fix the problem before it's back online. | | A recent change or release made to the system. | Reverting changes to a previous stable state. | Finding the root cause in the change or release and attempting to fix it immediately. | | An unexplained issue not caused by a recent release. | Adopting temporary alternative processes for business continuity and providing monitoring and diagnostics information to appropriate subject matter experts (SMEs) who can investigate and attempt quick recovery. | Engaging every SME to troubleshoot the issue under pressure. | #### See Also - [_Salesforce Architects_: Incident Response](https://architect.salesforce.com/well-architected/adaptable/resilient#Incident_Response) - [_Video_: Site Reliability Engineering at Salesforce](https://www.salesforce.com/video/193050/) # Adopt Release Updates Proactively Adopt critical updates before they're enforced, giving you time to test and make updates to your org before they're enabled. Occasionally, a major release includes a critical update that's enforced for all orgs. These updates are communicated in release notes at least one release prior to enforcement to give you time to test and make configuration updates. After testing, we recommend adopting critical updates before they’re enforced to ensure compatibility and provide plenty of time to make changes, if needed. To learn more, see [Release Updates](https://help.salesforce.com/s/articleView?id=xcloud.release_updates.htm&type=5&language=en_US) in Salesforce Help. # Adopt the ICU Locale Formats The ICU locale format release update is available for all orgs. Review the high-level process to successfully migrate to the new International Components for Unicode (ICU) locale formats. Some of the formats differ from the ones provided by Oracle’s Java Development Kit (JDK). Understand how to determine the impact of changes on your org, and learn about the updates required to support the new formats. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: all editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This update was first made available in Winter ’20. Orgs created in Winter ’20 or later have ICU locale formats enabled by default. Orgs that haven’t already switched to ICU locale formats are encouraged to manually update. Here’s the step-by-step process to migration from JDK to ICU locale formats. 1. [Determine whether your org is using ICU or JDK locale formats](https://help.salesforce.com/s/articleView?id=xcloud.icu_migration_which_format.htm&release=264.0.0&type=5 "To prepare for the move to the International Components for Unicode (ICU) library from Oracle’s Java Development Kit (JDK) library, determine whether ICU is enabled in your org, or whether you’re using the JDK locale format. ICU is the new standard and enabled through a release update."). Before you start, determine which formats you’re using and whether these instructions apply to you. 2. Review the [considerations for adopting ICU](https://help.salesforce.com/s/articleView?id=xcloud.admin_locales_changes_considerations.htm&release=264.0.0&type=5 "Learn why Salesforce chose to adopt the International Components for Unicode (ICU) locale formats. Understand why we recommend testing the new formats in a sandbox and enabling them in production before they’re enforced. Then review recommendations on handling installed packages, custom code, and notifying your users."). Learn why Salesforce chose to adopt the ICU locale formats. Then review recommendations, including where to test and how to handle installed packages and custom code. 3. [Determine how the ICU locale formats affect your org](https://help.salesforce.com/s/articleView?id=xcloud.admin_locales_determine_use.htm&release=264.0.0&type=5 "To identify the locales used in your org, you can use an SQQL query, a report, or both. When locale formats change, your adoption effort depends on the locales used in your org. For example, when you migrate from Oracle’s Java Development Kit (JDK) locale formats to International Components for Unicode (ICU) locale formats, or when existing locale formats change."). Your migration effort depends on the locales used in your org. Use an SOQL query and report to identify the locales in use, then identify the specific changes for those locales to be included in testing. 4. [Enable the ICU locale formats](https://help.salesforce.com/s/articleView?id=xcloud.icu_migration_enable.htm&release=264.0.0&type=5 "International Components for Unicode (ICU) locale formats are available as a release update. To test the International Components for Unicode (ICU) locale formats before they’re enforced for your organization, enable a test run in the Enable ICU Locale Formats release update. Then enable the formats for the English (Canada) locale.") in a sandbox. Before enabling the new formats in production, we highly recommend that you test the ICU locale formats in a sandbox. 5. [Update your Apex Classes, Apex Triggers, and Visualforce Pages to API version 45.0 or later](https://help.salesforce.com/s/articleView?id=xcloud.admin_locales_update_api.htm&release=264.0.0&type=5 "The International Components for Unicode (ICU) locale formats are available with API version 45.0 and later. To use the ICU locale formats in your customizations, all Apex classes, Apex triggers, and Visualforce pages must use API version 45.0 or higher..") To avoid data integrity issues and end-user confusion, update your Apex classes, Apex triggers, and Visualforce pages to API version 45.0 or later. If these components use API version 44.0 or earlier, they return Oracle’s Java Development Kit (JDK) locale formats. 6. [Update custom code for the ICU locale formats](https://help.salesforce.com/s/articleView?id=xcloud.admin_locales_code.htm&release=264.0.0&type=5 "Address, currency, date, datetime, integer, name, and time formats can change when a user changes locales. These formats can also change when the locale format standard changes or formats are updated. Learn how to avoid errors by using locale-neutral methods in your code and review examples. Then understand how to verify that your integrations work with new or changed formats."). When an org migrates from JDK locale formats to ICU locale formats, users see the new formats automatically in standard Salesforce fields and functionality. However, custom code can require adjustments. Learn how to use locale-neutral formats to prevent issues when locale formats change and see examples of common issues. 7. [Test the ICU locale formats](https://help.salesforce.com/s/articleView?id=xcloud.admin_locales_test_changes.htm&release=264.0.0&type=5 "To avoid unexpected behavior after you migrate from Oracle’s Java Development Kit (JDK) locale formats to International Components for Unicode (ICU) locale formats, test the ICU locales. When you migrate from JDK to ICU, the formats for some locales change. Use functional tests to verify existing functionality, and confirm that these formats appear correctly for each affected locale used in your org. Also, verify that integration with third parties works as expected, and test your installed packages with the new formats.") in a sandbox. Run your standard functional tests and targeted tests of functionality that processes or produces locale formats. Test your results in each of the affected locales that is used in your org. If you find any issues, update your org and test again. 8. Notify your users and partners. Let your users know when you plan to enable ICU in production and how the new locales can affect them. Otherwise, the differences between JDK and ICU locale formats can cause confusion. Reaching everyone can require multiple reminders before and after you enable ICU in production. Also consider notifying your partners, especially if those partners send information to or extract information from Salesforce. Resolving issues related to integrations can require their assistance. 9. [Enable the ICU locale formats](https://help.salesforce.com/s/articleView?id=xcloud.icu_migration_enable.htm&release=264.0.0&type=5 "International Components for Unicode (ICU) locale formats are available as a release update. To test the International Components for Unicode (ICU) locale formats before they’re enforced for your organization, enable a test run in the Enable ICU Locale Formats release update. Then enable the formats for the English (Canada) locale.") in production. After you test the ICU locale formats in a sandbox and identify the required adjustments, enable the ICU locale formats in production. Then make those same adjustments. 10. [Test the ICU locale formats](https://help.salesforce.com/s/articleView?id=xcloud.admin_locales_test_changes.htm&release=264.0.0&type=5 "To avoid unexpected behavior after you migrate from Oracle’s Java Development Kit (JDK) locale formats to International Components for Unicode (ICU) locale formats, test the ICU locales. When you migrate from JDK to ICU, the formats for some locales change. Use functional tests to verify existing functionality, and confirm that these formats appear correctly for each affected locale used in your org. Also, verify that integration with third parties works as expected, and test your installed packages with the new formats.") again in production. To account for any variation between your sandbox and production orgs, run your standard functional tests. Also, test functionality that processes locale formats. If you find any issues, update your org, then test again. After you successfully validate the functionality in production, mark the release update as complete. #### See Also - [Locales Overview](https://help.salesforce.com/s/articleView?id=xcloud.admin_locales_overview.htm&release=264.0.0&type=5 "Locales determine the display formats for date and time, users’ names, addresses, and commas and periods in numbers. The start day of the week for calendars varies per locale. For single-currency organizations, locales also set the default currency for the organization when you select them in the Currency Locale picklist on the Company Information page.") - [_Salesforce Knowledge Article_: JDK Locale Format Retirement and the Enable ICU Locale Formats Release Update](https://help.salesforce.com/s/articleView?id=000380618&type=1&language=en_US) # Advanced Apex Class Check for Integration Procedures in Omnistudio for Managed Packages The advanced Apex class check is performed through the ApexClassCheckForIP security flag. The ApexClassCheckForIP flag strengthens Omnistudio security by enforcing Apex class access checks during Integration Procedure execution. This enhancement makes sure that users have the required permissions to run custom Apex classes referenced within Integration Procedures. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note In Vlocity Industries managed package orgs, Apex class validation during direct Integration Procedure execution is enforced through the ApexClassCheckForIP flag, as this scenario is not covered by the ApexClassCheck flag alone. This behaviour applies to Insurance (INS), Communications, Media, and Energy (CME), and Financial Services Cloud – Insurance (FSC-INS). When enabled, `ApexClassCheckForIP` validates user access to custom Apex classes used within Integration Procedures. This validation applies only when an Integration Procedure is invoked directly. When an Integration Procedure is invoked through a Flexcard or an Omniscript, Apex class access checks are already enforced and are not affected by this flag. By default, the `ApexClassCheckForIP` flag is disabled. The `ApexClassCheckForIP` flag works along with the existing `ApexClassCheck` flag. If `ApexClassCheck` is set to false, the `ApexClassCheckForIP` flag is ignored. Both flags must be enabled for Apex class access validation to occur during direct Integration Procedure execution. The steps to enable the `ApexClassCheckForIP` flag and the location of the settings depend on whether the org has an Omnistudio license and whether it uses a custom data model or standard data model. Depending on your org's Omnistudio license status and data model, locate and configure the flag. For information about data models, see [Omnistudio Data Models](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_omnistudio_custom_objects_to_standard_objects.htm&type=5&language=en_US), [Does Your Org Use Custom or Standard Objects?](https://help.salesforce.com/s/articleView?id=xcloud.os_does_your_org_use_custom_or_standard_objects.htm&language=en_US&type=5). To enable the `ApexClassCheckForIP` flag in orgs without an Omnistudio license or orgs still using custom data model: 1. From Setup, in the Quick Find box, enter Custom Settings, and then select **Custom Settings**. 2. Click **G** and go to **General Settings**. 3. Click **Manage**. 4. Click **New**. 5. In the Label field, enter ApexClassCheckForIP. 6. In the Value field, enter true. To enable the `ApexClassCheckForIP` flag in orgs with an Omnistudio license using the standard data model: 1. From Setup, in the Quick Find box, enter Omni Interaction Configuration, and then select **Omni Interaction Configuration**. 2. Click **New Omni Interaction Configuration**. 3. In the Label field, enter ApexClassCheckForIP. 4. In the Value field, enter true. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important During the week of February 2, 2026, Salesforce enables the ApexClassCheckForIP setting by default to enhance org security. Review and prepare your configuration for a seamless transition and to prevent potential service interruptions. See [Advanced Security Checks for Omnistudio for Managed Packages](https://help.salesforce.com/s/articleView?id=xcloud.os_advanced_security_updates_overview.htm&release=264.0.0&type=5 "Advanced security checks for Omnistudio for Managed Packages enhance data protection by enforcing stricter validation of access and permissions. When enabled, these checks validate object-level access, field-level security, and Apex class permissions for all users, including guest, authenticated, and non-authenticated users, across Omnistudio components."). # Advanced Configuration for Omniscript Form Elements (Managed Package) For the managed package runtime, this section tells you how to work with elements that enable users to input information, search for record information, select options, create records, edit records, and delete records. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). For information on all Omniscript elements, see [Omniscript Element Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_element_reference.htm&release=264.0.0&type=5 "For the managed package runtime, this guide contains explanations of the different elements that can be added to an Omniscript, such as Omnistudio Data Mapper actions. Each element uses an extendable Lightning web component or customizable HTML template. There are separate templates used for Lightning Player and Classic Player. Classic Player is no longer supported, however, Classic templates for Summer 17 and v15 are still available."). - **[Access Omniscript Data JSON with Merge Fields (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_access_omniscript_data_json_with_merge_fields.htm&release=264.0.0&type=5)** For the managed package runtime, enable Omniscript elements and element properties to access data JSON using merge fields. A merge field is a variable that references the value of a JSON node. For example, if a JSON node is `"FirstName": "John"`, then the merge field `%FirstName%` returns `John`. - **[Add Options for Selects, Multi-Selects, and Radio Buttons (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_options_for_selectsmulti_selectsand_radio_buttons.htm&release=264.0.0&type=5)** For the managed package runtime, to add options for Select, Multi-Select, and Radio Button elements, go to the **Options** section of the element properties and click **\+ Add New Option**. If no values are defined for a Select element, an Undefined Value is returned. - **[Set Date and Time Ranges (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_set_date_and_time_ranges.htm&release=264.0.0&type=5)** For the managed package runtime, the Date, Date/Time, and Time elements enable users to input dates and times into an Omniscript form. Each element has different properties that enable you to present a selectable range of dates or times to the User. - **[Tie a Picklist to Salesforce (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_tie_a_picklist_to_salesforce.htm&release=264.0.0&type=5)** For the managed package runtime, using Vlocity Omniscript, you can dynamically populate a Select, Multi-Select, or Radio element with values from a picklist in your Salesforce org, or using a custom Apex class. - **[Populating Picklist Values From Apex (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_populating_picklist_values_from_apex.htm&release=264.0.0&type=5)** For the managed package runtime, you can populate Select, Multi-select, and Radio elements from an Apex class that implements Callable and Vlocity Open Interface. The values for the element are obtained during the Omniscript's activation. - **[Populating Dependent Picklist Values with Apex (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_populating_dependent_picklist_values_with_apex.htm&release=264.0.0&type=5)** For the managed package runtime, you can populate Select, Multi-select, and Radio elements from a Callable implementation. The values for the element are obtained during the Omniscript's activation. - **[Lookup Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_lookup_element.htm&release=264.0.0&type=5)** For the managed package runtime, run a query using text input to retrieve Salesforce data using the Lookup element. The retrieved data is returned in Value/Label pairs and becomes available for selection in a dropdown list. - **[Working with Lookup Query Configurations (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_working_with_lookup_query_configurations.htm&release=264.0.0&type=5)** For the managed package runtime, when using the Lookup Element in Omniscript, the filtering of results is performed by the Lookup Query Configuration properties section. There are three main types of queries that can be built using this the Lookup Query Configuration properties section: AND join, OR join, and Deep query. - **[Access to Data Within and Outside a Repeatable Block (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks.htm&release=264.0.0&type=5)** For the managed package runtime, suppose you place an element in a repeatable block (a Block or an Edit Block) and you want to access data that is calculated in a different element. The method that you use to access the data depends on whether the element containing the data is within or outside the same repeatable block in the Omniscript. Review guidelines and examples for the Formula element and for the Select element, which is used to add a dependent picklist to an Omniscript. - **[Using the Rich Text Editor in the Vlocity Omniscript Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_using_the_rich_text_editor_in_the_vlocity_omniscript_designer.htm&release=264.0.0&type=5)** For the managed package runtime, the Text Block and horizontal mode Instructions use a Rich Text Editor to display HTML in an Omniscript. #### See Also - [Controlling Field Property (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_controlling_field_property_1.htm&release=264.0.0&type=5 "For the managed package runtime, the Controlling Field Property on a Select Element can display Select Field Values based on the selection of another value from a Controlling Select field.") # Advanced Exchange Use Advanced Exchange to streamline the creation of return and replacement requests for defective products or parts. Field technicians or service managers can quickly capture product details and initiate both return and replacement requests in a single, unified process—ensuring smooth operations with minimal disruption. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
- **[Advanced Exchange Workflow](https://help.salesforce.com/s/articleView?id=xcloud.aslm_advancedexchange_workflow.htm&release=264.0.0&type=5)** Salesforce admins configure the org, assign required permissions, and enable the Advanced Exchange feature. Once set up, field service technicians or service managers can initiate return and replacement requests for damaged products or parts—all from one place, without navigating across multiple pages in the app. - **[Advanced Exchange Setup](https://help.salesforce.com/s/articleView?id=xcloud.aslm_advancedexchange_set_up.htm&release=264.0.0&type=5)** Set up and configure Advanced Exchange to enable a unified process for creating return and replacement requests for products or parts. Assign the necessary permissions to users to create and manage advanced exchange requests. - **[Advanced Exchange Requests](https://help.salesforce.com/s/articleView?id=xcloud.aslm_advancedexchange_use.htm&release=264.0.0&type=5)** Easily raise an advanced exchange request to create return and replacement requests for the damaged products or parts you want to return to the manufacturer. # Advanced Exchange Permissions Salesforce admins, service managers, and field technicians require permissions to create and manage advanced exchange requests. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
Here are the permission sets that each persona must have to set up and use Advanced Exchange.
Persona Permission Set
Admin
  • Service Part Return Management
  • Manage Users
  • Manage Profiles and Permission Sets
Field Service Technician or Service Manager
  • Service Part Return Management
# Advanced Exchange Requests Easily raise an advanced exchange request to create return and replacement requests for the damaged products or parts you want to return to the manufacturer. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
- **[Create an Advanced Exchange Request](https://help.salesforce.com/s/articleView?id=xcloud.aslm_advancedexchange_request.htm&release=264.0.0&type=5)** Create an Advanced Exchange request for one or more products associated with a work order. For each item being returned and each replacement requested, capture details such as the account, contact, source and destination locations, and the reason for the return. A single Advanced Exchange request can include multiple line items, allowing service teams to manage all expected returns in one efficient and consolidated process. # Advanced Exchange Setup Set up and configure Advanced Exchange to enable a unified process for creating return and replacement requests for products or parts. Assign the necessary permissions to users to create and manage advanced exchange requests. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
- **[Advanced Exchange Permissions](https://help.salesforce.com/s/articleView?id=xcloud.aslm_advancedexchange_permission_sets.htm&release=264.0.0&type=5)** Salesforce admins, service managers, and field technicians require permissions to create and manage advanced exchange requests. - **[Prerequisites for Advanced Exchange](https://help.salesforce.com/s/articleView?id=xcloud.aslm_advancedexchange_prerequisities.htm&release=264.0.0&type=5)** Complete these prerequisites before you set up and use Advanced Exchange in Asset Lifecycle Management. # Advanced Exchange Workflow Salesforce admins configure the org, assign required permissions, and enable the Advanced Exchange feature. Once set up, field service technicians or service managers can initiate return and replacement requests for damaged products or parts—all from one place, without navigating across multiple pages in the app. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
## Salesforce Admin Salesforce admins prepare the Salesforce org, assign permissions to users, and set up Advanced Exchange and related features. - Assign the required user permissions to users. See [Advanced Exchange Permissions](https://help.salesforce.com/s/articleView?id=xcloud.aslm_advancedexchange_permission_sets.htm&release=264.0.0&type=5 "Salesforce admins, service managers, and field technicians require permissions to create and manage advanced exchange requests.") . - Set up the advanced exchange process. See [Advanced Exchange Setup](https://help.salesforce.com/s/articleView?id=xcloud.aslm_advancedexchange_set_up.htm&release=264.0.0&type=5 "Set up and configure Advanced Exchange to enable a unified process for creating return and replacement requests for products or parts. Assign the necessary permissions to users to create and manage advanced exchange requests."). ## Field Service Technician or Service Manager The field service technician or service manager initiates Advanced Exchange to create return and replacement requests for damaged products or parts simultaneously, streamlining the process and minimizing downtime. - The OEM (Original Equipment Manufacturer) creates a work order to inspect a specific product or part. - Based on the work order, the service manager or field service technician inspects the product or part for any damage. - If a replacement is needed, initiate an advanced exchange request to return the damaged item to the OEM and request a replacement. # Advanced Orders for Telesales Create and manage complex B2B sales orders through guided workflows with automated pricing and product qualification, so that captured orders match final ERP invoices and fulfillment rules. ### Required Editions

View supported editions

Advanced Orders for Telesales provides a high-performance order entry framework for high-volume telesales environments. It delivers consistent, automated order validation and pricing calculations that mirror your backend ERP system. In consumer goods and manufacturing operations, manual lookups and order entry errors cause costly returns, credits, and fulfillment delays. Advanced Orders for Telesales removes this friction by enforcing uniform order specifications, assortment listings, unit of measure rules, and delivery validations directly within the Service Console for Telesales. ## Key Capabilities Use Advanced Orders for Telesales to configure standardized ordering processes and guided execution workflows. Guided Order Creation Start guided order workflows directly from a customer account record to capture commercial context automatically. Reusable Order Specifications Enforce business rules, valid date windows, allowed orderer types (Direct or Indirect), and required wholesaler fulfillment accounts per order template. Runtime Product Qualification Dynamically evaluate product eligibility by business market during order capture using built-in decision tables and qualification plans. Assortment-Based Product Selection Restrict or suggest orderable items based on agreed customer account listings or physical warehouse inventory levels. Suggested Quantities Automatically recommend line-item quantities based on historical order averages from past active orders. Flexible Units of Measure Support multiple packaging levels (such as cases, pallets, or individual units) per product, with configurable default order units and package-specific pricing. Delivery Date Validation Automatically validate requested delivery dates against minimum and maximum lead-time rules and allowed delivery days. Order Status Lifecycle Progress orders through standard lifecycle stages from Draft to Activated, locking released orders against unauthorized edits and queuing them for backend ERP fulfillment. - **[Editions and Permissions for Advanced Orders for Telesales](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_editions_permissions.htm&release=264.0.0&type=5)** Review the supported products, editions, and permissions for Advanced Orders for Telesales. - **[How Advanced Orders for Telesales Processes Orders](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_how_processes_orders.htm&release=264.0.0&type=5)** Follow the step-by-step sequence the Advanced Orders for Telesales framework runs to turn an account interaction into an ERP-consistent, released order. - **[Advanced Orders for Telesales Data Model](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_data_model.htm&release=264.0.0&type=5)** See how Advanced Orders for Telesales separates master business data from execution specifications, assortment listings, and transactional order records. - **[Set Up Advanced Orders for Telesales](https://help.salesforce.com/s/articleView?id=xcloud.set_up_advanced_orders_for_telesales.htm&release=264.0.0&type=5)** Configure the required settings and data to enable Advanced Orders for telesales.. - **[Capture Orders Using Advanced Orders for Telesales](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_capture_orders.htm&release=264.0.0&type=5)** Advanced Orders for Telesales guides telesales reps through creating, configuring, pricing, and releasing high-volume customer orders. It bridges account-level commercial relationships with guided, compliant order execution. - **[Advanced Orders for Telesales Scenarios](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_scenarios.htm&release=264.0.0&type=5)** Review real-world business scenarios to see how telesales reps capture, price, and release customer orders using the Advanced Orders for Telesales framework. - **[Troubleshoot Advanced Orders for Telesales](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_troubleshoot.htm&release=264.0.0&type=5)** Diagnose and resolve common issues that prevent orders from being created, populating products, calculating quantities, or releasing to your ERP system. - **[Considerations and Limitations for Advanced Orders for Telesales](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_considerations_limitations.htm&release=264.0.0&type=5)** Keep these considerations and limitations in mind as you set up and use Advanced Orders for Telesales. # Advanced Orders for Telesales Data Model See how Advanced Orders for Telesales separates master business data from execution specifications, assortment listings, and transactional order records. ### Required Editions

View supported editions

Advanced Orders for Telesales uses a modular, layered data architecture to define market scoping, product authorization listings, packaging units, and order execution rules. ## Market Scoping and Reference Objects | Object | Managed By | Purpose | | --- | --- | --- | | Internal Organization Unit | Admin | Defines the business unit (InternalOrgUnit) that scopes orders, products, accounts, and users. | | Account Internal Org Unit | Admin | Links customer accounts to an IOU to enforce market-level account scoping. | | Product Internal Org Unit | Admin | Links products to an IOU and marks eligibility for Product Discovery API qualification (IsQualified). | | Internal Org Unit User | Admin | Links sales reps to an IOU, establishing default market assignments, working hours, and work days. | | Product Catalog Qualification | Admin | Binds product catalogs to an IOU, defining active qualification and eligibility date ranges. | ## Order Specification and Rule Objects | Object | Managed By | Purpose | | --- | --- | --- | | Order Specification | Admin | Defines reusable order templates (OrderSpec), enforcing valid dates, DSD document types, allowed orderer types, and lead-time delivery rules. | | Order Product Specification | Admin | Defines line-item rules (OrderItemSpec), including inventory movement types, closed listing rules, and quantity suggestion methods. | | Order Spec Order Product Spec | Admin | Junction object (OrderSpecOrderItemSpec) defining which item specifications are permitted for a specific order specification. | | Order Product Spec Rule | Admin | Attaches specific operational or price-impact rules to an order product specification. | ## Assortment and Unit of Measure Objects | Object | Managed By | Purpose | | --- | --- | --- | | Assortment | Admin | Master list of authorized products or SKUs (Assortment and AssortmentProduct). | | Store Assortment | Admin | Links product assortments to customer accounts, enabling automatic inheritance across parent/child account hierarchies. | | Location Assortment | Admin | Links product assortments to physical warehouse stock points (Location) for Direct Store Delivery (DSD) workflows. | | Associated Location | Admin | Connects customer retail accounts to their supplying warehouse locations (AssociatedLocation). | | Product Unit of Measure | Admin | Defines ordering packaging levels (cases, pallets) per product and IOU, setting default ordering units and display sequences. | ## Transactional Order Objects | Object | Managed By | Purpose | | --- | --- | --- | | Order | Telesales Rep | Represents the header transaction record (Order), tracking accounts, delivery dates, partner roles, and lifecycle phase (Draft to Activated). | | Order Item | Telesales Rep | Represents individual line items (OrderItem), storing ordered quantities, selected UOMs, net prices, and pricing waterfall subtotals. | ## Party, Role, and Account Hierarchy Objects These objects define how customer accounts are classified and related to partner accounts (bill-to, ship-to, payer, and wholesaler/broker fulfillment), and how account hierarchies drive assortment inheritance. | Object | Managed By | Purpose | | --- | --- | --- | | Account Role | Admin | Sets an account's ordering classification through Allowed Orderer Type (Direct or Indirect) and other transaction defaults. Validated against the order specification's allowed orderer types when an order is saved. | | Account Account Relation (AAR) | Admin | Defines relationships between a customer account and its partner accounts. At order save, these relationships automatically populate the order's Bill Recipient, Delivery Recipient (ship-to), Payer, and Fulfillment (wholesaler) accounts. The framework considers the relationship marked as primary and matching the order's IOU, and falls back to the customer's own account if no relationship is found. | | Party Role Relation | Admin | Defines the role relationship type (such as Bill, Delivery Recipient, Payer, or Wholesaler) used by Account Account Relation records to classify how each partner account interacts for billing, delivery, payment, and distribution. | ## Object Relationships and Data Flow Here's the relationship flow from system configuration to runtime order execution: 1. **Market Setup:** InternalOrgUnit records are created and bound to accounts, products, users, and catalogs to establish data visibility boundaries. 2. **Assortment and UoM Binding:** Authorized products are grouped into Assortment records and assigned to account or account hierarchy node (StoreAssortment) or warehouse locations (LocationAssortment). ProductUnitOfMeasure records establish valid ordering packaging. 3. **Template Association:** OrderSpec records are linked to permitted OrderItemSpec templates via OrderSpecOrderItemSpec, defining valid transaction rules. 4. **Runtime Execution:** At runtime, launching New Order from an account evaluates IOU scoping and template rules, auto-populates pre-qualified assortment products, calculates UOM packaging pricing via AdvSalesTxnContext, and releases the Order record in Activated status for ERP replication. For the full field-level reference for each object, see the [Advanced Orders for Telesales object reference](https://developer.salesforce.com/docs/industries/advanced-orders-for-telesales/references/advanced-orders-for-telesales-objects/data-model.html). # Advanced Orders for Telesales Scenarios Review real-world business scenarios to see how telesales reps capture, price, and release customer orders using the Advanced Orders for Telesales framework. ### Required Editions

View supported editions

This section covers these end-to-end scenarios: Capture a Standard Order Walk through the baseline workflow of capturing a direct order, adding a single standard line item, running pricing, and activating the record. Capture an Indirect Order Walk through capturing an indirect order, where a telesales rep places an order for a customer account that's fulfilled through a third-party wholesaler or broker rather than directly by the manufacturer. - **[Scenario 1: Capture a Standard Order](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_scenario_standard_order.htm&release=264.0.0&type=5)** Walk through the baseline order capture flow, where a telesales rep captures a standard (direct) order for a customer account, adds a single line item, calculates pricing, and activates the order. - **[Scenario 2: Capture an Indirect Order](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_scenario_indirect_order.htm&release=264.0.0&type=5)** Walk through capturing an indirect order, where a telesales rep places an order for a customer account that's fulfilled through a third-party wholesaler or broker rather than directly by the manufacturer. This flow follows the same steps as a standard order, with additional handling for the fulfillment account. # Advanced Rebate and Accrual Post-Processing - Source Generation The Source Generation DPE reads the calculated amounts from Rule Processing DPE and writes them into three Salesforce objects. Program Rebate Type Accrual Sources provide the most granular view — the accrued amount per benefit tier per member per period. For stepped rebate types, a separate record is created for each tier the member crossed. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
For NovaTech, Revenue-Based, April 2026: | Member | Rebate Type | Benefit Tier | Qualifying Quantity | Accrued Amount | | --- | --- | --- | --- | --- | | NovaTech | Revenue-Based | Tier 1 | 100 | $2.00 | | NovaTech | Revenue-Based | Tier 2 | 170 | $2.10 | $2.00 + $2.10 = $4.10 Program Rebate Type Accruals show one record per member per rebate type per period, aggregating all transactions. | Member | Program | Rebate Type | Accrual Period | Accrued Amount | | --- | --- | --- | --- | --- | | NovaTech | AMER Program | Volume-Based | April 2026 | $510 | | NovaTech | AMER Program | Revenue-Based | April 2026 | $4.10 | | GlobalMed | AMER Program | Volume-Based | April 2026 | $510 | | GlobalMed | AMER Program | Revenue-Based | April 2026 | $4.10 | | Rayler | APAC Program | Volume-Based | April 2026 | $140 | | Rayler | APAC Program | Revenue-Based | April 2026 | $1.40 | | SunriseRetail | APAC Program | Volume-Based | April 2026 | $140 | | SunriseRetail | APAC Program | Revenue-Based | April 2026 | $1.40 | Rebate Program Member Accruals show one record per member per period, summing all rebate types. The status is set to Calculation In Progress until the Status Update DPE runs. | Member | Program | Accrual Period | Accrued Amount | Status | | --- | --- | --- | --- | --- | | NovaTech | AMER Program | April 2026 | $514.10 | Calculation In Progress | | GlobalMed | AMER Program | April 2026 | $514.10 | Calculation In Progress | | Rayler | APAC Program | April 2026 | $141.40 | Calculation In Progress | | SunriseRetail | APAC Program | April 2026 | $141.40 | Calculation In Progress | NovaTech: $510 (Volume-Based) + $4.10 (Revenue-Based) = $514.10. Rayler: $140 (Volume-Based) + $1.40 (Revenue-Based) = $141.40 # Advanced Rebate and Accrual Post-Processing - Status Update The Status Update DPE sets the Status field on each Rebate Program Member Accrual from Calculation In Progress to Calculated after all amounts are confirmed. The records are now available for review and approval in the Rebate Program Member Accruals list view. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
## Final Accruals Members receive these accruals based on the benefit tiers they qualified for in April 2026. - NovaTech and GlobalMed each receive $514.10 from the AMER Program. Because the AMER Program aggregates all products per member, the combined 170-unit total (Radius + Spectra) qualifies both members for Tier 2 rates on both rebate types. - Rayler and SunriseRetail each receive $141.40 from the APAC Program for April 2026. The $141.40 reflects Radius only. Because the APAC Program aggregates per product, each product is calculated separately — Spectra transactions follow the same process and produce a separate accrual record. # Advanced Rebate and Accrual Pre-Processing - Data Preparation The Data Preparation DPE combines the Rule Meta records from Rule Configuration DPE with the active member list and the April 2026 accrual period. For each member–rebate type–period combination, it creates a Rule Ingest record that defines the applicable date range and a Tier Ingest record for each benefit tier within that range. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
Rule Ingest records for April 2026, AMER Program: | Member | Rebate Type | Period | | --- | --- | --- | | NovaTech | Volume-Based | Apr 1–Apr 30, 2026 | | NovaTech | Revenue-Based | Apr 1–Apr 30, 2026 | | GlobalMed | Volume-Based | Apr 1–Apr 30, 2026 | | GlobalMed | Revenue-Based | Apr 1–Apr 30, 2026 | Rule Ingest records for April 2026, APAC Program (one set per product per member): | Member | Rebate Type | Product | Period | | --- | --- | --- | --- | | Rayler | Volume-Based | Radius | Apr 1–Apr 30, 2026 | | Rayler | Revenue-Based | Radius | Apr 1–Apr 30, 2026 | | Rayler | Volume-Based | Spectra | Apr 1–Apr 30, 2026 | | Rayler | Revenue-Based | Spectra | Apr 1–Apr 30, 2026 | | SunriseRetail | Volume-Based | Radius | Apr 1–Apr 30, 2026 | | SunriseRetail | Revenue-Based | Radius | Apr 1–Apr 30, 2026 | | SunriseRetail | Volume-Based | Spectra | Apr 1–Apr 30, 2026 | | SunriseRetail | Revenue-Based | Spectra | Apr 1–Apr 30, 2026 | For each Rule Ingest record, one Tier Ingest record is created for each applicable benefit tier. For NovaTech on Revenue-Based: | Member | Rebate Type | Tier | From Quantity | To Quantity | Rate | | --- | --- | --- | --- | --- | --- | | NovaTech | Revenue-Based | Tier 1 | 0 | 100 | 2% | | NovaTech | Revenue-Based | Tier 2 | 100.01 | 200 | 3% | For Rayler on Volume-Based, Radius — total quantity is 70 units, which stays within Tier 1: | Member | Rebate Type | Product | Tier | From Quantity | To Quantity | Rate | | --- | --- | --- | --- | --- | --- | --- | | Rayler | Volume-Based | Radius | Tier 1 | 0 | 100 | $2/unit | No Tier 2 record is created for Rayler's Radius because the total quantity of 70 units does not exceed 100. # Advanced Rebate and Accrual Pre-Processing - Rule Configuration The Rule Configuration DPE reads the rebate type and benefit configuration and creates the reference records that the subsequent DPEs use. No accrual amounts are calculated at this stage. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
The DPE reads the Aggregation Criteria and Calculation Method you configured on each rebate type and converts them into Input Anchor and Rule Meta records. | Rebate Type | Program | Group by Member | Group by Product | | --- | --- | --- | --- | | Volume-Based | AMER Program | Yes | No | | Revenue-Based | AMER Program | Yes | No | | Volume-Based | APAC Program | Yes | Yes | | Revenue-Based | APAC Program | Yes | Yes | The DPE also creates a Rule Meta record for each rebate type that specifies whether tiers are applied retroactively or in steps. | Rebate Type | Program | Tier Application | | --- | --- | --- | | Volume-Based | AMER Program | Retroactive | | Revenue-Based | AMER Program | Stepped | | Volume-Based | APAC Program | Retroactive | | Revenue-Based | APAC Program | Stepped | # Advanced Release Strategies Consider advanced release strategies to control and revert changes. If you have business-critical use cases that can’t afford downtime, consider advanced deployment strategies when introducing changes to your org. For example, reduce the risk of changes impacting availability by adopting a feature flag, also known as a feature toggle, as part of your development and deployment process. A feature flag allows changes and new features to be deployed silently to production and remain dormant until the flag is turned on in production. Combined with system monitoring, your IT operations team can observe how the change performs and turn off the change if issues are detected. You can also use this approach to roll out new changes in multiple stages to different subsets of your Salesforce users. With this approach, you can test new features with a closed group of test users in production, or conduct pilot and beta programs with a wider group of early adopters. - Feature flags in Salesforce use custom metadata and permission sets. You can roll out new features to select users by assigning those users with the appropriate user permission set. - Remove the feature flag and permanently embed the feature after it’s officially rolled out to all users. # Advanced Security Checks for Omnistudio for Managed Packages Advanced security checks for Omnistudio for Managed Packages enhance data protection by enforcing stricter validation of access and permissions. When enabled, these checks validate object-level access, field-level security, and Apex class permissions for all users, including guest, authenticated, and non-authenticated users, across Omnistudio components. These security enhancements are available starting with the Winter '26, Spring '26, Winter '27 releases. These feature flags control the advanced security checks: | Flag Name | Description | | --- | --- | | `EnforceCardDatasourceSecurity` | Limits Flexcard datasource SOQL and SOSL queries from guest users and authenticated community or portal users to the objects listed in OmniStudioGuestAllowedObjects. This check is on by default. Don't turn it off, because doing so lets external users query setup objects. | | `OmniStudioGuestAllowedObjects` | Specifies the objects that guest users and authenticated community or portal users can query through Flexcard datasources, as a comma-separated list of API names, for example, Account,Contact,Case. If the list is empty, these users can't query any object. Security and metadata objects, such as Apex classes and profiles, are always blocked. | | `AdvancedOmnistudioAccessCheck` | Applies stricter checks for object access, field-level security, and Apex class permissions across Omnistudio. The checks apply to all user types, including guest, authenticated, and unauthenticated users. | | `ApexClassCheckForIP` | Checks that the user has permission to run the custom Apex classes that an Integration Procedure references. | For more information about `ApexClassCheckForIP`, see [Advanced Apex Class Check for Integration Procedures in Omnistudio for Managed Packages](https://help.salesforce.com/s/articleView?id=xcloud.os_ip_advanced_apex_class_check.htm&release=264.0.0&type=5 "The advanced Apex class check is performed through the ApexClassCheckForIP security flag. The ApexClassCheckForIP flag strengthens Omnistudio security by enforcing Apex class access checks during Integration Procedure execution. This enhancement makes sure that users have the required permissions to run custom Apex classes referenced within Integration Procedures."). The advanced security checks apply only when the flags are enabled. In addition to the `AdvancedOmnistudioAccessCheck` and `ApexClassCheckForIP` flags, Omnistudio supports these previously announced security flags: | Flag Name | Description | | --- | --- | | `ApexClassCheck` | Requires users to have explicit profile access to the VlocityOpenInterface Apex class behind remote actions called from Omniscripts, Flexcards, or REST APIs. Turn on this check if your org doesn't have an Omnistudio license, for example, if your org uses an installed Communications, Media, and Energy or Insurance package. | | EnforceDMFLSAndDataEncryption | Makes Data Mappers enforce object-level and field-level security and run in the context of the current user. Encrypted fields appear as plain text only to users with the View Encrypted Data permission. | | EnableQueryWithFLS | Enforces field-level security on SOSL queries and encrypts the queries on the client side. | Salesforce continues to recommend enabling them to support consistent enforcement of data access and security controls across Omnistudio components. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important During the week of February 2, 2026, Salesforce enables the AdvancedOmnistudioAccessCheck, ApexClassCheckForIP, ApexClassCheck, EnforceDMFLSAndDataEncryption, and EnableQueryWithFLS settings by default to enhance org security. Review and prepare your configuration for a seamless transition and to prevent potential service interruptions. When the advanced security checks are enabled, users must have the appropriate object permissions, field-level security, and Apex class access for the data and logic used within Omnistudio components. If the required permissions aren’t assigned, users may experience issues accessing or interacting with Omnistudio data. For information about the permissions required when the `AdvancedOmnistudioAccessCheck` feature flag is enabled, see [Omnistudio Component Access Issues and Potential Causes](https://help.salesforce.com/s/articleView?id=xcloud.os_comp_access_issues_causes.htm&release=264.0.0&type=5 "This table outlines the permissions required when the AdvancedOmnistudioAccessCheck feature flag is enabled."). ## How to Enable Security Flags in Omnistudio The steps to enable security flags and the location of the settings depend on whether the org has an Omnistudio license and whether it uses a custom data model or standard data model. Depending on your org's Omnistudio license status and data model, locate and configure the flags. For information about data models, see [Omnistudio Data Models](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_omnistudio_custom_objects_to_standard_objects.htm&type=5&language=en_US), [Does Your Org Use Custom or Standard Objects?](https://help.salesforce.com/s/articleView?id=xcloud.os_does_your_org_use_custom_or_standard_objects.htm&language=en_US&type=5). - In orgs without an Omnistudio license or orgs still using custom data model: 1. From Setup, in the Quick Find box, enter Custom Settings, and then select **Custom Settings**. 2. Click **G** and go to **General Settings**. 3. Click **Manage**. 4. Click **New**. 5. In the Label field, enter the flag name. For example, AdvancedOmnistudioAccessCheck. 6. In the Value field, enter true. - In orgs with an Omnistudio license using the standard data model: 1. From Setup, in the Quick Find box, enter Omni Interaction Configuration, and then select **Omni Interaction Configuration**. 2. Click **New Omni Interaction Configuration**. 3. In the Label field, enter the flag name. For example, AdvancedOmnistudioAccessCheck. 4. In the Value field, enter true. - **[Set Up the Object Allowlist for External User Queries in Omnistudio](https://help.salesforce.com/s/articleView?id=xcloud.os_setup_datasource_allowlist.htm&release=264.0.0&type=5)** Specify which objects Experience Cloud guest users and authenticated community or portal users can query through Omnistudio, so that external users reach only the data that your site needs. - **[Omnistudio Component Access Issues and Potential Causes](https://help.salesforce.com/s/articleView?id=xcloud.os_comp_access_issues_causes.htm&release=264.0.0&type=5)** This table outlines the permissions required when the AdvancedOmnistudioAccessCheck feature flag is enabled. - **[Troubleshoot Component Access in Omnistudio for Managed Packages](https://help.salesforce.com/s/articleView?id=xcloud.os_security_troubleshoot_comp_access.htm&release=264.0.0&type=5)** Identify and resolve access-related issues in your orgs: # Advanced Ways to Select Records for a Briefcase Learn advanced ways to create a briefcase that contains the most relevant records for your mobile workers. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
- **[Related Object Rules](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_related_record_priming.htm&release=264.0.0&type=5)** To give your briefcase users access to related records across different objects, set up related object rules. - **[Select Records with Related Object Rules](https://help.salesforce.com/s/articleView?id=xcloud.select_records_with_related_rules.htm&release=264.0.0&type=5)** Create a briefcase that selects records using three levels of related object rules. - **[Custom Formula Fields](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_custom_formula_fields.htm&release=264.0.0&type=5)** To select records based on information in multiple objects, create a custom formula field. - **[Select Records with a Custom Formula Field](https://help.salesforce.com/s/articleView?id=xcloud.select_records_custom_formula_field.htm&release=264.0.0&type=5)** Create a briefcase that filters an object rule using a custom formula field. # AdvancedOmnistudioAccessCheck Configured set to True Control Org‑wide setting that enforces a strict Salesforce security model across all Omnistudio components. ## Control Name Omnistudio - Object and Field Level Security (AdvancedOmnistudioAccessCheck Configured set to 'True'). ## Control Overview Org‑wide setting that enforces strict Salesforce security model (object permissions, field‑level security, Apex sharing rules) across all Omnistudio components including Vlocity Cards, FlexCards, Integration Procedures, and DataRaptors. ## Description When enabled, Omnistudio runtime validates every user's permissions before data access/display rather than bypassing FLS/CRUD through component logic. This applies to both internal users and external Experience Cloud portals using Omnistudio UI. ## Recommended Configuration Select AdvancedOmnistudioAccessCheck Configured set to "True" in Setup>Custom Settings>Omnistudio global settings. ## Security Impact Prevents privilege escalation through Omnistudio UIs by ensuring components respect the same permission model as standard Salesforce pages. Eliminates common bypass patterns where FlexCards/DataRaptors ignored sharing rules. ## Business Impact Aligns low‑code Omnistudio development with enterprise security governance. Supports compliance audits showing uniform permission enforcement across custom and standard functionality. ## Security Risk If Not Configured Lack of advanced security checks enforcement to strictly validate object, field‑level, and Apex class permissions for all users using Omnistudio creates permission bypass vulnerabilities. ## Threat Scenarios Increased risk of field and object data exposure; external portal users view PII fields that they shouldn't access, internal users see records outside sharing boundaries, or compromised accounts harvest data through Omnistudio‑driven reports/APIs. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Existing Omnistudio apps may break when enabling (components accessing restricted data); comprehensive testing required; storage and performance impact minimal. ## Higher Risk When Omnistudio powers Experience Cloud portals, handles PII/PHI/financial data, complex sharing model (territory/owner/rules), or external/partner users are enabled. ## Low Risk When Internal users only, simple object model without sharing rules, Omnistudio used for display‑only dashboards with no data modification. ## Business and Integration Considerations Enable in sandbox first and systematically test all Omnistudio pages. Update permission sets and profiles as needed post‑deployment. ## Security Health Review Guidance Must have. ## Who Is Impacted Omnistudio developers, Experience Cloud admins, security architects validating low‑code security, end users accessing Omnistudio‑powered applications. #### See Also - [Advanced Security Checks for Omnistudio for Managed Packages](https://help.salesforce.com/s/articleView?id=xcloud.os_advanced_security_updates_overview.htm&type=5&language=en_US) # Advantages of Binary Upload and Binary Handoff Distribution Methods If your org is familiar with how the app stores work, the Binary Upload and Binary Handoff Distribution Methods have many advantages for managing the release of your app on your end. ## Binary Upload The Binary Upload Distribution Method gives you the flexibility to take advantage of features offered by the app stores. iOS - Choose your own release schedule that aligns with your practices and processes. - Localization support for store metadata. - Staged release rollout for your app. - Quick access to the latest improvements and features on the App Store. - Upload up to 10 screenshots for your App Store listing. - Publish your app in the correct app category in the App Store. - Distribute your app on Macs with Apple Silicon. See [iPhone and iPad Apps on Apple Silicon Macs (Apple)](https://developer.apple.com/macos/iphone-and-ipad-apps/) for more information. - Manage the last compatible version of your app. You can make the last compatible of your app available to users who don’t have a device that’s compatible with the latest version of your app. - Unpublish your app at your own discretion. Android - Choose your own release schedule that aligns with your practices and processes. - Localization support for store metadata. - Pre-launch your app to identify any potential issues such as stability, performance, accessibility, and security. See [Pre-launch reports (Google)](https://play.google.com/console/about/pre-launchreports/) for more information. - Staged release rollout for your app. - Do a pre-registration of the app for specific user base. See [Pre-registration (Google)](https://play.google.com/console/about/pre-registration/) for more information. - Perform different types of testing (open vs closed). - Quick access to the latest improvements and features on the Play Store. - Upload up to 8 screenshots for your Play Store listing. - Unpublish your app at your own discretion. - Manage when certain updates (not in the binary) go live in your app. See [Publishing overview (Google)](https://play.google.com/console/about/publishingoverview/) for more information. - Target your app for specific mobile carrier (AT&T, Verizon, and so on). - Take advantage of App Actions on using Actions on Google. See [App Actions overview (Google)](https://developers.google.com/assistant/app/overview) for more information. - Exclude specific devices that you don’t want your app to support. - Display links to your app in Google searches. See [App Indexing on Google Search (Google)](https://support.google.com/googleplay/android-developer/answer/6041489?hl=en) for more information. - Create custom store listings to appeal to a specific audience. See [Create custom store listings to target specific countries (Google)](https://support.google.com/googleplay/android-developer/answer/9867158?hl=en) for more information. - Run A/B tests on your store listing. See [Store listing experiments (Google)](https://play.google.com/console/about/store-listing-experiments/) for more information. ## Binary Handoff Binary Handoff provides more control than Binary Upload for organizations with in-house Apple and Google expertise. Beyond the standard benefits, this method gives your organization direct control over the app’s signing identity. This is critical for companies with security policies requiring in-house code signing with private keys. By re-signing the app, you maintain end-to-end control over cryptographic integrity and mobile app submission. # Advantages of Binary Upload Distribution Method If your org is familiar with how the app stores work, the Binary Upload Distribution Method has many advantages for managing the release of your app on your end. The Binary Upload Distribution Method gives you the flexibility to take advantage of features offered by the app stores. iOS - Choose your own release schedule that aligns with your practices and processes. - Localization support for store metadata. - Staged release rollout for your app. - Quick access to the latest improvements and features on the App Store. - Upload up to 10 screenshots for your App Store listing. - Publish your app in the correct app category in the App Store. - Distribute your app on Macs with Apple Silicon. See [iPhone and iPad Apps on Apple Silicon Macs (Apple)](https://developer.apple.com/macos/iphone-and-ipad-apps/) for more information. - Manage the last compatible version of your app. You can make the last compatible of your app available to users who don’t have a device that’s compatible with the latest version of your app. - Unpublish your app at your own discretion. Android - Choose your own release schedule that aligns with your practices and processes. - Localization support for store metadata. - Pre-launch your app to identify any potential issues such as stability, performance, accessibility, and security. See [Pre-launch reports (Google)](https://play.google.com/console/about/pre-launchreports/) for more information. - Staged release rollout for your app. - Do a pre-registration of the app for specific user base. See [Pre-registration (Google)](https://play.google.com/console/about/pre-registration/) for more information. - Perform different types of testing (open vs closed). - Quick access to the latest improvements and features on the Play Store. - Upload up to 8 screenshots for your Play Store listing. - Unpublish your app at your own discretion. - Manage when certain updates (not in the binary) go live in your app. See [Publishing overview (Google)](https://play.google.com/console/about/publishingoverview/) for more information. - Target your app for specific mobile carrier (AT&T, Verizon, and so on). - Take advantage of App Actions on using Actions on Google. See [App Actions overview (Google)](https://developers.google.com/assistant/app/overview) for more information. - Exclude specific devices that you don’t want your app to support. - Display links to your app in Google searches. See [App Indexing on Google Search (Google)](https://support.google.com/googleplay/android-developer/answer/6041489?hl=en) for more information. - Create custom store listings to appeal to a specific audience. See [Create custom store listings to target specific countries (Google)](https://support.google.com/googleplay/android-developer/answer/9867158?hl=en) for more information. - Run A/B tests on your store listing. See [Store listing experiments (Google)](https://play.google.com/console/about/store-listing-experiments/) for more information. # Advantages of Binary Upload Distribution Method and Binary Handoff Distribution Methods If your org is familiar with how the app stores work, the Binary Upload Distribution Method has many advantages for managing the release of your app on your end. The Binary Upload Distribution Method gives you the flexibility to take advantage of features offered by the app stores. iOS - Choose your own release schedule that aligns with your practices and processes. - Localization support for store metadata. - Staged release rollout for your app. - Quick access to the latest improvements and features on the App Store. - Upload up to 10 screenshots for your App Store listing. - Publish your app in the correct app category in the App Store. - Distribute your app on Macs with Apple Silicon. See [iPhone and iPad Apps on Apple Silicon Macs (Apple)](https://developer.apple.com/macos/iphone-and-ipad-apps/) for more information. - Manage the last compatible version of your app. You can make the last compatible of your app available to users who don’t have a device that’s compatible with the latest version of your app. - Unpublish your app at your own discretion. Android - Choose your own release schedule that aligns with your practices and processes. - Localization support for store metadata. - Pre-launch your app to identify any potential issues such as stability, performance, accessibility, and security. See [Pre-launch reports (Google)](https://play.google.com/console/about/pre-launchreports/) for more information. - Staged release rollout for your app. - Do a pre-registration of the app for specific user base. See [Pre-registration (Google)](https://play.google.com/console/about/pre-registration/) for more information. - Perform different types of testing (open vs closed). - Quick access to the latest improvements and features on the Play Store. - Upload up to 8 screenshots for your Play Store listing. - Unpublish your app at your own discretion. - Manage when certain updates (not in the binary) go live in your app. See [Publishing overview (Google)](https://play.google.com/console/about/publishingoverview/) for more information. - Target your app for specific mobile carrier (AT&T, Verizon, and so on). - Take advantage of App Actions on using Actions on Google. See [App Actions overview (Google)](https://developers.google.com/assistant/app/overview) for more information. - Exclude specific devices that you don’t want your app to support. - Display links to your app in Google searches. See [App Indexing on Google Search (Google)](https://support.google.com/googleplay/android-developer/answer/6041489?hl=en) for more information. - Create custom store listings to appeal to a specific audience. See [Create custom store listings to target specific countries (Google)](https://support.google.com/googleplay/android-developer/answer/9867158?hl=en) for more information. - Run A/B tests on your store listing. See [Store listing experiments (Google)](https://play.google.com/console/about/store-listing-experiments/) for more information. ## Binary Handoff The Binary Handoff distribution method offers an even greater level of control than Binary Upload. In addition to the advantages listed above, Binary Handoff gives your organization direct control over the app's signing identity. This is a critical requirement for companies whose security policies mandate that all application code signing is performed in-house using their own private keys. By re-signing the app yourself, you maintain end-to-end control over the cryptographic integrity and submission of your mobile app. # Agent Templates in Asset Service Lifecycle Management Use agent templates in Asset Service Lifecycle Management to quickly deploy AI-powered agents for asset service management and inventory tasks. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
agent Template Topics actions
Asset Service Management Asset Service Estimation
Asset Service Work Order Management
Inventory Management Inventory Management
Product Upsell and Cross-sell Upsell and Cross-sell
# Agent Templates in Channel Revenue Management Use agent templates in Channel Revenue Management to quickly deploy AI-powered agents for rebate management, payout processing, and responding to partner inquiries. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions with the Agentforce for Manufacturing add-on license or included in Agentforce 1 Manufacturing and Agentforce 1 Automotive Editions. Requires each user to have the Agentforce for Manufacturing add-on to access the action.
agent Template Topics actions
Channel Revenue Management Rebate Payout Insight
# Agent Topic: Asset Service Estimation Service representatives can use the Asset Service Estimation agent topic to summarize asset performance and telematics data, select specific price books and quantities for multiple products, and apply individual coverage such as warranties, entitlements, or service contracts to each line item. It also helps to create service quotes and draft emails to customers. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
Here’s how service representatives at manufacturing companies can manage asset services for a customer by using Agentforce.
Instructions Example Utterance or User Input Agent Response Standard Action Engaged
Generate an asset summary from its record page. "Summarize the asset record for Marine Generator 2X 2024" The agent summarizes the asset's telemetry and service data and checks for fault codes. If codes exist, it prompts for a repair estimate. Summarize Asset Performance
Create service estimates. "Create a repair estimate" The agent prompts for a work type and shows a list of the associated work types for user selection. Query Records
Select the relevant work type. "General Service" The agent searches for matching work types and shows a list of price books containing all products associated with the user selected work type. Get Pricebooks From WorkType
Select the relevant price book. "Standard Maintenance Price Book" The agent shows a list of products from the price book, including their prices and a quantity edit box for user input. Get Product Price Details
Select products and the quantity required for the estimate. "1 Cabin Air Filter and 4 Floor Mats" The agent shows a list of associated, active coverages for each product that the user can select from. The user can select a different coverage for each product if required. Get Products with Coverage
Select the relevant coverages for each product.
  • Asset Warranties
  • Service Contract
  • Entitlement
The agent prompts for a manual discount percentage. -
Specify a manual discount and confirm the generation of service quote. "Apply a 12.5% discount" The agent requests user confirmation of the selected information and then confirmation to create the quote. Once confirmed, it generates the service quote and presents the final details. Create Service Quote
Send an email to the customer with quote details. "Draft an email to the customer" The agent drafts an email using the asset’s contact details and includes the itemized quote information. Draft Or Revise Email
If satisfied with the generated quote, accept the quote. ## Examples of Utterances That Trigger This Topic - "Summarize the asset record" - “Give repair estimates for this Asset.” - "Summarize the telemetry information for this asset record" - "Show me the relevant price books for this work type" - "Draft an email to the customer with the quote details" # Agent Topic: Asset Service Work Order Management Service representatives can use the Asset Service Management agent topic to retrieve accepted quotes, create work orders, and draft emails to share work order details with customers. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
Here’s how service representatives can use the Asset Service Management agent to create work orders for products that require maintenance. The agent retrieves active and approved service quotes based on the asset and prompts the user to select a quote. After the quote is selected, the agent creates a work order from it and, if needed, offers to draft an email with the work order details. | User Input | Action Used | Agent Response | | --- | --- | --- | | "Show me service quotes for the generator unit." | [Get Service Quote](https://help.salesforce.com/s/articleView?id=ai.agent_ref_get_svc_quote.htm&type=5&language=en_US) | Agent retrieves and presents active and approved quotes for the generator unit. | | "Create a work order for quote Q-2031." | [Create Service Work Order](https://help.salesforce.com/s/articleView?id=ai.agent_ref_create_svc_wo.htm&type=5&language=en_US) | Agent creates a work order based on quote Q-2031. | | "Can you summarize this work order?" | [Summarize Record](https://help.salesforce.com/s/articleView?id=ai.copilot_actions_ref_summarize_record.htm&type=5&language=en_US) | Agent provides a summary of the work order details, including asset, issue, and service timeline. | | "Send this work order to the customer." | [Draft Or Revise Email](https://help.salesforce.com/s/articleView?id=ai.copilot_actions_ref_draft_or_revise_email.htm&type=5&language=en_US) | Agent generates an email draft containing the work order details. | ## Examples of Utterances That Trigger This Topic - "Get the service quote." - "Create a work order" - "Generate a summary of the Work Order/Quote" - "Create a Quote for the mentioned work type" # Agent Topic: Inventory Management Use the Inventory Management agent topic to quickly search for inventory items across multiple locations, generate comprehensive summaries with stock status and quantities, and create product replenishment requests with ease. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
## Topic Details
API Name InventoryManagement
Included Agent Actions Get Search Criteria and Results
Summarize Inventory Details
Create Product Request
Get Record Details
Identify Record By Name
# Agent Topic: Rebate Payout Insight Rebate administrators can use the Rebate Payout Insight agent topic to summarize rebate payouts, provide traceability for aggregates, and review payout details for program members. This agent ensures accurate tracking of rebate program activities without performing any direct updates to rebate-related records. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions with the Agentforce for Manufacturing add-on license or included in Agentforce 1 Manufacturing and Agentforce 1 Automotive Editions. Requires each user to have the Agentforce for Manufacturing add-on to access the action.
Here’s how rebate administrators can use the Rebate Payout Insight agent to quickly review payout details and trace aggregates for program members. By using natural language queries, the administrator can request a summary of rebate payouts for a specific period. The agent then provides traceability for aggregates, highlights payouts not generated due to configuration or data issues, and presents totals by program and rebate type, ensuring accurate tracking of rebate program activities without performing any direct updates to rebate-related records. | User Input | Action Used | Agent Response | | --- | --- | --- | | "Show me the summary for this member" | [Summarize Rebate Payouts for a Member](https://help.salesforce.com/s/articleView?id=ai.agent_ref_summarize_rebate_payout_member.htm&language=en_US) | The agent retrieves the overall payout summary for the specified rebate program member, identifying the member record first if not already known. If multiple members exist for the account, it prompts the user to select one before showing the summary. | | "Show me all payout sources for this rebate type payout" | [Get Rebate Type Payout Sources](https://help.salesforce.com/s/articleView?id=ai.agent_ref_get_rebate_type_payout_source.htm&language=en_US) | The agent fetches all payout sources for the specified rebate type payout and displays them in a viewRecordList. f there are more than three records, it provides an option to see additional items and asks the user to select a payout source by name or serial number to proceed. | | "Show me the detailed summary for this member aggregate" | [Get Aggregate Summary](https://help.salesforce.com/s/articleView?id=ai.agent_ref_get_aggregate_summary.htm&language=en_US) | The agent retrieves and displays a comprehensive summary of the specified rebate member product aggregate, including its status, rebate type, period, benefits, quantities, rebate and payout amounts, and other related financial details. | | "Show me the list of payout periods for this member" | [Get Payout Periods For a Member](https://help.salesforce.com/s/articleView?id=ai.agent_ref_payout_periods_member.htm&language=en_US) | The agent retrieves all payout periods for the specified rebate program member and displays them in a viewRecordList. If more than three records are available, it provides an option to see additional items and prompts the user to select a payout period by typing its name or serial number. | | Show me the pending aggregates for this payout period | [Get Aggregate Sources for a Member](https://help.salesforce.com/s/articleView?id=ai.agent_ref_aggregate_sources_member.htm&language=en_US) | The agent fetches all pending or processed rebate aggregate sources for the specified payout period and displays them in a viewRecordList. If there are more than three records, it provides an option to see additional items and prompts the user to select an aggregate by typing its name or serial number for the next action. If no payout period is in context, it first calls GetPayoutPeriodsForMember to let the user select a period. | | Show me all rebate type payouts for this payout period | [Get Rebate Type Payouts For a Member](https://help.salesforce.com/s/articleView?id=ai.agent_ref_rebate_type_payouts_member.htm&language=en_US) | The agent retrieves all rebate type payouts for the specified payout period and displays them in a viewRecordList. If more than three records exist, it provides an option to see additional items and prompts the user to select a payout by typing its name or serial number for the next action. | | Show me the summary for this rebate type payout source | [Summarize Rebate Type Payout Source](https://help.salesforce.com/s/articleView?id=ai.agent_ref_summarize_rebate_type_payout_source.htm&language=en_US) | The agent generates a summary of the specified rebate type payout source, including its aggregates, benefits, and top transaction journals. If the payout source name is provided, it first uses IdentifyRecordByName to retrieve the record ID before generating the summary. | | Show me the member summary for this period | [Summarize Rebate Payouts by Period](https://help.salesforce.com/s/articleView?id=ai.agent_ref_summarize_rebate_payouts_period.htm&language=en_US) | The agent retrieves the Rebate Program Member summary for the specified period. If the member’s rebateProgramMemberId is not already in context but the name is provided, it first uses IdentifyRecordByName to fetch the ID. It then uses the payoutPeriodId from mfgPayoutPeriodId to generate the summary. | ## Examples of Utterances That Trigger This Topic - "Show me the overall member summary for this Rebate Program Member" - "Show pending aggregates for this member" # Agentforce for AI Relationship Research AI Relationship Research uses AI to discover, analyze, and present information about the people and organizations connected to your Salesforce records. The AI Relationship Research Subagent brings this capability into Agentforce conversations. Users can ask an agent to generate new relationship research or retrieve existing insights. The agent coordinates the required actions and returns sourced relationship insights directly in the conversation, without requiring users to open the record or use a separate research tool. ## Actions Available in the AI Relationship Research Subagent The AI Relationship Research Subagent includes actions that work together to complete a relationship research request. Based on the user's request and available conversation context, the agent selects the appropriate action. The AI Relationship Research Subagent actions include: - Identify Record by Name - Generate AI Relationship Research Insights - Check Relationship Research Job Status - Get AI Relationship Research Insights ## Example of Utterances Classified to This Subagent | **User sample input** | **Action Engaged** | **Agent Response** | | --- | --- | --- | | "Find the account named Acme." | Identify Record by Name | The agent looks up the record by the provided name and returns the matching account, contact, lead, or opportunity. If the agent finds more than one match, it asks the user to select the correct one. | | "Do we have a contact called Jane Doe?" | Identify Record by Name | The agent checks whether a contact with that name exists and returns the matching record. | | "Research relationships for Acme by using the Standard Relationship Research configuration." | Generate AI Relationship Research Insights | The agent confirms that relationship research started, provides a research job reference or status, and notes that processing sometimes takes a few minutes. | | "Discover new relationships for this opportunity." | Generate AI Relationship Research Insights | The agent starts a research job for the current opportunity and confirms that it's underway. | | "What's the status of that research job?" | Check Relationship Research Job Status | The agent reports the current state, such as pending, running, completed, or failed, using the most recent job from the conversation. | | "Is job R-000045 done yet?" | Check Relationship Research Job Status | The agent looks up the specified job ID and reports its current state, along with diagnostic information or result links if requested. | | "Show me the relationship insights for this account." | Get AI Relationship Research Insights | The agent returns a readable list of related people and companies, their connection to the account, and the strongest evidence or sources for each relationship. | | "What connections do we have for this lead? Limit to 5 results." | Get AI Relationship Research Insights | The agent applies the requested filter and returns up to 5 related people or companies with supporting evidence. | - **[Configure AI Relationship Research Subagent](https://help.salesforce.com/s/articleView?id=xcloud.airr_configure_ai_relationship_reseach_subagent.htm&release=264.0.0&type=5)** Add the AI Relationship Research Subagent to an agent so users can retrieve relationship insights about accounts, contacts, leads, and opportunities in Agentforce conversations. # Agentforce for Asset Service Lifecycle Management Agentforce for Asset Service Lifecycle Management offers a suite of AI-powered agent templates that help you manage inventory tasks and asset service estimation through natural language interactions. With out-of-the-box agent topics and actions, quickly generate performance summaries, estimate service requirements for assets, and search for products or assets based on user-defined criteria. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
- **[Considerations and Limitations for Agentforce in Asset Service Lifecycle Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_considerations.htm&release=264.0.0&type=5)** To use Asset Service Lifecycle Management, consider supported functionality, usage, limitations and allowances, limits, and other issues. - **[Agent Templates in Asset Service Lifecycle Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_templates.htm&release=264.0.0&type=5)** Use agent templates in Asset Service Lifecycle Management to quickly deploy AI-powered agents for asset service management and inventory tasks. - **[Agentforce for Asset Service Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_asset_service_management_agent.htm&release=264.0.0&type=5)** Helps service representatives create summaries, generate quotes, and draft customer communications using conversational interactions. - **[Agentforce for Inventory Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_inventory_management_agent.htm&release=264.0.0&type=5)** Helps users efficiently monitor and manage inventory using natural language queries. It supports actions like finding products and vehicles, summarizing stock levels, and creating product requests. By mapping user input to relevant search criteria, the agent delivers accurate, contextual results. Whether it's about locating a specific product or part, checking stock levels, or an inventory manager creating a replenishment product request, the agent streamlines end-to-end inventory interactions for faster decision-making. - **[Agentforce for Product Upsell and Cross-sell in Service](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_for_product_upsell_and_cross_sell_in_service.htm&release=264.0.0&type=5)** Use Agentforce to help every technician and service rep to identify and propose upgrades or add-ons for specific assets, or recommend new products during customer interactions. You can access this Asset Service Lifecycle Management (ASLM) feature on both desktop and the Salesforce Field Service (SFS) mobile app. # Agentforce for Asset Service Management Helps service representatives create summaries, generate quotes, and draft customer communications using conversational interactions. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note The user interface of this product is available in English only and may not be fully supported in other languages. - **[Set Up Agentforce for Asset Service Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_asset_service_management_prerequisites.htm&release=264.0.0&type=5)** Set up and configure features to use agentforce for Asset Service Management. Before creating an agent using this template, you must set up Data Cloud. - **[Create an Agent from the Asset Service Management Template](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_create_asset_management_agent.htm&release=264.0.0&type=5)** Create an agent using the Asset Service Management template to help users easily summarize asset performance and telematics data, generate quotes, and draft customer emails. - **[Agent Topic: Asset Service Estimation](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_asset_service_estimation_topic.htm&release=264.0.0&type=5)** Service representatives can use the Asset Service Estimation agent topic to summarize asset performance and telematics data, select specific price books and quantities for multiple products, and apply individual coverage such as warranties, entitlements, or service contracts to each line item. It also helps to create service quotes and draft emails to customers. - **[Agent Topic: Asset Service Work Order Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_asset_service_work_order_management_topic.htm&release=264.0.0&type=5)** Service representatives can use the Asset Service Management agent topic to retrieve accepted quotes, create work orders, and draft emails to share work order details with customers. # Agentforce for Channel Revenue Management Agentforce for Channel Revenue Management simplifies the management of rebate programs and payout processes through natural language interactions. With predefined agent topics and actions, track calculations, resolve issues with payout insights, and review overall rebate program details to ensure transparency, traceability, and accurate claims. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions with the Agentforce for Manufacturing add-on license or included in Agentforce 1 Manufacturing and Agentforce 1 Automotive Editions. Requires each user to have the Agentforce for Manufacturing add-on to access the action.
- **[Set Up Agentforce for Channel Revenue Management](https://help.salesforce.com/s/articleView?id=xcloud.chrm_genai_agentforce_setup_intro.htm&release=264.0.0&type=5)** Set up Agentforce for Channel Revenue Management and use agent templates to streamline rebate and payout management for efficient operations. - **[Agentforce for Channel Revenue Management](https://help.salesforce.com/s/articleView?id=xcloud.chrm_genai_agentforce_rebate_payout_insight_agent.htm&release=264.0.0&type=5)** Track rebate payout progress and resolve issues efficiently. View total payouts by program and period, see splits by rebate type, and identify aggregates where payouts weren’t generated due to configuration or data issues. Drill into specific periods and payout sources for traceability, and review aggregates to ensure claim accuracy. # Agentforce for Channel Revenue Management Track rebate payout progress and resolve issues efficiently. View total payouts by program and period, see splits by rebate type, and identify aggregates where payouts weren’t generated due to configuration or data issues. Drill into specific periods and payout sources for traceability, and review aggregates to ensure claim accuracy. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions with the Agentforce for Manufacturing add-on license or included in Agentforce 1 Manufacturing and Agentforce 1 Automotive Editions. Requires each user to have the Agentforce for Manufacturing add-on to access the action.
- **[Set Up Agentforce for Channel Revenue Management](https://help.salesforce.com/s/articleView?id=xcloud.chrm_genai_agentforce_channel_rev_management_prequisites.htm&release=264.0.0&type=5)** Set up and configure features to use agent force for Channel Revenue Management. Before you create an agent using this agent template, make sure to set up Data Cloud. - **[Agent Topic: Rebate Payout Insight](https://help.salesforce.com/s/articleView?id=xcloud.chrm_genai_agentforce_rebate_payout_insight_topic.htm&release=264.0.0&type=5)** Rebate administrators can use the Rebate Payout Insight agent topic to summarize rebate payouts, provide traceability for aggregates, and review payout details for program members. This agent ensures accurate tracking of rebate program activities without performing any direct updates to rebate-related records. # Agentforce for Inventory Management Helps users efficiently monitor and manage inventory using natural language queries. It supports actions like finding products and vehicles, summarizing stock levels, and creating product requests. By mapping user input to relevant search criteria, the agent delivers accurate, contextual results. Whether it's about locating a specific product or part, checking stock levels, or an inventory manager creating a replenishment product request, the agent streamlines end-to-end inventory interactions for faster decision-making. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note The user interface of this product is available in English only and may not be fully supported in other languages. - **[Set Up Agentforce for Inventory Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_inventory_management_agent_prerequisites.htm&release=264.0.0&type=5)** Set up and configure features to use agentforce for Inventory Management. - **[Create an Agent from the Inventory Management Template](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_create_inventory_management_agent.htm&release=264.0.0&type=5)** Create an agent from the Inventory Management template that helps your users easily find products and vehicles in inventory, generate quick summaries, and create product requests to efficiently replenish stock. - **[Agent Topic: Inventory Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_inventory_management_topic.htm&release=264.0.0&type=5)** Use the Inventory Management agent topic to quickly search for inventory items across multiple locations, generate comprehensive summaries with stock status and quantities, and create product replenishment requests with ease. - **[Work with Agentforce for Inventory Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_inventory_management_topic_use.htm&release=264.0.0&type=5)** Helps users search inventory, generate summaries, and create product requests. # Agentforce for Loyalty Management Marketing managers can leverage the power of Agentforce to efficiently manage everyday tasks related to the company's loyalty programs and promotions. Customers can use Agentforce to self-serve and resolve their promotion-related queries without contacting a customer service representative. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note Work with your Salesforce representative to ensure the licenses and permissions required to work with Agentforce are available in your org. - **[Subagents for Loyalty Management](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_agentforce_topics.htm&release=264.0.0&type=5)** Marketing managers can use Agentforce to efficiently create and update promotions with Accrual and Spend X templates. Agentforce in self-service channels empowers customers to easily retrieve details about their profile and eligibility for loyalty promotions. The subagents are available in the Agentforce (Default) agent. - **[Set Up Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_agentforce_setup.htm&release=264.0.0&type=5)** Admins must set up Einstein Generative AI and Agentforce to enable marketing managers and other users to work with the standard Agentforce assets provided by Loyalty Management. - **[Assign Loyalty Users Permissions to Work with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_agentforce_permission_sets.htm&release=264.0.0&type=5)** Assign marketing managers and other users the permission they require to create promotions using Agentforce. # Agentforce for Omnistudio (Pilot) Get instant product assistance, solution build plans, and troubleshooting help with the Omnistudio Assistance AI pilot agent. - **[Subagents for Omnistudio (Pilot)](https://help.salesforce.com/s/articleView?id=xcloud.agentforce_topics_for_omnistudio.htm&release=264.0.0&type=5)** Whether you’re a designer, developer, or implementation specialist, the agent provides instant, relevant information about any Omnistudio component or element you’re working with. It can also provide a complete build plan that helps design end-to-end solutions, based on an industry vertical. For Omniscripts, you can also run diagnostics that help you discover any issues that might lead to runtime errors. # Agentforce for Policy Center Use Policy Center to its full potential with Agentforce. Quickly get information about any policy, and compile lists of policies based on different criteria. Then let Einstein give you useful insights from that information. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer Editions with the Einstein Platform add-on.
Before you get started, see [Set Up Einstein Generative AI](https://help.salesforce.com/s/articleView?id=ai.generative_ai_enable.htm&type=5&language=en_US) and [Create the Agentforce (Default) Agent](https://help.salesforce.com/s/articleView?id=ai.agent_setup_enable_default.htm&type=5&language=en_US). - **[Policy Center Agent Actions](https://help.salesforce.com/s/articleView?id=xcloud.policy_center_agent_actions.htm&release=264.0.0&type=5)** Agent Actions for Policy Center summarize even your most complex policies and can compile lists of policies based on your criteria. - **[Get Policy Insights with Einstein](https://help.salesforce.com/s/articleView?id=xcloud.policy_insights_prompt_template.htm&release=264.0.0&type=5)** Let Einstein use the information generated by your agent actions to create insights into your policies in plain language. Get detailed insights for policy summaries generated with the Get Policy Details Agent Action. Or get one-sentence insights for policy lists generated with the Get Policies by Object and Get Policies by Policy Type Actions. # Agentforce for Product Upsell and Cross-sell in Service Use Agentforce to help every technician and service rep to identify and propose upgrades or add-ons for specific assets, or recommend new products during customer interactions. You can access this Asset Service Lifecycle Management (ASLM) feature on both desktop and the Salesforce Field Service (SFS) mobile app. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, and Manufacturing Cloud, with Agentforce enabled. View edition availability.
The agent navigates users through product discovery, clarifies user intent for accuracy, and identifies the most relevant product options based on customer needs. It then helps generate quotes for selected products and capture quote approval. By providing data-driven recommendations, the agent aids field technicians and service reps in transforming routine service calls into opportunities for deeper customer engagement. With the help of this agent, on-site personnel—regardless of their sales background—can offer relevant upgrades and add-ons that enhance customer satisfaction and loyalty. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note This solution is intended for non-sales-savvy service professionals, such as field technicians and service reps. It presents a curated, limited set of product recommendations to facilitate upsells or cross-sells during service interactions without overwhelming the user. Agentforce for Product Upsell and Cross-sell in Service integrates with Salesforce Revenue Cloud’s Product Catalog Management (PCM) APIs for the product discovery. - Context-aware retrieval - Fetches products based on account, asset-linked attributes, and hierarchy. - Catalog sync - Retrieves catalogs and categories via specific catalog codes. - Dynamic filtering - Identify products by using precise catalog and category combinations. Use Salesforce Go in Setup to discover, configure, and track this feature. Access resources and links for more information and configuration help. - **[Get Started with Agentforce for Product Upsell and Cross-sell in Service](https://help.salesforce.com/s/articleView?id=xcloud.aslm_get_started_with_agentforce_for_product_upsell_and_cross_sell_in_service.htm&release=264.0.0&type=5)** Empower your field technicians and service reps to recommend upgrades, add-ons, and new products on desktop and mobile with Agentforce for Product Upsell and Cross-sell in Service. - **[Upsell and Cross-sell Topic](https://help.salesforce.com/s/articleView?id=xcloud.aslm_upsell_and_cross_sell_topic.htm&release=264.0.0&type=5)** Field technicians and service reps can identify and display relevant product upgrade opportunities and add-on options for existing assets (upsell), and new product suggestions (cross-sell) applicable to customers. They can use the Upsell and Cross-sell agent topic to deliver a comprehensive overview of all recommended products in a single, clear communication. Providing all necessary information upfront enables customers to make well-informed decisions, thereby enhancing their trust and overall satisfaction. - **[Customize Upsell and Cross-sell Topic to Use Revenue Cloud Quoting](https://help.salesforce.com/s/articleView?id=xcloud.aslm_customize_upsell_cross_sell_topic_for_revenue_quote_management.htm&release=264.0.0&type=5)** Customize the standard Upsell and Cross-Sell agent topic if you want to utilize the Revenue Cloud quoting capabilities. This customization gives you greater flexibility to manage complex quotes, supporting multiple line items and precise, per-line-item discounting. # Agentforce for Scale Use conversational AI to monitor org performance and analyze results directly in Scale Test, Scale Center, and ApexGuru. Agentforce for Scale is an Agentforce agent built for Salesforce Scalability Products. It centralizes performance insights and automates diagnostic workflows, letting you identify issues and act on them without leaving the product. ## Main Topics Org Performance Analysis Retrieves org-wide performance metrics and generates diagnostic investigations, including Row Lock, Apex Summary, and Governor Limit analysis. Live Scale Test Monitoring Analyzes Requests Per Second (RPS) data and generates health reports for active scale test sessions. Default Topic for Scale Products Answers general questions about Scale Test, Scale Center, ApexGuru, and related functionality by using product documentation. ## Considerations - Agentforce for Scale requires a Scale Center or Scale Test license, the **PlatformAiAppDevAddOn** SKU, and Salesforce Foundations. - Enable Setup with Agentforce before activating Agentforce for Scale. Setup with Agentforce enables the Agentforce button in performance-related setup pages. - Create and activate Agentforce for Scale using the Agentforce for Scale template in Agent Builder. - Agentforce for Scale actions don't consume Flex Credits. ## Explore Agentforce for Scale - **[Set Up Agentforce for Scale](https://help.salesforce.com/s/articleView?id=xcloud.agentforce_for_scale_set_up.htm&release=264.0.0&type=5)** Configure and activate Agentforce for Scale to use AI-powered performance analysis in Scale Test, Scale Center, and ApexGuru. #### See Also - [Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_overview.htm&type=5&language=en_US) # Agentforce for Timesheets Boost the efficiency of your technicians by integrating the assistive and autonomous AI capabilities of Agentforce into your business in Timesheets and Labor Cost Optimization. Technicians and crew leads can use Agentforce to self-serve and quickly resolve their timeheets-related queries. - **[Timesheets Agent with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_timesheets_agent_with_agentforce.htm&release=264.0.0&type=5)** Use AI-powered Agentforce capabilities to edit and delete timesheet records through natural language interactions, reducing manual data entry and improving timesheet management efficiency for field service teams. - **[Enable AI and Agentforce for Timesheets](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_enable_ai_for_timesheets.htm&release=264.0.0&type=5)** Enable Einstein for Timesheets to get access to powerful generative AI features across Timesheets and Labor Cost Optimization features. A predefined prompt template determines the context for information generation. - **[Licenses Required for Using Agentforce for Timesheets](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_licenses_agentforce.htm&release=264.0.0&type=5)** Boost the efficiency of your field technicians by integrating the AI capabilities of Agentforce into your business in Timesheets and Labor Cost Optimization. - **[Assign Permission Sets for Using Agentforce for Timesheets](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_assign_permission_sets_agentforce.htm&release=264.0.0&type=5)** Give your users access to the Agentforce for Timesheets by assigning them the required permission sets. With these permission sets, users can enable Agentforce and use this feature. - **[Set Up Agentforce for Timesheets and Labor Optimization](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_set_up_agentforce_timesheets.htm&release=264.0.0&type=5)** To provide technicians and field employees with powerful generative AI features for managing their schedules, admins must configure Agentforce for Timesheets. - **[Create Timesheets and Timesheet Entries Action](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_create_tmsht_and_entries_action.htm&release=264.0.0&type=5)** Use this agent action to create timesheets and timesheet entries for the user who launches the action. - **[Verify Or Submit Timesheet Action](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_verify_submit_timesheet_action.htm&release=264.0.0&type=5)** Use this agent action to initiate the verification or submission process for a timesheet. - **[Get Timesheet Details Action](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_get_timesheet_details_action.htm&release=264.0.0&type=5)** Use this agent action to retrieve detailed information about a timesheet, including its entries and any validation errors, for a specific date. # Agentforce in Privacy Center Discover and resolve potential compliance and risk issues in your Salesforce org with an AI-powered experience. Agentforce in Privacy Center monitors your org against a configurable compliance framework, surfaces issues before violations occur, and recommends remediation actions for your review and approval. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer editions with Foundations or Agentforce 1 editions. This feature is available to customers with a Privacy Center license.
Agentforce in Privacy Center combines Privacy Center's policy engine with Agentforce AI to help you manage compliance across privacy, security, and data governance. The feature includes preloaded global regulations, runs automated daily scans, and recommends remediation steps. ## How Agentforce in Privacy Center Works Agentforce in Privacy Center monitors your org against the regulations that you configure, evaluates your data and settings against compliance rules, and surfaces issues for your review. You approve all remediation actions before the agent executes them. - Automated daily scans check your org against your active compliance framework and flag potential violations as compliance issues. - Your compliance score reflects how well your org meets the requirements in your framework and updates after each scan. - All agent and user actions are recorded in the Audit Log. ## Key Concepts These concepts help you understand how Agentforce in Privacy Center works. Compliance Framework The set of regulations that the agent uses to evaluate your org. Your framework can include standard regulations provided by Salesforce and user-defined regulations you create from your own documents. Selecting a regulation causes the agent to generate compliance rules. Compliance Rules The specific conditions that the agent checks during each scan. Rules are generated automatically from the regulations in your compliance framework. Compliance Issues Potential violations identified during a scan. Each issue includes an AI-generated summary, affected objects and fields, risk severity (high, medium, or low), and recommended solutions. Compliance Score A score reflecting your org's overall compliance health based on the most recent scan results. The score appears on the home page and updates after each scan. Audit Log A record of all actions in Agentforce in Privacy Center scans and remediation actions with timestamps. - **[Set Up Agentforce in Privacy Center](https://help.salesforce.com/s/articleView?id=xcloud.privacy_center_agent_setup.htm&release=264.0.0&type=5)** When you first open the app, a Welcome page opens. Use the setup assistant to configure your compliance environment. - **[Manage Your Compliance Framework](https://help.salesforce.com/s/articleView?id=xcloud.privacy_center_agent_framework.htm&release=264.0.0&type=5)** Update the regulations in your compliance framework to control what Agentforce in Privacy Center monitors in your org. - **[View Compliance Rules](https://help.salesforce.com/s/articleView?id=xcloud.privacy_center_agent_rules.htm&release=264.0.0&type=5)** Review the compliance rules generated from the regulations in your framework on the Rules tab. - **[Discover and Resolve Compliance Issues](https://help.salesforce.com/s/articleView?id=xcloud.privacy_center_agent_remediate.htm&release=264.0.0&type=5)** Review compliance issues identified by Agentforce in Privacy Center and apply AI-recommended solutions to bring your org into compliance. - **[Monitor Compliance Activity](https://help.salesforce.com/s/articleView?id=xcloud.privacy_center_agent_audit_log.htm&release=264.0.0&type=5)** Review a record of all actions in the Audit Log tab. # Agentforce: What's Different or Not Available in the Salesforce Mobile App Learn about the differences between the Salesforce desktop site and the Salesforce mobile app. ## Agentforce - When Agentforce shows options or results, the appearance can differ from the desktop experience. For example, when an opportunity is listed in a response, the Salesforce mobile app shows the object name and record name, whereas the desktop shows the record name and associated account name. # Agentic Mobile Apps Overview Build native iOS and Android apps without writing code, with Agentic Mobile Apps. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Foundations, or Agentforce 1 or Einstein 1 Editions
User Permissions Needed
To create agentic mobile apps: Manage mySalesforce Apps
To create a site: Create and Set Up Experiences
Describe the app that you want, and Agentforce helps you build it. Design screens on a visual canvas, connect them to Salesforce data, and publish the finished app to the App Store and Google Play. You work in three stages: - Design the app's screens, data, and appearance. - Publish the app to app stores. - Analyze the app after it goes live. Here's an overview of how Agentic Mobile Apps works. - **[Access Agentic Mobile Apps](https://help.salesforce.com/s/articleView?id=xcloud.mobile_ama_access_agentic_mobile_apps.htm&release=264.0.0&type=5)** Open Agentic Mobile Apps from Salesforce Setup. # Aggregate Fixed Non-Qualifying Points in Expiration Ledgers Run the Aggregate Fixed Non-Qualifying Points in Expiration Ledgers Data Processing Engine definition if you decide to consolidate members’ fixed-type, non-qualifying points in batches. Before you run the definition, make sure that there are no duplicate loyalty aggregated points expiration ledgers. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled
The definition creates and updates active Loyalty Aggregated Point Expiration Ledger records based on the Loyalty Ledger records that are created after the last run of the definition. The definition uses an input variable to specify the loyalty program for which fixed-model, non-qualifying points are to be consolidated. You can specify the loyalty program name either in your copy of the definition or dynamically when the definition is run. The definition calculates the points that are debited from or credited to the members' points balance after the last run. The calculation also includes points debited or credited for points adjustments and canceled transactions. Next, the definition checks the number of points that members redeemed from their accrued points. Then, member's updated expirable points are calculated and grouped by member, currency, and expiration date. After the members' updated expirable points are calculated, results are written back to these objects:
Object Writeback Result
Loyalty Member Currency The run date is the date on which the member’s points are last consolidated. Only records associated with fixed-model, non-qualifying points are updated.
Loyalty Aggregated Point Expiration Ledger

New records are created and existing records are updated.

New records are created when a record doesn't exist with the same member, currency, and expiration date.

Records are updated when points are credited or debited from an associated member for an associated currency. The points expire on the points expiration date of the record.

Records aren't updated if members redeemed the points that are credited to them after the last definition run.

## Input Variables | Input Variable Name | Description | | --- | --- | | Loyalty Program Name | The name of the loyalty program for which the Data Processing Engine definition is run. | ## Nodes
Node Name Node Type Description
  • Loyalty Aggregated Point Expiration Ledger
  • Loyalty Ledger
  • Loyalty Member Currency
  • Loyalty Program
  • Loyalty Program Currency
Data Source Objects used as data sources to consolidate fixed-model non-qualifying points for members.
Add Loyalty Program Name to Program Currency Join Adds the name of the loyalty program to the program currency it’s related to.
Add Loyalty Program Currency Details to Loyalty Ledgers Join Adds the type of currency that a loyalty ledger credited or debited points for and the expiry model of the program currency to the loyalty ledger.
Filter Loyalty Ledgers with Fixed Non-Qualifying Points Filter Filters loyalty ledgers with fixed non-qualifying points for a loyalty program.
Add Last Points Aggregation Date to Loyalty Ledgers Join Adds the date on which points were last aggregated for the loyalty ledgers that credited or debited fixed non-qualifying points.
Check Whether the Loyalty Ledger Was Created After Last Processed Date Formula Checks whether the loyalty ledgers have been created on or after the date on which the fixed non-qualifying points were last processed.
Filter New Loyalty Ledgers Filter Filters loyalty ledgers that were created after the date on which the fixed non-qualifying points were last processed.
Find Maximum Ledger Creation Date And Aggregate Ledgers Group and Aggregate Finds the maximum creation date of loyalty ledgers and aggregates ledgers by member and currency.
Add Loyalty Member Currency ID to Aggregate Loyalty Ledger Join Adds the loyalty member currency ID of the member related to the aggregated loyalty ledgers.
Update Loyalty Member Currency with Points Aggregation Date Writeback Object Updates loyalty member currencies to add or update the date on which the related member’s points are aggregated for expiration.
Aggregate Points and Group by Event Type Group and Aggregate Aggregates points for loyalty ledgers and groups them based on the ledger’s event type.
Filter Accrual and Accrual Cancelation Loyalty Ledgers Filter Filters loyalty ledgers that are of the event type credit, debit, and transfer.
Calculate Expiration Points and Redeemed Points for Loyalty Ledgers Formula Calculate the number of points that are set to expire and the number of points that have already been redeemed for loyalty ledgers. This node also adds the expiration date to the loyalty ledgers.
Remove Loyalty Ledger Fields Slice Removes loyalty ledger fields that aren’t required in succeeding nodes of the definition.
Filter Loyalty Aggregated Point Expiration Ledgers Filter Filters active aggregated point expiration ledgers that aren’t already deleted.
Convert Existing Aggregated Point Expiration Date to Text Formula Converts the expiration dates of points in the loyalty aggregated points expiration ledgers to text.
Remove Aggregated Points Expiration Ledger Fields Slice Removes aggregated points expiration ledger fields that aren’t required in succeeding nodes of the definition.
Append Existing Point Expiration Ledgers to New Point Expiration Ledgers Append Appends details of the existing loyalty aggregated points expiration ledgers to new loyalty ledgers.
Aggregate Points for Expiration Group and Aggregate Aggregates the total number of points that must be expired for a member currency. This node also aggregates the number of points that have already been redeemed by the member.
Check if Redeemed Points are More Than Points to Expire Formula Checks whether the member has already redeemed the points that must be expired.
Filter Eligible Ledgers Filter Filters ledgers that contain points that haven’t been redeemed and can be expired on the expiration date.
Rename Fields with Redeemable Points Formula Renames fields that contain details about the points that are available for the member to redeem before expiration.
Filter Redemption Loyalty Ledgers Filter Filters redemption loyalty ledgers whose points haven’t been added to aggregated point expiration ledgers.
Append Points Available for Redemption and Points Redeemed Append Appends details about the number of points that the member has redeemed since this definition was last run and the number of points the member was eligible to redeem since the last run.
Calculate Updated Redeemed Points Formula Calculates the updated points redeemed by the member for a currency that expires on a particular date.
Join Expirable Points and Redeemable Points Join Adds the number of points that must expire on a particular date for a member currency and the number of points that the member can redeem out of the expirable points.
Calculate Redeemable Points and Append Currency and Member IDs Formula Calculates the number of points members can still redeem from the expirable points and appends currency ID to the member ID.
Calculate Total Expirable Points Formula Calculates the total number of points that must be expired for a member currency on a particular date.
Subtract Previous Redeemable Points from Expirable Points Formula Subtracts the redeemable points from the last run of this definition from the current expirable points.
Get Previous Expirable Points Formula Gets the total expirable points from the last run of this definition.
Calculate Updated Redeemed Points Formula Calculates the updated points redeemed by the member for a currency that expires on a particular date.
Join Existing and New Aggregated Point Expiration Ledgers Join Adds details of the existing aggregated point expiration ledgers to the new ledgers.
Find To Be Updated Aggregated Ledgers Formula Filters Loyalty Aggregated Point Expiration Ledger records that aren’t changed from previous run.
Filter Update Aggregated Ledgers Filter Filters only updated Loyalty Aggregated Point Expiration Ledger records.
Convert Expiration Date From Text Field to Date Field Formula Converts the point expiration date from a text field to a date field.
Create and Update Aggregate Point Expiration Ledgers Writeback Object Creates aggregate point expiration ledgers and updates existing aggregate point expiration ledgers with the updated expirable points and redeemed points.
# Aggregate Node Use an Aggregate node in Salesforce Data Pipelines to roll up data. You can aggregate to a higher level of granularity or roll up hierarchical data.
User Permissions Needed
To manage and create a recipe: Edit CRM Analytics Dataflows OR Edit Dataset Recipes
- **[Aggregate Node: Roll Up Data to a Higher Level](https://help.salesforce.com/s/articleView?id=xcloud.sdp_recipe_aggregate_rows.htm&release=264.0.0&type=5)** Use an Aggregate node to roll up data to a higher granularity in Salesforce Data Pipelines. You can aggregate using: unique, sum, average, count, maximum, and minimum. You can group by any dimension or date column. You can also pivot dimensions as columns. For example, you can group opportunities by account to get account-level details, like total opportunity amount, average number of cases, and the average days to close an opportunity for each account. You can then pivot on account type to analyze each combination of account and account type. - **[Aggregate Node: Hierarchical Aggregation](https://help.salesforce.com/s/articleView?id=xcloud.sdp_recipe_aggregate_hierarchy.htm&release=264.0.0&type=5)** Use Hierarchical Aggregation in Salesforce Data Pipelines to sum measures across multilevel data. For example, you can roll up revenues, assets, or liabilities for companies and their subsidiaries. Or, you can roll salesperson data up the management chain to see aggregates by team, region, area, and beyond. Hierarchical Aggregation requires rows with an ID and a parent ID. Many rows can have the same parent ID, or the parent ID can be empty. Some rows can even share an ID, such as a record with multiple parents. You can also use the optional roll up percentage to apply percentage splits to allocate portions to different parents, such as commission among members of the sales team. # Aggregate Node: Hierarchical Aggregation Use Hierarchical Aggregation in Salesforce Data Pipelines to sum measures across multilevel data. For example, you can roll up revenues, assets, or liabilities for companies and their subsidiaries. Or, you can roll salesperson data up the management chain to see aggregates by team, region, area, and beyond. Hierarchical Aggregation requires rows with an ID and a parent ID. Many rows can have the same parent ID, or the parent ID can be empty. Some rows can even share an ID, such as a record with multiple parents. You can also use the optional roll up percentage to apply percentage splits to allocate portions to different parents, such as commission among members of the sales team. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note If the data has duplicate rows with the same record ID and parent ID, you must clean the data. Run a standard aggregation before running the hierarchical aggregation. For the same record, the amount should be consistent for all parents. The Roll-up percentage should sum up <= 1.
User Permissions Needed
To manage and create a recipe: Edit CRM Analytics Dataflows OR Edit Dataset Recipes
1. In a Data Prep recipe that already has at least one Input node, select the Add Node button (![Add Node button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_button_add_node.png)) between two nodes or at the end of the recipe. To show the Add Node button between two nodes, hover the cursor on the connecting line. 2. In the Add Node dialog box, select **Aggregate**. ![The Add Node modal shows all possible nodes that you can add, including the Aggregate node.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_node_aggregate.png) 3. In the Aggregate settings panel, turn on **Hierarchical Aggregation**. ![Select Hierarchical Aggregation in the Aggregate node.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_aggregate_hierarchy_select.png) 4. Add at least one **Aggregate**, such as the sum of a measure or count of rows. ![The Add Node modal shows all possible nodes that you can add, including the Aggregate node.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_aggregate_hierarchy_aggregates.png) 5. Select the **Record ID Column**. The record ID can be any dimension in the dataset that defines the row, such as salesperson or account name. ![Select a record ID column from the list of dimensions in the dataset.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_aggregate_hierarchy_recordid.png) 6. Specify the **Parent ID Column**. The parent ID identifies which record each row rolls up to. This can be any dimension in the dataset that has not been selected as the record ID, such as the manager or parent account. Not every record needs to have a parent, for instance if it’s at the top of a hierarchy. ![Select a parent ID column from the list of dimensions in the dataset.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_aggregate_hierarchy_parentid.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note Null values are accepted in the parent ID column. 7. Optionally, select a **Roll-Up Percentage Column** to apply a percentage split. The aggregated value is multiplied by the number in this column. For example, your records have more than one parent, and you want to roll them up differently based on the parent. ![Select a Roll-Up Percentage column from the list of measures in the dataset.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_aggregate_hierarchy_percentage.png) 8. To add the Hierarchical Aggregation to the recipe, click **Apply**. ![Completed Hierarchical Aggregation setup, showing Apply button.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_aggregate_hierarchy_apply.png) 9. Save the recipe. With hierarchical aggregation you can automatically sum values at each level of the relationship instead of calculating values manually. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note In the following examples, **Amount** is the aggregated column. **Example 1:** Simple hierarchy such as region and country. This example shows: - Multiple records with the same parent - Mix of records with and without a parent - A record outside of the hierarchy - Parent with individual value ![Diagram showing hierarchy example one.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_aggregate_hierarchy_example1.png)
Without Hierarchical Aggregation   With Hierarchical Aggregation
Record ID Parent ID Amount   Record ID Amount
A01   100 A01 600
A02 A01 200 A02 200
A03 A01 300 A03 300
A04   400 A04 400
**Example 2** Intermediate hierarchy such as an org chart. This example shows: - Multiple records with the same parent - Mix of records with and without a parent - A record outside of the hierarchy - Parent with individual value - Parent without individual value - Multiple hierarchies ![Diagram showing hierarchy example two.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_aggregate_hierarchy_example2.png)
Without Hierarchical Aggregation   With Hierarchical Aggregation
Record ID Parent ID Amount   Record ID Amount
A01   100 A01 1200
A02 A01 200 A02 800
A03 A01 300 A03 300
A04 A05 400 A04 400
A06 A02 600 A05 400
A07   700 A06 600
      A07 700
**Example 3** Complex hierarchy such as subsidiary ownership with split percentages. This example shows: - Multiple records with the same parent - Mix of records with and without a parent - A record outside of the hierarchy - Parent with individual value - Parent without individual value - Multiple hierarchies - Records with multiple parents ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note A record has a row per each parent. - Roll-up percentage values (percentage splits) ![Diagram showing hierarchy example three.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_aggregate_hierarchy_example3.png)
Without Hierarchical Aggregation   With Hierarchical Aggregation
Record ID Parent ID Amount Percentage   Record ID Amount
A01   100   A01 1375
A02 A01 200 1.00 A02 350
A03 A01 300 0.50 A03 1850
A03 A10 300 0.50 A04 1290
A04 A05 400 1.00 A05 1290
A06 A02 600 0.25 A06 600
A06 A03 600 0.75 A07 700
A07   700   A08 890
A08 A04 800 1.00 A09 900
A09 A08 900 0.10 A10 1925
A10       A11 1100
A11 A03   1.00    
# Aggregate Node: Roll Up Data to a Higher Level Use an Aggregate node to roll up data to a higher granularity in Salesforce Data Pipelines. You can aggregate using: unique, sum, average, count, maximum, and minimum. You can group by any dimension or date column. You can also pivot dimensions as columns. For example, you can group opportunities by account to get account-level details, like total opportunity amount, average number of cases, and the average days to close an opportunity for each account. You can then pivot on account type to analyze each combination of account and account type.
User Permissions Needed
To manage and create a recipe: Edit CRM Analytics Dataflows OR Edit Dataset Recipes
1. In a Data Prep recipe that already has at least one Input node, select the Add Node button (![Add Node button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_button_add_node.png)) between two nodes or at the end of the recipe. To show the Add Node button between two nodes, hover the cursor on the connecting line. 2. In the Add Node dialog box, select **Aggregate**. ![The Add Node modal shows all possible nodes that you can add, including the Aggregate node.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_node_aggregate.png) 3. Add at least one aggregate. Before you can add a grouping, add an aggregate. You can select one of the following aggregate functions. | Aggregate Function | Description | | --- | --- | | Unique | Counts only unique values in the selected column. | | Sum | Calculates the total by adding all values in the selected column. | | Average | Calculates the average value of the selected column. | | Count | Counts all values in the selected column. | | Maximum | Calculates the maximum value of the selected column. | | Minimum | Calculates the minimum value of the selected column. | | Stddevp | Calculates the population standard deviation. Population standard deviation measures the spread of data distribution—the typical distance between each data point and the average. | | Stddev | Calculates the sample standard deviation. Sample standard deviation measures the spread of data distribution for a given sample. Use sample standard deviation to estimate the population standard deviation based on a sample. | | Varp | Calculates the population variance. Population variance indicates how spread out data points are in a specific population. | | Var | Calculates the sample variance. Sample variance indicates how spread out data points are for a given sample. Use sample variance to estimate the population variance based on a sample. | ![The aggregate functions appear in the Select Aggregate dialog box.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_node_aggregateFunctions.png) 4. To group rows, add one or more dimension or date columns in the Group Rows field. For example, you can group by account name. ![The Aggregate node calculates the average opportunity amount for each account.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_nodeAggregate_groupRows.png) 5. To pivot dimensions as columns, add up to two dimension columns in the Group Columns field, select the values for each dimension column, and click **Apply**. For direct datasets and datasets, you can search for all column values. Otherwise, you are limited to preview data. If a value doesn’t appear in the list, adjust your sample size or refine your search. Then, click **Add new value** and enter the value. For example, you can group columns by opportunity type. Each combination of opportunity type and aggregate appears as a separate column. ![The Aggregate node calculates the average opportunity amount for each account and pivots the results by opportunity type.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_nodeAggregate_groupColumns.png) 6. To add the Aggregate node to the recipe, click **Apply**. 7. Save the recipe. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note Because pivoting increases the number of columns, keep in mind that the Aggregate node can create up to 5,000 columns. If the node exceeds the maximum, you can reduce the number of columns by changing the aggregates or row and column groupings. Your values that aren’t picked are automatically included in an Other column when you pivot with the Data Prep aggregate node. For example, you can group columns by opportunity type, select your most important types, and let the rest be grouped as Other. # Aggregate Payouts by Account (Example) This example shows how you can use the Aggregate by Account template to aggregate transaction records for an account that’s added as a member in two rebate programs. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
## Transaction Journal Records Acme is an account in an org and is a beneficiary of multiple rebate programs where it’s enrolled as a member. The admin has created a lookup field on the Transaction Journal object for Account. Here are sample Transaction Journal records for January 2021.
Member Product Transaction Quantity Product Unit Price Transaction Amount

Acme

Radius 5 $100 $500
Radius 4 $100 $400
Spectra 7 $120 $840
Spectra 2 $120 $240
Compass 10 $60 $600
Compass 4 $60 $240
## Rebate Program Rules Acme is enrolled as a member in two active rebate programs. - Rebate Program A: Offers revenue-based rebates. The program has 12 monthly payout periods. - Rebate Program B: Offers volume-based rebates. The program has 12 monthly payout periods. The program manager sets up the eligibility criteria for the rebate types in the rebate programs. | Rebate Type | Eligibility Criteria | | --- | --- | | Revenue-Based | Include all transactions for Radius and Compass products. | | Volume-Based | Include all transactions for Radius and Spectra products. | The program manager sets up the benefit criteria for the rebate types in the rebate programs. Rebate Program A has these benefit tiers: - Tier X: Offers no rebate when the total transaction amount is less than $1500. - Tier Y: Offers a 3% rebate when the total transaction amount exceeds $1501. Rebate Program B has these benefit tiers: - Tier 1: Offers no rebate when the total transaction quantity is less than 20 units. - Tier 2: Offers a $2 rebate per unit when the total transaction quantity exceeds 21 units. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note For both the rebate types, the program manager selects the calculation definition as Aggregate\_by\_Account\_Member\_Transactions. The admin creates this definition by cloning the Aggregate by Account data processing engine template. ## Data Processing Engine If an account has an active membership in multiple rebate programs, each Transaction Journal record is evaluated separately against each program’s eligibility criteria to get the aggregate values. You need not create separate Transaction Journal records to tie the membership for each rebate program. For example, the first sample transaction record for Radius qualifies for aggregation for Rebate Program A and B because the rebate-type eligibility criteria in both programs include Radius products. The definition sums up the transaction amount and quantity and updates the total values in the Rebate Member Product Aggregate object. For each payout period, two aggregate records are created for an account. Each aggregate record shows a rebate type’s aggregate values for a member. ## Aggregate Data These sample records are created in the Rebate Member Product Aggregate object for January. | Record | Member | Payout Period | Rebate Type | Total Quantity | Total Transaction Amount | | --- | --- | --- | --- | --- | --- | | Record 1 | Acme in Rebate Program A | Jan FY21 | Revenue-Based | 23 | $1740 | | Record 2 | Acme in Rebate Program B | Jan FY21 | Volume-Based | 18 | $1980 | These values update whenever the scheduled flow runs. The flow triggers the data processing engine definition. The aggregate values on the payout calculation date for Jan FY21 are used to update the final payout amounts in the Member Payout object. ## Final Payouts Acme receives these payouts based on the benefit tier they qualified for: - For Rebate Program A, Acme receives a payout because the total transaction amount matches the criteria for Tier Y. The payout is $52.20 (3% of $1740). - For Rebate Program B, Acme receives no payouts because the total quantity matches Tier 1. # Aggregate Payouts by Member (Example) This example shows how you can use the Aggregate by Member template to aggregate transaction records for a program member for two rebate types. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
## Transaction Journal Records Acme is a member of a rebate program. Here are sample Transaction Journal records for January 2021.
Member Product Transaction Quantity Product Unit Price Transaction Amount

Acme

Radius 5 $100 $500
Radius 4 $100 $400
Spectra 7 $120 $840
Spectra 2 $120 $240
Compass 10 $60 $600
Compass 4 $60 $240
## Eligibility Criteria The program offers both revenue-based and volume-based rebates. The program has 12 monthly payout periods. The program manager sets up the eligibility criteria for the rebate types. | Rebate Type | Eligibility Criteria | | --- | --- | | Volume-Based | Include all transactions for Radius and Spectra products. | | Revenue-Based | Include all transactions for Compass products. | ## Benefit Tiers The program manager sets up the benefit criteria for the rebate types. The volume-based rebate has these benefit tiers: - Tier 1: Offers no rebate when the total transaction quantity is less than 20 units. - Tier 2: Offers a $2 rebate per unit when the total transaction quantity exceeds 21 units. The revenue-based rebate has these benefit tiers: - Tier X: Offers no rebate when the total transaction amount is less than $200. - Tier Y: Offers a 3% rebate when the total transaction amount is between $201 and $500. - Tier Z: Offers a 5% rebate when the total transaction amount exceeds $501. ## Data Processing Engine The Transaction Journal records are filtered based on the eligibility criteria for each rebate type. For example, the four transaction records for Radius and Spectra aren’t considered for the revenue-based rebate. The definition then sums up the transaction amount and quantity and updates the total values in the Rebate Member Product Aggregate object. For each payout period, two aggregate records—one for each rebate type—are created for a member. ## Aggregated Data These sample records are created in the Rebate Member Product Aggregate object for the January payout period. | Record | Member | Payout Period | Rebate Type | Total Quantity | Total Transaction Amount | | --- | --- | --- | --- | --- | --- | | Record 1 | Acme | Jan FY21 | Volume-Based | 18 | $1980 | | Record 2 | Acme | Jan FY21 | Revenue-Based | 14 | $840 | These values update whenever the scheduled flow runs. The flow triggers the data processing engine definition. The aggregate values on the payout calculation date for Jan FY21 are used to update the final payout amounts in the Member Payout object. ## Final Payouts Acme receives these payouts based on the benefit tier they qualified for: - For the volume-based rebate, Acme receives no payouts because the total quantity matches Tier 1. - For the revenue-based rebate, Acme receives a payout because the total transaction amount matches the criteria for Tier 2. The payout is $42 (5% of $840). # Aggregate Payouts by Member with Aggregate Item Details (Example) This example shows how you can use the Aggregate by Member with Aggregate Item Details data processing engine (DPE) template to aggregate transaction records for a program member for a rebate type along with the transaction details of each aggregate record. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_important.png) Important In Spring '24, we updated the Aggregate by Member with Aggregate Item Details DPE template. If you used the template to create a DPE definition before Spring '24, we recommend that you create a definition using the updated template or modify your existing definitions based on the updated template. ## Transaction Journal Records Acme India and Acme Japan are members of a rebate program. Here are sample Transaction Journal records for January 2021.
Record Member Product Transaction Quantity Product Unit Price Transaction Amount
1

Acme India

Radius 10 $100 $1000
2 Spectra 12 $120 $1440
3 Compass 10 $60 $600
4 Acme Japan Radius 4 $100 $400
5 Spectra 7 $120 $840
6 Compass 4 $60 $240
## Eligibility Criteria The program offers volume-based rebates. The program has 12 monthly payout periods. The program manager sets up the eligibility criteria for the volume-based rebate type to include all transactions for Radius and Spectra products. ## Benefit Tiers The program manager sets up the benefit criteria for the rebate type. - Tier 1: Offers no rebate when the total transaction quantity is less than 20 units. - Tier 2: Offers a $2 rebate per unit when the total transaction quantity exceeds 21 units. ## Data Processing Engine The Transaction Journal records are filtered based on the eligibility criteria for the rebate type. Because Compass products aren't included for the volume-based rebate type, those records are excluded. The definition then sums up the transaction amount and quantity for the eligible records, and updates the total values in the Rebate Member Product Aggregate object. For each payout period, two aggregate records—one for each rebate program member—are created. ## Aggregated Data These sample Rebate Member Product Aggregate records are created for the January payout period. | Record | Member | Payout Period | Rebate Type | Total Quantity | Total Transaction Amount | | --- | --- | --- | --- | --- | --- | | Record 1 | Acme India | Jan FY21 | Volume-Based | 22 | $2440 | | Record 2 | Acme Japan | Jan FY21 | Volume-Based | 11 | $1240 | ## Aggregate Record Details These sample Rebate Member Aggregate Item records are created for the January payout period. | Aggregate Record | Transaction Journal Record | Transaction Quantity | Transaction Amount | | --- | --- | --- | --- | | Record 1 | Record 1 | 10 | $1000 | | Record 1 | Record 2 | 12 | $1440 | | Record 2 | Record 4 | 4 | $400 | | Record 2 | Record 5 | 7 | $840 | These values update whenever the scheduled flow runs. The flow triggers the data processing engine definition. The aggregate values on the payout calculation date for Jan FY21 are used to update the final payout amounts in the Member Payout object. ## Final Payouts For the volume-based rebate, Acme Japan doesn't receive a payout because the total quantity matches Tier 1. Acme India receives a payout because the total quantity matches Tier 2. The payout is $44 ($2 multiplied by 22 units). # Aggregate Payouts by Product and Member (Example) This example shows how you can use the Aggregate by Product and Member template to aggregate transaction records for a program member for two products. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
## Transaction Journal Records Acme is a member of a rebate program. Here are sample transaction journal records for Acme for January 2021.
Member Product Transaction Quantity Product Unit Price Transaction Amount

Acme

Radius 5 $100 $500
Radius 4 $100 $400
Spectra 7 $120 $840
Spectra 2 $120 $240
Compass 10 $60 $600
Compass 4 $60 $240
## Eligibility Criteria The rebate program offers a revenue-based rebate type. The program has 12 monthly payout periods. For the revenue-based rebate type, the program manager defines the eligibility criteria to include transactions for Radius and Spectra products. ## Benefit Tiers The program manager creates these benefit tiers for the revenue-based rebate type: - Tier 1: Offers no rebate when the transaction amount is less than $500 for Radius. - Tier 2: Offers a $200 rebate when the transaction amount is between $501 and $900 for Radius. - Tier 3: Offers a $500 rebate when the transaction amount exceeds $901 for Radius. - Tier 4: Offers a $400 rebate when the transaction amount is between $501 and $1500 for Spectra. - Tier 5: Offers a $600 rebate when the transaction amount exceeds $1501 for Spectra. ## Data Processing Engine The Transaction Journal records are filtered based on the eligibility criteria for each rebate type. For example, the two transaction records for Compass aren’t considered for calculation. The definition then aggregates quantity and amount values for Radius and Spectra separately and updates records in the Rebate Member Product Aggregate object. For each payout period, two aggregate records—one for each product—are created for a member. ## Aggregate Data These sample records are created in the Rebate Member Product Aggregate object for January. | Record | Member | Payout Period | Rebate Type | Product | Total Quantity | Total Transaction Amount | | --- | --- | --- | --- | --- | --- | --- | | Record 1 | Acme | Jan FY21 | Revenue-Based | Radius | 9 | $900 | | Record 2 | Acme | Jan FY21 | Revenue-Based | Spectra | 9 | $1080 | These values update whenever the scheduled flow runs. The flow triggers the data processing engine definition. The aggregate values on the payout calculation date for Jan FY21 are used to update the final payout amounts in the Member Payout object. ## Final Payouts Acme receives these payouts for the revenue-based rebate type based on the benefit tier they qualified for. - For Radius, Acme receives $200 because the total transaction amount of $900 matches Tier 2. - For Spectra, Acme receives $400 because the total transaction amount of $1080 matches Tier 4. # AI Enhancements for Salesforce Suites Agentforce and generative AI now enable Salesforce Suites users to surface key insights and save time on labor-intensive tasks. Einstein Conversation Insights are now in Starter and Pro Suite. ## Drive Productivity and Surface Insights with Agentforce and Generative AI Agentforce and generative AI are now built directly into Salesforce Suites. Turn your data into actionable insights and get help with time-consuming tasks like meeting preparation, drafting emails, and updating records. Starter and Pro Suite get access to Agentforce, where you can chat with an agent in plain language, just like you would a teammate. For example, if you ask, "Summarize the Acme account," the agent instantly pulls that information together into a simple summary that identifies the opportunities linked to Acme, key facts, recent cases, and so on. This saves you the time of digging through a large number of records and synthesizing the information yourself. ![Agentforce panel on the home page](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/suites_agentforce_panel_and_page.png) Free, Starter, and Pro Suite get access to generative AI. Use generative AI to turn dense activity history into clear, concise summaries, so teams instantly understand what’s happening. Prepare for meetings and surface actionable insights by getting AI-powered summaries directly within the record. Generate personalized emails to respond faster and communicate more effectively, all with less effort. ![AI Summary tool](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/suites_agentforce_aisummary.png) Agentforce and generative AI act as a force multiplier, helping small teams get more done so you can focus on your customers and grow your business. This functionality is available for Salesforce Suites starting in March 2026. ## Analyze Calls with Einstein Conversation Insights for Starter and Pro Suites Don't let valuable customer insights get lost in recordings. Einstein Conversation Insights (ECI) now brings AI insights to Starter and Pro Suite. Automatically analyze voice and video calls to extract key information like customer sentiment and follow-up tasks. It’s the easiest way to keep your CRM data rich and your post-call admin low. If you’ve already integrated your video providers with Salesforce, ECI is ready to go. To get started, simply connect your preferred video provider (like Zoom, Google Meet, or Microsoft Teams) from the **Home app**. After an admin configures the provider, end users will need to link their accounts to start getting their transcribed calls processed by ECI. # AI Features for Salesforce Suites Stop digging and start doing. Our AI tools help you get more done so you can spend your time focusing on your customers and growing your business. Turn your data into actionable insights and get help with time-consuming tasks like updating records, meeting preparation, and drafting emails. - **[Get to Know AI Features for Salesforce Suites](https://help.salesforce.com/s/articleView?id=xcloud.suites_agentforce_understanding.htm&release=264.0.0&type=5)** Conversational AI tools, like Agentforce Coworker and Agentforce, help you manage business tasks, surface key insights, and prep for meetings more efficiently. Use plain language to describe what you're looking for and these tools instantly pull up the information you need. Generative AI uses your data to automatically create brand-new content, such as personalized emails and account summaries. - **[Considerations and Limits for Agentforce and Generative AI in Salesforce Suites](https://help.salesforce.com/s/articleView?id=xcloud.suites_agentforce_considerations.htm&release=264.0.0&type=5)** Before using Agentforce Coworker and generative AI for Salesforce Suites, make sure you review key factors that can affect your implementation and usage. - **[Delivered Actions for Salesforce Suites](https://help.salesforce.com/s/articleView?id=xcloud.suites_agentforce_actions.htm&release=264.0.0&type=5)** Actions are how agents and generative AI get things done. For example, if a user asks an agent for help with writing an email, the agent launches the action that drafts and revises the email and grounds it in your relevant data. # AI Relationship Research AI Relationship Research is an AI-powered feature that automatically discovers, analyzes, and presents relationship intelligence about the people and organizations connected to your Salesforce records. AI Relationship Research scans multiple data sources such as your CRM records, public web content, and Data 360 simultaneously and provides the top-ranked connections directly within your workflow, so you can act on them without leaving Salesforce. AI Relationship Research has two main parts: - Research service: Uses generative AI to find and analyze relationships connected to your Account, Contact, Lead, and Opportunity records, drawing on your CRM data, public web content, and Data 360 objects and documents. - Relationship graph component: A Lightning web component that displays those relationships as an interactive graph visualization, with relationship analysis, strength indicators, and source citations for each connection. When you open an Account, Opportunity, Contact, or Lead record, click **Start Research** in the AI Relationship Research component to start research. AI Relationship Research searches across your configured data sources and generates a relationship graph showing the top eight people and organizations connected to your record. Each connection includes a plain-language description of the relationship, evidence links to the source data, and options to act directly, such as confirming a suggested record match, creating a new Salesforce record from a discovered entity, or continuing the conversation in Agentforce. AI Relationship Research is highly configurable. Admins can tailor the feature to the specific needs of their organization by selecting which object types to research, which data sources to search across, and which relationship types to prioritize, such as company leadership, prior employers, educational affiliations, non-profit associations, or investors. - **[Key Benefits of AI Relationship Research](https://help.salesforce.com/s/articleView?id=xcloud.airr_key_benefits.htm&release=264.0.0&type=5)** AI Relationship Research surfaces hidden connections, replaces manual research, and enables you to act on relationship insights without leaving Salesforce. - **[Target Audience](https://help.salesforce.com/s/articleView?id=xcloud.airr_target_audience.htm&release=264.0.0&type=5)** AI Relationship Research is designed for anyone who needs to better understand the people and organizations connected to a Salesforce record and act on those connections. - **[How AI Relationship Research Works](https://help.salesforce.com/s/articleView?id=xcloud.airr_how_it_works.htm&release=264.0.0&type=5)** AI Relationship Research uses generative AI and large language models to search across multiple data sources simultaneously and generate an interactive relationship graph. - **[AI Relationship Research Relationship Graph](https://help.salesforce.com/s/articleView?id=xcloud.airr_relationship_graph.htm&release=264.0.0&type=5)** The relationship graph is the primary way you interact with AI Relationship Research, displaying up to eight related people and organizations as nodes around your target record. # AI Relationship Research Data Sources AI Relationship Research draws from three independent data source categories: public web search, internal Salesforce CRM records, and Data 360 objects and data libraries. Each source contributes a different type of relationship evidence, and they work together to build the most complete picture of your target record's relationship network. Configuring additional sources expands the depth and quality of the insights AI Relationship Research surfaces. - Web search: If you’ve enabled Data 360, the Web search retriever is available by default. The feature uses Bright Data as a subprocessor for web search. - CRM records: AI Relationship Research searches over Account and Contact records in the org. This search is always on and requires no extra setup. - Data 360 search: Requires one or more configured search retrievers to surface relationships and evidence from any configured DMO. See [Retrieve Data](https://help.salesforce.com/s/articleView?id=data.c360_a_ai_retriever.htm&type=5&language=en_US) and [Manage Retrievers](https://help.salesforce.com/s/articleView?id=data.c360_a_ai_retriever_version.htm&type=5&language=en_US). The relationship graph uses edge styles to distinguish how relationships are identified. See [Edges](https://help.salesforce.com/s/articleView?id=xcloud.airr_relationship_graph.htm&release=264.0.0&type=5 "The relationship graph is the primary way you interact with AI Relationship Research, displaying up to eight related people and organizations as nodes around your target record.").
Data Source Comparison
Source Setup required Edge style Source icon
Public web

Data 360 license

See Data 360 Editions and Licenses.

Dotted Web icon
Internal CRM records None. Included by default. Solid CRM icon
Data 360 objects and files
  • Data 360 license
  • Search retrievers

See Data 360 Editions and Licenses, Retrieve Data, and Manage Retrievers.

Dotted Data 360 icon
- **[Public External Search](https://help.salesforce.com/s/articleView?id=xcloud.airr_public_web_search.htm&release=264.0.0&type=5)** AI Relationship Research searches the public web to discover relationships not yet captured in your CRM. - **[Internal CRM Records](https://help.salesforce.com/s/articleView?id=xcloud.airr_internal_crm_records.htm&release=264.0.0&type=5)** AI Relationship Research searches the Accounts and Contacts in your Salesforce org to identify and analyze potential relationships from the people and organizations already in your org. - **[Data 360 Objects and Documents](https://help.salesforce.com/s/articleView?id=xcloud.airr_data_360.htm&release=264.0.0&type=5)** For orgs with Data 360, AI Relationship Research can search data model objects (DMOs). # AI Relationship Research Relationship Graph The relationship graph is the primary way you interact with AI Relationship Research, displaying up to eight related people and organizations as nodes around your target record. The target record you are researching appears at the center of the graph as the parent node. Up to eight related people and organizations appear as entities around it, each connected to the center by a line. An example of the AI Relationship Research graph: ![airr\_graph](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-ai_relationship_research-264-0-0-production-enus/e8a67f6d-976f-4c49-88aa-357807c9081e/ai_relationship_research/images/airr_graph.png) ## Nodes Each node represents a related person or organization. An icon on the node indicates whether it is a person or an organization. Additional icons indicate the node's status and what actions are available: - A star badge indicates the top three prioritized relationships that AI Relationship Research has identified. - A link icon indicates that the node is matched to an existing Salesforce record. Click the node to open the Entity Details panel, then click **View Record** to open the record, **Confirm Record** to confirm the match, or **Remove Record** to remove the match. - A plus icon indicates that no Salesforce record exists for this node yet. Click the node to open the Entity Details panel, then click **Create Record** to create a new record from the discovered entity. ## Edges Each edge connects a node to the center record or parent node and indicates how the relationship was identified: - Solid edge (line): Indicates a relationship identified through CRM search. - Dotted edge (line): Indicates a relationship identified through web or Data 360 search. If a new CRM record is created from a web or Data 360 identified relationship, the edge changes from dotted to solid. Small icons layered on top of each edge indicate the data source from which the relationship is sourced: CRM records, Data 360, or the public web. When you hover over the edges, a pop-up also provides the data source type. ## Entity Details Panel Click a node to open the Entity Details panel. The panel shows these details: - The node's name and whether the node is a person or an organization. - Context: An AI-generated description of the node. - Citation: A quoted excerpt from the source material and a link to the original source. From the panel, click **View Record** to open the associated Salesforce record if one exists, or **Create Record** to create a new record from a discovered node. You can also remove a relationship from the graph, or confirm a web-identified node as a match with an existing CRM record. ## Relationship Details Panel Click an edge to open the Relationship Details panel. The panel shows these details: - Both connected nodes and their type (person or organization). - Connection Context: An AI-generated description of the relationship between the two nodes and why it matters. - Relationship Strength: An AI-generated description of the relationship's strength and actionability. - Citation: A quoted excerpt from the source material and a link to the original source. A link appears only if the data source is web. From the panel, click **View Record** to open the associated Salesforce record if one exists already, or **Create Record** to create a new record from a discovered node. From this panel, you can also remove a relationship from the graph, or confirm a web-identified node as being a match with an existing CRM record. # AI Relationship Research Requirements Before setting up AI Relationship Research, confirm that your org has the required licenses, permissions, and platform features. ## Required Licenses | Requirement | Why it is needed | | --- | --- | | AI Relationship Research license | Enables the product in your org. Contact your Salesforce account executive to add this license. | | Data 360 | AI Relationship Research uses Data 360 as the foundation for its data architecture. A provisioned Data 360 org is required even if you plan to use CRM data or web search only. | | Einstein Generative AI | AI Relationship Research uses large language models to conduct research, extract and infer relationships, and generate relationship summaries. Einstein Generative AI must be enabled before you can configure or run AI Relationship Research. | ## Required Permission Sets | Role | Permission Set | Grants access to | | --- | --- | --- | | Admin | AI Relationship Research Admin | AI Relationship Research setup and configuration flows | | End user | AI Relationship Research User | AI Relationship Research component on record pages | # AI Relationship Research Source Objects Source objects define which CRM data AI Relationship Research searches when it generates relationship insights for a research anchor object. Choose from a set of standard source objects delivered for each anchor object, and add your own custom objects to extend research to the data that's unique to your business. When you select CRM as a data source, AI Relationship Research reads data from the source objects that you enable for the research anchor object. The objects and fields that you select determine what AI Relationship Research sends for relationship insight generation, so focused, text-rich fields produce more relevant results. Source objects fall into two groups: standard source objects and custom source objects. ## Benefits - Tailor research to your data model. Add your own custom objects to research so that the relationship graph reflects the relationships your business tracks. - Control graph quality. Include only the objects and fields that carry meaningful relationship signals, and use the record count indicator to keep data volume in a healthy range. - Start fast with sensible defaults. Delivered source objects give each anchor object a working configuration out of the box. ## Standard Source Objects AI Relationship Research delivers a set of standard source objects for each anchor object, with preselected fields. You choose which of the delivered objects to include, but you can't change the delivered list. The standard source objects depend on the anchor object. | Anchor Object | Standard Source Objects and Searched Fields | | --- | --- | | Account or Contact | Interaction Summary (Meeting Notes, Next Steps), Task (Description, Subject), Case (Description, Subject), and Email Message (Text Body, HTML Body, Subject) | | Lead | Task (Description, Subject) | | Opportunity | Interaction Summary (Meeting Notes, Next Steps), Task (Description, Subject), and Case (Description, Subject) | ## Custom Source Objects You can add your org's custom objects as source objects so that data unique to your business is considered in relationship insights. When a custom object isn't directly related to the anchor object, you define a relationship path so that AI Relationship Research can traverse to the anchor object through intermediate objects. To add custom objects, see [Add Source Objects to a Configuration](https://help.salesforce.com/s/articleView?id=xcloud.airr_add_source_objects.htm&release=264.0.0&type=5 "Add standard or custom source objects to a research configuration so AI Relationship Research reads the CRM data that you choose."). ## Record Count For each source object, the configuration shows the number of records in your org. Because AI Relationship Research sends the selected objects' data for relationship insight generation, objects with very high record counts can send too much data at once, which can reduce the quality of the results or affect performance. Use the record count as a signal when you decide which objects to include. - Good: Fewer than 1,000 records. - Moderate: 1,000–5,000 records. - Not recommended: More than 5,000 records, which can affect performance. A high record count doesn't block you from adding an object, but consider whether the object's data is essential before you include it. - **[Add Source Objects to a Configuration](https://help.salesforce.com/s/articleView?id=xcloud.airr_add_source_objects.htm&release=264.0.0&type=5)** Add standard or custom source objects to a research configuration so AI Relationship Research reads the CRM data that you choose. # AI Relationship Research Use Cases AI Relationship Research helps sales, financial services, and marketing teams uncover relationship intelligence and take action directly from Salesforce records. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-ai_relationship_research-264-0-0-production-enus/e8a67f6d-976f-4c49-88aa-357807c9081e/images/icon_note.png) Note This list covers the most common use cases. Additional use cases may apply depending on the product area or implementation approach. ## Sales: Preparing for a Discovery Call Persona: Jordan, Account Executive, mid-market software company Goal: Understand the relationship network at a new opportunity account before a discovery call Jordan has a discovery call in 48 hours with three people she has never met at DreamHouse Realty. Before AI Relationship Research, she would spend two to three hours piecing together context from Google, the news, her CRM, and Slack. She opens the Opportunity record and clicks **Generate Insights**. AI Relationship Research scans the web, her CRM records, and internal call transcripts in the background. Within minutes, the relationship graph surfaces eight prioritized connections. Two stand out: a former colleague of one of the call attendees currently works at Jordan's company, and there is a shared investor between DreamHouse Realty and one of her existing customers. Jordan clicks the shared investor node, reads the relationship summary and its source citations, and identifies a path to a warm introduction through her colleague. She creates a Contact record for a newly discovered executive directly from the graph. Jordan enters her discovery call with a clear picture of the relationship network, a warm introduction already in motion, and tailored talking points, all in under 10 minutes. ## Financial Services: Relationship Manager Meeting Preparation Persona: Sarah, Relationship Manager, Community Bank Goal: Research a key commercial account before a client meeting Sarah has a meeting scheduled with Get Cloudy Consulting. She opens the Account record to trigger AI Relationship Research. AI Relationship Research scans CRM records, public web content, and Data 360 documents including call transcripts and email archives. The relationship graph surfaces the most important connections to Innovate. Sarah clicks into nodes and edges to read relationship descriptions, strength analysis, and source citations. She discovers Venture Kinetics, identified in a press release as Innovate's new R&D partner. She creates a Lead record for Venture Kinetics directly from the graph and notes down a question about potential funding needs for the partnership.. AI Relationship Research has also flagged a hidden match: Alex Carlson Jr., identified in a recent news article as the COO of a customer of Innovate, is also a Contact record in the bank's CRM linked to an existing customer. Sarah confirms the match and sees that the bank and Innovate share a relationship with Alex's firm, an overlap that opens new cross-sell opportunities. She clicks **Ask** to pass the full relationship graph to Agentforce and asks what the two most actionable opportunities are ahead of the meeting. She enters the meeting with a focused two-point strategy, a new Lead record already in the CRM, and a confirmed cross-relationship, all surfaced in under 10 minutes. ## Marketing: Researching a Buying Group for Account Nurturing Persona: Marcus, Account-Based Marketer, B2B software company Goal: Identify and personalize outreach to decision-makers at a target account Marcus is building a nurture campaign for Cumulus Cloud Corporation, a high-priority target account. Before he can personalize outreach, he needs to understand who the real decision-makers are and what their backgrounds look like. He opens the Account record and triggers AI Relationship Research. The relationship graph surfaces key stakeholders and their connections. Marcus discovers that the VP of Operations previously worked at a company that is already a customer of his organization, a connection not visible anywhere in the CRM. He also sees that the CFO recently joined the board of an industry association that his company sponsors. Marcus uses these insights to segment the buying group and tailor campaign messaging to each stakeholder's background and priorities. Instead of a generic nurture sequence, he launches a campaign with outreach that speaks directly to each stakeholder's context and identifies the warmest entry point for initial contact. # AI-Generated Summaries of Survey Responses Create insightful summaries from survey responses with generative AI. Then use a data map to create or update records, or send custom notifications based on the generated summaries.
Available in: Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions with the Einstein for Service add-on
Available with the Feedback Management - Starter and Feedback Management - Growth licenses
- **[Create Summaries from Survey Responses](https://help.salesforce.com/s/articleView?id=xcloud.task_create_summaries_from_survey_responses.htm&release=264.0.0&type=5)** Generate summaries of survey responses using generative AI to gather feedback and valuable insights. Use data maps to automatically create or update records, or send custom notifications whenever a summary is generated. # Alert Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains the Alert LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Spring '20 The _Alert Lightning Web Component_ displays an SLDS or Newport alert. ## Available c-alert Attributes

Attribute

Value

Type

Required

Description

theme

slds, nds (Default: slds)

string

 

Specifies the theme to use.

message

 

string

 

Pass simple message into the component. For messages containing markup, use the default slot. If slotted content is passed, Alert#message is ignored.

variation

info, warning, error, offline (Default: info)

string

 

An enum value representing the components style variation.

dismissible

true, false (Default: false)

boolean

 

If true, the alert can be dismissed by user.

icon

 

string

 

The icon name in spriteName:iconNameformat. For example utility:info. Pass an empty string to hide. See SLDS icons.

## Example c-alert\* Component ``` For more complex messaging, use the default slot. Using slots. ``` ## Available Custom Labels

Label

ApiName

Description

Close

cmpClose

Assistive text for the icon to close or dismiss the alert.

## Available Methods dismiss() Dismisses the alert. ## Available Classes Alert Static class of `c-alert` component. ## Available Events dismissed Fires when the alert is dismissed. ## Available Variations enum Enum for style variations. Is read-only. ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _Alert Lightning Web Component_ displays an SLDS or Newport alert. ## Available c-alert Attributes

Attribute

Value

Type

Required

Description

theme

slds, nds (Default: slds)

string

 

Specifies the theme to use.

message

 

string

 

Pass simple message into the component. For messages containing markup, use the default slot. If slotted content is passed, Alert#message is ignored.

variation

info, warning, error, offline (Default: info)

string

 

An enum value representing the components style variation.

dismissible

true, false (Default: false)

boolean

 

If true, the alert is can be dismissed by user.

icon

 

string

 

The icon name in spriteName:iconNameformat. For example utility:info. Pass an empty string to hide. See SLDS icons.

## Example c-alert Component ``` For more complex messaging, use the default slot. Using slots. ``` ## Available Methods dismiss() Dismisses the alert. ## Available Classes Alert Static class of `c-alert` component. ## Available Events dismissed Fires when the alert is dismissed. ## Available Variations enum Enum for style variations. Is read-only. # Alert Salesforce to Potential High Usage Events Communicate and work with Salesforce to prepare for increased use in your org. Salesforce uses a multi-tenant architecture, which means that multiple customers are supported on a database instance. Customers of all sizes have access to a shared pool of processing capacity, data storage, and product features. To protect these shared resources, Salesforce enforces limitations, such as governor limits, to prevent overuse while providing flexibility if a customer needs additional capacity during one-off usage spikes. However, unexpected surges in processing capacity can impact not only your own org’s performance, but also the performance of other tenants sharing your instance. - Contact Salesforce as soon as possible if you anticipate a significant usage increase. Common examples include rolling out a Salesforce implementation to a significant number of users or during a holiday campaign and promotional event. Salesforce can help estimate the server capacity and resourcing needs and then determine if any additional action is required. For example, temporarily adjusting governor limits or migrating your org to an instance with additional capacity are common solutions. - If you have the [Signature Success Plan](https://www.salesforce.com/services/success-plans/overview/signature-success-plans/), work with the Salesforce Signature team to prepare for high usage events as part of the Key Events Management offering. #### See Also - [_Salesforce Architects_: Platform Multitenant Architecture](https://architect.salesforce.com/fundamentals/platform-multitenant-architecture/blogs/2020/09/performance-testing-on-the-lightning-platform) - [_Knowledge Article_: Prepare for a Key Event with a Salesforce Signature Success Plan](https://help.salesforce.com/s/articleView?id=000393054&type=1&language=en_US) # Alerts Show alerts on the Loyalty Program Member page so that your customer service representatives, loyalty program admins, and the program managers can stay on top of changes related to your loyalty program members. For example, show alerts on a member's expiring points or vouchers so that the members can take immediate action and avoid issues. You can also alert customer service representatives. You can create alerts manually or automatically. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions
Available in: Orgs that have the B2C - Loyalty Management Plus or the Loyalty Management - Advanced license enabled
Set up alerts by using the Flow Builder, Data Processing Engine, or Promotion Setup Rules. Create alert entries in the Record Alerts table and assign the alerts with alert severity. # Alerts for Survey Responses Use Record Alerts in a data map to monitor updates in records based on survey responses. For example, if a customer gives a low rating for a support agent, Record Alerts can be defined to notify the agent about the survey response immediately. You can see Record Alerts on the Alerts component in the service console. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Feedback Management - Starter or Feedback Management - Growth licenses, and IndustriesServiceExcellenceAddOn and FSCAlertFramework
For detailed setup and configuration steps, see [Record Alerts](https://help.salesforce.com/s/articleView?id=sf.common_record_alerts.htm&type=5&language=en_US) in the Industries Common Features Guide. - **[Create a Data Map to Get Alerts](https://help.salesforce.com/s/articleView?id=xcloud.task_create_record_alerts.htm&release=264.0.0&type=5)** Create a data map to receive record alerts for survey responses when defined conditions are met. For example, service agents can view alerts related to survey responses with negative customer feedback. - **[Create Alerts for Survey Responses](https://help.salesforce.com/s/articleView?id=xcloud.task_create_alerts.htm&release=264.0.0&type=5)** Use record alerts on the Contact record page to receive alerts for survey responses. Service agents can view alerts related to customer feedback about closed cases, service quality, and more. # Allocate Budget to Program Members Allocate portions of the total or sub-budget to program members to prioritize high-performing partners or specific regions. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management, Ship and Debit Process Management, Price Protection, or Stock Rotation enabled.
User Permissions Needed
To define a program budget: Rebate Management Admin OR Ship and Debit Process Management Admin OR Price Protection Admin OR Stock Rotation Admin permission set
1. Open a Budget record. 2. Navigate to the Budget Allocations related list and click **New**. 3. Enter a **Budget Allocation Name**. (e.g., Partner Allocation for Stock Rotation). 4. Enter the **Amount** for allocation. The sum of all individual allocations should not exceed the total budget amount defined. 5. Repeat this process for all key partners participating in the program. # Allocate Inventory Allocating inventory allows users to soft reserve available stock for a specific demand source. Users can choose between auto allocation or manual allocation. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To allocate inventory: Inventory allocation permission set
For automatic allocation, ensure to [define product fulfillment locations](https://help.salesforce.com/s/articleView?id=xcloud.aslm_define_product_fulfillment_locations.htm&type=5&language=en_US). 1. Open the Order and Work Order record page. 2. In the Inventory Allocation component, select the products to be allocated. You can allocate inventory either manually or by using auto allocation, depending on your fulfillment needs. 3. To manually allocate inventory: 1. Click the **Edit** icon on a specific product line. 2. Select your preferred source locations and respective quantities for allocation. 4. To auto allocate inventory: 1. Click the **Allocate** button. 2. In the Allocate Inventory modal, select the Destination Location. The system suggests a source location based on pre-configured Product Fulfillment Locations. If the suggested location is not suitable, you can select another source location. The Destination Location dropdown only shows locations associated with the account on the order or work order. 5. To adjust the suggested quantity for an automatic or manual allocation, click the **Edit** icon. For example, if 20 units are required but you only wish to reserve 15, change the allocation quantity to 15, and click Save. 6. Save your changes to initiate the inventory allocation. A notification confirms when the allocation is complete. Refresh the component to view the updated status: - Fully Allocated: The allocated quantity matches the requirement. - Partially Allocated: The allocated quantity is less than the requirement. For example, 15 allocated out of 20 required. - Not Allocated: No inventory has been reserved, often due to lack of stock at the source location. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note When an allocation is successful, the allocated quantity on the product item increases, and the available quantity decreases. When inventory is deallocated, the allocated quantity decreases and the available quantity increases. # Allocations for Salesforce Foundations Review important allowances for Salesforce Foundations. - Enterprise Edition customers refer to [Salesforce Enterprise Edition Allocations](https://help.salesforce.com/s/articleView?id=xcloud.overview_limits_enterprise.htm&language=en_US). - Unlimited Edition customers refer to [Salesforce Unlimited Edition Allocations](https://help.salesforce.com/s/articleView?id=xcloud.overview_limits_unlimited.htm&language=en_US). - For allocations related to foundational service, marketing, and commerce functionality, refer to [Salesforce Pro Suite Edition Allocations](https://help.salesforce.com/s/articleView?id=xcloud.overview_limits_pro_suite.htm&language=en_US). You get a limited set of usage credits to get started with Agentforce, including 1,000 agent conversations and 200,000 Einstein requests. For more information on Agents and considerations, see Salesforce Help. #### See Also - [Salesforce Editions](https://help.salesforce.com/s/articleView?id=xcloud.overview_edition.htm&type=5&language=en_US) - [Find Your Edition](https://help.salesforce.com/s/articleView?id=xcloud.overview_finding_edition.htm&language=en_US) - [Agentforce for Sales](https://help.salesforce.com/s/articleView?id=sales.sales_cloud_agents.htm&type=5&language=en_US) - [Agentforce for Service](https://help.salesforce.com/s/articleView?id=service.service_agent_overview.htm&language=en_US) - [Foundations FAQ](https://www.salesforce.com/crm/foundations/#faq) # Allow Customers to Opt Out of Emails Give customers the choice to opt out of marketing emails. Flow builder logs a lead or customer's unsubscribe request in Salesforce. Process Builder launches the Flow when there’s a new unsubscribe request. Build your email opt-out flow and process with these steps. 1. **[Complete Pre-Work for the Email Opt-Out Flow](https://help.salesforce.com/s/articleView?id=xcloud.essentials_ubsubscribe_prework.htm&release=264.0.0&type=5)** Create one queue, activate two fields, and connect your support email address before building your Flow. 2. **[Create an Email Opt Out Flow](https://help.salesforce.com/s/articleView?id=xcloud.essentials_unsubscribe_flow_builder.htm&release=264.0.0&type=5)** Create a Flow that lets leads and contacts unsubscribe from your email campaigns. 3. **[Create a Process to Trigger the Email Opt Out Flow](https://help.salesforce.com/s/articleView?id=xcloud.essentials_unsubscribe_process.htm&release=264.0.0&type=5)** You created a Flow to check the Email Opt Out box when leads and contacts unsubscribe. Now tell the system to launch that Flow when a new case enters the Unsubscribe Requests queue. # Allow Data Analysis with Einstein Data Exploration Consent Use Einstein Data Exploration Consent to manage project and object permissions for Salesforce data scientists. With this access, Salesforce can develop and improve your Einstein features. For example, you can see the content that your customers pay attention to and find patterns to best advertise your products or services. ### Required Editions
Available in: Lightning Experience in Professional, Enterprise, Performance, Unlimited, and Developer Editions.
User Permissions Needed
To grant access to apps and objects in Einstein Data Exploration Consent: Data Exploration
To grant project and object permissions in Salesforce requires a pilot program agreement with Salesforce. To participate in a pilot program, contact your Salesforce Account Executive. To grant access to projects and objects: 1. From Setup, in the Quick Find box, enter **Einstein Data Exploration Consent**, and then select **Einstein Data Exploration Consent**. 2. Find the project that you want Salesforce data scientists to access. In this example, the project is Use Case Explorer. 3. Select **Edit Settings**. ![The Einstein Data Exploration Consent screen](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/data_protection_and_privacy/images/einstein_data_exploration.png) 4. Under Access Denied, select the objects that you want to grant access to and use the arrow to move them to the **Access Granted** column. 5. Enable **Project Status**. 6. **Save** your changes. 7. Tell your Salesforce pilot program contact that you granted project and object permissions. ![The Edit Consent Settings screen](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/data_protection_and_privacy/images/einstein_consent_settings.png) # Allow Experience Cloud App Users to Initiate Deletion of Their Data The App Store Review Guideline 5.1.1 (v) requires that all apps must allow users to initiate deletion of their account from within the app. Apple can remove your app from its App Store if your app doesn't meet this requirement. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To enable external user deactivation option: Customize Application
This requirement affects your iOS Mobile Publisher for Experience Cloud app if its associated Experience Cloud site allows guest users to self-register. To meet this requirement, first allow your users to deactivate their accounts from the site, and then manually delete their information from the org. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note The ability of users to initiate deletion of their account from within the app is available for only Aura sites. 1. From Setup, enter user management settings in the Quick Find box, then select **User Management Settings**. 2. Enable the **User Self Deactivate** setting to allow your site users to deactivate their account. 3. For the site you'd like to allow user self-deactivation, open the site’s Experience Builder User Settings (My Settings) page. 4. Select the **Customizable User Settings** component on the User Settings (My Settings) page. Configure the component’s Account Details properties. ![Account Details properties of the component](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/account_details.png) Make sure to deselect the **Hide the Deactivate Account section** checkbox, so that your users see the Deactivate My Account button. Customize the Deactivate Account Button label, and other Deactivate Account user settings, to use the term Delete rather than Deactivate. This customization, and subsequent deletion of user data from the org, ensures that you meet Apple’s Account Deletion requirements. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note You may not want to use the Customizable User Settings component to initiate the deletion of user data. For example, if you have special branding requirements. Instead, you can build your own custom component or use a Flow component. See the example for details on using a Flow component for this purpose. 5. Create a notification that informs you when a user has deactivated their account and initiated the deletion of their data. For example, use a custom or Flow component, or an Apex trigger for notification. 6. After a user deactivates their account, delete all of the user’s data stored in the Salesforce platform. Follow your local data protection and privacy regulations. For information on deleting user data from the Salesforce platform, refer to [Data Deletion for Experience Cloud Sites](https://help.salesforce.com/s/articleView?id=xcloud.data_deletion_communities.htm&type=5&language=en_US), [Data Deletion for the Salesforce Platform](https://help.salesforce.com/s/articleView?id=data_deletion_platform.htm&type=5&language=en_US), and [Let Users Scramble Their User Data](https://help.salesforce.com/s/articleView?id=platform.users_scramble_user_setting.htm&type=5&language=en_US). Using an Apex query, you can programmatically revoke the app user’s OAuth access token and delete their ThirdPartyAccountLink (TPAL). Apex queries that return multiple tokens and TPALs, can result in performance issues and rapidly reach the transaction limit. You can get around this limit by performing queries in a [batch job.](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_batch_interface.htm) Here are some examples. #### See Also - [_Apple App Store Review Guidelines 5.1.1 (v)_: Data Collection and Storage](https://developer.apple.com/app-store/review/guidelines/#5.1.1) - [_Knowledge Article_: Allowing Mobile Publisher for Experience Cloud App Users to Initiate Deletion of Their Data](https://help.salesforce.com/s/articleView?id=000364042&type=1&language=en_US) - [_Set Up and Maintain Your Salesforce Organization Help_: Enable User Self-Deactivation](https://help.salesforce.com/s/articleView?id=platform.users_deactivate_external_option.htm&type=5&language=en_US) - [_Experience Cloud Help_: Customizable User Settings](https://help.salesforce.com/s/articleView?id=experience.rss_user_settings_customizable.htm&type=5&language=en_US) - [_Experience Cloud Help_: Flow](https://help.salesforce.com/s/articleView?id=experience.rss_flow_component.htm&type=5&language=en_US) - [_Automate Your Business Process_: Build a Flow](https://help.salesforce.com/s/articleView?id=platform.flow_build.htm&type=5&language=en_US) - [_Apple App Store Review Guidelines 5.11_: Data Collection and Storage](https://developer.apple.com/app-store/review/guidelines/#5.1.1) ## Example 1: Use a Flow Component to Allow Users to Deactivate Their Account You may want to use a Flow component instead of the Customizable User Settings component to allow users to deactivate account. 1. Assign the **Run Flows** user permission to your site users using their profile or a permission set. 2. Build the new flow. 3. From Setup, enter flow in the Quick Find box, then select **Flows**. 4. Click **New Flow**. 5. Choose **Screen Flow** for the flow type, and then click **Create**. 6. Add the **Update Records** element to the canvas. 7. In the New Update Records window, specify the following information. - Label: Deactivate User Account - API Name: Deactivate\_User\_Account - Select **Specify conditions to identify records, and set fields individually** - Object: **User** - Filter User Records - Field: **Id** - Operator: **Equals** - Value: {$User.Id} - Set Field Values for the User Records - Field: **isActive** - Value: {!$GlobalConstant.False} 8. Click **Done**. 9. Click **Save**. 10. In the Save the flow window, specify the following information and then click **Save**. - Flow Label: User Self-Deactivation - Flow API Name: User\_Self\_Deactivation 11. Click **Activate**. 12. Using Experience Builder, add the Flow component to your site. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note For this example, it's recommended that you don't directly add the Flow component to the User Settings page. Instead, update the flow to add at least a start screen, so that user account deactivation doesn't occur as soon as the page is displayed or the flow launched. Then add the Flow component to a new page and link to that page from the User Settings page. 13. Select the Flow component. 14. In the component's property editor, select **Use Self-Deactivation** from the Flow dropdown menu. 15. If you're using audience targeting, make sure that the user identified to test the app has access to the page containing the Flow component. 16. Publish the site. ## Example 2: Use a Flow Component for Notification that a User has Deactivated Their Account and Initiated the Deletion of their Data You must know if a user has deactivated their account and initiated the deletion of their data, so that you can then delete their data from the org. One way to accomplish this is by modifying the flow created in the previous example. 1. Using Flow Builder, select the **User Self-Deactivation** flow. 2. On the canvas, add the **Action** element below the Update Records element. 3. In the New Action window, specify the following information. - Action: **Send Email** - Label: Send Email - API Name: Send\_Email - Body: This user has self-deactivated their account: {!$User.Id} and would like to delete their account information - Subject: New deactivated user - Email Addresses (comma-separated): Enter the email recipient, for example the org admin's email. 4. Click **Done**. 5. Click **Save** and then **Activate**. ## Example 3: Use Apex to Revoke User’s OAuth Access Token Query the [OauthToken](https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_oauthtoken.htm) object with the `userId` of the user who wants to initiate deletion of their account. You can filter the query by appName to return the app tokens you want. If you’re using flows, keep in mind that flows don’tallow create, update, or delete actions to be taken in the same transaction (which is a single method in Apex) as a lookup or callout. public void revokeToken(String userId){ //Look up OauthTokens for the user List< OauthToken > tokens = \[SELECT ID, DeleteToken FROM OauthToken WHERE userid =: userId AND AppName = ''; //Contruct the url to hit the revoke token endpoint with desired token String baseUrl = ''; String revokeEndpoint = '/services/oauth2/revoke?token='; String tokenEncoded = EncodingUtil.URLENCODE(tokens\[0\].DeleteToken,'UTF-8'); baseUrl += revokeEndpoint += tokenEncoded; //Http request to actualy hit the endpoint HttpRequest req = new HttpRequest(); req.setEndpoint(URL); req.setHeader('Content-Type','application/x-www-form-urlencoded'); req.setMethod('GET'); Http http = new Http(); HttpResponse res = http.send(req); system.debug('Response was: '+res); } ## Example 4: Use Apex to Delete the ThirdPartyAccountLink (TPAL) Use the `userId` of the user who wants to initiate deletion of their account to query for all associated [TPALs](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_class_System_UserManagement.htm). The query then deletes each returned TPAL. List tpals = \[select Id, UserId, SsoProviderId, Provider, RemoteIdentifier from ThirdPartyAccountLink where UserId = '005xx00000#####'\]; for (ThirdPartyAccountLink tpal : tpals) { Auth.AuthToken.revokeAccess(tpal.SsoProviderId, tpal.Provider, tpal.UserId, tpal.RemoteIdentifier); } A few things to note: - The database table has an index on the `OrganizationId`, `SsoProviderId`, `Provider`, and `userId` (parentId) fields. Since the query includes these fields in the `where` clause (`OrganizationId` is used automatically), the index can be used for optimization. - Make sure you have the ManageUsers user permission (otherwise, you’re calling your own `userId`). - The org must have the EditThirdPartyAccountLink org permission. # Allow Members to Join and Leave Loyalty Program and Promotions from Experience Cloud Site Give contacts, accounts, and person accounts in your company the permission to join or leave your loyalty program from the loyalty program’s Experience Cloud site. You can also give loyalty program members the permission to join or opt out of promotions from the Experience Cloud site. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To provide members access to join and leave loyalty program and promotions from Experience Cloud site:
  • System Administrator
  • Loyalty Management
Before you turn on the setting, ensure that your customers and members have access to: - Visit your loyalty program’s Experience Cloud site as external users. - View the loyalty program that customers can join. - View the promotion that members can join. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip Use sharing sets in your Experience Cloud site to provide customers and members access to the loyalty program and promotion records. 1. From Setup, in the Quick Find box, enter Loyalty Management, and then select **Loyalty Management Settings**. 2. Turn on Customers and Members Join and Opt Out from Experience Cloud Site. After you turn on the setting, Loyalty Program Member records get Create assess to Account, Contact, and Loyalty Program Member Promotion objects, and View access to the Loyalty Program Process Rule object. # Allow the Required Domains To enable your users to access Salesforce, you must add the standard Salesforce domains to your list of allowed domains. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: All Editions.
If your users have general access to the Internet, no action is required. If you control your users’ or servers’ access to the Internet through allowlists, add these domains to ensure that you receive all Salesforce content. ## Salesforce Domains to Allow To enable all Salesforce functionality, add these Salesforce-managed domains. | Domain | Use | | --- | --- | | app.salesforceiq.com | Provides Inbox services for customers outside of the European Union (EU). | | app-frankfurt.salesforceiq.com | Provides Inbox services for customers within the EU. | | \*.force.com | Visualforce pages, Lightning pages, and content (files) stored in Salesforce. | | \*.forceusercontent.com | Maps and location services. | | \*.force-user-content.com | User content stored in Salesforce. | | \*.salesforce.com | Salesforce login authentication. Also used for multiple Salesforce content sites, including Salesforce Help, Salesforce Developers, Salesforce Admins, Trailblazer Communities, and Trailhead. | | \*.my.salesforce.app | Securely hosts React and other multi-framework web apps with browser-native isolation from Lightning Experience and internal Salesforce components. Not available on Alibaba Cloud or Salesforce Government Cloud. | | \*.salesforceliveagent.com | Chat, Omni-Channel, and SOS. | | \*.salesforce-experience.com | Experience Builder for Experience Cloud sites. | | \*.salesforce-hub.com | Customer 360 Data Manager. | | \*.salesforce-scrt.com | Next generation Omni-Channel engagement. (Examples: Voice and messaging.) | | \*.salesforce-setup.com | Setup pages in Salesforce. | | \*.salesforce-sites.com | Salesforce Sites. | | \*.sfdcopens.com | Email tracking. (Reserved for future use.) | | \*.site.com | Experience Cloud sites. | | \*.svc.sfdcfc.net | Email integration for Salesforce Inbox users. | | .trailblazer.me | Sign-up, login, and profile and settings management with multiple Salesforce-related sites, including AppExchange, IdeaExchange, Salesforce Help, Trailhead, and Trailblazer Communities. | | \*.trailhead.com | Enablement Sites (myTrailhead). | These Salesforce-managed domains were used in orgs without enhanced domains, a feature that was enforced in Winter ’24. After you remove all references to these domains, you can remove these domains from your allowlists. | Domain | Use | | --- | --- | | \*.documentforce.com | Content (files) stored in Salesforce orgs without enhanced domains. | | \*.lightning.com | Lightning container components in orgs without enhanced domains. | | \*.salesforce-communities.com | Experience Builder for Experience Cloud sites in orgs without enhanced domains. | | \*.sfdc.sh | Chat, Omni-Channel, and SOS in orgs without enhanced domains. | | \*.visualforce.com | Visualforce pages in orgs without enhanced domains. | ## Domains to Allow for the Salesforce Mobile App To ensure that you receive all content in the Salesforce mobile app, add these domains. - analytics.localytics.com - manifest.localytics.com - \*.bugsnag.com - \*.bugsnag.smartbear.com ## Domains to Allow for Login Screen Content Use these domains to deliver content in the right frame of your login screen. If you don’t allow these domains, the right side of a non-customized login page can display page-load errors. - \*.sfdcstatic.com - secure.eloqua.com - \*.google.com - \*.doubleclick.net - www.facebook.com - \*.google-analytics.com The right frame content is displayed in the following URLs. - login.salesforce.com - test.salesforce.com - .salesforce.com - A My Domain URL without a customized login page (for example, norns.my.salesforce.com) ## Domains to Allow for Trailblazer Identity Login Screen Content Use these domains to deliver content in the Trailblazer Identity login screen. If you don't allow these domains, you’ll see a blank screen when trying to log in via Trailblazer Identity. - \*.oktacdn.com - \*.okta.com - \*.lightningdesignsystem.com - \*.sfdcstatic.com - cdn.cookielaw.org - \*.onetrust.com - \*.googletagmanager.com - \*.google-analytics.com - trailblazer-identity.my.site.com #### See Also - [IP and Domain Access](https://help.salesforce.com/s/articleView?id=xcloud.security_access_ip_domains.htm&release=264.0.0&type=5 "Add the required domains to your network allowlist, and configure IP allowlists in Salesforce.") # Allow Third-Party Access to a Package If the package you install contains a remote site setting, you must approve access to websites outside of Salesforce. Remote site settings allow the package to transmit data to and from a third-party website. In these scenarios, you’ll be notified after you click **Install** on the package installation page. A popup box displays and lists any website that the package communicates with. You can then choose to grant access, or cancel the package installation. Before using the package, consider contacting the package developer to understand what data is transmitted and how it's used. If you have an internal security contact, ask the contact to review the package so that you understand its impact before use. # Amazon Athena Connection Sync Amazon Athena to Salesforce Data Pipelines by creating a remote connection. ## Create the Connection 1. On the Data Manager Connections tab, click **New Connection**. 2. Click the name of the connector, and click **Next**. 3. Enter the connector settings. 4. To validate your settings and attempt to connect to the source, click **Save & Test**. If the connection fails, Salesforce Data Pipelines shows possible reasons. ## Connection Settings
Setting Description
Connection Name Required. Use a name that lets you easily distinguish between different connections.
Developer Name Required. The API name is used in your recipes to reference data extracted through this connection. The name can't include spaces. After you create the connection, you can’t change the developer name.
Description Required. The description for the connection.
Authentication Type Required. The authentication type. Valid values include Root, for standard authentication, and IAM, for AWS Identity Access Management (IAM) authentication.
AWS Access Key Required. The access key associated with your AWS root account. You can find it on your AWS Management console in the Security Credentials Access Keys section.
AWS Secret Key Required. The secret key associated with your AWS root account. You can find it on your AWS Management console in the Security Credentials Access Keys section.
AWS Role ARN Required for IAM authentication. The ARN of the IAM role. You can find it on the IAM Role Setup in AWS.
AWS Region

Required. The region name where your Amazon Athena data is hosted. Valid values are:

  • bahrain
  • beijing
  • capetown
  • central
  • frankfurt
  • govcloudeast
  • govcloudwest
  • hongkong
  • ireland
  • jakarta
  • london
  • milan
  • mumbai
  • ningxia
  • northerncalifornia
  • northernvirginia
  • ohio
  • oregon
  • osaka
  • paris
  • saopaulo
  • seoul
  • singapore
  • stockholm
  • sydney
  • tokyo
  • uae
  • zurich
Database Required. The name of the Amazon Athena database.
S3 Staging Directory Required. The folder in S3 where you want to store the results of queries.
Datasource Required. Then name of the Amazon Athena data source to connect to.
Workgroup Required for IAM authentication. The name of the Amazon workgroup connected to the IAM role.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note For Root authentication, the connector uses `AwsRootKeys` for the AuthSchema value, so make sure to use the AWS root key values. For granular access to AWS data, use IAM authentication, setting up IAM users and roles in AWS. For more information on AWS IAM, see [Getting Started with IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) on AWS. For more information, see [CData JDBC Driver for Amazon Athena](https://cdn.cdata.com/help/FKJ/jdbc/default.htm) and [AWS security credentials](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html). ## Connection Considerations When working with the Amazon Athena connector, keep these behaviors in mind. - Connected object names must start with a letter and contain only letters, digits, or underscores. Object names can’t end with an underscore. - Only field names with combinations of alphanumeric, dot, underscore, or dash characters are supported. If a connector includes field names that contain other characters, such as spaces or brackets, the sync fails. - This connector can sync up to 10 million rows or up to 5 GB per job, whichever limit it reaches first. # Amazon RDS Connection Create a remote connection using one of the Amazon RDS connectors to bring data managed on the Amazon Relational Database Service into Salesforce Data Pipelines. ## Available Amazon RDS Connectors - AWS RDS Aurora MySQL - AWS RDS Aurora PostgreSQL - AWS RDS MariaDB - AWS RDS MySQL - AWS RDS PostgreSQL - AWS RDS SQL Server ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note Only SSL-enabled Amazon RDS instances are supported. ## Create the Connection 1. On the Data Manager Connections tab, click **New Connection**. 2. Click the name of the connector, and click **Next**. 3. Enter the connector settings. 4. To validate your settings and attempt to connect to the source, click **Save & Test**. If the connection fails, Salesforce Data Pipelines shows possible reasons. All settings require a value, unless otherwise indicated.
Setting Description
Connection Name Identifies the connections. Use a convention that lets you easily distinguish between different connections.
Developer Name API name for the connection. This name can’t include spaces. The API name is used in your recipes to reference data extracted through this connection. You can’t change the developer name after you create the connection.
Description Description of the connection for internal use.
Database Name of the database that you’re connecting to.
JDBC Connection URL

URL schema for the database. The port isn’t optional. If no port is specified, the default port is used. Enter in the format: <prefix>.<hostname>.<cluster>.rds.amazonaws.com:<port>

For example:

analyticsaws.csg5yuelzxbf.us-west-2.rds.amazonaws.com:5407
Username User name to connect to the database.

Schema

This setting is available for MariaDB and MySQL connections.

Schema name for the database. Required if the JDBC connection URL doesn’t provide enough context. Otherwise, this setting is optional.

  • Microsoft SQL Server—Use the schema name to specify the correct object.
  • PostgreSQL—Use the schema name to specify the correct object.
Password Password to connect to the database.
## Filter Data Synced to Salesforce Data Pipelines Exclude unnecessary or sensitive data from syncing to Salesforce Data Pipelines with data sync filters. Filters run on the source object and speed up data sync by pulling only the data you need into Salesforce Data Pipelines. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note If you plan to use excluded data in the future, use a recipe filter to limit the data written to a dataset instead of a data sync filter. 1. From Data Manager, click the **Connections** tab. 2. Select the connection associated with the object to filter. 3. Click the name of the object to filter. 4. Click **Data Sync Filter**. 5. Enter the filter. 6. Click **Save**. To filter an Amazon AWS RDS connector, enter a filter using the syntax described in its help. - [AWS RDS Aurora MySQL Help](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraMySQL.html) - [AWS RDS Aurora PostgreSQL Help](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/Aurora.AuroraPostgreSQL.html) - [AWS RDS MariaDB Help](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MariaDB.html) - [AWS RDS MySQL Help](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_MySQL.html) - [AWS RDS PostgreSQL Help](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html) - [AWS RDS SQL Server Help](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_SQLServer.html) ## Amazon RDS Connector Considerations Keep these behaviors in mind when working with an Amazon RDS connector. - Connected object names must start with a letter and contain only letters, digits, or underscores. Object names can’t end with an underscore. - Only field names with combinations of alphanumeric, dot, underscore, or dash characters are supported. If a connector includes field names that contain other characters, such as spaces or brackets, the sync fails. - The connector can sync up to 20 million rows or 10 GB per object, whichever limit is reached first. When using the connector, Salesforce Government Cloud org data is protected in transit with advanced encryption and can sync up to 10 million rows or 5 GB for each connected object, whichever limit is reached first. - The AWS RDS SQL Server connector isn’t available to sync Salesforce Government Cloud org data. - Columns of datatype JSON are not supported. # Amazon Redshift Connection Create a remote connection using the Amazon Redshift connector to sync data from Amazon Redshift to Salesforce Data Pipelines. ## Connection Requirements Before you create an Amazon Redshift connection, ensure that the Redshift cluster that you’re connecting to is SSL enabled. For more information about using SSL, see [Configure Security Options for Connections](http://docs.aws.amazon.com/redshift/latest/mgmt/connecting-ssl-support.html) in Amazon Web Services documentation. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note SHA256 encryption isn't supported for the certificate bundle. You must use MD5 encryption. ## Create the Connection 1. On the Data Manager Connections tab, click **New Connection**. 2. Click the name of the connector, and click **Next**. 3. Enter the connector settings. 4. To validate your settings and attempt to connect to the source, click **Save & Test**. If the connection fails, Salesforce Data Pipelines shows possible reasons. All settings require a value, unless otherwise indicated.
Setting Description
Connection Name Identifies the connections. Use a convention that lets you easily distinguish between different connections.
Developer Name API name for the connection. This name can’t include spaces. The API name is used in your recipes to reference data extracted through this connection. You can’t change the developer name after you create the connection.
Description Description
Username User name for your Amazon Redshift account.
Number Of Nodes in Cluster The number of nodes in the Amazon Redshift cluster.
Schema Your Amazon Redshift schema name. Only objects that exist within this schema are available for sync.
Cluster Node Type Node type of the Amazon Redshift cluster.
JDBC URL

Your Amazon Redshift connection URL. Enter in the format: jdbc:redshift://<cluster>.<hostname>.<region>.redshift.amazonaws.com:<port>/<database> For help finding your URL, see Amazon Web Services’ Obtain the JDBC URL. Use the exact URL specified in the cluster database properties. For example:

jdbc:redshift://examplecluster.cke7ebis04kb.us-west-2.redshift.amazonaws.com:5631/dev

Serverless JDBC URLs are also supported. For example:

jdbc:redshift:User=admin;Password=admin;Server=default.xxxxxxxxxx.us-east.2.redshift-serverless.amazonaws.com;Port=5439;Database=dev;
Password Password for your Amazon Redshift account.
S3 Bucket Name The name of your Amazon S3 bucket. Optional.
## Filter Data Synced to Salesforce Data Pipelines Exclude unnecessary or sensitive data from syncing to Salesforce Data Pipelines with data sync filters. Filters run on the source object and speed up data sync by pulling only the data you need into Salesforce Data Pipelines. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note If you expect to use excluded data in the future, use a recipe filter to limit the data written to a dataset instead of a data sync filter. 1. From Data Manager, click the **Connections** tab. 2. Select the connection associated with the object to filter. 3. Click the name of the object to filter. 4. Click **Data Sync Filter**. 5. Enter the filter. 6. Click **Save**. For the Amazon Redshift connector, enter a filter in the syntax described in the [Amazon Redshift help](https://docs.aws.amazon.com/redshift/latest/dg/r_conditions.html). ## Amazon Redshift Connector Considerations Keep these behaviors in mind when working with the Amazon Redshift connector. - Connected object names must start with a letter and contain only letters, digits, or underscores. Object names can’t end with an underscore. - Only field names with combinations of alphanumeric, dot, underscore, or dash characters are supported. If a connector includes field names that contain other characters, such as spaces or brackets, the sync fails. - The connector can sync up to 100 million rows or 50 GB per object, whichever limit is reached first. When using the connector, Salesforce Government Cloud org data is protected in transit with advanced encryption and can sync up to 10 million rows or 5 GB for each connected object, whichever limit is reached first. - Ensure that the Redshift cluster that you’re connecting to is SSL enabled. For more information about using SSL, see [Configure Security Options for Connections](http://docs.aws.amazon.com/redshift/latest/mgmt/connecting-ssl-support.html) in Amazon Web Services documentation. - While connecting to a Redshift view, the field picker appears empty when a field’s length exceeds 32,000 characters and the source data table and view are in different database schemas. Decrease the field length in Redshift, or move the table and view to the same schema. - When syncing a Redshift object, the job quits when the query takes longer than the 60-minute threshold or when Redshift can't send any data within a 20-minute window. Make sure the Redshift instance is sized properly to send data in the 20-minute window. - Although allowing designated IPs isn’t usually the preferred or recommended practice in most cases, you must make your Redshift node available to Salesforce data centers with [these IP ranges](https://help.salesforce.com/articleView?id=000321501&type=1&mode=1&language=en_US). Nodes in a VPC or behind a firewall aren’t supported. # Amazon Redshift Private Connection Pull your data securely from Amazon Redshift into Data Manager using the virtual private connection (VPC) for Redshift input connector for Salesforce Data Pipelines. To use the Amazon Redshift Private connector, you configure an outbound network connection, external credential, and named credential. ## Prerequisites - Requires [Salesforce Private Connect](https://help.salesforce.com/s/articleView?id=sf.private_connect_overview.htm&type=5&language=en_US). - Salesforce Data Pipelines only supports Redshift VPC endpoint services. Redshift-managed VPC endpoints are not supported by Salesforce Private Connect. For more information on Redshift VPC endpoint services, see [Create a service powered by AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/privatelink/create-endpoint-service.html). - In Amazon Redshift, - Create an EC2 target group using the Redshift VPC information and private node IP address. - Create an EC2 network load balancer using the Redshift VPC information and the target group. - Create a VPC endpoint service using the load balancer and Redshift VPC information. We recommend that you disable **Acceptance required** to prevent manual acceptance for connection requests to the service. - Make note of the VPC endpoint service name. The name is used in the Salesforce Private Connect setup and the outbound network connection. For help with configuring this connection so that it’s consistent with your organization’s security requirements, contact your network security or IT department. ## Allowlist the Salesforce AWS Account for Redshift Private Connect To verify your AWS account is on the allowlist for Salesforce private connect, see [Verify Salesforce AWS Account for Private Connect](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_private_allowlist.htm&release=264.0.0&type=5 "For your Snowflake, Redshift, or S3 private connector to work, verify your AWS account is listed as a Private Connect."). ## Create an Outbound Network Connection To create an outbound network connection, see [Create the Outbound Network Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_private_outbound_connection.htm&release=264.0.0&type=5 "Create a primary outbound network connection to support your Virtual Private Connection (VPC)."). ## Create an External Credential and Principal Access 1. From Setup, in the Quick Find box, enter Named, and then select **Named Credentials**. 2. On the External Credentials tab, click **New**. 3. Enter a label and name. 4. For Authentication Protocol, select **No Authentication**. ![New external credentials screen showing entered connection name and label, and the no authentication option selected.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3vpc_external_credentials.png) 5. Save your external credential. Add a principal to the external credential. 1. Open the new external credential 2. In the Principals section, click **New**. 3. Enter a parameter name and 1 for the sequence. ![New principal screen showing entered parameter name, sequence, and the named principal option selected.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3vpc_principal.png) Now update your user profile with external credential principal access. 1. From Setup, in the Quick Find box, enter Profiles, and then select **Profiles**. 2. Select the profile for the **Analytics Cloud Integration User**. 3. Click **Enabled External Credential Principal Access** at the top of the profile page. 4. Click **Edit** and add the principal parameter name. 5. Click **Save**. Ensure your user has principal access. 1. From Setup, in the Quick Find box, enter Named, and then select **Named Credentials**. 2. On the External Credentials tab, select your credential, and click **Edit** for your external credential. Verify you see your user in the Principal Access section. ![Edit principal screen showing user access.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3vpc_principal2.png) ## Create a Named Credential 1. From Amazon Redshift, find the endpoint URL for your target cluster. The URL looks like `[cluster-name].[random-hash].[region].redshift.amazonaws.com`. 2. From Setup, in the Quick Find box, enter Named, and then select **Named Credential**. 3. On the Named Credentials tab, click **New**. 4. Enter a label and name. 5. For URL, enter https://\[cluster-name\].\[random-hash\].\[region\].redshift.amazonaws.com. 6. Select the external credential and outbound network connection that you created. ![New Named Credentials screen showing entered connection name and label, URL, and external credentials and outbound network connection values selected.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_redshiftvpc_named_credentials.png) 7. Save your named credential. ## Create a Redshift VPC Connection 1. On the Data Manager Connections tab, click **New Connection**. 2. Select **Private**, then the Redshift Private Connector, and click **Next**. ![The Select Connecter screen showing the Redshift Private Connector.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_redshiftvpc_select_connector.png) 3. Enter the connector settings. ![The Set Up Your Connection screen showing the required details entered.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_redshiftvpc_connection_setup.png) 4. To validate your settings and test the connection, click **Save & Test**. If the connection fails, Salesforce Data Pipelines shows possible reasons. All settings require a value, unless otherwise indicated. | Setting | Description | | --- | --- | | Connection Name | Use a name that lets you easily distinguish between different connections. | | Developer Name | The API name is used in your recipes to reference data extracted through this connection. This name can’t include spaces. You can’t change the API name after you create the connection. | | Description | Description of the connection for internal use. | | Named Credential | The Name field from the named credential stored in your Salesforce org. | | Username | Your Redshift cluster username, if any. | | Password | Your Redshift cluster password, if any. | | Schema | Your Redshift cluster schema name. | | AWS Access Key ID | Your Redshift cluster access key id, if any. | | AWS Secret Access Key | Your Redshift cluster secret access key , if any. | | Master Symmetric Key | Optional setting for managing client-side encryption. You can connect to objects encrypted with customer master keys stored in the AWS Key Management Service or a customer-generated key in the 256-bit AES format. See Amazon’s documentation for details. | | Cluster Node Type | Your Redshift cluster node type. | | Number of Nodes in Cluster | The number of nodes in your Redshift cluster. | | JDBC URL | Your Redshift cluster JDBC URL. | | S3 Bucket Name | Your S3 bucket name, if any. | Amazon Region Names | Region Name | Amazon Code | | --- | --- | | US East (Ohio) | us-east-2 | | US East (N. Virginia) | us-east-1 | | US West (N. California) | us-west-1 | | US West (Oregon) | us-west-2 | | Africa (Cape Town) | af-south-1 | | Asia Pacific (Hong Kong) | ap-east-1 | | Asia Pacific (Mumbai) | ap-south-1 | | Asia Pacific (Osaka) | ap-northeast-3 | | Asia Pacific (Seoul) | ap-northeast-2 | | Asia Pacific (Singapore) | ap-southeast-1 | | Asia Pacific (Sydney) | ap-southeast-2 | | Asia Pacific (Tokyo) | ap-northeast-1 | | Canada (Central) | ca-central-1 | | China (Beijing) | cn-north-1 | | China (Ningxia) | cn-northwest-1 | | EU (Frankfurt) | eu-central-1 | | EU (Ireland) | eu-west-1 | | EU (London) | eu-west-2 | | Europe (Milan) | eu-south-1 | | EU (Paris) | eu-west-3 | | EU (Stockholm) | eu-north-1 | | Middle East (Bahrain) | me-south-1 | | South America (Sao Paulo) | sa-east-1 | | AWS GovCloud (US-East) | us-gov-east-1 | | AWS GovCloud (US-West) | us-gov-west-1 | For more information on Redshift connector considerations, see [Amazon Redshift Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_redshift_settings.htm&release=264.0.0&type=5 "Create a remote connection using the Amazon Redshift connector to sync data from Amazon Redshift to Salesforce Data Pipelines."). # Amazon S3 Connection Create a remote connection using the Amazon S3 connector to sync CSV data from an S3 bucket to Salesforce Data Pipelines. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note If you want to write from Salesforce Data Pipeline to Amazon S3, use an [Amazon S3 Output Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_output_amz_s3.htm&release=264.0.0&type=5 "Create a remote connection using the Amazon S3 output connector to write .csv data from Salesforce Data Pipelines to an Amazon S3 bucket when using Data Prep.") instead. ## Connection Details Knowing your S3 bucket folder hierarchy is important to configuring this connector. Set the S3 bucket settings and parent’s folder path when creating the connection. Then select one or more objects, which are the subfolders under the parent’s folder path, that contain the CSV files you want to sync to Salesforce Data Pipelines. When you sync the connected object, Salesforce Data Pipelines looks for a CSV file called schema\_sample.csv to detect the schema of the CSV data in the folder and to display a data preview. Note, however, that no data is imported from the schema\_sample.csv file. From the preview, you can view and change field attributes for all the files that you’re loading from the folder. ![Screenshot of data preview screen when using a connection to connect to a folder in Amazon S3](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3_preview.png) Salesforce Data Pipelines uses the schema\_sample.csv to derive the available fields, so you can select the fields you want. Then, the connector loads the CSV files that match the selected field set in a subfolder, and appends the rows in a single object. The permissions for the Amazon S3 account used to create this connection must include ListBucket and GetObject. Permissions must include resource grants to the bucket and either "any object" or, if you chose to be specific, the appropriate ARNs that represent the path and objects being referenced. For example: ![Amazon S3 permissions section with example permissions granted.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3_permissions.png) ## Create the Connection 1. On the Data Manager Connections tab, click **New Connection**. 2. Click the name of the connector, and click **Next**. 3. Enter the connector settings. 4. To validate your settings and attempt to connect to the source, click **Save & Test**. If the connection fails, Salesforce Data Pipelines shows possible reasons. All settings require a value, unless otherwise indicated. | Setting | Description | | --- | --- | | Connection Name | Required. Identifies the connection. Use a convention that lets you easily distinguish between different connections. | | Developer Name | Required. The API name for the connection. This name can’t include spaces. The API name is used in your recipes to reference data extracted through this connection. You can’t change the developer name after you create the connection. | | Description | Required. The description for the connection. | | Authentication Type | Required. The authentication type. Valid values include `Root`, for standard authentication, and `IAM` for AWS Identity Access Management (IAM) authentication. Use IAM authentication for granular access to AWS data, setting up IAM users and roles in AWS. For more information on AWS IAM, see [Getting Started with IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) on AWS | | Access Key | Required. Your Amazon S3 bucket access key ID. | | Secret Key | Required. Your Amazon secret access key. | | AWS Role ARN | Required for IAM authentication. The ARN of the IAM role. You can find it on the IAM Role Setup in AWS. | | Folder Path | Required. The path to the folder that you want to connect to. The path must start with the bucket name and can’t include the name of the subfolder whose data you want to sync. | | Master Symmetric Key | Required. Use this to manage client-side encryption. You can connect to objects encrypted with customer master keys stored in the AWS Key Management Service or a customer-generated key in the 256-bit AES format. See [Amazon’s documentation](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html) for details. | | Region Name | Required. The region of your S3 service, for example EU (Ireland). For the list of region names, see the S3 Region Names in Salesforce Data Pipelines below. | Amazon Region Names in Salesforce Data Pipelines | Region Name | Amazon Code | | --- | --- | | US East (Ohio) | us-east-2 | | US East (N. Virginia) | us-east-1 | | US West (N. California) | us-west-1 | | US West (Oregon) | us-west-2 | | Africa (Cape Town) | af-south-1 | | Asia Pacific (Hong Kong) | ap-east-1 | | Asia Pacific (Mumbai) | ap-south-1 | | Asia Pacific (Osaka) | ap-northeast-3 | | Asia Pacific (Seoul) | ap-northeast-2 | | Asia Pacific (Singapore) | ap-southeast-1 | | Asia Pacific (Sydney) | ap-southeast-2 | | Asia Pacific (Tokyo) | ap-northeast-1 | | Canada (Central) | ca-central-1 | | China (Beijing) | cn-north-1 | | China (Ningxia) | cn-northwest-1 | | EU (Frankfurt) | eu-central-1 | | EU (Ireland) | eu-west-1 | | EU (London) | eu-west-2 | | Europe (Milan) | eu-south-1 | | EU (Paris) | eu-west-3 | | EU (Stockholm) | eu-north-1 | | Middle East (Bahrain) | me-south-1 | | South America (Sao Paulo) | sa-east-1 | | AWS GovCloud (US-East) | us-gov-east-1 | | AWS GovCloud (US-West) | us-gov-west-1 | Keep these behaviors in mind when working with the Amazon S3 connector. - Connected object names must start with a letter and contain only letters, digits, or underscores. Object names can’t end with an underscore. - Only field names with combinations of alphanumeric, dot, underscore, or dash characters are supported. If a connector includes field names that contain other characters, such as spaces or brackets, the sync fails. - The connector can sync up to 100 million rows or 50 GB per object, whichever limit is reached first. When using the connector, Salesforce Government Cloud org data is protected in transit with advanced encryption and can sync up to 10 million rows or 5 GB for each connected object, whichever limit is reached first. - To avoid Amazon S3 connector setup timeout, choose a Folder Path with fewer than 5,000 entry options. An entry is the folder you intend to sync, the files within the folder, as well as all subfolders and subfiles. Recommended best practice is to create a bucket or folder within the bucket dedicated to Data Sync, populated with only the files to sync. - Each connection can support up to 512 columns. For data with more columns, split the data, create multiple connections, and use a recipe to combine the datasets. - Surround fields that contain quotes and commas in double quotes. Some CSV generators automatically double quote text fields when needed, while others do not. Due to inconsistent generator behavior, we recommend you surround all text fields in double quotes to ensure characters such as ' or , do not cause data sync issues - The folder path that you specify in the connection settings must start with the bucket name and the parent folder. Don’t include the folder that you want to connect to. Let’s look at an example. You want to load files from the Call\_Back\_Logs\_2018\_Jan in S3. The folder path appears above the folder when you open it in S3. ![Screenshot of folder path above folder in S3](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3_folder_path.png) The folder path in S3 starts with the bucket name (1), followed by a folder name (2). In this example, subfolder (3) contains CSV data that you want to sync. When you specify this connection’s folder path setting, you include only the bucket (1) and parent folder (2), not the subfolder (3) that you’re syncing. After you create the connection, all subfolders directly under the parent folder (2), including Call\_Back\_Logs\_2018\_Jan, appear as possible objects that you can sync using this connection. ![Folder oath field in connection settings](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3_folder_path_settings.png) - Folder names in S3 must follow developer naming conventions, with no spaces or special characters. - Copy one of the files in the subfolder and rename it schema\_sample.csv. Delete all rows in schema\_sample.csv except the header row and one row of sample data in the correct format for each column. Salesforce Data Pipelines uses this file to detect the schema of the CSV data and doesn’t import any data from this file. ![Schema sample file highlighted in S3 folder](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3_schema_sample.png) - Each file that you want to load from the S3 subfolder must have a file name ending in .csv. Each file must also have a header row and the same fields as the schema\_sample.csv file. A file can have extra fields, but these fields aren’t loaded. Salesforce Data Pipelines ignores files that don’t meet these requirements. - Field names in the header row of each file must follow developer naming conventions, with no spaces or special characters. The header rows in your schema file and data files are case-sensitive, so use the same capitalization throughout. - You can load only whole files, not parts of files. ## S3 Policy Example The Amazon S3 bucket policy defines access to objects in the bucket. If the policy isn't set up correctly or is too restrictive, the S3 connector can fail with 403 errors. Here is an example of a S3 bucket policy with minimum requirements to connect successfully with Salesforce with an IAM user: ``` { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListBucket", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::" }, { "Sid": "AllowGetObject", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::/*" } ] } ``` Replace with the name of your S3 bucket. ## Connection Example To better understand how the S3 connector works under more complex scenarios, consider the following hierarchy in S3. The hierarchy has two buckets: Quarterly\_Financial\_Data and Call\_Logs. The first bucket has one level of folders. The second bucket has two levels: parent folders and subfolders. Here’s the S3 hierarchy. - Quarterly\_Financial\_Data - 2018 - 2018\_quarter1\_results.csv - 2018\_quarter2\_results.csv - 2018\_quarter3\_results.csv - 2018\_quarter4\_results.csv - 2019 - 2019\_quarter1\_results.csv - 2019\_quarter2\_results.csv - 2019\_quarter3\_results.csv - 2019\_quarter4\_results.csv - Call\_Logs - 2018\_Call\_Logs - Q1\_2018 - call\_logs\_2018\_01.csv - call\_logs\_2018\_02.csv - call\_logs\_2018\_03.csv - Q2\_2018 - call\_logs\_2018\_04.csv - call\_logs\_2018\_05.csv - call\_logs\_2018\_06.csv - Q3\_2018 - call\_logs\_2018\_07.csv - call\_logs\_2018\_08.csv - call\_logs\_2018\_09.csv - Q4\_2018 - call\_logs\_2018\_10.csv - call\_logs\_2018\_11.csv - call\_logs\_2018\_12.csv Let’s look at how you can set up connections and connected objects to accomplish the following goals.
Goal Action
Extract data from multiple buckets into Salesforce Data Pipelines.

Because each connection is associated with a single bucket, create a separate connection for each bucket.

For example, to extract data from the Quarterly_Financial_Data and Call_Logs buckets, create two connections, one for Quarterly_Financial_Data and another for Call_Logs. For each connection, set the appropriate bucket name in the Folder Path connection property.

Extract specific folders, but not all subfolders, from a parent folder.

Create a connection for the parent folder, and then use the connection to connect to specific subfolders.

For example, to extract call logs from Q1_2018 and Q2_2018 folders, create one connection with folder path Call_Logs/2018_Call_Logs. Then create connected objects for Q1_2018 and Q2_2018.

Extract data from a subset of the CSV files under a folder.

Move the subset of files into a subfolder, create the connection on the parent folder, and then use the connection to connect to the subfolder.

For example, to extract data from call_logs_2018_11.csv and call_logs_2018_12.csv, move these CSV files under a new subfolder under Q4_2018. Next, create a connection with folder path Call_Logs/2018_Call_Logs/Q4_2018. Finally, create a connected object based on the new subfolder.

# Amazon S3 Output Connection Create a remote connection using the Amazon S3 output connector to write `.csv` data from Salesforce Data Pipelines to an Amazon S3 bucket when using Data Prep. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note If you want to sync data from an Amazon S3 bucket to Salesforce Data Pipelines, use an [Amazon S3 Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_s3.htm&release=264.0.0&type=5 "Create a remote connection using the Amazon S3 connector to sync CSV data from an S3 bucket to Salesforce Data Pipelines.") instead. ## How Salesforce Data Pipelines Output Connectors with Output Nodes Work With Salesforce Data Pipelines connectors, you can write the outcome of a recipe to an external system for further analysis, business automation, and storage. After you configure an output connector to the data source and folder path using the steps in this guide, create a recipe using Data Prep. Add an Output node to the recipe and select to write to the output connection. Select the S3 connection you configured, and choose which S3 object will contain the output data. When the recipe runs, Salesforce Data Pipelines writes data to the specified object in the folder path within the directory. For example, if you specified the folder path ...support/servicedata and chose the object APAC, we write to the folder `APAC` at the path ...support/servicedata/APAC. The folder contains these files: - The output dataset .csv file, with the naming standard `folderpath`\_0.csv. In our example, the output is `APAC_0.csv`. For larger datasets, Salesforce Data Pipelines automatically partitions the data into multiple .csv files with increasing numbers appended to the name. In our example, there could be a `APAC_1.csv`, a `APAC_2.csv`, and more until all data is written. This file doesn’t have a header row. - The metadata file schema.json, with information on each column including the name, data type, and precision. - The \_SUCCESS file, generated when the .csv is completely written. When you run the recipe again, the files previously generated are deleted and the new version of the files are written. ## Enable and Add the Amazon S3 Output Connector 1. From Setup, in the Quick Find box, enter Analytics, select **Analytics**, and then **Settings**. 2. Select **Enable Amazon S3 output connection** and then save your changes. 3. In the Data Manager, click the **Connections** tab. 4. Click **New Connection**. 5. Click **Output**. 6. Click the connector’s icon and enter its settings, as described in the Connection Settings section. 7. Click **Save & Test**. Save & Test validates your settings by attempting to connect to the source. If the connection fails, Salesforce Data Pipelines shows possible reasons. All settings require a value, unless otherwise indicated.
Connection Setting Description
Connection Name Required. Identifies the connection. Use a convention that lets you easily distinguish between different connections.
Developer Name Required. The API name for the connection. The developer name can’t include spaces, and you can’t change it after you create the connection.
Description Required. The description for the connection.
Authentication Type

Required. The authentication type. Valid values include Root and IAM.

For standard authentication, use Root. For AWS Identity Access Management (IAM) authentication, use IAM. IAM authentication provides more granular access, setting up IAM users and roles in AWS. For more information on AWS IAM, see Getting Started with IAM on AWS.

Secret Key Required. Your Amazon secret access key.
Region Name Required. The region of your S3 service. The default region is US East(N. Virginia). For the list of region names, see the AWS service endpoints documentation.
Folder Path Required. The path to the folder that you want to connect to. The path must start with the bucket name and can’t include the name of the subfolder whose data you want to sync.
Access Key Required. Your Amazon S3 bucket access key ID.
AWS Role ARN Required for IAM authentication. The ARN of the IAM role. You can find it on the IAM Role Setup in AWS.
Keep these behaviors in mind when working with the Amazon S3 output connector. - You can use an output connection more than once per recipe, but each output node must use a different object. Each output node can use up to the connector's per-run limit independently, but is still subject to the rolling 24 hour limit. - Output connections are only available for recipes built with Data Prep. - Each output connection only supports one folder path. To output to another folder path, create another output connection. - When the prior run’s files are deleted in preparation for the current run, the earlier version of an output dataset is inaccessible. Set up a process to copy or use the output after each run, and use the \_SUCCESS file as an indication that the write is complete. - Null values are output to AWS as `null-`\[token\], where the token is a string of characters. For example, `null-OrJLA4JEfCjToa4DDN` or `null-PaKIW3MEfCaQou9WXM`. To interpret the null values, you may need to implement post-processing using AWS CLI or on the target where data is consumed. # Amazon S3 Private Connection Pull your data securely from S3 running on AWS into Data Manager using the Virtual Private Connection (VPC) for S3 input connector for CRM Analytics. To use the S3 Private connector, you configure an outbound network connection, external credential, and named credential. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note You can’t use a custom authorization provider. ## Prerequisites - Requires [Salesforce Private Connect](https://help.salesforce.com/s/articleView?id=sf.private_connect_overview.htm&type=5&language=en_US). - You must configure your private link for Amazon S3, to learn how to do this see the AWS guide [AWS PrivateLink for Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html). For help with configuring this connection so that it’s consistent with your organization’s security requirements, contact your network security or IT department. ## Allowlist the Salesforce AWS Account for S3 Private Connect To verify your AWS account is on the allowlist for Salesforce private connect, see [Verify Salesforce AWS Account for Private Connect](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_private_allowlist.htm&release=264.0.0&type=5 "For your Snowflake, Redshift, or S3 private connector to work, verify your AWS account is listed as a Private Connect."). ## Create an Outbound Network Connection To create an outbound network connection, see [Create the Outbound Network Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_private_outbound_connection.htm&release=264.0.0&type=5 "Create a primary outbound network connection to support your Virtual Private Connection (VPC)."). ## Create an External Credential and Principal Access 1. From Setup, in the Quick Find box, enter Named, and then select **Named Credentials**. 2. On the External Credentials tab, click **New**. 3. Enter a label and name. 4. For Authentication Protocol, select **No Authentication**. ![New external credentials screen showing entered connection name and label, and the no authentication option selected.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3vpc_external_credentials.png) 5. Save your external credential. Add a principal to the external credential. 1. Open the new external credential 2. In the Principals section, click **New**. 3. Enter S3VPCPrincipalAccess for the parameter name and 1 for the sequence. ![New principal screen showing entered parameter name, sequence, and the named principal option selected.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3vpc_principal.png) Now update your user profile with external credential principal access. 1. From Setup, in the Quick Find box, enter Profiles, and then select **Profiles**. 2. Select the profile for the **Analytics Cloud Integration User**. 3. Click **Enabled External Credential Principal Access** at the top of the profile page. 4. Click **Edit** and add **S3PrivateEC - S3PrivatePrincipal**. 5. Click **Save**. Ensure your user has principal access. 1. From Setup, in the Quick Find box, enter Named, and then select **Named Credentials**. 2. On the External Credentials tab, select your credential, and click **Edit** for S3VPCPrincipalAccess. Verify you see your user in the Principal Access section. ![Edit principal screen showing user access.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3vpc_principal2.png) ## Create a Named Credential 1. From AWS, find the endpoint URL for your S3 bucket. 2. From Setup, in the Quick Find box, enter Named, and then select **Named Credential**. 3. On the Named Credentials tab, click **New**. 4. Enter a label and name. 5. For URL, enter https://..amazonaws.com. 6. Select the external credential and outbound network connection that you created. ![New Named Credentials screen showing entered connection name and label, URL, and external credentials and outbound network connection values selected.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3vpc_named_credentials.png) 7. Save your named credential. ## Create a S3 VPC Connection 1. On the Data Manager Connections tab, click **New Connection**. 2. Select **Private**, then the Amazon S3 Private Connector, and click **Next**. ![The Select Connecter screen showing the Amazon S3 Private Connector.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3vpc_select_connector.png) 3. Enter the connector settings. ![The Set Up Your Connection screen showing the required details entered.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_s3vpc_connection_setup.png) 4. To validate your settings and test the connection, click **Save & Test**. If the connection fails, Salesforce Data Pipelines shows possible reasons. All settings require a value, unless otherwise indicated. | Setting | Description | | --- | --- | | Connection Name | Required. Use a name that lets you easily distinguish between different connections. | | Developer Name | Required. The API name is used in your recipes to reference data extracted through this connection. This name can’t include spaces. You can’t change the API name after you create the connection. | | Description | Required. The description for the connection. | | Authentication Type | Required. The authentication type. Valid values include `Root` For standard authentication, and `IAM`, for AWS Identity Access Management (IAM) authentication. Use IAM authentication for granular access to AWS data, setting up IAM users and roles in AWS. For more information on AWS IAM, see [Getting Started with IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started.html) on AWS | | Named Credential | Required. The Name field from the named credential stored in your Salesforce org. | | Access Key | Required. Your Amazon S3 bucket access key ID. | | Secret Key | Required. Your Amazon secret access key. | | Master Symmetric Key | Required. Use this to manage client-side encryption. You can connect to objects encrypted with customer master keys stored in the AWS Key Management Service or a customer-generated key in the 256-bit AES format. See Amazon’s documentation for details. | | Region Name | Required. The region of your S3 service, for example EU (Ireland). For the list of region names, see the S3 Region Names below. | Amazon Region Names | Region Name | Amazon Code | | --- | --- | | US East (Ohio) | us-east-2 | | US East (N. Virginia) | us-east-1 | | US West (N. California) | us-west-1 | | US West (Oregon) | us-west-2 | | Africa (Cape Town) | af-south-1 | | Asia Pacific (Hong Kong) | ap-east-1 | | Asia Pacific (Mumbai) | ap-south-1 | | Asia Pacific (Osaka) | ap-northeast-3 | | Asia Pacific (Seoul) | ap-northeast-2 | | Asia Pacific (Singapore) | ap-southeast-1 | | Asia Pacific (Sydney) | ap-southeast-2 | | Asia Pacific (Tokyo) | ap-northeast-1 | | Canada (Central) | ca-central-1 | | China (Beijing) | cn-north-1 | | China (Ningxia) | cn-northwest-1 | | EU (Frankfurt) | eu-central-1 | | EU (Ireland) | eu-west-1 | | EU (London) | eu-west-2 | | Europe (Milan) | eu-south-1 | | EU (Paris) | eu-west-3 | | EU (Stockholm) | eu-north-1 | | Middle East (Bahrain) | me-south-1 | | South America (Sao Paulo) | sa-east-1 | | AWS GovCloud (US-East) | us-gov-east-1 | | AWS GovCloud (US-West) | us-gov-west-1 | For more information on S3 connector considerations and the S3 bucket hierarchy, see [Amazon S3](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_s3.htm&release=264.0.0&type=5 "Create a remote connection using the Amazon S3 connector to sync CSV data from an S3 bucket to Salesforce Data Pipelines.") # Analytics for Loyalty Dashboards Use Analytics for Loyalty dashboards to get actionable insights into loyalty programs that help you devise strategies to increase membership, retain customers, improve processes, and grow your business. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited editions that have Loyalty Management enabled.
- **[In-App Dashboards](https://help.salesforce.com/s/articleView?id=xcloud.analytics_loyalty_in_app_dashboards.htm&release=264.0.0&type=5)** You can access the in-app dashboards through Analytics Studio. - **[Embedded Dashboards](https://help.salesforce.com/s/articleView?id=xcloud.analytics_loyalty_embedded_dashboards.htm&release=264.0.0&type=5)** The Analytics for Loyalty app includes dashboards that Salesforce admins can embed in specific Lightning Experience pages. These dashboards give detailed insights into your members’ preferences and the assistance the members recieved. - **[Key Performance Indicators](https://help.salesforce.com/s/articleView?id=xcloud.analytics_loyalty_kpis.htm&release=264.0.0&type=5)** Learn the definitions and calculations of key metrics shown in Analytics for Loyalty dashboards. # Analyze a Data Processing Engine Run in Explainability Mode View how records flow through a Data Processing Engine (DPE) definition by analyzing a run in Explainability mode. Use detailed counts for checkpoints or output nodes to validate the setup and confirm that eligibility criteria are applied correctly. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
User Permissions Needed
To run a DPE in explainability mode: Rebate Management Admin permission set
1. Click **Setup**, and select **Developer Console**. 2. Click **Debug** and select **Open Execute Anonymous Window**. 3. Paste the following script. Replace the BatchJobPart ID with the value for the node you want to review. ``` try { BatchJobPart record = [ SELECT RecordFileBody, RecordFileName FROM BatchJobPart WHERE Id = '0meLT000000YonMYAS' LIMIT 1 ]; Blob decodedBlob = record.RecordFileBody; String fileData = decodedBlob != null ? decodedBlob.toString() : 'No file data found.'; System.debug('Decoded File Data: ' + fileData); } catch (Exception e) { System.debug('Error: ' + e.getMessage()); } ``` 4. Click **Execute**. 5. Open the Logs tab in the Developer Console and double-click the most recent **Execute Anonymous** log entry. 6. In the Execution Log, select the **Debug Only** checkbox. 7. Locate the log entry starting with **Decoded File Data:** to view the retrieved output records. The decoded output data for the selected DPE node is displayed in the debug logs. Use this data to verify how records were processed during the DPE run and confirm expected outcomes. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note If no records are returned, the log may display the error: _“List has no rows for assignment to SObject”_. Verify that the BatchJobPart ID is correct and corresponds to a valid DPE run node that contains data. # Analyze App Data Use the Analyze tab to track adoption and app health after publication. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Foundations, or Agentforce 1 or Einstein 1 Editions. Access to the Analyze tab requires additional add-on licenses (MySalesforce for Experience Cloud and MySalesforce1).
User Permissions Needed
To access data on the Analyze tab: Manage mySalesforce Apps
The home screen provides these metrics: Monthly Active Users Users per month over the last 12 months, shown as a bar chart. Operating System Distribution The iOS and Android user share over the last 12 months, shown as a pie chart. App Version Distribution Versions in use over the last 12 months, shown as a table. Daily Active Users Users per day over the last 7 days, shown as a bar chart. Daily Sessions Sessions per day over the last 7 days, shown as a bar chart. You can ask questions about metrics in plain language from the agent panel. # Analyze Fields for Encryption Readiness Assess the impact of encrypting individual fields with Field-Level Encryption (FLE). If a field is referenced by functions elsewhere in your Salesforce org, FLE can sometimes disrupt those functions. The field analyzer flags any encryption schemes that are blocked by existing configurations. Analyzing a field is required before you can encrypt it. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
User Permissions Needed
To view setup: View Setup and Configuration
To encrypt files: Customize Application
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Shield Platform Encryption. Read about implementing field-level encryption using Shield Extension in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note At this time, you can view encryption blockers only. To view impacts besides blockers, such as list views and report filters that can break due to encryption, use the analyzer in the Shield Extension managed package. To analyze one or more fields: 1. From the App Launcher, find and select **Shield**. 2. Go to the **Platform Encryption** tab, and then click **Field-Level Encryption**. 3. Select the fields that you want to analyze. You have a limit of 100 fields. 4. Click **Analyze Fields**. 5. Close the confirmation window, or click **Cancel Analysis** if you want to stop the request. Salesforce runs the analysis in the background. You receive an email notification when the process completes. 6. When you’re notified that the analysis is completed, return to the Field-Level Encryption page and check the Result column for each field. 1. A checkmark icon indicates that no blockers were found. You can proceed with turning on FLE. 2. A lock icon indicates that certain encryption schemes are blocked by other configurations in your org. To use a blocked encryption scheme, first resolve the blocker by modifying the associated configuration. 7. Review the specific blockers for each field as needed. 1. Click the dropdown menu for a field. 2. Click **Review Blockers**. 3. In the Blocked Encryption Schemes column, see which schemes are blocked. 4. To access a specific configuration that’s producing a conflict, use the link provided in the Where to Fix column. For help resolving encryption blockers, see [Fix Compatibility Problems](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_validation_errors.htm&release=264.0.0&type=5 "When you select fields or files to encrypt with Shield Platform Encryption, Salesforce automatically checks for potential side effects. The validation service then warns you if any existing settings may pose a risk to data access or your normal use of Salesforce. You have some options for how to clear up these problems."). If the encryption scheme that you want to apply is available, and you’ve reviewed all relevant impacts, you’re ready to turn on FLE. See Also [Change the Encryption Scheme for Standard and Custom Fields](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_change_fle_scheme.htm&release=264.0.0&type=5 "After you turn on Field-Level Encryption (FLE) for a field, you can change the encryption scheme at any time.") # Analyze Log Data with Salesforce Direct Transform your log data into clear, insightful visualizations. Explore Event Log Objects in CRM Analytics with Salesforce Direct using a variety of engaging chart types. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important This feature is only available to Hyperforce customers. Log data is retained for up to 30 days.
Available in: Salesforce Classic (not available in all orgs), and Lightning Experience

Available in: Enterprise, Performance, and Unlimited Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

User Permissions Needed

To query and view event log object data:

View Event Log Object Data

1. From Setup, in the Quick Find box, enter Analytics Studio, and select **Analytics Studio**. 2. To create a dashboard, click **Create** and then, from the dropdown list, select **Dashboard**. 3. Drag the **Chart** option to your dashboard. 4. To select a data source, click the new chart. 5. In the data source window, go to the **Salesforce Object** tab. 6. To see all event log objects, search for event log. 7. Select the event log object data you want to visualize. See [Visualize Data With Charts](https://help.salesforce.com/s/articleView?id=analytics.bi_visualize.htm&type=5&language=en_US). 8. You can visualize your data in a variety of chart types using Salesforce Direct. Limit the number of panels on your dashboard to avoid any timeouts. See [Salesforce Direct Data Queries](https://help.salesforce.com/s/articleView?id=analytics.bi_dashboard_step_sf_direct_limitations.htm&type=5&language=en_US). ![Event Log Object dashboard](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/ELO_Dashboard.png) # Analyze Performance Reports To troubleshoot errors or spikes in Scale Center, create a performance analysis report. Start a new analysis report, see report status, and view the last 100 reports for your org. You can create 15 analysis reports per week. Reports expire after 30 days. To request increased limits, contact Salesforce. To share an analysis report with other users in the same org, copy and send them the report URL. 1. From Setup, in the Quick Find box, enter Scale Center, and then click **Performance Analysis**. 2. Click **New Analysis**. 3. Select the type, time zone, start date, and end date. 4. Enter a name for the report. 5. Click **Submit**. ![Performance Analysis Types](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-scalability-264-0-0-production-enus/18f3af65-f4ea-4406-9c30-319b9afa03cd/images/icon_example.png) Performance Analysis Types - Apex Summary - Concurrent Apex - Consolidated Report (including Failed Logins) - Database Performance - Flow Performance - Governor Limits - Integrations Performance - List View and Reports - Platform Events - Row Lock - **[Apex Investigations FAQ](https://help.salesforce.com/s/articleView?id=xcloud.apex_investigations_faq.htm&release=264.0.0&type=5)** Get answers to common questions about Apex investigations in Scale Center. # Analyze Survey Responses Gain insights into responses by using the Analyze tab in the Survey Builder to view and export response data.
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_note.png) Note A survey response is created when an individual responds to one or more questions from a survey. An individual can be an authenticated user or an unauthenticated guest user. Survey responses must be used between the beginning and ending dates of your subscription. Unused survey responses don’t roll over to the following month. - **[View Survey Response Data](https://help.salesforce.com/s/articleView?id=xcloud.concept_survey_data.htm&release=264.0.0&type=5)** View completion metrics and response data on the Analyze tab of the Survey Builder. - **[Export Survey Responses](https://help.salesforce.com/s/articleView?id=xcloud.task_export_responses.htm&release=264.0.0&type=5)** Export responses for a survey version from the Analyze tab of the Survey Builder. Enable Survey Owners Can Manage Responses on the Survey Settings page to enable survey record owners to export responses associated with their invitations. # Analyze Survey Responses by Using Natural Language Processing (NLP) Services Analyze the text-based survey responses efficiently based on entities and keyphrases by using Natural Language Processing (NLP) Services. AWS integration offers flexibility in selecting the services like keyphrase and entity extraction. Access results easily in the Natural Language Processing Insights card, which you can drag to any lightning page. - **[Set Up Natural Language Processing Services](https://help.salesforce.com/s/articleView?id=xcloud.concept_survey_nlp_setup.htm&release=264.0.0&type=5)** Set up natural language processing services in an org to get insights on survey responses based on entities and keyphrases. - **[Get Natural Language Processing (NLP) Insights](https://help.salesforce.com/s/articleView?id=xcloud.concept_survey_nlp_insights_card.htm&release=264.0.0&type=5)** Use the Natural Language Processing Insights card to view insights into the text-based survey responses based on the configured Natural Language Processing services . Drag the Natural Language Processing Insights card to a lightning page to access the key phrases and entities identified through AWS services. # Analyze Survey Responses in Custom Reports Use the custom reports created with the Survey Question Score report type to view responses for every type of question except for short text and long text questions. The report can track responses by survey invitation or by survey version.
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
The question type determines the column interpretation. Questions can be categorized by: - Score: Net Promoter Score (NPS), rating, score, and slider - Answer choice: Multiple selection, single selection, and picklist - Ranking - Date The sample reports represent responses from two participants. The Survey Invitation: Name column displays the invitation name for which response is recorded. If there are multiple invitations for a survey, results are aggregated as a single value in the column name. Score Here's a survey invitation report with NPS, rating, score, and slider questions. | Question Name | Question Type | | --- | --- | | How likely are you to recommend our service to a friend or colleague? | NPS | | How would you rate our service? | Rating | | How would you score our customer support agent's knowledge about your case? | Score | | What overall score would you give our customer support process? | Slider | ![Image of an invitation-level report with NPS, rating, ranking, score, and slider questions.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/surveys_report_invitation_score.png)
Field Name Description
Survey Invitation: Name (1)

The name of the invitation for which responses are recorded.

Question Name (2)

The name of the question for which responses are recorded.

Question Score Type (3)

The value is either I (individual) or O (overall).

  • I – The individual scores that one or more participants select for a question.
  • O – The aggregate score for a question.
Response Value (4)

I – The score that one or more participants select for a question.

Response Count (5)

The value is either I (individual) or O (overall).

  • I – The number of participants who select the same score.
  • O – The number of participants who respond to a question.
Score (6)

The value is either I (individual) or O (overall).

For rating, score, and slider questions:

  • I – The percentage of participants who select the same score for a question.
  • O – The average of all responses.

For NPS questions:

  • I – The percentage of participants who select the same answer for a question.
  • O – The percentage of participants who select 9 or 10 minus the percentage of participants who select less than 7.
Question Skipped Count (7)

O – The number of participants who skip a question.

Answer Choice Here's a survey invitation report with multiple selection, picklist, and single selection questions. | Question Name | Question Type | | --- | --- | | Why did you raise the customer support case? | Multiple Selection | | How did our customer support agent contact you? | Picklist | | How many days did it take to resolve your case? | Single Selection | The report has multiple fields with inputs about the survey question scores. ![Image of an invitation-level report with multi choice, picklist, and radio questions.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/surveys_report_invitation_answer.png)
Field Name Description
Survey Invitation: Name (1)

The name of the invitation for which responses are recorded.

Question Name (2)

The name of the question for which responses are recorded.

Question Score Type (3)

The value is either I (individual) or O (overall).

  • I – Each answer choice that one or more participants select for a question.
  • O – The number of participants who respond to a question.
Survey Question Choice: Name (4)

I – The answer choice that one or more participants select for a question.

In this report, the multiple selection question has three I rows because one participant can select two answer choices.

Response Count (5)
  • I – The number of participants who select the same answer choice.
  • O – The number of participants who respond.
Score (6)
  • I – The percentage of participants who select the same answer choice for a question.
  • O – The number of participants who respond to a question.
Question Skipped Count (7)

O – The number of participants who skip a question.

Ranking This survey invitation report contains a ranking question.
Question Name Answer Choices
Rank what you liked about our customer support agent.
  • Product knowledge
  • Resolution provided
  • Technical accuracy
  • Resolution time
![Image of an invitation-level report with ranking question.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/surveys_report_invitation_ranking.png)
Field Name Description
Survey Invitation: Name (1)

The name of the invitation for which responses are recorded.

Question Name (2)

The name of the question for which responses are recorded.

Question Score Type (3)

The value is either I (individual) or O (overall).

  • I – The rank that one or more participants select for each ranking item.
  • O – The number of participants who respond to the question.
Survey Question Choice: Name (4)

I – The ranking item of a question.

Response Value (5)

I – The rank that one or more participants select for a ranking item.

Response Count (6)
  • I – The number of participants who select the same rank for a ranking item.
  • O – The number of participants who respond to a question.
Score (7)
  • I – The percentage of participants who select the same rank for a ranking item.
  • O – The average weight for a ranking item.
Question Skipped Count (8)

O – The number of participants who skip a question.

Date This survey invitation report contains a date question. | Question Name | Question Type | | --- | --- | | When did our customer support agent first contact you? | Date | ![Image of an invitation-level report with ranking question.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/surveys_report_invitation_date.png)
Field Name Description
Survey Invitation: Name (1)

The name of the invitation for which responses are recorded.

Question Name (2)

The name of the question for which response is recorded.

Question Score Type (3)

The value is either I (individual) or O (overall).

  • I – Each date that one or more participants select in a question.
  • O – The number of participants who respond to the question.
Date Response (4)

I – The date selected in a question.

Response Count (5)
  • I – The number of participants who select the same date for a question.
  • O – The number of participants who respond to a question.
Score (7)
  • I – The percentage of participants who select the same date for a question.
  • O – The number of participants who respond to a question.
Question Skipped Count (8)

O – The number of participants who skip a question.

# Analyze Survey Responses to Get Sentiment Insights Analyze the sentiment of your customers and get actionable insights to improve it. Sentiment Insights uses the Amazon Comprehend BatchDetectSentiment API with your AWS account to get insights about your customers’ sentiment based on their feedback. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_important.png) Important Sentiment Insights uses a machine learning (ML) model provided by Amazon Web Services (AWS), built on both publicly available as well as proprietary datasets. As with all ML models, there are potential risks in its deployment, use, and output results. If you have questions about the accuracy, performance, representativeness of the training data with relation to your specific use case, or potential biases embedded in the model, please reach out to AWS for clarity and response. - **[Create an AWS Account and Assign Permissions](https://help.salesforce.com/s/articleView?id=xcloud.sentiment_insights_create_aws_account.htm&release=264.0.0&type=5)** Create an Amazon Web Services (AWS) account to use with Sentiment Insights. - **[Create an External Credential and a Named Credential](https://help.salesforce.com/s/articleView?id=xcloud.sentiment_insights_aws_account_named_credential.htm&release=264.0.0&type=5)** Create an external credential to authenticate the Amazon Web Services (AWS) account that you want to use for analyzing the sentiment of text. Then create a named credential for the external credential. - **[Enable Sentiment Insights](https://help.salesforce.com/s/articleView?id=xcloud.enable_sentiment_insights.htm&release=264.0.0&type=5)** Set up Sentiment Insights to get actionable insights on customer sentiment based on survey responses. - **[Create Survey Data Maps for Sentiment Insights](https://help.salesforce.com/s/articleView?id=xcloud.task_sentiment_insights_create_data_map.htm&release=264.0.0&type=5)** Create a data map to use to analyze the sentiment of survey responses. - **[Use Flow Templates to Get Sentiment Insights](https://help.salesforce.com/s/articleView?id=xcloud.concept_sentiment_insights_flow_templates.htm&release=264.0.0&type=5)** Feedback Management provides two Flow templates that help analyze the sentiment of survey responses. You can use them as is or customize them to suit your needs. - **[Use a Flow Action to Get Sentiment Insights](https://help.salesforce.com/s/articleView?id=xcloud.task_sentiment_insights_flow_action.htm&release=264.0.0&type=5)** Use the Perform Survey Sentiment Analysis action in Flows to trigger the Amazon Comprehend API. The Amazon Comprehend API uses your survey data map to process survey responses, and creates or updates AI Sentiment Result records with insights about the sentiment of the responses. - **[Bring Your Own Amazon Account FAQ](https://help.salesforce.com/s/articleView?id=xcloud.sentiment_insights_bring_your_own_aws_account_faqs.htm&release=264.0.0&type=5)** Get answers to common questions about using Bring Your Own Amazon Account. # Analyze Your Data Analyze and visualize your data with reports and dashboards. Salesforce offers a powerful suite of reporting tools that work together to help you understand and act on your data. Here’s a quick intro to running, sorting, filtering, and visualizing your data. - **[Run a Report](https://help.salesforce.com/s/articleView?id=xcloud.basics_reports_running_a_report.htm&release=264.0.0&type=5)** Reports give you access to the data your organization has accumulated over time, enabling you to make informed decisions. - **[Sort Report Results](https://help.salesforce.com/s/articleView?id=xcloud.reports_sorting.htm&release=264.0.0&type=5)** Sort a report by the data in a particular column by clicking that column’s heading. Clicking a column header sorts data according to that column’s ascending order: text is sorted from A to Z, numerical data is sorted from lowest to highest, and time/date data is sorted from earliest to latest. - **[Create Filters that Use Special Picklist Values](https://help.salesforce.com/s/articleView?id=xcloud.custom_picklists.htm&release=264.0.0&type=5)** Use special picklist values for your search criteria. These special picklists have values of either True or False. - **[Visualize Your Data with Dashboards](https://help.salesforce.com/s/articleView?id=xcloud.dashboards_basics.htm&release=264.0.0&type=5)** Create a dashboard to show data from your report with a visual component, for example a pie chart. # Anatomy of the Basic Approval Request Workflow Workflows and approvals are built using Flow Orchestration technology. Salesforce Flow Orchestration was created so you can quickly create sophisticated, multi-user, multi-step automated business processes without code. Enhanced CMS workspaces include a pre-existing approval workflow that you can use to get started. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
The workflow uses CMS Role-Based Interactive, CMS Modification Status, and CMS Publication Readiness steps. CMS Modification Status and CMS Publication Readiness are background steps that lock or unlock content edits and set a publication readiness flag, respectively. CMS Role-Based Interactive steps are similar to standard interactive steps, except that they’re specialized to include CMS roles. You can learn more about standard step types at [Flow Orchestration Resource: Step](https://help.salesforce.com/s/articleView?id=platform.orchestrator_ref_resources_step.htm&type=5&language=en_US). ## Initiate Content Review Request The first stage sets the workflow in motion. It begins when a user requests an approval from the content detail page of a CMS content item. It consists of three steps: Prevent Content Publication, Allow Content Edits, and Submit Review Request. - Prevent Content Publication: A background step that prevents the associated content from being published for the duration of the workflow. - Allow Content Edits: A background step that allows content edits during the current step. - Submit Review Request: An interactive step that surfaces the CMS: Submit Content for Review screen flow. The screen flow presents a feedback field where content authors can provide context for the review. When they submit, the review request is sent to the reviewer group. ## Review Content The Review Content stage has three steps: Prevent Content Modifications, Approve or Request Revision, and Withdraw Review Request. The last two steps include variable fields where you can specify the targeted groups or users to receive review requests or allow to withdraw reviews. You can’t publish during the Review Content stage. - Prevent Content Modifications: A background step that prevents the associated content from being edited until edits are allowed in a later step. - Approve or Request Revision: An interactive step that shows the CMS: Review Content screen flow and directs the request to the Content Manager role for review. The screen includes a review request that’s sent to your content reviewers. From the screen flow, the assigned reviewer can review the content, provide feedback, and either approve the content or request a revision. If they approve the content, the workflow moves to the Content Ready for Publication stage. If they request a revision, the workflow moves to the Revise Content stage. - Withdraw Review Request: An interactive step using the CMS: Withdraw Review Request screen flow. It allows the submitter to withdraw their review from consideration and submit the review again later. If a review is withdrawn, the content is sent to the Revise Content stage. ## Revise Content Revise Content is an optional step that runs only if the content author withdraws the review or the reviewer finds an issue and wants the content author to fix it. The two steps are: Allow Content Modification and Revise and Resubmit Content. - Allow Content Modification: A background step that uses the same step type from the earlier Allow Content Edits step in the first stage. When the reviewer requests a revision, the content is made editable so the requester can go back and make the requested changes. - Revise and Resubmit Content: An interactive step that shows the CMS: Submit Content for Review screen flow and directs the revision request to the Content Author role. Optionally, provide feedback to include with the revision request. ## Ready Content for Publication The Ready Content for Publication stage occurs when the review is approved, regardless of the number of revisions it’s been through. It consists of two steps: Approved Content and Allow Content Publication. - Approved Content: An interactive step that surfaces the CMS: Notify Content Author screen flow and notifies the Content Author role that the review is complete. Any feedback attached to the notification is also included. - Allow Content Publication: A background step allows publication. Upon completion, the workflow is done and returns to the Initiate Content Review Request screen where a new workflow can be started. ## Included Flows | Flow Label | Description | | --- | --- | | Basic Approval Request | Lets a content author submit a content variant for content manager review and allows for content variant revisions before the content manager approves for publication. | | CMS: Check Whether Any Step is Completed | Determines whether either of two specified steps in a stage have been completed. | | CMS: Withdraw Review Request | Lets a content author withdraw a review request in order to edit the underlying content variant. | | CMS: Review Content | Lets a content manager conditionally view a content author's feedback, provide revision comments, and approve or request revisions of a content variant. | | CMS: Submit Content for Review | Lets a content author conditionally view a reviewer's feedback, provide revision comments, and submit a content variant for review. | | CMS: Notify Content Author | Notifies the content author that their content variant is approved, and allows the content author to conditionally view the final feedback for the content variant. | #### See Also - [Building Blocks of a CMS Workflow](https://help.salesforce.com/s/articleView?id=xcloud.cms_workflows_building_blocks.htm&release=264.0.0&type=5 "CMS workflows are built on Flow Orchestrations that use common flow and orchestration elements in addition to process and step types that are unique to CMS.") # Android Custom Push Payload Content Use these keys and values to create custom Android push notifications for your connected app. ### Required Editions
Available in: Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All Editions

Note
Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using external client apps instead. If you must continue creating connected apps, contact Salesforce Support.

See New connected apps can no longer be created in Spring ‘26 for more details.

Payload Keys
Payload Key Description Value
content

Encrypted payload content

See the Encrypted Content Keys table for content details.

AES encrypted and base64 encoded payload content
secret Symmetric encryption key RSA encrypted and base64 encoded AES key and IV bytes
encrypted Encrypted payload indicator true
Encrypted Content Keys
Payload Key Description Value
badge Number displayed in a badge on your app’s icon Count of unseen notifications
timestamp Time notification was sent Seconds since 00:00:00 UTC on January 1, 1970
oid Organization ID ID of the org of the recipient of the notification
uid Recipient User ID ID of notification recipient
nid Notification ID ID of the notification
alert Notification alert The custom notification title is supplied as the value for this key regardless of the Enable full content push notifications setting.
alertTitle Notification alert title
  • If full content push notifications are enabled for the app: Custom notification title
  • If full content push notifications aren’t enabled for the app: Empty string
alertBody Notification alert body
  • If full content push notifications are enabled for the app: Custom notification body
  • If full content push notifications aren’t enabled for the app: Custom notification title
type Notification type class -1
sid Source ID ID of record associated with notification
rid Related ID N/A (reserved for future use)
cid Experience Cloud site ID ID of Experience Cloud site for the notification
notifType Notification type ID ID of the custom notification type
# Angular Features Not Supported in Omniscripts (Managed Package) For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). LWC Omniscripts do not support all of the elements, functionalities, and deployment options that Angular Omniscripts support. For information on new features that are exclusive to LWC Omniscripts and newly supported elements and properties, see [LWC Omniscript Changes and Enhancements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_lwc_omniscript_changes_and_enhancements.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model."). ## Permanently Unsupported The elements and functionalities in this section are permanently unsupported in LWC Omniscripts. ## Unsupported Elements - [Done Action](https://help.salesforce.com/s/articleView?id=xcloud.os_done_action.htm&release=264.0.0&type=5 "For the managed package runtime, the Done Action ends the Omniscript and returns the user either to where the script was launched or a custom URL. This page explains the settings to configure for the Done Action.") - The Done Action has been replaced with the [Navigate Action (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_navigate_action.htm&release=264.0.0&type=5 "For the managed package runtime, navigate to various Salesforce experiences from Omniscript using the Navigate Action element.") - [Filter Block](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_group_elements.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains a table explaining the available Omniscript elements listed under the Groups section.") - [Headline](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_display_elements.htm&release=264.0.0&type=5 "For the managed package runtime, understand the Omniscript elements in the Display section.") - [Input Block](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_group_elements.htm&release=264.0.0&type=5 "For the managed package runtime, this page contains a table explaining the available Omniscript elements listed under the Groups section.") - [Post to Object Action](https://help.salesforce.com/s/articleView?id=xcloud.os_posting_data_to_the_application_object_using_the_post_to_object_action.htm&release=264.0.0&type=5 "For the managed package runtime, you can submit an Omniscript directly to the Vlocity Application object using the Post to Object Action Element. The Vlocity Application object enables an in-progress Omniscript to be stored and resumed later. The Omniscript can be resumed by the original user, reviewed, or approved. This can either be a button on a Step or a remote action that runs between Steps. The entire JSON, including attachments, submits.") - Review Action - Selectable Items - Submit Action - Click Tracking - Console Tab Title and Icon ## Unsupported Functionality Angular Omniscript's **Cart Component** functionality is permanently unsupported. # Anonymize Inactive Users With Data Management and Right to Be Forgotten (RTBF) policies, you can anonymize data for users who no longer access your org or Experience Cloud sites. Understand the unique functionality and limitations that apply when processing data on the User object. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Privacy Center license.
When you add the User object to a privacy policy, the available processing options differ from other objects. On the Data Handling screen, you can select Anonymize User or Mask. ## Anonymize User This option obfuscates all standard fields automatically. You can manually configure how custom fields are masked. Whereas users typically receive email notifications that their usernames were modified, Anonymize User bypasses the notification. You're required to enter a new static value for the Username field, and the value must include the '@' symbol. When the policy executes, the user ID is appended as part of the new username. For example, if you enter anonymized@mycompany.com, the value becomes anonymized@mycompany.com0052x00000B8sDA after processing. To enable the Anonymize User option, from User Management Settings Setup, turn on **Scramble Specific Users’ Data**. ## Mask By selecting Mask, you can specify the processing rules for both standard and custom fields. Keep in mind that when you modify the Username field via Mask, an email notification is sent to the affected user. To learn more about masking records, see [Mask or Delete Records on an Object](https://help.salesforce.com/s/articleView?id=xcloud.mask_delete_data_management_policies.htm&release=264.0.0&type=5 "Define how an object’s records are masked or deleted from your org, and determine how related files and attachments are handled."). ## User Object Processing Limitations These limitations apply to both the Mask and Anonymize User methods. - You can’t delete records on the User object. - Privacy policies only process inactive users. Active users are excluded automatically. # Anonymous Apex and JavaScript (Managed Package) For the managed package runtime, review considerations and guidelines for using the Omnistudio Build Tool with Anonymous Apex and JavaScript. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To make Anonymous Apex reusable, and write utility files that can be reused, include multiple Apex files with `//include FileName.cls;` in your .cls file. The BaseUtilities.cls file includes a feature that sends the data as a JSON to your Anonymous Apex. ## Namespace In Anonymous Apex, `vlocity_namespace` is replaced with the `vlocity.namespace` from the property file. ## Loading Apex Code Load Apex code relative to the project path or with an absolute path. ## BaseUtilities.cls The tokens `CURRENT_DATA_PACKS_CONTEXT_DATA` are replaced with JSON data and converted into a `List>` with data depending on the type of setting and type of job being run. ```javascript List dataSetObjects = (List)JSON.deserializeUntyped('CURRENT_DATA_PACKS_CONTEXT_DATA'); List> dataPackDataSet = new List>(); for (Object obj : dataSetObjects) { if (obj != null) { dataPackDataSet.add((Map)obj); } } ``` ## PreJobApex PreJob Apex can run Anonymous Apex before the data pack Job starts. While it is possible to use `CURRENT_DATA_PACKS_CONTEXT_DATA`, large projects are over the 32000 character limit for Anonymous Apex. ## preJobApex vs preStepApex preStepApex sends only the data pack context data for the currently running API call. For deployments, instead of deactivating all templates and layouts for an entire project before beginning a full deploy, using the same provided DeactivateTemplatesAndLayouts.cls as preStepApex, the target Salesforce org is minimally impacted because each template or Flexcard is deactivated only while it’s being deployed. For best results, combine with the maximumDeployCount of 1. postStepApex can be used to run any compilation steps in Apex that are not automatically run inside triggers. EPCProductJSONUpdate.cls is recommended to be run when Deploying Products. ## Pre and Post Job JavaScript Like Pre and Post Job Apex you can also run JavaScript against the project with the preJobJavaScript, postJobJavaScript in your job file. Your JavaScript file should implement: ```javascript /** * * @param {object} vlocity - This is the vlocity.js object. You can use vlocity.jsForceConnection for access to the current JSForce Session. * * @param {object} currentContextData - For preJobJavaScript this is null. For postJobJavaScript this will be a full list of records processed during the job. * * @param {object} jobInfo - This is the entire job state * * @param {function} callback - Callback - Must be called */ module.exports = function(vlocity, currentContextData, jobInfo, callback) { // Your Code Here }); ``` For a Query, each result from the Query is a JSON Object with the appropriate data pack type. ```kotlin queries: - VlocityDataPackType: VlocityUITemplate query: Select Id from %vlocity_namespace%__VlocityUITemplate__c where Name LIKE 'campaign%' ``` becomes ``` { "VlocityDataPackType": "VlocityUITemplate", "Id": "01r61000000DeTeAAN", } ``` Before a deploy, each JSON object stores a small amount of information about the object. By default, the name of the object. For a VlocityUILayout it would look like this example: ``` { "VlocityDataPackType": "VlocityUILayout", "Name": "Campaign-Story" } ``` In the DeactivateTemplatesAndLayouts.cls this name is used to deactivate the layouts that are pending for deployment. ## PostJobApex Replacement Format Post Job Apex runs after the Job completes successfully. After a deployment, the Ids of every deployed record are in the JSON object list. For large deployments, this volume can be too much data for Anonymous Apex. ``` { "Id": "01r61000000DeTeAAN" } ``` # Apex Class for the Join Loyalty Program Widget Template Customize the Join Loyalty Program widget template by adding to the widget, components, and data that aren’t available by default. For example, add a button that redirects members to your shopping site after they’ve joined the loyalty program. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
``` global class WidgetJoinLoyaltyProgram implements System.Callable { public Object call(String action, Map arguments) { Map input = (Map)arguments.get('input'); Map output = (Map)arguments.get('output'); Map options = (Map)arguments.get('options'); if (action == 'getProgramDetails') { return getProgramDetails(input, output, options); } if (action == 'enrollMemberToLoyaltyProgram') { return enrollMemberToLoyaltyProgram(input, output, options); } return null; } class ProgramDetails { String programName; String programDescription; String membershipNumber; Boolean termsAndConditions; String termsAndConditionsUrl; Boolean success; } class EnrollResponse { boolean success; String message; string membershipNumber; } private Map getProgramDetails(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); ProgramDetails programDetails = new ProgramDetails(); List programs = [SELECT Name, Description From LoyaltyProgram WHERE Name =: (String)input.get('programName')]; if (programs.isEmpty()) { programDetails.success = false; } else { LoyaltyProgram program = programs.get(0); String membershipNumber = (String)input.get('membershipNumber'); String termsAndConditionsUrl = (String)input.get('termsAndConditionsUrl'); programDetails.programName = program.Name; programDetails.programDescription = program.Description != null ? program.Description : ''; programDetails.termsAndConditions = true; programDetails.termsAndConditionsUrl = isEmpty(termsAndConditionsUrl) ? null : termsAndConditionsUrl; programDetails.membershipNumber = isEmpty(membershipNumber) ? '' : membershipNumber; programDetails.success = true; } private Map enrollMemberToLoyaltyProgram(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); EnrollResponse enrollresponse = new EnrollResponse(); if (blankInput(input)) { enrollResponse.success = false; enrollResponse.message = 'Complete all the fields and then try again.'; output.put('enrollMemberResponse', enrollResponse); LoyaltyApexLogManager.writeWidgetErrorLog('JoinLoyaltyProgram', 'enrollMemberToLoyaltyProgram', System.currentTimeMillis() - startTimeInMillis, enrollResponse.success, enrollResponse.message); return output; } String membershipNum = (String)input.get('membershipNumber'); if (isEmpty(membershipNum)) { enrollResponse.success = false; enrollResponse.message = 'Something went wrong. Try again later.'; output.put('enrollMemberResponse', enrollResponse); LoyaltyApexLogManager.writeWidgetErrorLog('JoinLoyaltyProgram', 'enrollMemberToLoyaltyProgram', System.currentTimeMillis() - startTimeInMillis, enrollResponse.success, enrollResponse.message); return output; } ConnectApi.IndividualMemberInput individualMemberInput = new ConnectApi.IndividualMemberInput(); ConnectApi.MemberContactInput memberContactInput = new ConnectApi.MemberContactInput(); individualMemberInput.enrollmentDate = datetime.now(); individualMemberInput.memberStatus = 'Active'; individualMemberInput.membershipNumber = membershipNum; memberContactInput.firstName = (String) input.get('firstName'); memberContactInput.lastName = (String) input.get('lastName'); memberContactInput.email = (String) input.get('emailAddress'); Map additionalFields = new Map(); additionalFields.put('Phone', (String) input.get('phoneNumber')); memberContactInput.additionalContactFieldValues = additionalFields; individualMemberInput.associatedContactDetails = memberContactInput; try{ ConnectApi.LoyaltyManagementConnect.enrollIndividualMember((String) input.get('programName'), individualMemberInput); enrollResponse.success = true; enrollResponse.membershipNumber = membershipNum; enrollResponse.message = 'Enrolled Successfully'; } catch (ConnectApi.ConnectApiException e){ enrollResponse.success = false; enrollResponse.message = e.getMessage(); } output.put('enrollMemberResponse', enrollResponse); LoyaltyApexLogManager.writeWidgetExecutionLog('JoinLoyaltyProgram', 'enrollMemberToLoyaltyProgram', System.currentTimeMillis() - startTimeInMillis, enrollResponse.success); return output; } private boolean blankInput (Map input) { if (isEmpty((String)input.get('firstName')) || isEmpty((String)input.get('lastName')) || isEmpty((String)input.get('phoneNumber')) || isEmpty((String)input.get('emailAddress'))) { return true; } return false; } private boolean isEmpty(String field){ if (field == null || field == '') { return true; } return false; } } ``` #### See Also - [_Salesforce Help_: Join Loyalty Program Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_program_join.htm&release=264.0.0&type=5 "The Join Loyalty Program widget template lets your customers join your loyalty program. Customers can fill up a simple form within the widget and join your loyalty program.") # Apex Class for the Join Promotion Widget Template Customize the Join Promotion widget template by adding to the widget, components, and data that aren’t available by default. For example, add a merge field for a custom Promotion field. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
``` global class WidgetJoinMemberPromotion implements System.Callable { public Object call(String action, Map arguments) { Map input = (Map)arguments.get('input'); Map output = (Map)arguments.get('output'); Map options = (Map)arguments.get('options'); if (action == 'getPromotionDetails') { return getPromotionDetails(input, output, options); } if (action == 'enrollMemberToPromotion') { return enrollMemberToPromotion(input, output, options); } return null; } class PromotionDetails { boolean isMemberEnrolled; string promotionName; string promotionDescription; string membershipNumber; String promotionEndDate; String programName; boolean isEnrollmentRequired; boolean showPushMessage = false; boolean success; boolean isVisible; } class EnrollPromotionResponse { boolean success; string message; boolean isVisible; } private Map getPromotionDetails(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); List programs = [SELECT Id From LoyaltyProgram WHERE Name =: (String)input.get('programName')]; PromotionDetails promotionDetails = new PromotionDetails(); if (programs.isEmpty()) { promotionDetails.success = false; output.put('promotionDetails', promotionDetails); return output; } else { LoyaltyProgram program = programs.get(0); promotionDetails.programName = (String)input.get('programName'); List membersList = [SELECT Id FROM LoyaltyProgramMember WHERE MembershipNumber =: (String)input.get('membershipNumber') AND Program.Name =: (String)input.get('programName')]; List promoList = [SELECT Id, Name, Description, EndDate, IsEnrollmentRequired FROM Promotion WHERE Name =: (String)input.get('promotionName') AND LoyaltyProgram.Name =: (String)input.get('programName')]; List memberPromotionList = [SELECT Id FROM LoyaltyProgramMbrPromotion WHERE LoyaltyProgramMember.MembershipNumber =: (String)input.get('membershipNumber') AND Promotion.Name =: (String)input.get('promotionName') AND LoyaltyProgramMember.Program.Id =: program.Id AND Promotion.LoyaltyProgram.Id =: program.Id]; promotionDetails.isMemberEnrolled = !memberPromotionList.isEmpty(); if (membersList.isEmpty() || promoList.isEmpty()) { promotionDetails.success = false; output.put('promotionDetails', promotionDetails); return output; } promotionDetails.success = true; Promotion promo = promoList.get(0); promotionDetails.promotionName = promo.Name; promotionDetails.promotionDescription = promo.Description != null ? promo.Description : ''; promotionDetails.membershipNumber = (String) input.get('membershipNumber'); promotionDetails.isEnrollmentRequired = promo.IsEnrollmentRequired; if (promo.EndDate != null) { promotionDetails.promotionEndDate = DateTime.newInstance(promo.EndDate.year(), promo.EndDate.month(), promo.EndDate.day()).format('dd MMMMMM yyyy'); } Integer threshold = Integer.valueOf((String) input.get('daysUntilPromotionExpiration')); if (threshold != null && promo.EndDate != null && Date.today() <= promo.EndDate && Date.today().daysBetween(promo.EndDate) <= threshold) { promotionDetails.showPushMessage = true; } output.put('promotionDetails', promotionDetails); return output; } } private Map enrollMemberToPromotion(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); EnrollPromotionResponse enrollPromotionResponse = new EnrollPromotionResponse(); List programs = [SELECT Id From LoyaltyProgram WHERE Name =: (String)input.get('programName')]; PromotionDetails promotionDetails = new PromotionDetails(); String visibilityType = (String)input.get('visibilityType'); String visibilityMap = (String)input.get('visibilityMap'); if(visibilityType != null && visibilityMap != null && visibilityType != '{Session.VisibilityType}' && visibilityMap != '{Session.VisibilityMap}' && !String.isEmpty(visibilityType) && !String.isEmpty(visibilityMap)) { String programName = (String)input.get('programName'); String membershipNumber = (String)input.get('membershipNumber'); String decodedMap = EncodingUtil.base64Decode(visibilityMap).toString(); Map attributes = (Map) JSON.deserializeUntyped(decodedMap); attributes.put('programName', programName); attributes.put('membershipNumber', membershipNumber); } else enrollPromotionResponse.isVisible = true; if (programs.isEmpty()) { enrollPromotionResponse.success = false; output.put('enrollPromotionResponse', enrollPromotionResponse); return output; } else { LoyaltyProgram program = programs.get(0); List memberList = [SELECT Id FROM LoyaltyProgramMember WHERE MembershipNumber =: (String)input.get('membershipNumber') AND Program.Name =: (String)input.get('programName')]; List promoList = [SELECT Id FROM Promotion WHERE Name =: (String)input.get('promotionName') AND LoyaltyProgram.Name =: (String)input.get('programName')]; String message = ''; if (!memberList.isEmpty() && !promoList.isEmpty()) { try { LoyaltyProgramMbrPromotion memberPromotion = new LoyaltyProgramMbrPromotion(); LoyaltyProgramMember member = memberList.get(0); Promotion promo = promoList.get(0); memberPromotion.LoyaltyProgramMemberId = member.Id; memberPromotion.PromotionId = promo.Id; memberPromotion.IsEnrollmentActive = true; insert memberPromotion; enrollPromotionResponse.success = true; enrollPromotionResponse.message = 'EnrolledFromAction'; message = enrollPromotionResponse.message; } catch (DmlException e) { enrollPromotionResponse.success = false; enrollPromotionResponse.message = e.getMessage(); message = 'DMLException: + ' + e.getStackTraceString(); } } else { enrollPromotionResponse.success = false; enrollPromotionResponse.message = 'record not found'; message = enrollPromotionResponse.message; } output.put('enrollPromotionResponse', enrollPromotionResponse); return output; } } } ``` #### See Also - [_Salesforce Help_: Join Promotion Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_promotion_join.htm&release=264.0.0&type=5 "The Join Promotion widget template lets members join a promotion. Loyalty program managers can choose the promotion that is shown on the widget.") # Apex Class for the Refer Friends Widget Template Customize the Refer Friends widget template by adding to the widget, components, and data that aren’t available by default. For example, add a state that shows the member’s five most recent referrals. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
``` global class WidgetReferMember implements System.Callable { global Object call(String action, Map arguments) { Map input = (Map)arguments.get('input'); Map output = (Map)arguments.get('output'); Map options = (Map)arguments.get('options'); if (action == 'getMemberReferralCode') { return getMemberReferralCode(input, output, options); } return null; } class MemberReferralCode { String referralCode; Boolean success; String programName; boolean isVisible; String url; String urlTruncated; } private Map getMemberReferralCode(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); String visibilityType = (String)input.get('visibilityType'); String visibilityMap = (String)input.get('visibilityMap'); List programMembers = [SELECT ReferralCode, Program.Name From LoyaltyProgramMember WHERE MembershipNumber =: (String)input.get('membershipNumber') AND Program.Name =: (String)input.get('programName')]; MemberReferralCode referralCodeDetails = new MemberReferralCode(); if(visibilityType != null && visibilityMap != null && visibilityType != '{Session.VisibilityType}' && visibilityMap != '{Session.VisibilityMap}' && !String.isEmpty(visibilityType) && !String.isEmpty(visibilityMap)) { String programName = (String)input.get('programName'); String membershipNumber = (String)input.get('membershipNumber'); String decodedMap = EncodingUtil.base64Decode(visibilityMap).toString(); Map attributes = (Map) JSON.deserializeUntyped(decodedMap); attributes.put('programName', programName); attributes.put('membershipNumber', membershipNumber); } else referralCodeDetails.isVisible = true; if (!programMembers.isEmpty()) { LoyaltyProgramMember member = programMembers.get(0); referralCodeDetails.success = true; referralCodeDetails.referralCode = member.ReferralCode; referralCodeDetails.programName = (String)input.get('programName'); String url = (String)input.get('url'); if (url != null && !String.isEmpty(url) && url != '{Session.Url}') { String urlTruncated = url; referralCodeDetails.url = url; Integer maxSize = 25; if(url.length() > maxSize ){ urlTruncated = url.substring(0, maxSize) + '...'; } referralCodeDetails.urlTruncated = urlTruncated; } } else { referralCodeDetails.success = false; } output.put('referralCodeDetails', referralCodeDetails); String iconOneLink = (String)input.get('iconOneLink'); if(iconOneLink != null && iconOneLink != '{iconOneLink}' && iconOneLink != '{Session.iconOneLink}' && !String.isEmpty(iconOneLink)) { output.put('iconOneLink', iconOneLink); } String iconTwoLink = (String)input.get('iconTwoLink'); if(iconTwoLink != null && iconTwoLink != '{iconTwoLink}' && iconTwoLink != '{Session.iconTwoLink}' && !String.isEmpty(iconTwoLink)) { output.put('iconTwoLink', iconTwoLink); } String iconThreeLink = (String)input.get('iconThreeLink'); if(iconThreeLink != null && iconThreeLink != '{iconThreeLink}' && iconThreeLink != '{Session.iconThreeLink}' && !String.isEmpty(iconThreeLink)) { output.put('iconThreeLink', iconThreeLink); } String iconFourLink = (String)input.get('iconFourLink'); if(iconFourLink != null && iconFourLink != '{iconFourLink}' && iconFourLink != '{Session.iconFourLink}' && !String.isEmpty(iconFourLink)) { output.put('iconFourLink', iconFourLink); } String iconFiveLink = (String)input.get('iconFiveLink'); if(iconFiveLink != null && iconFiveLink != '{iconFiveLink}' && iconFiveLink != '{Session.iconFiveLink}' && !String.isEmpty(iconFiveLink)) { output.put('iconFiveLink', iconFiveLink); } return output; } } ``` #### See Also - [_Salesforce Help_: Refer Friends Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_refer_friends.htm&release=264.0.0&type=5 "Members can use the Refer Friends widget template to refer their friends and family to join the loyalty program. The widget lets members share their referral code across their social media accounts.") # Apex Class for the Remind About Expiring Points Widget Template Customize the Remind About Expiring Points widget template by adding to the widget, components, and data that aren’t available by default. For example, add merge field that also shows the member’s current points balance. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
``` global class WidgetPointsExpiration implements System.Callable { public Object call(String action, Map arguments) { Map input = (Map)arguments.get('input'); Map output = (Map)arguments.get('output'); Map options = (Map)arguments.get('options'); if (action == 'getMemberPointsExpirationDetails') { return getMemberPointsExpirationDetails(input, output, options); } return null; } class MemberPointsExpirationDetails { String memberName; String pointsExpirationDate; String exploreFurtherUrl; Double pointsBalance; boolean success; boolean isVisible; } private Map getMemberPointsExpirationDetails(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); String visibilityType = (String)input.get('visibilityType'); String visibilityMap = (String)input.get('visibilityMap'); MemberPointsExpirationDetails memberPointsExpirationDetails = new MemberPointsExpirationDetails(); if(visibilityType != null && visibilityMap != null && visibilityType != '{Session.VisibilityType}' && visibilityMap != '{Session.VisibilityMap}' && !String.isEmpty(visibilityType) && !String.isEmpty(visibilityMap)) { String programName = (String)input.get('programName'); String membershipNumber = (String)input.get('membershipNumber'); String decodedMap = EncodingUtil.base64Decode(visibilityMap).toString(); Map attributes = (Map) JSON.deserializeUntyped(decodedMap); attributes.put('programName', programName); attributes.put('membershipNumber', membershipNumber); } else memberPointsExpirationDetails.isVisible = true; List programMembers = [SELECT LoyaltyProgramMember.contact.FirstName, LoyaltyProgramMember.contact.LastName, Id From LoyaltyProgramMember WHERE MembershipNumber =: (String)input.get('membershipNumber') AND Program.Name =: (String)input.get('programName')]; if (!programMembers.isEmpty() && Schema.describeSObjects(new String[]{ 'LoyaltyAggrPointExprLedger' })[0].isAccessible()) { List pointsExpirationDetails= [SELECT ExpirationPoints, ExpirationDate from LoyaltyAggrPointExprLedger WHERE LoyaltyProgramMemberId =: programMembers.get(0).Id AND ExpirationDate >= TODAY ORDER BY ExpirationDate ASC NULLS LAST LIMIT 1]; if (!pointsExpirationDetails.isEmpty()) { memberPointsExpirationDetails.success = true; LoyaltyProgramMember member = programMembers.get(0); if(member.contact.FirstName != null){ memberPointsExpirationDetails.memberName = member.contact.FirstName + ' ' + member.contact.LastName; } else { memberPointsExpirationDetails.memberName = member.contact.LastName; } String exploreFurtherUrl = (String)input.get('exploreFurtherUrl'); memberPointsExpirationDetails.exploreFurtherUrl = isEmpty(exploreFurtherUrl) ? null : exploreFurtherUrl; DateTime todaysDate = System.now(); DateTime thresholdDate = todaysDate.addDays(Integer.valueOf(input.get('thresholdDays'))); LoyaltyAggrPointExprLedger ledgerDetails = pointsExpirationDetails.get(0); memberPointsExpirationDetails.pointsBalance = ledgerDetails.ExpirationPoints; if (ledgerDetails.ExpirationDate != null && ledgerDetails.ExpirationDate < thresholdDate) { String dateSuffix = getDayNumberSuffix(ledgerDetails.ExpirationDate.day()); String requiredFormat = 'dd' + '\'' + dateSuffix +'\'' + ' ' + 'MMMMMM' + ',' + ' yyyy'; memberPointsExpirationDetails.pointsExpirationDate = DateTime.newInstance(ledgerDetails.ExpirationDate.year(), ledgerDetails.ExpirationDate.month(), ledgerDetails.ExpirationDate.day()).format(requiredFormat); } else { memberPointsExpirationDetails.pointsExpirationDate = null; } } else { memberPointsExpirationDetails.success = true; } } else { memberPointsExpirationDetails.success = false; } output.put('memberPointsExpirationDetails', memberPointsExpirationDetails); return output; } private String getDayNumberSuffix(Integer day) { if (day >= 11 && day <= 13) { return 'th'; } switch on math.mod(day,10) { when 1 { return 'st'; } when 2 { return 'nd'; } when 3 { return 'rd'; } when else { return 'th'; } } } private boolean isEmpty(String field){ if (field == null || field == '') { return true; } return false; } } ``` #### See Also - [_Salesforce Help_: Remind Members About Expiring Points Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_expiring_points.htm&release=264.0.0&type=5 "The Remind About Expiring Points widget template lets members view the number of points about to expire and the date that the points are set to expire on. The widget shows members the points set to expire for their non-qualifying currency. If a loyalty program has two non-qualifying currencies, then the expiring points of the primary currency are shown.") # Apex Class for the Select Member Benefits Widget Template Customize the Select Member Benefits widget template by adding to the widget, components, and data that aren’t available by default. For example, add the Description field below the benefit name to show members the details of each benefit. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
``` global class WidgetSelectMemberBenefits implements System.Callable { global Object call(String action, Map arguments) { Map input = (Map)arguments.get ('input'); Map output = (Map) arguments.get('output'); Map options = (Map) arguments.get('options'); if (action == 'getBenefitsInfo') { return getBenefitsInfo(input, output, options); } else if (action == 'saveMemberBenefits') { return saveMemberBenefits(input, output, options); } return null; } class BenefitsInfo { String benefitId ; String benefitName; String imageUrl; Boolean isBenefitAlreadySelected = false; Boolean canUnselect = false; } private Map getBenefitsInfo(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); String membershipNumber = (String) input.get ('membershipNumber'); String programName = (String) input.get ('programName'); String sourceType = (String) input.get ('sourceType'); String numberOfBenefitsToSelectString = (String) input.get ('numberOfBenefitsToSelect'); String startDateString = (String) input.get ('startDate'); String endDateString = (String) input.get ('endDate'); Date startDate = null; Date endDate = null; try{ startDate = Date.valueOf(startDateString); endDate = Date.valueOf(endDateString); } catch(Exception e){ } Integer maximumAllowedBenefits = numberOfBenefitsToSelectString != null && numberOfBenefitsToSelectString.isNumeric() ? Integer.valueOf(numberOfBenefitsToSelectString) : null; Map benefitsMap = new Map(); List listOfBenefitsInfo = new List(); List activeSourceType = getActiveSourceType(); if(!activeSourceType.contains(sourceType)){ sourceType = null; } List memberId = [ select Id from LoyaltyProgramMember where MembershipNumber = :membershipNumber and ProgramId in (select id from LoyaltyProgram where Name = :programName) ]; if(programName!= null){ List programId = [ select Id from LoyaltyProgram where Name = :programName ]; if(programId.size() == 0 || memberId.size() == 0 || maximumAllowedBenefits == null){ programName = null; } } List listOfBenefits = [select Id, ImageUrl, Name from Benefit where isBenefitSelectionAllowed = true and IsActive = true and BenefitType.LoyaltyProgram.Name = :programName]; List listOfMemberBenefit = [select BenefitId from MemberBenefit where MemberId in :memberId and SourceType = :sourceType and Status != 'Expired']; Integer alreadySelectedCount = 0; for (Benefit b : listOfBenefits) { BenefitsInfo benefitsInfo = new BenefitsInfo(); benefitsInfo.benefitName = b.Name; benefitsInfo.imageUrl = b.ImageUrl; benefitsInfo.benefitId = b.Id; for (MemberBenefit m : listOfMemberBenefit) { benefitsInfo.isBenefitAlreadySelected = (m.BenefitId == b.id); benefitsInfo.canUnselect = benefitsInfo.isBenefitAlreadySelected; if (m.BenefitId == b.id) { alreadySelectedCount = alreadySelectedCount + 1; break; } } listOfBenefitsInfo.add(benefitsInfo); } benefitsMap.put('benefits', listOfBenefitsInfo); benefitsMap.put('benefitsExists', !listOfBenefitsInfo.isEmpty()); benefitsMap.put('programName', programName); benefitsMap.put('membershipNumber', membershipNumber); benefitsMap.put('alreadySelectedCount', alreadySelectedCount); benefitsMap.put('numberOfBenefitsToSelect', maximumAllowedBenefits); benefitsMap.put('sourceType', sourceType); benefitsMap.put('startDate', startDate); benefitsMap.put('endDate', endDate); benefitsMap.put('editMode', alreadySelectedCount==0); output.put('benefitInfo', benefitsMap); return output; } private Map saveMemberBenefits(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); String errorMessage = 'We can’t process the selected benefits because of an error.'; Map result = new Map(); String membershipNumber = (String) input.get ('membershipNumber'); String programName = (String) input.get ('programName'); String benefitString = (String) input.get ('benefitSelected'); Integer maximumAllowedBenefits = (String) input.get ('numberOfBenefitsToSelect')!=null ? Integer.valueOf((String) input.get ('numberOfBenefitsToSelect')) : 0; if(maximumAllowedBenefits<=0){ result.put('status',false); result.put('error',errorMessage); output.put('result',result); return output; } String sourceType = (String) input.get ('sourceType'); List activeSourceType = getActiveSourceType(); if(!activeSourceType.contains(sourceType)){ result.put('status',false); result.put('error',errorMessage); output.put('result',result); return output; } String startDateString = (String) input.get ('startDate'); String endDateString = (String) input.get ('endDate'); Date startDate = null; Date endDate = null; try{ startDate = Date.valueOf(startDateString); endDate = Date.valueOf(endDateString); } catch(Exception e){ } if(startDate == null || endDate == null || startDate > endDate){ result.put('status',false); result.put('error',errorMessage); output.put('result',result); return output; } List splitString = benefitString.split(','); Map benefitMap = new Map(); Map benefitLastSelectionMap = new Map(); Set benefitToBeInserted = new Set (); Set benefitToBeDeleted = new Set (); for (String s : splitString) { List individualBenefitId = s.split(':'); if (individualBenefitId.size() == 2) { if (benefitMap.containsKey(individualBenefitId[1])) { benefitMap.put(individualBenefitId[1], benefitMap.get (individualBenefitId[1]) + 1); benefitLastSelectionMap.put(individualBenefitId[1], individualBenefitId[0]); } else { benefitMap.put(individualBenefitId[1], 1); benefitLastSelectionMap.put(individualBenefitId[1], individualBenefitId[0]); } } } for (String s : splitString) { List individualBenefitId = s.split(':'); if (individualBenefitId.size() == 2) { if (Math.mod(benefitMap.get (individualBenefitId[1]), 2) != 0) { if (benefitLastSelectionMap.get (individualBenefitId[1]) == 'S') { benefitToBeInserted.add(individualBenefitId[1]); } else if (benefitLastSelectionMap.get (individualBenefitId[1]) == 'U') { benefitToBeDeleted.add(individualBenefitId[1]); } } } } List memberId = [ select Id from LoyaltyProgramMember where MembershipNumber = :membershipNumber and ProgramId in (select id from LoyaltyProgram where Name = :programName) ]; boolean dmlResult = false; if(memberId.size() == 1){ Integer alreadySelectedBenefit = [Select Count() from MemberBenefit where MemberId = :memberId.get(0).Id and SourceType = :sourceType and Status!='Expired']; Integer totalBenefitAfterInsertion = (benefitToBeInserted.size() - benefitToBeDeleted.size()) + alreadySelectedBenefit; if(totalBenefitAfterInsertion > maximumAllowedBenefits){ result.put('status', false); result.put('error','Select upto '+ maximumAllowedBenefits + ' benefits.'); output.put('result',result); return output; } else if(totalBenefitAfterInsertion < maximumAllowedBenefits){ result.put('status', false); result.put('error','Select at least '+ maximumAllowedBenefits + ' benefits.'); output.put('result',result); return output; } if (benefitToBeInserted.size() > 0 && memberId.size() == 1) { List benefitsCheck = [select id, Name from Benefit where id in :benefitToBeInserted and isBenefitSelectionAllowed = true and IsActive = true]; List memberBenefitList = new List(); boolean isInserted = false; for (Benefit b : benefitsCheck) { MemberBenefit memberBenefit = new MemberBenefit(); memberBenefit.Name = b.Name; memberBenefit.MemberId = memberId[0].id ; memberBenefit.SourceType = sourceType; memberBenefit.Status = 'Processed'; memberBenefit.BenefitId = b.Id; memberBenefit.EndDate = endDate; memberBenefit.StartDate = startDate; memberBenefitList.add(memberBenefit); } if (memberBenefitList.size() > 0) { isInserted = true; Database.SaveResult[] saveResult = Database.Insert (memberBenefitList, true); for (Database.SaveResult sr : saveResult) { if (!sr.isSuccess()) { isInserted = false ; break; } } } dmlResult = isInserted; } if (benefitToBeDeleted.size() > 0 && memberId.size() == 1) { Boolean isDeleted = true; String loyaltyProgramMemberId = memberId[0].id; try { MemberBenefit[] toBeDeletedMemberBenefits = [SELECT Id, Name FROM MemberBenefit WHERE BenefitId in :benefitToBeDeleted AND MemberId = :loyaltyProgramMemberId]; delete toBeDeletedMemberBenefits; } catch (Exception e) { isDeleted = false; } dmlResult = isDeleted; } } if(dmlResult == false){ result.put('error',errorMessage); } result.put('status',dmlResult); output.put('result',result); return output; } private List getActiveSourceType(){ List sourceTypeValues = MemberBenefit.SourceType.getDescribe().getPickListValues(); List activeSourceTypeEntries = new List(); for (Schema.PicklistEntry value : sourceTypeValues) { if (value.isActive()) { activeSourceTypeEntries.add(value.getValue()); } } return activeSourceTypeEntries; } } ``` #### See Also - [_Salesforce Help_: Select Member Benefits Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_benefits_select.htm&release=264.0.0&type=5 "The Select Member Benefits widget template can be used to let members select benefits from the ones available to them. Loyalty program managers can decide the benefits to be made available on the widget, for selection by the members.") # Apex Class for the View Active Vouchers Widget Template Customize the View Active Vouchers widget template by adding to the widget, components, and data that aren’t available by default. For example, add icons for each voucher. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
``` global class WidgetMemberVouchers implements System.Callable { public Object call(String action, Map arguments) { Map input = (Map)arguments.get('input'); Map output = (Map)arguments.get('output'); Map options = (Map)arguments.get('options'); if (action == 'getMemberVouchersInfo') { return getMemberVouchersInfo(input, output, options); } return null; } class MemberVouchersInfo { String voucherName; String voucherCode; String voucherExpirationDate; String voucherDescription; } private Map getMemberVouchersInfo(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); Boolean memberVouchersExist = false; String pgName= (String)input.get('programName'); if(pgName == null || (String.isEmpty(pgName)) || pgName == '{Session.ProgramName}'){ output.put('programName', null); return output; } String visibilityType = (String)input.get('visibilityType'); String visibilityMap = (String)input.get('visibilityMap'); List programMembers = [SELECT Id, Program.Name From LoyaltyProgramMember WHERE MembershipNumber =: (String)input.get('membershipNumber') AND Program.Name =: (String)input.get('programName')]; if(visibilityType != null && visibilityMap != null && visibilityType != '{Session.VisibilityType}' && visibilityMap != '{Session.VisibilityMap}' && !String.isEmpty(visibilityType) && !String.isEmpty(visibilityMap)) { String programName = (String)input.get('programName'); String membershipNumber = (String)input.get('membershipNumber'); String decodedMap = EncodingUtil.base64Decode(visibilityMap).toString(); Map attributes = (Map) JSON.deserializeUntyped(decodedMap); attributes.put('programName', programName); attributes.put('membershipNumber', membershipNumber); } else output.put('isVisible', true); List memberVouchersInfo = new List(); String maxLimitString= (String)input.get('maxLimit'); Integer maxLimit = maxLimitString != null && maxLimitString.isNumeric() ? Integer.valueOf(maxLimitString) : 0; Integer voucherCount = 0; if (!programMembers.isEmpty()) { LoyaltyProgramMember member = programMembers.get(0); pgName = member.Program.Name; voucherCount = [Select Count() FROM Voucher WHERE LoyaltyProgramMember.Id =: member.Id AND Status = 'Issued' AND VoucherDefinition.IsActive = true]; List vouchers; if(maxLimit != null && maxLimit > 0){ vouchers = [ Select VoucherDefinition.Name, VoucherCode, ExpirationDate, VoucherDefinition.Description FROM Voucher WHERE LoyaltyProgramMember.Id =: member.Id AND Status = 'Issued' AND VoucherDefinition.IsActive = true Order By ExpirationDate ASC Limit :maxLimit ]; } else { vouchers = [ Select VoucherDefinition.Name, VoucherCode, ExpirationDate, VoucherDefinition.Description FROM Voucher WHERE LoyaltyProgramMember.Id =: member.Id AND Status = 'Issued' AND VoucherDefinition.IsActive = true Order By ExpirationDate ASC ]; } if(!vouchers.isEmpty()) { for(Voucher voucher: vouchers) { MemberVouchersInfo voucherDetails = new MemberVouchersInfo(); voucherDetails.voucherName = voucher.VoucherDefinition.Name; voucherDetails.voucherCode = voucher.VoucherCode; voucherDetails.voucherExpirationDate = DateTime.newInstance(voucher.ExpirationDate.year(), voucher.ExpirationDate.month(), voucher.ExpirationDate.day()).date().format(); voucherDetails.voucherDescription = voucher.VoucherDefinition.Description != null ? voucher.VoucherDefinition.Description : ''; memberVouchersInfo.add(voucherDetails); memberVouchersExist = true; } }else { memberVouchersExist = false; } } else { memberVouchersExist = false; } output.put('programName', pgName); output.put('memberVouchersExist', memberVouchersExist); output.put('memberVouchersInfo', memberVouchersInfo); output.put('voucherCount', voucherCount); output.put('maxLimit', maxLimit); output.put('hasMore', (maxLimit != 0 && voucherCount > maxLimit)); String viewAllLink = (String)input.get('viewAllLink'); if(viewAllLink != null && viewAllLink != '{Session.ViewAllLink}' && !String.isEmpty(viewAllLink)) { output.put('viewAllLink', viewAllLink); } return output; } } ``` #### See Also - [_Salesforce Help_: View Active Vouchers Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_voucher_view.htm&release=264.0.0&type=5 "The View Active Vouchers widget template lets members see the vouchers that they can redeem. Members can also view the name, description, expiration date, and code of their redeemable voucher. The widget also enables members to copy the code of the widget. The widget doesn’t show expired vouchers and the vouchers that members have already redeemed. The widget displays vouchers based on their expiration date, with the voucher with the nearest expiration date listed first.") # Apex Class for the View Cumulative Promotion Progress Widget Template Customize the View Cumulative Promotion Progress widget template by adding to the widget, components, and data that aren’t available by default. For example, replace the progress bar with a progress indicator of your choice. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
``` global class WidgetCumulativePromotions implements System.Callable { global Object call(String action, Map arguments) { Map input = (Map)arguments.get('input'); Map output = (Map)arguments.get('output'); Map options = (Map)arguments.get('options'); if (action == 'getAttributeValue') { return getAttributeValue(input, output, options); } return null; } class CumulativePromotionOutput { Integer currentValue; Integer targetValue; Integer differenceValue; boolean isSuccess; String errorMessage; String promotionName; String description; Integer progress; boolean eligibleMemberPromotion; String navigateUrl; boolean isVisible; boolean isThresholdBreached; } private Map getAttributeValue(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); String membershipNumber = (String)input.get('membershipNumber'); String programName = (String)input.get('programName'); String attributeName = (String)input.get('attributeName'); String promotionName = (String)input.get('promotionName'); String thresholdValue = (String)input.get('threshold'); String navigateUrl = (String)input.get('navigateUrl'); Integer threshold=0; if(!String.isEmpty(thresholdValue) && thresholdValue != '{Session.Threshold}') { threshold=Integer.valueOf(thresholdValue); } CumulativePromotionOutput cpOutput = new CumulativePromotionOutput(); if(String.isEmpty(membershipNumber) || String.isEmpty(programName) || String.isEmpty(attributeName) || String.isEmpty(promotionName)) { cpOutput.isSuccess=false; cpOutput.errorMessage='Missing mandatory input values'; output.put('CumulativePromotionResponse', cpOutput); return output; } else if(membershipNumber == '{Session.MembershipNumber}' || programName == '{Session.ProgramName}' || attributeName == '{Session.AttributeName}' || promotionName == '{Session.PromotionName}') { cpOutput.isSuccess=false; cpOutput.errorMessage='Missing mandatory input values'; output.put('CumulativePromotionResponse', cpOutput); return output; } List values = [SELECT CurrentValue,Id, LoyaltyPgmEngmtAttribute.LoyaltyProgramId, LoyaltyPgmEngmtAttribute.TargetValue,LoyaltyPgmEngmtAttribute.Name, LoyaltyProgramMember.MembershipNumber, LoyaltyProgramMemberId, ResetCount, StartDate, EndDate, LoyaltyPgmEngmtAttribute.MaximumResetCountPerPeriod FROM LoyaltyPgmMbrAttributeVal where LoyaltyProgramMember.MembershipNumber=: membershipNumber AND LoyaltyPgmEngmtAttribute.Name=: attributeName AND StartDate <= TODAY AND EndDate >= TODAY AND LoyaltyPgmEngmtAttribute.LoyaltyProgram.Name=: programName]; if(values != null && values.size() > 0) { if(values.get(0).ResetCount != null && values.get(0).LoyaltyPgmEngmtAttribute.MaximumResetCountPerPeriod != null) { Integer resetCount = Integer.valueOf(values.get(0).ResetCount); Integer maxResetCount = Integer.valueOf(values.get(0).LoyaltyPgmEngmtAttribute.MaximumResetCountPerPeriod); Integer currentValue = Integer.valueOf(values.get(0).CurrentValue); Integer targetValue = Integer.valueOf(values.get(0).LoyaltyPgmEngmtAttribute.TargetValue); Double completedPercentage = (currentValue*100)/targetValue; if(completedPercentage >= threshold && resetCount < maxResetCount) { String loyaltyProgramMemberId = values.get(0).LoyaltyProgramMemberId; List eligibility = [SELECT LoyaltyProgramMemberId,MemberEligibilityCategory,PromotionName, Description FROM LoyaltyPgmMbrPromEligView WHERE LoyaltyProgramMemberId=: loyaltyProgramMemberId AND MemberEligibilityCategory = 'Eligible' AND PromotionName=: promotionName AND LoyaltyProgram.Name=: programName]; if(eligibility != null && eligibility.size() > 0) { cpOutput.promotionName=(String)eligibility.get(0).PromotionName; cpOutput.description=(String)eligibility.get(0).Description; cpOutput.currentValue= currentValue; cpOutput.targetValue= targetValue; cpOutput.differenceValue=targetValue-currentValue; cpOutput.isSuccess=true; cpOutput.errorMessage=null; cpOutput.eligibleMemberPromotion=true; cpOutput.progress=Integer.valueOf(completedPercentage); cpOutput.navigateUrl=navigateUrl; output.put('progress',Integer.valueOf(completedPercentage)); } else { cpOutput.errorMessage='Member not eligible for promotion'; cpOutput.eligibleMemberPromotion=false; } } else { cpOutput.errorMessage='threshold breached or reset count limit over'; cpOutput.isThresholdBreached = true; } } } else cpOutput.errorMessage='No attribute value found'; output.put('CumulativePromotionResponse', cpOutput); return output; } } ``` #### See Also - [_Salesforce Help_: View Cumulative Promotion Progress Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_promotion_cumulative.htm&release=264.0.0&type=5 "The View Cumulative Promotion Progress lets members view their progress towards achieving the target of an engagement attribute. The widget also contains a button that redirects members to your shopping site.") # Apex Class for the View Member Badges Widget Template Customize the View Member Badges widget template by adding to the widget, components, and data that aren’t available by default. For example, customize the widget to show the three badges that the member is close to achieving based on their activity. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
``` global class WidgetMemberBadges implements System.Callable { global Object call(String action, Map arguments) { Map input = (Map)arguments.get('input'); Map output = (Map)arguments.get('output'); Map options = (Map)arguments.get('options'); if (action == 'getMemberBadgeInfo') { return getMemberBadgeInfo(input, output, options); } return null; } class MemberBadgeInfo { String badgeName; String imageUrl; String badgeDescription; } private Map getMemberBadgeInfo(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); Boolean memberBadgesExist = true; String pgName; List programMembers = [SELECT Id, Program.Name From LoyaltyProgramMember WHERE MembershipNumber =: (String)input.get('membershipNumber') AND Program.Name =: (String)input.get('programName')]; List memberBadgesInfo = new List(); Integer badgesCount = 0; String maxLimitString= (String)input.get ('maxLimit'); Integer maxLimit = maxLimitString != null && maxLimitString.isNumeric() ? Integer.valueOf(maxLimitString) : 0; if (!programMembers.isEmpty()) { LoyaltyProgramMember member = programMembers.get(0); pgName = member.Program.Name; badgesCount = [ Select Count() FROM LoyaltyProgramMemberBadge WHERE LoyaltyProgramMember.Id =: member.Id AND Status = 'Active' ]; List memberBadges; if(maxLimit != null && maxLimit > 0) { memberBadges= [ Select LoyaltyProgramBadge.ImageUrl, LoyaltyProgramBadge.Description, LoyaltyProgramBadge.Name, Status FROM LoyaltyProgramMemberBadge WHERE LoyaltyProgramMember.Id =: member.Id AND Status = 'Active' ORDER BY StartDate DESC NULLS FIRST Limit :maxLimit ]; } else{ memberBadges= [ Select LoyaltyProgramBadge.ImageUrl, LoyaltyProgramBadge.Description, LoyaltyProgramBadge.Name, Status FROM LoyaltyProgramMemberBadge WHERE LoyaltyProgramMember.Id =: member.Id AND Status = 'Active' ORDER BY StartDate DESC NULLS FIRST ]; } if(!memberBadges.isEmpty()) { for(LoyaltyProgramMemberBadge memberBadge: memberBadges) { MemberBadgeInfo badgeDetails = new MemberBadgeInfo(); badgeDetails.badgeName = memberBadge.LoyaltyProgramBadge.Name; badgeDetails.imageUrl = memberBadge.LoyaltyProgramBadge.ImageUrl; badgeDetails.badgeDescription = memberBadge.LoyaltyProgramBadge.Description; memberBadgesInfo.add(badgeDetails); } } else { memberBadgesExist = false; } } else { memberBadgesExist = false; } output.put('memberBadgesInfo', memberBadgesInfo); output.put('memberBadgesExist', memberBadgesExist); output.put('programName', pgName); output.put('badgesCount', badgesCount); output.put('maxLimit', maxLimit); output.put('hasMore', (maxLimit != 0 && badgesCount > maxLimit)); String viewAllLink = (String)input.get('viewAllLink'); if(viewAllLink != null && viewAllLink != '{Session.ViewAllLink}' && !String.isEmpty(viewAllLink)) { output.put('viewAllLink', viewAllLink); } return output; } } ``` #### See Also - [_Salesforce Help_: View Member Badges Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_badges_view.htm&release=264.0.0&type=5 "The View Member Badges widget template lets members view the badges currently assigned to them. The widget displays badges based on their start date, with the badge with the nearest start date listed first.") # Apex Class for the View Member Benefits Widget Template Customize the View Member Benefits widget template by adding to the widget, components, and data that aren’t available by default. For example, add benefits and make benefits that have expired in the last month unavailable. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
``` global class WidgetMemberBenefits implements System.Callable { global Object call(String action, Map arguments) { Map input = (Map)arguments.get('input'); Map output = (Map)arguments.get('output'); Map options = (Map)arguments.get('options'); if (action == 'getMemberBenefitsInfo') { return getMemberBenefitsInfo(input, output, options); } return null; } class MemberBenefitsInfo { String benefitName; String imageUrl; String benefitDescription; boolean isSuccess; } private Map getMemberBenefitsInfo(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); Boolean memberBenefitsExist = true; String programName= (String)input.get('programName'); if(programName == null || (String.isEmpty(programName)) || programName == '{Session.ProgramName}'){ output.put('programName', null); return output; } List programMembers = [SELECT Id, Program.Name From LoyaltyProgramMember WHERE MembershipNumber =: (String)input.get('membershipNumber') AND Program.Name =: (String)input.get('programName')]; List memberBenefitsInfo = new List(); Integer benefitsCount = 0; String maxLimitString= (String)input.get('maxLimit'); Integer maxLimit = maxLimitString != null && maxLimitString.isNumeric() ? Integer.valueOf(maxLimitString) : 0; if (!programMembers.isEmpty()) { ConnectApi.MemberBenefitsOutput connectOutput; try { connectOutput = ConnectApi.LoyaltyConnect.getMemberBenefits(programMembers.get(0).Id); } catch (ConnectApi.ConnectApiException e) { MemberBenefitsInfo benefitDetails = new MemberBenefitsInfo(); benefitDetails.isSuccess = false; memberBenefitsInfo.add(benefitDetails); output.put('memberBenefitsInfo', memberBenefitsInfo); return output; } LoyaltyProgramMember member = programMembers.get(0); programName = member.Program.Name; List benefitIds = new List(); if(!(connectOutput.memberBenefits).isEmpty()) { for(ConnectApi.MemberBenefitOutput memberBenefit: connectOutput.memberBenefits) { benefitIds.add(memberBenefit.benefitId); } List benefits; benefitsCount = [SELECT Count() FROM Benefit WHERE Benefit.Id IN: benefitIds AND IsActive = true]; if(maxLimit != null && maxLimit > 0) { benefits = [SELECT Name, ImageUrl, Description FROM Benefit WHERE Benefit.Id IN: benefitIds AND IsActive = true Order By Name ASC Limit :maxLimit]; } else { benefits = [SELECT Name, ImageUrl, Description FROM Benefit WHERE Benefit.Id IN: benefitIds AND IsActive = true]; } for(Benefit benefit: benefits) { MemberBenefitsInfo benefitDetails = new MemberBenefitsInfo(); benefitDetails.benefitName = benefit.Name; benefitDetails.imageUrl = benefit.ImageUrl; benefitDetails.benefitDescription = benefit.Description; benefitDetails.isSuccess = true; memberBenefitsInfo.add(benefitDetails); } } else { memberBenefitsExist = false; } } else { memberBenefitsExist = false; } output.put('memberBenefitsInfo', memberBenefitsInfo); output.put('memberBenefitExist', memberBenefitsExist); output.put('isSuccess', true); output.put('programName', programName); output.put('benefitsCount', benefitsCount); output.put('maxLimit', maxLimit); output.put('hasMore', (maxLimit != 0 && benefitsCount > maxLimit)); String viewAllLink = (String)input.get('viewAllLink'); if(viewAllLink != null && viewAllLink != '{Session.ViewAllLink}' && !String.isEmpty(viewAllLink)) { output.put('viewAllLink', viewAllLink); } return output; } } ``` #### See Also - [_Salesforce Help_: View Member Benefits Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_benefits_view.htm&release=264.0.0&type=5 "The View Member Benefits widget template lets members view the tier benefits and personalized benefits that have been assigned to them. The widget displays benefits alphabetically based on the name of the benefit.") # Apex Class for the View Member Profile Widget Template Customize the View Member Profile widget template by adding to the widget, components, and data that aren’t available by default. For example, add an icon that shows the member’s profile picture on the widget. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
``` global class WidgetMemberProfile implements System.Callable { public Object call(String action, Map arguments) { Map input = (Map)arguments.get('input'); Map output = (Map)arguments.get('output'); Map options = (Map)arguments.get('options'); if (action == 'getMemberProfileData') { return getMemberProfileData(input, output, options); } return null; } class MemberDetails { String memberFirstName; String memberLastName; String membershipNumber; String memberTierName; String memberCurrencyOneName; String memberCurrencyOnePointBalance; String memberCurrencyTwoName; String memberCurrencyTwoPointBalance; boolean success; String message; boolean isVisible; } private Map getMemberProfileData(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); MemberDetails memberDetails = new MemberDetails(); ConnectApi.MemberDetailsOutput connectOutput; try { connectOutput = ConnectApi.LoyaltyManagementConnect.getMemberProfileUsingMembershipNumber( (String)input.get('programName'), (String)input.get('membershipNumber'), null); } catch (ConnectApi.ConnectApiException e) { memberDetails.success = false; output.put('memberDetails', memberDetails); return output; } List tierGroups = [SELECT Id FROM LoyaltyTierGroup WHERE Name =: (String)input.get('tierGroup')]; if (tierGroups.isEmpty()) { memberDetails.success = false; output.put('memberDetails', memberDetails); return output; } String memberTierGroupId = tierGroups.get(0).Id; for (ConnectApi.MemberTierOutput currentTier : connectOutput.memberTiers) { if (currentTier.tierGroupId == memberTierGroupId) { memberDetails.memberTierName = currentTier.loyaltyMemberTierName; break; } } if (memberDetails.memberTierName == null) { memberDetails.success = false; output.put('memberDetails', memberDetails); return output; } memberDetails.success = true; memberDetails.memberFirstName = connectOutput.associatedContact.firstName != null ? connectOutput.associatedContact.firstName : ''; memberDetails.memberLastName = connectOutput.associatedContact.lastName; memberDetails.membershipNumber = connectOutput.membershipNumber; String currencyName1 = (String)input.get('memberCurrencyOne'); String currencyName2 = (String)input.get('memberCurrencyTwo'); for (ConnectApi.MemberCurrencyOutput currentCurrency : connectOutput.memberCurrencies) { if (currentCurrency.loyaltyMemberCurrencyName == currencyName1) { memberDetails.memberCurrencyOneName = currentCurrency.loyaltyMemberCurrencyName; memberDetails.memberCurrencyOnePointBalance = currentCurrency.pointsBalance.format(); } if (currentCurrency.loyaltyMemberCurrencyName == currencyName2) { memberDetails.memberCurrencyTwoName = currentCurrency.loyaltyMemberCurrencyName; memberDetails.memberCurrencyTwoPointBalance = currentCurrency.pointsBalance.format(); } } if (memberDetails.memberCurrencyOneName == null && memberDetails.memberCurrencyTwoName != null) { memberDetails.memberCurrencyOneName = memberDetails.memberCurrencyTwoName; memberDetails.memberCurrencyOnePointBalance = memberDetails.memberCurrencyTwoPointBalance; memberDetails.memberCurrencyTwoName = null; memberDetails.memberCurrencyTwoPointBalance = null; } output.put('memberDetails', memberDetails); return output; } } ``` #### See Also - [_Salesforce Help_: View Member Profile Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_member_profile.htm&release=264.0.0&type=5 "The View Member Profile widget template lets members view their current points balance, their current tier, and their membership number. The widget also consists of a logo that you can replace with your company logo or your loyalty program’s logo.") # Apex Class for the View Transaction History Widget Template Customize the View Transaction History widget template by adding to the widget, components, and data that aren’t available by default. For example, add a component that can be used by members to download their transaction receipts. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
``` global class WidgetTransactionHistory implements System.Callable { public Object call(String action, Map arguments) { Map input = (Map)arguments.get('input'); Map output = (Map)arguments.get('output'); Map options = (Map)arguments.get('options'); if (action == 'getTransactionHistory') { return getTransactionHistory(input, output, options); } return null; } class TransactionHistoryOutput { String activity; Double pointsValue1; Double pointsValue2; String currency1; String currency2; String activityDate; boolean isSuccess; String errorMessage; } private Map getTransactionHistory(Map input, Map output, Map options) { Long startTimeInMillis = System.currentTimeMillis(); String membershipNumber = (String)input.get('membershipNumber'); String programName = (String)input.get('programName'); String currency1 = (String)input.get('currency1'); String currency2 = (String)input.get('currency2'); String viewMode = (String)input.get('viewMode'); Boolean isDefaultView; Integer viewLimit; String compactLimit = (String)input.get('compactModeLimit'); String fullLimit = (String)input.get('fullModeLimit'); String visibilityType = (String)input.get('visibilityType'); String visibilityMap = (String)input.get('visibilityMap'); List tjOutputList = new List(); TransactionHistoryOutput tjOutError = new TransactionHistoryOutput(); if(String.isEmpty(compactLimit) || String.isEmpty(fullLimit)) { tjOutError.isSuccess=false; tjOutError.errorMessage='empty limit found'; tjOutputList.add(tjOutError); output.put('TransactionHistoryResponse', tjOutputList); output.put('programName', programName); return output; } Integer compactModeLimit = Integer.valueOf(compactLimit); Integer fullModeLimit = Integer.valueOf(fullLimit); if(viewMode == 'Compact') { isDefaultView = true; viewLimit = compactModeLimit; } else if(viewMode == 'Full'){ isDefaultView = false; viewLimit = fullModeLimit; } String creditEventType = 'credit'; String debitEventType = 'debit'; if((isDefaultView && (viewLimit > 10 || viewLimit < 5)) || (!isDefaultView && (viewLimit > 300 || viewLimit < 10))) { tjOutError.isSuccess=false; tjOutError.errorMessage='Wrong view limit is set'; tjOutputList.add(tjOutError); output.put('TransactionHistoryResponse', tjOutputList); output.put('programName', programName); return output; } if(String.isEmpty(membershipNumber) || String.isEmpty(programName) || String.isEmpty(currency1) || String.isEmpty(viewMode)) { if(!String.isEmpty(programName)) tjOutError.isSuccess=false; tjOutError.errorMessage='Missing mandatory inputs - MembershipNumber, programName, Currency, viewMode'; tjOutputList.add(tjOutError); output.put('TransactionHistoryResponse', tjOutputList); output.put('programName', programName); return output; } if(currency1 == currency2){ tjOutError.isSuccess=false; tjOutError.errorMessage='Invalid input with same values'; tjOutputList.add(tjOutError); output.put('TransactionHistoryResponse', tjOutputList); output.put('programName', programName); return output; } Set currencies = new Set(); currencies.add(currency1); if(!String.isEmpty(currency2) && currency2 != null && currency2 != '{Session.SecondCurrency}' && currency2 != '{currency2}') { currencies.add(currency2); } if(visibilityType != null && visibilityMap != null && visibilityType != '{Session.VisibilityType}' && visibilityMap != '{Session.VisibilityMap}' && !String.isEmpty(visibilityType) && !String.isEmpty(visibilityMap)) { String decodedMap = EncodingUtil.base64Decode(visibilityMap).toString(); Map attributes = (Map) JSON.deserializeUntyped(decodedMap); attributes.put('programName', programName); attributes.put('membershipNumber', membershipNumber); } else output.put('isVisible',true); List programMembers = [SELECT Id From LoyaltyProgramMember WHERE MembershipNumber =: (String)input.get('membershipNumber') AND Program.Name =: (String)input.get('programName')]; List transactionJournals = [SELECT JournalType.Name, JournalSubType.Name, ActivityDate, (select EventType, Points, LoyaltyProgramCurrency.Name from TransactionJournalLedger where LoyaltyProgramCurrency.Name IN :currencies) FROM TransactionJournal where LoyaltyProgram.Name=: programName AND MemberId IN: programMembers AND STATUS IN('Processed', 'Cancelled') ORDER BY ActivityDate DESC limit : viewLimit]; for(TransactionJournal tj : transactionJournals) { TransactionHistoryOutput tjOut = new TransactionHistoryOutput(); if(String.isEmpty(tj.JournalSubTypeId)) tjOut.Activity = tj.JournalType.Name; else tjOut.Activity = tj.JournalSubType.Name; Date activityDate = tj.ActivityDate.date(); if (activityDate != null) { tjOut.ActivityDate = activityDate.format(); } else { tjOut.ActivityDate = null; } Double points1 = 0; Double points2 = 0; for(Integer i = 0 ; i < tj.TransactionJournalLedger.size(); i++) { if(tj.TransactionJournalLedger.get(i).EventType == 'Credit') { if(tj.TransactionJournalLedger.get(i).LoyaltyProgramCurrency.Name == currency1) points1 = points1 + tj.TransactionJournalLedger.get(i).Points; else if(!String.isEmpty(currency2) && (tj.TransactionJournalLedger.get(i).LoyaltyProgramCurrency.Name == currency2) && currency2 != null && currency2 != '{Session.SecondCurrency}' && currency2 != '{currency2}') points2 = points2 + tj.TransactionJournalLedger.get(i).Points; } else if(tj.TransactionJournalLedger.get(i).EventType == 'Debit') { if(tj.TransactionJournalLedger.get(i).LoyaltyProgramCurrency.Name == currency1) points1 = points1 - tj.TransactionJournalLedger.get(i).Points; else if(!String.isEmpty(currency2) && (tj.TransactionJournalLedger.get(i).LoyaltyProgramCurrency.Name == currency2) && currency2 != null && currency2 != '{Session.SecondCurrency}' && currency2 != '{currency2}') points2 = points2 - tj.TransactionJournalLedger.get(i).Points; } } tjOut.pointsValue1 = points1; tjOut.currency1 = currency1; if(!String.isEmpty(currency2) && currency2 != null && currency2 != '{Session.SecondCurrency}' && currency2 != '{currency2}' ) tjOut.pointsValue2 = points2; tjOut.currency2 = currency2; tjOut.isSuccess=true; tjOutputList.add(tjOut); } if(!(currency2 == null || currency2 == '{Session.SecondCurrency}' || currency2 == '{currency2}' || String.isEmpty(currency2))) { output.put('currency2', currency2); } output.put('isSuccess', true); output.put('currency1', currency1); output.put('TransactionHistoryResponse', tjOutputList); output.put('recordCount', tjOutputList.size()); output.put('programName', programName); output.put('membershipNumber', membershipNumber); output.put('viewMode', viewMode); output.put('compactLimit', compactLimit); output.put('fullLimit', fullLimit); return output; } } ``` #### See Also - [_Salesforce Help_: View Transaction Journal History Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_transaction_history.htm&release=264.0.0&type=5 "The View Transaction History widget shows members the most recent transactions. The widget provides the flexibility to show members a set of transactions in the compact view. Members can expand the widget to view more of their recent transactions.") # Apex Investigations FAQ Get answers to common questions about Apex investigations in Scale Center. ## What does Org Throttling Detection show? Org Throttling Detection shows when your org experienced throttling due to high infrastructure usage. If throttling occurred, the report displays the reason for the throttle, start and end time, and the URI that was throttled. ## How do I understand Long-Running Apex Transactions? Time spent for All Long-Running (> 5 s) Apex Transactions illustrates how time is distributed across various components for transactions exceeding 5 seconds. These components can include: - Database calls - Apex execution - Workflow time - Compile time - Other implementation-specific transactions ## How are long-running transactions organized? Scale Center organizes long-running transactions by combining entry point frequency and run time, sorting the list in descending order. The analysis focuses on outermost triggers. It groups data by the outermost trigger class and excludes internal triggers. For flow entry points, the object ID corresponds to the custom object executed within the flow, not the flow ID. ## What do the red highlights in transaction tables indicate? The red highlighting in specific columns indicates the area where the most run time was spent within that particular transaction, including: - Database time - Apex execution time - Workflow time - Other relevant time components ## How do I provide feedback about this feature? Click the **Thumbs Up** or **Thumbs Down** icon. ## How do I see the latest version of Apex investigations? The latest version is provided by default. To see the older version, click **Switch back to the old version**. Then to go back to the latest version, click **Try the new version**. # ApexClassCheckforIP Check Configured Set to True Control Enforces IP restriction validation within Omnistudio Integration Procedures when they invoke Apex classes. ## Control Name Omnistudio - Object and Field Level Security (Select ApexClassCheckforIP Check Configured set to 'True'). ## Control Overview Enforces IP restriction validation within Omnistudio Integration Procedures when they invoke Apex classes, making sure that backend code respects org-level trusted IP ranges even through low-code orchestration layers. ## Description When enabled via Custom Settings, Omnistudio checks the running user's IP against Login IP Ranges and Network Access IP filters before allowing Apex class execution within Integration Procedures, DataRaptors, or other backend calls. ## Recommended Configuration Select ApexClassCheckforIP Check Configured set to "True" in Setup>Custom Settings>Omnistudio global security settings. ## Security Impact Prevents IP-based trusted access bypass through Omnistudio workflows; compromised accounts from untrusted IPs cannot execute sensitive Apex logic disguised as legitimate Integration Procedure calls. ## Business Impact Maintains consistent IP security policy across custom low-code and traditional Apex development. Supports compliance requirements for network access controls in Vlocity/Omnistudio implementations. ## Security Risk If Not Configured Lack of advanced security checks enforcement to strictly validate object, field-level, and Apex class permissions for all users using Omnistudio Integration Procedures allows IP restriction evasion. ## Threat Scenarios Compromised external/partner accounts bypass IP allowlisting by invoking sensitive Apex classes through Omnistudio Integration Procedures; attackers from untrusted networks execute privileged backend operations via low-code UI flows. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Essential when IP restrictions protect production data access. May block legitimate remote workers unless VPN IP ranges are properly configured in Network Access settings. ## Higher Risk When Omnistudio Integration Procedures call Apex classes handling PII/financial/PHI data, strict IP allowlisting enforced, external/Experience Cloud users enabled, or complex multi-cloud IP filtering. ## Low Risk When No IP restrictions are configured, internal users are only on corporate network, or Omnistudio is used for read-only/display purposes without backend Apex integration. ## Business and Integration Considerations Must have for any production Omnistudio deployment with IP restrictions. Verify all Network Access IP ranges include legitimate remote access patterns before enabling. ## Security Health Review Guidance Must have. ## Who Is Impacted Omnistudio developers building Integration Procedures, security admins managing IP allowlists, remote/hybrid workers accessing production, external partners using Omnistudio portals. #### See Also - [Advanced Security Checks for Omnistudio for Managed Packages](https://help.salesforce.com/s/articleView?id=xcloud.os_advanced_security_updates_overview.htm&type=5&language=en_US) # ApexGuru Antipattern: Aggregating Records in Apex SOQL queries that manually compute aggregate functions in Apex are inefficient and lead to performance issues. This approach wastes CPU resources and results in bloated, less readable code that's harder to maintain. Instead, use SOQL’s built-in aggregate functions like SUM(), AVG(), COUNT(), and COUNT\_DISTINCT() to perform the work at the database level. ## Scope Detection only ## Detection Example The developer is querying individual records and performing the aggregation (summing `Points__c`) manually in Apex, likely within a loop per user, rather than letting the database engine handle the aggregation efficiently. ```java for(User u : allActiveUsers){ Decimal i = 0; List achievements = [ SELECT Id, Points__c, User__c, Statut__c, CreatedDate FROM Achievement__c WHERE Status__c = 'Valid' AND CreatedDate > :currentChallenge.StartDate__c ]; for(Achievement__c achievement: achievements){ i += achievement.Points__c; } System.debug('Total: ' + i); } ``` ## Recommendation Use SOQL aggregate functions like `SUM()` to shift computation to the database for better scalability. ```java for(User u : allActiveUsers){ Decimal i = 0; AggregateResult ar = [ SELECT SUM(Points__c) totalPoints FROM Achievement__c WHERE Status__c = 'Valid' AND CreatedDate > :currentChallenge.StartDate__c AND User__c = :u.Id ]; if(ar != null && ar.get('totalPoints') != null){ i = (Decimal)ar.get('totalPoints'); } System.debug('Total: ' + i); } ``` # ApexGuru Antipattern: Busy Loop Delay Busy loops that introduce a delay aren’t efficient and lead to performance issues. They waste CPU resources due to continuous loop execution. Governor limit breaches cause transaction failures. For delayed execution, use Salesforce alternatives like scheduling systems in Apex. If the delay is due to an async job, use System.enqueueJob with a delay parameter. ## Scope Detection only ## Detection Example ```java Apex public class JobScheduler { public void scheduleJobWithDelay() { Integer delayTime = 10; // Delay in seconds DateTime startTime = System.now(); // Busy loop to create a delay while (System.now() < startTime.addSeconds(delayTime)) { // Do nothing (busy wait) } // Enqueue the Queueable job after the delay ID jobId = System.enqueueJob(new MyQueueableJob()); } } ``` # ApexGuru Antipattern: Copying List or Set Elements Using a For Loop Using a For loop to copy parts of a list or set takes more CPU time and can cause governor limit breaches, especially with large datasets. Instead, Apex provides the addAll() method to copy elements efficiently in a single operation, improving both performance and code clarity. ## Scope Detection and recommendation ## Detection Example The developer is manually iterating over `attachmentPresentIdsCassic` to copy each `Id` into `attachmentPresentIds`. ```java for (Id ids : attachmentPresentIdsCassic){ attachmentPresentIds.add(ids); } ``` ## Recommendation The recommended fix replaces this manual loop with the built-in `addAll()` method, which copies the entire collection in one step. ```java attachmentPresentIds.addAll(attachmentPresentIdsCassic); ``` # ApexGuru Antipattern: DML in a Loop Executing DML operations (insert, update, and delete) inside loops causes excessive resource consumption and can hit governor limits. Instead, batch DML operations by storing records in a list and performing the DML operation one time outside of the loop. ## Scope Detection only ## Detection Example ```java apex for (Account acc : accounts) { insert acc; ``` # ApexGuru Antipattern: Expensive Debug Statements Overusing System.debug() slows down execution, especially in production environments. Writing large amounts of data to logs increases the execution time and affects performance. Plus, the logs fill, making it harder to identify important issues. ## Scope Detection and recommendation ## Detection Example ```java apex System.debug('Heap Size: ' + Limits.getHeapSize()); ``` ## Recommendation To make sure that expensive operations aren’t evaluated unless necessary, perform a conditional check before invoking the call. Minimize debug statements in production code. Use conditional checks before invoking expensive calls, especially if the debug statement involves expensive computations such as `Limits.getHeapSize`. ```java apex // Commenting out the debug log in production environments // System.debug('Heap Size: ' + Limits.getHeapSize()); ``` # ApexGuru Antipattern: Expensive Methods Hot methods that consume over 5% of CPU time can cause performance bottlenecks, breach governor limits, and decrease system performance. Expensive methods consume more than 2% but less than 5% of CPU time. Critically expensive methods consume more than 5% of CPU time. To reduce CPU consumption, refactor expensive methods. ## Scope Detection only # ApexGuru Antipattern: Expensive String Comparison The == operator for string comparison invokes java.text.Collator.compare(), which is slower than using String.equals() or String.equalsIgnoreCase(). Longer strings and larger loops increase overhead. ## Scope Detection and recommendation ## Detection Example ```java apex if (content.respKey == key) { // Expensive string comparison } ``` ## Recommendation Use `String.equals()` for case-sensitive comparisons and `String.equalsIgnoreCase()` when ignoring capitalization. Avoid using `==` for a string comparison when locale-based comparison isn’t required. To prevent NullPointerException during comparison, add a null check. ```java apex if (content.respKey != null && content.respKey.equals(key)) { // Optimized string comparison } ``` # ApexGuru Antipattern: Limits.getHeapsize() Methods The Limits.getHeapSize() method monitors memory consumption during execution. This operation increases resource consumption, especially when used in production environments. When used in debug statements or logs, this method is evaluated even if the logs aren’t printed in production and this causes more performance degradation. ## Scope Detection and recommendation ## Detection Example ```java apex System.debug('Current Heap Size: ' + Limits.getHeapSize()); ``` ## Recommendation Avoid using `Limits.getHeapSize()` in production environments unless necessary. Use this method with conditions or remove it if monitoring heap size isn’t required during normal execution. ```java apex // Commenting out the Limits.getHeapSize() call in production environments // System.debug('Current Heap Size: ' + Limits.getHeapSize()); ``` # ApexGuru Antipattern: Redundant SOQL Executing multiple SOQL queries on the same sObject with identical or nearly identical filter conditions creates inefficiencies. This practice wastes governor limits and increases transaction time because it requires more database round-trips. Processing separate query responses wastes CPU time and heap space. ## Scope Detection and recommendation ## Detection Example ```java //Apex // Bad: Two round-trips to the database User userA = [SELECT Id FROM User WHERE ContactId = :idA]; User userB = [SELECT Id FROM User WHERE ContactId = :idB]; ``` ## Recommendation Merge these queries into fewer SOQL statements, followed by in-memory filtering in Apex. Query all records at the same time and map them for easy access. This scales regardless of whether you need 2 records or 200. ```java //Apex // Good: One round-trip using a Set and Map Set contactIds = new Set{ idA, idB }; // 1. Bulk Query List users = [SELECT Id, ContactId FROM User WHERE ContactId IN :contactIds]; // 2. In-Memory Organization (The Map Pattern) Map userMap = new Map(); for(User u : users) { userMap.put(u.ContactId, u); } // 3. Retrieve efficiently User userA = userMap.get(idA); User userB = userMap.get(idB); ``` # ApexGuru Antipattern: Schema.getGlobalDescribe() Called Multiple Times Within a Class Multiple calls to Schema.getGlobalDescribe() in a class cause performance issues and are computationally expensive. Calling this method multiple times within the same method results in redundant schema retrieval. Increased CPU usage can cause you to go over your governor limits. ## Scope Detection and recommendation ## Detection Example ```java public void pro(String objectName) { // Get the describe result for the provided object name Schema.DescribeSObjectResult describeResult = Schema.getGlobalDescribe().get(objectName).getDescribe(); // Log object label and plural label System.debug('Object Label: ' + describeResult.getLabel()); System.debug('Object Plural Label: ' + describeResult.getLabelPlural()); // Dynamically create a new instance of the SObject SObject newRecord = Schema.getGlobalDescribe().get(objectName).newSObject(); newRecord.put('Name', 'Address'); // Insert the record insert newRecord; // Log the newly created record ID System.debug('New record created with ID: ' + newRecord.Id); } } ``` ## Recommendation When you optimize logic design, avoid multiple `Schema.getGlobalDescribe()` calls. Focus on optimizing the functionality itself. Use alternatives like caching or metadata to eliminate the need for these calls. Retrieve schema information one time at the start of the method and reuse it to improve performance. ```java public void getObjectDescribe(String objectName) { // Get the describe result for the provided object name Schema.DescribeSObjectResult describeResult = null try { List describes = Schema.describeSObjects(new String[] { objName}, SObjectDescribeOptions.DEFERRED); result = describes[0]; } catch (InvalidParameterValueException ipve) { result = null; } Schema.DescribeSObjectResult objectResult = result; // Log object label and plural label if (objectResult != null) { System.debug('Object Label: ' + describeResult.getLabel()); System.debug('Object Plural Label: ' + describeResult.getLabelPlural()); } // Dynamically create a new instance of the SObject SObject newRecord = (SObject)Type.forName( objectName ).newInstance() newRecord.put('Name', 'Address'); // Insert the record insert newRecord; // Log the newly created record ID System.debug('New record created with ID: ' + newRecord.Id); } ``` # ApexGuru Antipattern: Schema.getGlobalDescribe() In a Loop The Schema.getGlobalDescribe() method collects schema information on all SObjects, which is computationally expensive. Using Schema.getGlobalDescribe() inside a loop can lead to performance issues, including breaking governor limits. ## Scope Detection and recommendation ## Detection Example ```java apex public class ObjectMetadataHandler { public void processObjectNames(List objectNames) { for (String objectName : objectNames) { if (Schema.getGlobalDescribe().containsKey(objectName)) { Schema.SObjectType sObjectType = objectMap.get(objectName); System.debug('Object found: ' + objectName); } else { System.debug('Object not found: ' + objectName); } } } } ``` ## Recommendation Cache the results of `Schema.getGlobalDescribe()` outside of the loop and reuse them within the loop. ```java public class ObjectMetadataHandler { // Cache the result of Schema.getGlobalDescribe() to avoid redundant calls private static Map objectMap = Schema.getGlobalDescribe(); public void processObjectNames(List objectNames) { for (String objectName : objectNames) { // Use the cached objectMap to access SObjectType if (objectMap.containsKey(objectName)) { Schema.SObjectType sObjectType = objectMap.get(objectName); System.debug('Object found: ' + objectName); } else { System.debug('Object not found: ' + objectName); } } } } ``` #### See Also - [getGlobalDescribe() in the Apex Reference Guide](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_methods_system_schema.htm#apex_System_Schema_getGlobalDescribe) # ApexGuru Antipattern: Schema.getGlobalDescribe() Not Efficient Using Schema.getGlobalDescribe() to retrieve metadata for a single known SObject isn’t efficient. This method causes unnecessary overhead, decreases performance, and increases the latency of the associated entry point. ## Scope Detection and recommendation ## Detection Example ```java apex Schema.DescribeSObjectResult dsr = Schema.getGlobalDescribe().get('Case').getDescribe(); ``` ## Recommendation Use the `getSObjectType()` method to retrieve the metadata. ```java Schema.DescribeSObjectResult dsr = Case.sObjectType.getDescribe(); ``` # ApexGuru Antipattern: SObject Map in a For Loop Building Map in a For loop inserts one record at a time. This query fetches all Custom Object\_\_c records without filtering, which causes extra CPU usage. Filtering later in Apex boosts memory use, risks overflow, and slows performance. Instead, use Apex's map constructor or putAll(). ## Scope Detection and recommendation ## Detection Example This code manually loops through each sObject and inserts it into the map using `put()`, which adds unnecessary CPU overhead. ```java Map accMap = new Map(); for (Account acc : [SELECT Id, Name FROM Account]) { accMap.put(acc.Id, acc); } ``` ## Recommendation Increase map creation efficiency by using list constructor. ```java List accs = [SELECT Id, Name FROM Account]; Map accMap = new Map(accs); ``` If you’re working with large results or paginated queries, use `putAll()` outside of the loop. ```java Map accMap = new Map(); for (List accs : [SELECT Id, Name FROM Account]) { accMap.putAll(accs); } ``` # ApexGuru Antipattern: SOQL in a Loop Executing SOQL queries inside loops can quickly exhaust the governor limits and decrease system performance. Salesforce enforces a limit on the number of queries per transaction. Instead, batch SOQL queries outside of loops. ## Scope Detection only ## Detection Example ```java apex for (Integer i = 0; i < 10; i++) { List accounts = [SELECT Id FROM Account WHERE Name = :someValue]; } ``` #### See Also - [SOQL For Loops in the Apex Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_loops_for_SOQL.htm) # ApexGuru Antipattern: SOQL in a Loop (One Hop) The SOQL query is placed in a method in one class and the loop that invokes this method is in a different class. This structure leads to excessive SOQL queries, potentially hitting governor limits. Repeated query execution across class boundaries causes performance bottlenecks. Refactor the code to batch SOQL queries outside the loop, even if they’re spread across multiple classes. ## Scope Detection only ## Detection Example ```java apex public class FirstClass { public static List getContactsForAccount(Id accId) { return [SELECT Id, Name FROM Contact WHERE AccountId = :accId LIMIT 5]; } } public class SecondClass { public static void processAccounts() { List accounts = FirstClass.getAccounts(); for (Account acc : accounts) { List contacts = FirstClass.getContactsForAccount(acc.Id); // Process contacts } } } ``` # ApexGuru Antipattern: SOQL with Apex Filter Executing SOQL queries without a WHERE clause or LIMIT statement and filtering them in Apex retrieves unnecessary data. This process increases memory and CPU usage and can lead to overall system performance and governor limit issues. ## Scope Detection and recommendation ## Detection Example ```java List records = [ SELECT Id, Name, Category__c, Amount__c, Status__c, Priority__c, Type__c FROM Custom_Object__c ]; List filteredRecords = new List(); for (Custom_Object__c record : records) { if (record.Status__c == 'Open' || record.Status__c == 'Pending') { filteredRecords.add(record); } } ``` ## Recommendation To minimize data volume and improve query efficiency, avoid postprocessing and filtering in Apex. Apply filters directly in the SOQL query using `WHERE` clauses and restrict results using `LIMIT` statements. This recommendation prevents Central Processing Unit (CPU) and memory limit breaches. ```java List filteredRecords = [ SELECT Id, Name, Category__c, Amount__c, Status__c, Priority__c, Type__c FROM Custom_Object__c WHERE Status__c = 'Open' OR Status__c = 'Pending' ]; ``` # ApexGuru Antipattern: SOQL with Negative Expressions SOQL queries that use negative expressions such as NOT IN or != don't index effectively, leading to full-table scans. Less-efficient database operations increase query time and CPU usage. Avoid negative expressions. Use positive expressions wherever possible. ## Scope Detection only ## Detection Example ```java apex [SELECT Id FROM Opportunity WHERE StageName NOT IN ('Closed Won', 'Closed Lost')]; ``` # ApexGuru Antipattern: SOQL with Unused Fields Retrieving unused fields in SOQL queries increases overhead, resource consumption, and query execution time. It also increases heap size and causes governor limits to be exceeded, especially with large datasets or complex objects. Only include fields directly required by your logic. Regularly review and improve SOQL queries to remove unused fields. ## Scope Detection and recommendation ## Detection Example ```java apex SELECT id, KnowledgeArticleId, PublishStatus, Article_Tag__c FROM Knowledge__kav WHERE id = :recordId ``` ## Recommendation Remove the unused `KnowledgeArticleId` field to optimize the query. Include only fields directly required by your logic. Regularly review and optimize SOQL queries. ```java SELECT id, PublishStatus, Article_Tag__c FROM Knowledge__kav WHERE id = :recordId ``` # ApexGuru Antipattern: SOQL with Wildcard Filter Using a wildcard such as LIKE '%term in SOQL queries prevents the use of indexes and causes full-table scans. Full-table scans increase query execution time and CPU usage. Use indexed fields for filtering and optimized search strategies. ## Scope Detection only ## Detection Example ```java apex SELECT Id, LastName, FirstName FROM Contact WHERE LastName LIKE '%smi' ``` # ApexGuru Antipattern: SOQL Without a WHERE Clause or LIMIT Statement Executing SOQL queries without a WHERE clause or LIMIT statement can retrieve too many records, leading to governor-limit breaches for the number of rows returned. To restrict the amount of data returned, include a WHERE clause or LIMIT statement in SOQL queries. ## Scope Detection only ## Detection Example ```java apex [SELECT Id, Name FROM Account]; ``` # ApexGuru Antipattern: SOQL Without Platform Cache Running the same SOQL query repeatedly during a transaction or across requests can slow down performance and put an unnecessary load on the database. Instead, use Platform Cache to eliminate the need for custom settings or persistent storage. ## Scope Detection only Cache query results for faster data reuse across sessions or your entire org using [Platform Cache](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_cache_namespace_overview.htm). This approach is particularly helpful for frequently used queries on semistatic data invoked by various flows or trigger paths. ## Detection Example ```java // Code without Cache List conlist = [SELECT Id,BillingState FROM Contact]; // Code with Cache String cacheQuery = 'SELECT Id,BillingState FROM Contact'; conlist = BrContactPlatformCacheUtility.fetchFromCache('BrContactObjectCache', 'uid_query', cacheQuery); // Platform Cache implementation public class BrContactPlatformCacheUtility implements Cache.CacheBuilder { public static String query; public static String key; // Method to fetch from Cache public static List fetchFromCache(String cacheName, String key, String query) { List lstSObjValue = new List(); try { Cache.OrgPartition orgPartitionVar = Cache.Org.getPartition(cacheName); BrContactPlatformCacheUtility.query = query; BrContactPlatformCacheUtility.key = key; lstSObjValue = (List) orgPartitionVar.get(BrContactPlatformCacheUtility.class, key); catch (Exception ex) { // Handle Exception } return lstSObjValue; } // Method to Clear the Cache public static void clearCacheKey(String cacheName, String key) { Cache.OrgPartition orgPartitionVar = Cache.Org.getPartition(cacheName); orgPartitionVar.remove(BrContactPlatformCacheUtility.class, key); } } ``` # ApexGuru Antipattern: Sorting in Apex Sorting records in Apex code uses more central processing unit (CPU) time and can exceed governor limits. This is especially true for large datasets. Using Apex to sort can also lead to heap-size overflows and degraded query performance. ## Scope Detection and recommendation ## Detection Example ```java List conlist = [SELECT Id,BillingState FROM Contact]; conlist.sort(); ``` ## Recommendation Use the `ORDER BY` clause in SOQL to delegate sorting to the database layer. ```java List conlist = [SELECT Id, BillingState FROM Contact ORDER BY BillingState]; ``` # ApexGuru Antipattern: Unused Methods Unused Apex methods contribute to code bloat and increase the cognitive load for developers. These pieces of code make it harder to maintain the system and can also increase the size of the deployment package, making it more difficult to stay within the Salesforce Apex code size limits. Identify and remove unused methods to improve code clarity and performance. ## Scope Detection only #### See Also - [Limitation: ApexGuru "Unused Methods"](https://help.salesforce.com/s/articleView?id=005132418&type=1&language=en_US) - [Apex Governor Limits in the Salesforce Developer Limits and Allocations Quick Reference](https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_apexgov.htm) # ApexGuru Antipatterns The antipatterns highlighted in ApexGuru help you detect avoidable inefficiencies in your Apex code. Where practical, we also share recommendations for revising your approach to improve the efficiency of your code. - **[ApexGuru Antipattern: Aggregating Records in Apex](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_aggregating_in_apex.htm&release=264.0.0&type=5)** SOQL queries that manually compute aggregate functions in Apex are inefficient and lead to performance issues. This approach wastes CPU resources and results in bloated, less readable code that's harder to maintain. Instead, use SOQL’s built-in aggregate functions like SUM(), AVG(), COUNT(), and COUNT\_DISTINCT() to perform the work at the database level. - **[ApexGuru Antipattern: Busy Loop Delay](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_busy_loop_delay.htm&release=264.0.0&type=5)** Busy loops that introduce a delay aren’t efficient and lead to performance issues. They waste CPU resources due to continuous loop execution. Governor limit breaches cause transaction failures. For delayed execution, use Salesforce alternatives like scheduling systems in Apex. If the delay is due to an async job, use System.enqueueJob with a delay parameter. - **[ApexGuru Antipattern: Copying List or Set Elements Using a For Loop](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_copying_elements_with_for_loop.htm&release=264.0.0&type=5)** Using a For loop to copy parts of a list or set takes more CPU time and can cause governor limit breaches, especially with large datasets. Instead, Apex provides the addAll() method to copy elements efficiently in a single operation, improving both performance and code clarity. - **[ApexGuru Antipattern: DML in a Loop](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_dml_in_loop.htm&release=264.0.0&type=5)** Executing DML operations (insert, update, and delete) inside loops causes excessive resource consumption and can hit governor limits. Instead, batch DML operations by storing records in a list and performing the DML operation one time outside of the loop. - **[ApexGuru Antipattern: Expensive Debug Statements](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_expensive_debug_statements.htm&release=264.0.0&type=5)** Overusing System.debug() slows down execution, especially in production environments. Writing large amounts of data to logs increases the execution time and affects performance. Plus, the logs fill, making it harder to identify important issues. - **[ApexGuru Antipattern: Expensive Methods](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_expensive_methods.htm&release=264.0.0&type=5)** Hot methods that consume over 5% of CPU time can cause performance bottlenecks, breach governor limits, and decrease system performance. Expensive methods consume more than 2% but less than 5% of CPU time. Critically expensive methods consume more than 5% of CPU time. To reduce CPU consumption, refactor expensive methods. - **[ApexGuru Antipattern: Expensive String Comparison](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_expensive_string_comparison.htm&release=264.0.0&type=5)** The == operator for string comparison invokes java.text.Collator.compare(), which is slower than using String.equals() or String.equalsIgnoreCase(). Longer strings and larger loops increase overhead. - **[ApexGuru Antipattern: Limits.getHeapsize() Methods](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_limits_getheapsize_methods.htm&release=264.0.0&type=5)** The Limits.getHeapSize() method monitors memory consumption during execution. This operation increases resource consumption, especially when used in production environments. When used in debug statements or logs, this method is evaluated even if the logs aren’t printed in production and this causes more performance degradation. - **[ApexGuru Antipattern: Redundant SOQL](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_redundant_soql.htm&release=264.0.0&type=5)** Executing multiple SOQL queries on the same sObject with identical or nearly identical filter conditions creates inefficiencies. This practice wastes governor limits and increases transaction time because it requires more database round-trips. Processing separate query responses wastes CPU time and heap space. - **[ApexGuru Antipattern: Schema.getGlobalDescribe() Called Multiple Times Within a Class](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_schema_getglobaldescribe_called_multiple_times.htm&release=264.0.0&type=5)** Multiple calls to Schema.getGlobalDescribe() in a class cause performance issues and are computationally expensive. Calling this method multiple times within the same method results in redundant schema retrieval. Increased CPU usage can cause you to go over your governor limits. - **[ApexGuru Antipattern: Schema.getGlobalDescribe() In a Loop](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_schema_getglobaldescribe_in_loop.htm&release=264.0.0&type=5)** The Schema.getGlobalDescribe() method collects schema information on all SObjects, which is computationally expensive. Using Schema.getGlobalDescribe() inside a loop can lead to performance issues, including breaking governor limits. - **[ApexGuru Antipattern: Schema.getGlobalDescribe() Not Efficient](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_schema_getglobaldescribe_not_efficient.htm&release=264.0.0&type=5)** Using Schema.getGlobalDescribe() to retrieve metadata for a single known SObject isn’t efficient. This method causes unnecessary overhead, decreases performance, and increases the latency of the associated entry point. - **[ApexGuru Antipattern: SObject Map in a For Loop](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_sobject_map_in_for_loop.htm&release=264.0.0&type=5)** Building Map in a For loop inserts one record at a time. This query fetches all Custom Object\_\_c records without filtering, which causes extra CPU usage. Filtering later in Apex boosts memory use, risks overflow, and slows performance. Instead, use Apex's map constructor or putAll(). - **[ApexGuru Antipattern: SOQL in a Loop](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_soql_in_loop.htm&release=264.0.0&type=5)** Executing SOQL queries inside loops can quickly exhaust the governor limits and decrease system performance. Salesforce enforces a limit on the number of queries per transaction. Instead, batch SOQL queries outside of loops. - **[ApexGuru Antipattern: SOQL in a Loop (One Hop)](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_soql_in_loop_one_hop.htm&release=264.0.0&type=5)** The SOQL query is placed in a method in one class and the loop that invokes this method is in a different class. This structure leads to excessive SOQL queries, potentially hitting governor limits. Repeated query execution across class boundaries causes performance bottlenecks. Refactor the code to batch SOQL queries outside the loop, even if they’re spread across multiple classes. - **[ApexGuru Antipattern: SOQL with Apex Filter](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_soql_with_apex_filter.htm&release=264.0.0&type=5)** Executing SOQL queries without a WHERE clause or LIMIT statement and filtering them in Apex retrieves unnecessary data. This process increases memory and CPU usage and can lead to overall system performance and governor limit issues. - **[ApexGuru Antipattern: SOQL with Negative Expressions](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_soql_with_negative_expressions.htm&release=264.0.0&type=5)** SOQL queries that use negative expressions such as NOT IN or != don't index effectively, leading to full-table scans. Less-efficient database operations increase query time and CPU usage. Avoid negative expressions. Use positive expressions wherever possible. - **[ApexGuru Antipattern: SOQL with Unused Fields](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_soql_with_unused_fields.htm&release=264.0.0&type=5)** Retrieving unused fields in SOQL queries increases overhead, resource consumption, and query execution time. It also increases heap size and causes governor limits to be exceeded, especially with large datasets or complex objects. Only include fields directly required by your logic. Regularly review and improve SOQL queries to remove unused fields. - **[ApexGuru Antipattern: SOQL with Wildcard Filter](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_soql_with_wildcard_filter.htm&release=264.0.0&type=5)** Using a wildcard such as LIKE '%term in SOQL queries prevents the use of indexes and causes full-table scans. Full-table scans increase query execution time and CPU usage. Use indexed fields for filtering and optimized search strategies. - **[ApexGuru Antipattern: SOQL Without a WHERE Clause or LIMIT Statement](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_soql_without_where_clause_or_limit_statement.htm&release=264.0.0&type=5)** Executing SOQL queries without a WHERE clause or LIMIT statement can retrieve too many records, leading to governor-limit breaches for the number of rows returned. To restrict the amount of data returned, include a WHERE clause or LIMIT statement in SOQL queries. - **[ApexGuru Antipattern: SOQL Without Platform Cache](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_soql_without_platform_cache.htm&release=264.0.0&type=5)** Running the same SOQL query repeatedly during a transaction or across requests can slow down performance and put an unnecessary load on the database. Instead, use Platform Cache to eliminate the need for custom settings or persistent storage. - **[ApexGuru Antipattern: Sorting in Apex](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_sorting_in_apex.htm&release=264.0.0&type=5)** Sorting records in Apex code uses more central processing unit (CPU) time and can exceed governor limits. This is especially true for large datasets. Using Apex to sort can also lead to heap-size overflows and degraded query performance. - **[ApexGuru Antipattern: Unused Methods](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipattern_unused_classes_and_methods.htm&release=264.0.0&type=5)** Unused Apex methods contribute to code bloat and increase the cognitive load for developers. These pieces of code make it harder to maintain the system and can also increase the size of the deployment package, making it more difficult to stay within the Salesforce Apex code size limits. Identify and remove unused methods to improve code clarity and performance. # ApexGuru Code Duplicates Identify exact and near-duplicate Apex code across your org to reduce maintenance burden and free up governor limit headroom. **What's Analyzed** - Custom Apex code in your org - Exact matches (identical code) and near duplicates (95% or greater similarity) - File-level, method-level, and block-level duplicates **What's Excluded** - Test classes (files ending in `Test.cls` or `Tests.cls`, or with @IsTest annotation) - Managed package code - Platform-required boilerplate (constructors, Batch Apex interface methods, Schedulable/Queueable execute methods, trigger handler methods) - Code blocks under 5 lines or under 200 characters of non-comment code - Fuzzy matches (80-95% similarity) **Limitations** - Apex classes only (LWC, Aura, VF, Flows not analyzed) - Test classes excluded (files ending in Test.cls/Tests.cls or with @IsTest) - Managed package code excluded - Platform-required boilerplate filtered (constructors, Batch/Schedulable/Queueable interface methods, trigger handlers) - Minimum thresholds: 5 lines / 200 characters of non-comment code - Only Exact + Near-duplicate (≥95%) reported — Fuzzy (80–95%) excluded - Results capped at top 100 findings - Multi-org not available this release - Read-only, no code modification The report organizes duplicate groups by priority (High, Medium, Low Effort) and shows total Apex characters reducible through consolidation. 1. From Setup, in the Quick Find box, enter Scale Insights, then click **ApexGuru Insights**. 2. Select a **Report Creation Date**. 3. Click the **Code Duplicates** tab. Each finding displays: | Element | Description | | --- | --- | | Group Title | Apex class or method name with file count. | | Stats | The number of copies and characters reducible. | | Diagnosis | What the duplicate is and why it matters. | | Resolution Pattern | Suggested consolidation action. | | Match Type | Exact (identical) or Near Duplicate (similar with minor differences). | | Duplicate Instances | Specific files or methods with character counts. | **Working with the Report** Filter findings by **Scope** (File, Method, Block), **Effort** (Low, Medium, High), or **Match Type** (Exact or Near Duplicate). The **Characters Reducible** metric shows how many characters you can eliminate by consolidating duplicates. The calculation is the size of one copy times (number of copies − 1). For example, 3 copies of a 5,000-character method is calculated as 5,000 times 2, which equals 10,000 characters reducible (you keep one copy, remove the rest). Click **Download PDF** to export findings with character counts, recommended fixes, and effort classifications. **Best Practices** - Start with **Low Effort** groups for quick wins. Sort by **Characters Reducible** for maximum impact. - Review Exact duplicates first. They are safest to consolidate. - Share PDF reports with your development team. - Rerun scans after consolidation to track progress. # ApexGuru FAQ Get answers to common questions about ApexGuru. ## What is ApexGuru? ApexGuru is an AI-powered tool that analyzes your Apex code to find and fix performance-related issues. ApexGuru provides insights within 24 hours of opt-in and refreshes weekly. Retrieve insights for the last 30 days. ## How does ApexGuru analyze my code? ApexGuru requires read-only access to your Apex code. It makes an encrypted copy for analysis and then immediately deletes it. It doesn't store your code long-term. ## Are there any usage limits for ApexGuru? Insight generation is limited to **3** per rolling week. If you're using the ApexGuru integration with Code Analyzer, you're limited to **50** scans per org per hour. ## What does ApexGuru evaluate my code for? ApexGuru checks for various governor limits, including CPU time, SOQL queries and statement length, DML statements, and the total Apex character limit. It also identifies antipatterns like SOQL and DML statements within loops. ## Where can I use ApexGuru? ApexGuru requires activation in a Production or Full Copy Sandbox org on Unlimited, Enterprise, Professional, or Signature Edition. Activation gives you runtime-informed insights based on your org's live usage data. After activation, ApexGuru Insights are also available via Code Analyzer in Developer Sandbox, Partial Copy Sandbox, and Scratch Orgs where the Developer Hub is a Production or Full Copy org. Code Analyzer delivers these insights in your IDE, the CLI, CI/CD pipelines, and Skills. Without activation, Code Analyzer still provides static antipattern detection across all its surfaces. Runtime data isn't included, but you can start identifying and fixing code quality issues immediately. ## How do I use ApexGuru with Salesforce Code Analyzer? ApexGuru's automated code optimization features are directly integrated into Code Analyzer. To learn more, see [ApexGuru Engine](https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/engine-apexguru.html) and [Scan Your Apex Code for Performance Issues Using ApexGuru](https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/analyze-vscode.html#scan-your-apex-code-for-performance-issues-using-apexguru). ## Is ApexGuru available in Hyperforce? Yes, ApexGuru is available in Hyperforce. If it was enabled before migration, it remains active afterward. ## Does enabling ApexGuru affect my org's performance? No, ApexGuru uses logs that are collected without any impact on your org's performance. It also doesn't count towards platform limits. ## Why is a DML operation flagged as an expensive method? DML operations typically impact database limits, but they can appear as CPU "hot spots" due to execution grouping. This occurs when the analysis engine aggregates processing time from related sources into the DML entry point. The time includes pre-DML logic like intensive data transformations or list sorting performed before the operation. Downstream CPU demands result from before-save triggers, validation rules, and flows started by the operation. ## How do I investigate flagged DML statements? - Review the code leading up to the DML call. The bottleneck is often in the data preparation phase. - Check for heavy logic in triggers or automation associated with the sObject. ## How should I configure my network security for ApexGuru? To ensure uninterrupted connectivity, we recommend that you use domain-based allowlisting (for example, salesforce.com) instead of IP-based restrictions. This approach is more reliable for cloud apps. In most configurations, ApexGuru traffic appears as standard Salesforce traffic. Make sure that your network allows traffic from the standard Salesforce IP ranges. ## Can I allowlist specific IP addresses? No, ApexGuru doesn't support strict IP allowlisting for individual app instances. Because our cloud infrastructure is dynamic, it assigns and rotates addresses without notice. Even providing static ranges can create a false sense of security and lead to service interruptions. If you hard code dynamic IP addresses into a firewall, connectivity will break whenever the infrastructure automatically scales or updates. ## What is the Test Case Insights feature? Test Case Insights analyzes your codebase to identify gaps in test coverage, detect test antipatterns, and provide AI-generated recommendations to strengthen your Apex test suite. ## How does Test Case Insights work? Test Case Insights evaluates your Apex methods and generates recommendations to improve them. Instead of using severity levels, it categorizes methods based on test quality: - **Untested**: No test coverage. This category has the highest priority. - **Unasserted**: Tests execute code but don't validate outcomes. - **Undertested**: Limited test data or missing boundary and edge cases. To help you focus on the most critical gaps, Test Case Insights surfaces only prioritized categories. ## How does prioritization work? To help you address the most critical issues first, Test Case Insights surfaces up to **50** high-impact methods per analysis: - **Untested methods**: Highest risk with no validation coverage. - **Expensive methods**: High runtime impact areas such as hot methods. - **Methods with detected antipatterns**: Issues such as unasserted and undertested scenarios. ## What does Code Duplicates do? Code Duplicates identifies exact and near-duplicate Apex code across your org's custom code (managed packages excluded). It displays the top 100 duplicate groups ranked by characters reducible—the number of characters you can consolidate. An Exact duplicate is identical after normalization; a Near Duplicate has minor differences like renamed variables. ## How are characters reducible calculated? The calculation is the size of one copy times (number of copies − 1). For example, 3 copies of a 5,000-character method = 5,000 × (3 − 1) = 10,000 characters reducible. ## Does Code Duplicates impact my org? No. Code Duplicates uses static analysis with no impact on org performance, storage limits, or API usage. # ApexGuru Insights Use AI and machine learning models to analyze your Apex code, surface performance antipatterns, detect unused and duplicated code, and generate prescriptive optimization recommendations. Enable ApexGuru in your org before generating reports. **What You Need to Know** - **Editions and eligibility**: ApexGuru requires activation in a Production or Full Copy Sandbox org on Unlimited, Enterprise, Professional, or Signature Edition. Partner Large Data Volume (LDV) orgs also have access. It's not available in Developer Edition orgs or the EU Operating Zone. After activation, ApexGuru Insights are also available via Code Analyzer in Developer Sandbox, Partial Copy Sandbox, and Scratch Orgs where the Developer Hub is a Production or Full Copy org. - **Data retention and trust**: ApexGuru retains your data for 30 days, then purges it. Processing uses the Einstein Trust Layer (US-hosted) with logical org isolation. Your Apex code never trains AI models and isn't retained at the LLM level. - **Scan frequency and processing**: Scan your org up to three times per week. Processing typically completes within a few hours depending on org size and complexity. - **Antipattern coverage**: ApexGuru detects more than 24 performance antipatterns across SOQL, DML, CPU, memory, and string operations, with new patterns added each release. - **Unused Methods false positives**: ApexGuru uses static analysis only (not runtime-tracked). False positives can occur for `System.PageReference` methods, interface implementations, dynamically invoked methods (e.g., via `Type.newInstance()`), and internal calls in managed packages. For comprehensive limitations, see [ApexGuru FAQ](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_faq.htm&release=264.0.0&type=5 "Get answers to common questions about ApexGuru."). - **Government Cloud and Hyperforce**: Supported in Hyperforce (orgs enabled before migration retain access). Government Cloud isn't supported. **ApexGuru Surfaces** Access ApexGuru through multiple surfaces: - **Setup**: Navigate to Scale Insights, then ApexGuru Insights for comprehensive reports. - **Scale Center**: Access ApexGuru from the Health Map or ApexGuru tab. - **Code Analyzer IDE (VS Code)**: Scan Apex code directly in your IDE. See [ApexGuru Engine](https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/engine-apexguru.html) and [Scan Your Apex Code for Performance Issues Using ApexGuru](https://developer.salesforce.com/docs/platform/salesforce-code-analyzer/guide/analyze-vscode.html#scan-your-apex-code-for-performance-issues-using-apexguru). - **Code Analyzer CLI**: Scan Apex classes from the command line. - **DX MCP and Agentic IDEs**: Use ApexGuru in Agentforce-powered environments like Cursor and VS Code. See [Use ApexGuru in Agentic IDEs with DX MCP](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_salesforce_dx_mcp.htm&release=264.0.0&type=5 "Resolve Apex performance issues directly in environments like VS Code, Agentforce Vibes, and Cursor without switching to the Salesforce UI."). - **ApexGuru Skills**: Run Apex performance scans from Agentforce Vibes and other agentic surfaces. - **Lightning Experience Insights**: When you access a Lightning Experience Performance report, it automatically links relevant ApexGuru recommendations. Click a hyperlinked action name to open an ApexGuru Insights tab for that action within the [Lightning Experience Insights](https://help.salesforce.com/s/articleView?id=xcloud.lex_insights_overview.htm&release=264.0.0&type=5 "Use on-demand insights to identify, analyze, and improve the performance of your custom Lightning pages and Lightning components. Lightning Experience Insights provides a high-level overview of your users’ experience, and detailed metrics to identify bottlenecks and optimize page load times. You can find this data inside the Performance Insights and Usage Insights dashboards.") dashboard. Review Code Recommendations and SOQL/DML Analysis for slow Apex actions and revise them to improve Lightning Experience performance. To generate recommendations in Setup: 1. From Setup, in the Quick Find box, enter Scale Insights, then click **ApexGuru Insights**. 2. Select a **Report Creation Date**. ApexGuru analyzes your code and consolidates different categories of recommended fixes. ![ApexGuru Insight Categories](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-scalability-264-0-0-production-enus/18f3af65-f4ea-4406-9c30-319b9afa03cd/images/icon_example.png) ApexGuru Insight Categories | Insight | Definition | | --- | --- | | Code Recommendations | Ranked by expected impact, prescriptive recommendations for optimizing sObject types, methods, and memory. | | SOQL/DML Analysis | Ways to optimize your SOQL and avoid performance issues. | | Expensive Methods | Expensive methods consume 2–5% of CPU time, and critically expensive methods consume at least 5% of CPU time. | | Unused Methods | Methods that your currently deployed Apex code doesn’t call. | | Test Case Insights | Intelligent Test Coverage Classification (Untested, Unasserted, Undertested), AI-generated test methods with side-by-side Current vs Recommended code, and test antipattern detection to improve test quality and reduce coverage inflation. | | Code Duplicates | Exact and near-duplicate Apex code detected across your org at file, method, and block levels, ranked by characters reducible to help you consolidate and free up governor limit headroom. The calculation is the size of one copy times (number of copies − 1). | - **[ApexGuru Code Duplicates](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_code_duplicates.htm&release=264.0.0&type=5)** Identify exact and near-duplicate Apex code across your org to reduce maintenance burden and free up governor limit headroom. - **[ApexGuru Antipatterns](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_antipatterns.htm&release=264.0.0&type=5)** The antipatterns highlighted in ApexGuru help you detect avoidable inefficiencies in your Apex code. Where practical, we also share recommendations for revising your approach to improve the efficiency of your code. - **[ApexGuru Test Case Antipatterns](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_test_case_antipatterns.htm&release=264.0.0&type=5)** The test cases highlighted in ApexGuru help you find places in your Apex test code that aren’t valid, maintainable, or production-ready. - **[Activate and Use ApexGuru for Apex Code Analysis](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_workflow.htm&release=264.0.0&type=5)** Learn how to activate ApexGuru and analyze your Salesforce org’s Apex code securely using the Einstein Trust Layer. - **[Use ApexGuru in Agentic IDEs with DX MCP](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_salesforce_dx_mcp.htm&release=264.0.0&type=5)** Resolve Apex performance issues directly in environments like VS Code, Agentforce Vibes, and Cursor without switching to the Salesforce UI. - **[ApexGuru Skills](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_skills.htm&release=264.0.0&type=5)** Run Apex performance scans directly from Agentforce Vibes and other agentic surfaces without switching to the Salesforce UI. - **[ApexGuru FAQ](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_faq.htm&release=264.0.0&type=5)** Get answers to common questions about ApexGuru. #### See Also - [Get AI-Powered Insights for Your Apex Code with ApexGuru](https://developer.salesforce.com/blogs/2024/02/get-ai-powered-insights-for-your-apex-code-with-apexguru) - [Limitation: ApexGuru "Unused Methods"](https://help.salesforce.com/s/articleView?id=005132418&type=1&language=en_US) # ApexGuru Skills Run Apex performance scans directly from Agentforce Vibes and other agentic surfaces without switching to the Salesforce UI. Authenticate your org before running a scan: `sf org login web`. ApexGuru Skills integrates ApexGuru into the [sf-skills](https://github.com/forcedotcom/sf-skills) framework. Use the `dx-apexguru-scan` skill to request an Apex performance scan in plain English from Agentforce Vibes and other compatible agentic surfaces. If your org is onboarded to ApexGuru (Production or Full Copy Sandbox), findings include real production runtime metrics. Otherwise, the skill returns static analysis only. 1. Install the ApexGuru skill: `npx skills add forcedotcom/sf-skills`. 2. Ask your agent to scan your project. For example: Run an ApexGuru scan or Run Apex performance scan. # ApexGuru Test Case Antipattern: Using the testMethod Keyword The testMethod syntax is outdated. Avoid using it to preserve confidence in your test suite and deployment quality. ## Scope Detection and recommendation ## Detection Example ```java public class MyTestClass { static testMethod void myTest() { System.debug('This test will be versioned out soon as it has testMethod keyword'); } } ``` ## Recommendation Always annotate test classes with `@isTest`. Avoid legacy syntax. Adopt modern standards that properly recognize and execute all test methods. ```java @isTest private class MyTestClass { @isTest static void myTest() { System.debug('This test follows Salesforce recommended practices'); } } ``` # ApexGuru Test Case Antipattern: Writing Filler Statements Using meaningless code to inflate test coverage undermines code quality. Filler statements cause technical debt, missed bugs, and false code confidence. Focus on quality over quantity. Write meaningful tests for actual business logic and use coverage as a guide, not the goal. ## Scope Detection only ## Detection Example ```java public class CodeCoverageInflationExample1 { public static void CodeCoverageInflation1() { //Filler code String str1 = 'Placeholder '; String str2 = 'Code'; String result = str1 + str2; assertEquals('Placeholder Code', result); integer j = 0; j++; j++; j++; j++; j++; j++; j++; j++; j++; j++; j++; j++; j++; j++; j++; j++; } } ``` # ApexGuru Test Case Antipatterns The test cases highlighted in ApexGuru help you find places in your Apex test code that aren’t valid, maintainable, or production-ready. - **[ApexGuru Test Case Antipattern: Using the testMethod Keyword](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_test_case_antipattern_using_testmethod.htm&release=264.0.0&type=5)** The testMethod syntax is outdated. Avoid using it to preserve confidence in your test suite and deployment quality. - **[ApexGuru Test Case Antipattern: Writing Filler Statements](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_test_case_antipattern_filler_statements.htm&release=264.0.0&type=5)** Using meaningless code to inflate test coverage undermines code quality. Filler statements cause technical debt, missed bugs, and false code confidence. Focus on quality over quantity. Write meaningful tests for actual business logic and use coverage as a guide, not the goal. # API (Enable OAuth Settings): Authorization Code and Credentials Flow Settings Control This control configures the specific security requirements for the "Authorization Code and Credentials Flow". ## Control Name Connected Apps: API (Enable OAuth Settings): Authorization Code and Credentials Flow Settings ## Recommended Configuration Enable Authorization Code and Credentials Flow. Do Not Require or Deselect Require Secret For Web Server Flow and Require Secret for Refresh Token Flow. ## Control Overview This control configures the specific security requirements for the "Authorization Code and Credentials Flow," determining whether a Client Secret must be validated based on whether the application is a "Private Client" (server-side) or a "Public Client" (browser/mobile). ## Security Risk If Not Configured Incorrectly requiring a secret for public clients forces the hard coding of credentials into front-end code where they are easily stolen, while failing to require a secret for private clients allows attackers to exchange intercepted codes without needing the application's private key. ## Threat Scenarios An attacker decompiles a mobile app to extract a hard-coded Client Secret or intercepts an authorization code from a server-side app and successfully trades it for a high-privilege access token because no secret was required for the exchange. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Misconfiguration leads to either the compromise of client credentials or the enablement of unauthorized session hijacking, both of which result in persistent, unauthenticated access to sensitive data. ## Higher Risk When When the flow is used for high-privilege integrations that lack PKCE (Proof Key for Code Exchange) as a secondary defense or when secrets are stored in plain-text client-side repositories. ## Low Risk When When "Private Clients" strictly enforce secrets stored in secure server-side vaults and "Public Clients" use PKCE to secure the exchange without needing a vulnerable shared secret. ## Business and Integration Considerations Implementing this correctly requires a clear architectural distinction between backend-driven and frontend-driven applications to make sure that the appropriate "Secret" policy is applied without breaking the authentication handshake. ## Recommended Remediation For private/server-side clients, select both "Require Secret for Web Server Flow" and "Require Secret for Refresh Token Flow"; For public/mobile clients, deselect these options and implement PKCE instead. ## Security Health Review Guidance Security Health Review highlights that the security of a secret depends entirely on the client's ability to protect it, and mandates that no shared secrets ever be exposed to the browser or mobile environment. #### See Also - [Configure a Connected App for the Authorization Code and Credentials Flow](https://help.salesforce.com/s/articleView?id=xcloud.authorization_code_credentials_configure.htm&type=5&language=en_US) # API (Enable OAuth Settings): Configure ID Token Control This security setting defines the cryptographic lifespan and data structure of the OpenID Connect ID token. ## Control Name Connected Apps: API (Enable OAuth Settings): Configure ID token ## Recommended Configuration Configure ID token - Token duration in minutes (2mins) | ID Token Audiences | Include Standard Claims | Include Custom Permissions | Custom Attributes. ## Control Overview This security setting defines the cryptographic lifespan and data structure of the OpenID Connect ID token by specifying the expiration interval, target audience identifiers, and the inclusion of specific user-level metadata. ## Security Risk If Not Configured Weak ID token duration and improperly managed attributes for application sessions lead to a prolonged identity theft risk where stale tokens containing sensitive user identifiers remain valid for unauthorized reuse. ## Threat Scenarios An attacker intercepts a long-lived ID token and extracts persistent user metadata or uses the active session to impersonate the victim across multiple downstream integrated systems that share the same audience claim. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to implement short token lifecycles and restricted attribute sets facilitates the unauthorized harvesting of personal identifiers and increases the likelihood of successful replay attacks against the organizational identity layer. ## Higher Risk When When the ID token includes broad custom attributes containing sensitive business logic or when the audience claim is set to a global value that permits token acceptance by unintended external service providers. ## Low Risk When If the organization enforces a minimal two-minute expiration window and uses unique audience identifiers to make sure that tokens are cryptographically bound to a single, verified client. ## Business and Integration Considerations Implementing restrictive ID token policies ensures compliance with data privacy regulations by minimizing the transmission of unnecessary user data, though it requires the consuming application to support frequent token refresh cycles. ## Recommended Remediation Go to the OAuth Policies for the Connected App, set the ID Token Validity to two minutes, define the ID Token Audiences, and select only the necessary standard and custom claims. ## Security Health Review Guidance Security Health Review identifies the use of short-lived, claim-restricted ID tokens as a strongly recommended standard to minimize the window of opportunity for credential misuse and to prevent the exposure of persistent user metadata. #### See Also - [Enable OAuth Settings for API Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&type=5&language=en_US) # API (Enable OAuth Settings): Disable Client Credentials Flow Control This control involves disabling the insecure "Client Credentials" flows in favor of high-assurance, certificate-based authentication methods like the JWT Bearer Flow or External Client Apps (ECA). ## Control Name Connected Apps: API (Enable OAuth Settings): Disable Client Credentials Flow ## Recommended Configuration Disable Client Credentials Flow. ## Control Overview This control involves disabling the insecure "Client Credentials" flows in favor of high-assurance, certificate-based authentication methods like the JWT Bearer Flow or External Client Apps (ECA). ## Security Risk If Not Configured These flows often rely on a static Client ID and Client Secret (and sometimes user passwords) that act as "shared secrets," which are easily compromised if hard-coded in scripts or exposed in configuration files. ## Threat Scenarios An attacker discovers a hard-coded Client Secret in a public GitHub repository or internal documentation and uses it to programmatically authenticate as a high-privilege service account, gaining full API access to the Org. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations The use of insecure credentials leads to persistent, non-interactive account takeover, allowing an adversary to exfiltrate mass quantities of data or modify system configuration without triggering traditional MFA challenges. ## Higher Risk When If the Client Credentials flow is associated with a user assigned to the "System Administrator" profile or a profile with "Modify All Data" permissions. ## Low Risk When If the company has implemented strict Login IP Ranges for the integration user and uses real-time API Request Monitoring to detect anomalous high-volume traffic. ## Business and Integration Considerations Disabling these flows requires migrating existing middleware (for example, MuleSoft, Boomi, or custom Python scripts) to use certificate-based JWT flows, which involves managing X.509 certificates and updating client-side logic. ## Recommended Remediation Go to the Connected App OAuth Settings, uncheck the "Enable Client Credentials Flow" box, and transition the integration to use the JWT Bearer Flow with a digital certificate. ## Security Health Review Guidance Security Health Review identifies the removal of legacy, password-based credential flows as a critical step in modernizing identity security and moving toward a Zero Trust architecture for all system-to-system integrations. #### See Also - [Configure a Connected App for the OAuth 2.0 Client Credentials Flow](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_client_credentials_setup.htm&type=5&language=en_US) # API (Enable OAuth Settings): Enable Asset Tokens Control Asset Tokens are a specialized JWT-based authentication method that link a Salesforce session directly to a specific physical device or "asset". ## Control Name Connected Apps: API (Enable OAuth Settings): Enable Asset Tokens ## Recommended Configuration Enable Asset Tokens. ## Control Overview Asset Tokens are a specialized JWT-based authentication method that link a Salesforce session directly to a specific physical device or "asset" rather than just a user, providing granular identity for the Internet of Things (IoT). ## Security Risk If Not Configured Without Asset Tokens, companies often fall back on generic service account credentials for devices, which can't verify if the requesting hardware is the specific, authorized device it claims to be. ## Threat Scenarios An attacker "clones" the credentials from a legitimate IoT device and uses them to register a rogue, unauthorized device that sends fraudulent sensor data or extracts sensitive telemetry from your Salesforce Org. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations The absence of device-level identity leads to a loss of data integrity and "non-repudiation," making it impossible to prove which specific piece of hardware performed an action or accessed a record. ## Higher Risk When The risk is significantly higher when devices are deployed in unsecured physical environments (like public kiosks or remote sensors) where the hardware can be tampered with or the local storage can be scraped for static credentials. ## Low Risk When The scenario is lower risk when Asset Tokens are implemented with Certificate-Based Authentication, making sure that the device must prove possession of a unique hardware-bound private key to receive a token. ## Business and Integration Considerations Implementing Asset Tokens requires a strategy for "Device Provisioning," making sure that every physical asset is correctly registered as an `Asset` record in Salesforce before it attempts to authenticate. ## Recommended Remediation Go to the Connected App OAuth Settings, select the checkbox for "Enable Asset Tokens," and configure the Asset Token Handler (Apex) to validate the incoming device claims. ## Security Health Review Guidance Security Health Review identifies Asset Tokens as the gold standard for "Device-as-a-User" security, moving organizations away from shared service accounts toward a unique, verifiable identity for every physical endpoint. #### See Also - [OAuth 2.0 Asset Token Flow for Securing Connected Devices](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_asset_token_flow.htm&type=5&language=en_US) # API (Enable OAuth Settings): Enable for Device Flow - Deselected Control This security setting manages the availability of the device authorization flow, which allows users to authorize a connected application on a resource-constrained device. ## Control Name Connected Apps: API (Enable OAuth Settings): Enable for Device Flow - Deselected ## Recommended Configuration Enable for Device Flow - Deselected. ## Control Overview This security setting manages the availability of the device authorization flow, which allows users to authorize a connected application on a resource-constrained device by entering a short code on a separate web-connected secondary device. ## Security Risk If Not Configured Enabling insecure device login flows for integrations lead to a vulnerability where unauthorized device linking facilitates full account session takeover by bypassing standard browser-based security controls. ## Threat Scenarios An attacker uses social engineering to convince a user to enter a malicious authorization code into a legitimate Salesforce verification page, thereby granting the attacker’s rogue device persistent access to the user’s session and data. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to restrict this flow enables generation of long-lived access and refresh tokens without the protection of robust mutual authentication, potentially leading to undetected lateral movement within the org environment. ## Higher Risk When When the connected application is granted broad scopes or when the company lacks real-time monitoring to detect anomalous code-entry patterns from untrusted geographic locations. ## Low Risk When If the company mandates multi-factor authentication for all verification attempts and enforces strict IP-based restrictions for the secondary devices used to complete the authorization process. ## Business and Integration Considerations While this flow is designed for hardware with limited input capabilities like smart displays or command-line tools, modern security standards favor more secure methods such as the authorization code flow with proof key for code exchange. ## Recommended Remediation Go to the API (Enable OAuth Settings) section of the Connected App and make sure the checkbox for Enable for Device Flow is deselected to prevent this specific authorization method. ## Security Health Review Guidance Security Health Review identifies the restriction of device login flows as a strongly recommended standard to minimize the company attack surface and prevent the exploitation of secondary-device verification for session hijacking. #### See Also - [Enable OAuth Settings for API Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&type=5&language=en_US) # API (Enable OAuth Settings): Enable OAuth Settings Control Enabling OAuth settings in a Salesforce Connected App allows the application to use secure, token-based authorization protocols and granular scopes. ## Control Name Connected Apps: API (Enable OAuth Settings): Enable OAuth Settings ## Recommended Configuration Enable OAuth Settings - Selected. ## Control Overview Enabling OAuth settings in a Salesforce Connected App allows the application to use secure, token-based authorization protocols and granular scopes rather than relying on less secure, legacy credential-sharing methods. ## Security Risk If Not Configured The Connected App cannot use OAuth 2.0, forcing the use of less secure methods like legacy session IDs or hard-coded credentials. This lack of standardized authorization prevents the enforcement of granular access controls, leaving the integration without the protective layers of scopes, refresh token policies, or multi-factor authentication. ## Threat Scenarios An attacker can harvest static credentials via Man-in-the-Middle attacks. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Without OAuth settings enabled, you lose administrative visibility and revocation control (for example, OAuth Sessions). ## Higher Risk When When sensitive data must be accessed by public-facing apps, as the lack of OAuth protections means that any intercepted credential provides unrestricted access to the user's full permissions. ## Low Risk When If the app is strictly used for non-API functions, such as SAML-based Single Sign-On, where authentication is handled through a separate, secure identity provider handshake. ## Business and Integration Considerations While simpler to set up for legacy systems, disabling these settings creates a significant technical barrier that prevents the use of modern, scalable Salesforce features like Headless Identity and the REST API. ## Recommended Remediation Turn on "OAuth Settings" within the Connected App to establish a secure handshake using the Authorization Code or JWT Bearer flow, ensuring all API traffic is governed by granular scopes and PKCE. ## Security Health Review Guidance Security Health Review recommends this as a must have foundational setting for Connected Apps. #### See Also - [Enable OAuth Settings for API Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&type=5&language=en_US) # API (Enable OAuth Settings): Enable Refresh Token Rotation Control This control invalidates and replaces each refresh token with a new one every time it is used to obtain a new access token. ## Control Name Connected Apps: API (Enable OAuth Settings): Enable Refresh Token Rotation ## Recommended Configuration Enable Refresh Token Rotation. ## Control Overview This control invalidates and replaces each refresh token with a new one every time it is used to obtain a new access token. ## Security Risk If Not Configured Without rotation, a refresh token is "static" and long-lived, meaning if it is ever stolen, it can be used indefinitely to generate new sessions without the attacker ever needing the user's password or MFA. ## Threat Scenarios An attacker exfiltrates a refresh token from a user's local device storage or a compromised logs file and uses it to maintain persistent, silent access to the Salesforce org long after the original user has logged out. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations The lack of rotation allows for "infinite session persistence," enabling an adversary to dwell in the environment undetected for months and systematically exfiltrate data. ## Higher Risk When The risk is significantly higher for public clients (mobile and single-page apps) that store tokens in less secure browser or device environments where they are more susceptible to theft by malicious software. ## Low Risk When When Refresh Token Rotation is paired with PKCE (Proof Key for Code Exchange) and short-lived access tokens, making sure that any stolen token is effectively "single-use", and the attacker can’t mathematically prove that they are the original requester to get a new one. ## Business and Integration Considerations Enabling rotation requires the client application to be capable of updating its stored refresh token after every call, as failing to save the new token will result in the app being "locked out" during its next sync attempt. ## Recommended Remediation Go to the OAuth Settings of the Connected App and select the checkbox for "Enable Refresh Token Rotation." ## Security Health Review Guidance Security Health Review identifies Refresh Token Rotation as a critical "Zero Trust" mechanism that drastically reduces the "blast radius" of a stolen credential by making every token a single-use asset. #### See Also - [Enable OAuth Settings for API Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&type=5&language=en_US) - [Force one-time-use Refresh Tokens - (RTR) Refresh Token Rotation](https://help.salesforce.com/s/articleView?id=005316711&type=1&language=en_US) # API (Enable OAuth Settings): Issue JSON Web Token (JWT)-based Access Tokens for Named Users Control This security setting transitions the Salesforce authorization server from issuing opaque, reference-based access tokens to issuing self-contained, cryptographically signed JSON Web Tokens. ## Control Name Connected Apps: API (Enable OAuth Settings): Issue JSON Web Token (JWT)-based access tokens for named users ## Recommended Configuration Issue JSON Web Token (JWT)-based access tokens for named users. ## Control Overview This security setting transitions the Salesforce authorization server from issuing opaque, reference-based access tokens to issuing self-contained, cryptographically signed JSON Web Tokens that include user identity and permission claims. ## Security Risk If Not Configured The absence of properly enforced JWT access tokens for connected app sessions leads to a vulnerability where legacy token formats are more susceptible to forgery and unauthorized internal resource access through intercepted session identifiers. ## Threat Scenarios An attacker intercepts an unencrypted session identifier and attempts to replay it against the API tier because the system does not require a structured, signed token that can be validated against a specific public key and expiration timestamp. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to use signed JWTs prevents the external application from locally validating the authenticity and integrity of the token, increasing the reliance on the authorization server for every validation request and potentially delaying the detection of compromised sessions. ## Higher Risk When When the integration uses long-lived refresh tokens or when the org metadata is exposed via the token payload without sufficient cryptographic protection. ## Low Risk When If the org mandates short token lifecycles and uses unique digital certificates for every distinct external client application to ensure isolation of the signing keys. ## Business and Integration Considerations Implementing JWT-based tokens requires the consuming application to possess a JWT library capable of parsing the header, payload, and signature to verify the claim set before processing data. ## Recommended Remediation Go to the OAuth Policies for the Connected App and select the option to Issue JSON Web Token (JWT)-based access tokens for named users. ## Security Health Review Guidance Security Health Review identifies the use of JWT-based access tokens as a strongly recommended standard to make sure that all session assertions are signed and verifiable to prevent token forgery and unauthorized resource access. #### See Also - [Configure a Connected App to Issue JWT-Based Access Tokens](https://help.salesforce.com/s/articleView?id=xcloud.jwt_connectedapp_enable.htm&type=5&language=en_US) # API (Enable OAuth Settings): Require Proof Key for Code Exchange (PKCE) Control An OAuth 2.0 security extension that uses a dynamically created cryptographic "code verifier" to make sure that the application exchanging an authorization code for an access token is the same that originally requested the code. ## Control Name Connected Apps: API (Enable OAuth Settings): Require Proof Key for Code Exchange (PKCE) ## Recommended Configuration Require Proof Key for Code Exchange (PKCE) Extension for Supported Authorization Flows - Selected. ## Control Overview PKCE is a security extension for OAuth 2.0 that uses a dynamically created cryptographic "code verifier" to ensure that the application exchanging an authorization code for an access token is the same application that originally requested the code. ## Security Risk If Not Configured Without PKCE, public clients (like mobile apps or single-page apps) are vulnerable to "Authorization Code Interception" because they cannot securely store a client secret to verify their identity during the token exchange. ## Threat Scenarios An attacker intercepts a successful authorization code via a custom URI scheme or browser redirect and immediately exchanges it for a valid access token before the legitimate application can, effectively hijacking the user's session. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations A successful interception leads to total account takeover within the application's scope, potentially allowing the adversary to exfiltrate sensitive PII or perform unauthorized transactions as the compromised user. ## Higher Risk When Risk is high for mobile applications and Single-Page Applications where the code is transmitted over potentially insecure system browsers or shared device environments. ## Low Risk When The risk is considered lower for "Confidential Clients" (server-to-server integrations) that can securely store and use a Client Secret to authenticate the token exchange, though PKCE is still recommended as defense-in-depth. ## Business and Integration Considerations Enforcing PKCE requires developers to update their application's OAuth handshake logic to generate and send the code\_challenge and code\_verifier parameters, which may require updating legacy mobile libraries. ## Recommended Remediation Go to the Connected App settings in Salesforce and turn on the checkbox for "Require Proof Key for Code Exchange (PKCE) Extension." ## Security Health Review Guidance Security Health Review identifies PKCE as a mandatory baseline for all modern public-facing integrations to close the "code-injection" loophole and ensure high-assurance identity verification for mobile and web users. #### See Also - [Enable OAuth Settings for API Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&type=5&language=en_US) # API (Enable OAuth Settings): Require Secret for Refresh Token Flow Control This control mandates that a confidential client application must provide its Client Secret when exchanging a refresh token for a new access token to verify the client's identity. ## Control Name Connected App: API (Enable OAuth Settings): Require Secret for Refresh Token Flow ## Recommended Configuration Require Secret for Refresh Token Flow. ## Control Overview This control mandates that a confidential client application must provide its Client Secret when exchanging a refresh token for a new access token to verify the client's identity. ## Security Risk If Not Configured An attacker who steals a refresh token can obtain new access tokens indefinitely without needing the application's private credentials, effectively bypassing a critical authentication factor. ## Threat Scenarios An attacker extracts a refresh token from a compromised mobile device or log file and uses it from a separate, unauthorized server to maintain persistent, "headless" access to the user's Salesforce data. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations The failure to require a secret enables long-term, undetected persistence within the environment, significantly extending the duration of a data breach beyond the life of the initial session. ## Higher Risk When Refresh tokens have no expiration date or when the connected app is associated with high-privilege integration users that can access sensitive PII or system metadata. ## Low Risk When If Refresh Token Rotation is enabled, as this makes sure that any stolen refresh token is rendered useless immediately after its first unauthorized use. ## Business and Integration Considerations Enforcing this requirement may break legacy integrations or mobile apps that were not designed to store or transmit a client secret during the background refresh process. ## Recommended Remediation Go to the OAuth Settings of the Connected App and select the checkbox for "Require Secret for Refresh Token Flow." ## Security Health Review Guidance Security Health Review identifies this control as a vital defense against session persistence, so that a stolen token alone is insufficient to maintain a permanent backdoor into the org. #### See Also - [Require the Client Secret during the Refresh Token Flow](https://help.salesforce.com/s/articleView?id=release-notes.rn_identity_require_client_secret_refresh_token_flow.htm&release=230&type=5&language=en_US) - [Enable OAuth Settings for API Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&type=5&language=en_US) # API (Enable OAuth Settings): Require Secret for Web Server Flow Control This control mandates that the client application provides its cryptographically strong Client Secret during the exchange of an authorization code for an access token to verify the client's identity. ## Control Name Connected Apps: API (Enable OAuth Settings): Require Secret for Web Server Flow ## Recommended Configuration Require Secret for Web Server Flow. ## Control Overview This control mandates that the client application provides its cryptographically strong Client Secret during the exchange of an authorization code for an access token to verify the client's identity. ## Security Risk If Not Configured The Web Server Flow (Authorization Code Grant) may allow an attacker who intercepts a temporary authorization code to successfully trade it for a long-lived access token without proving they control the authorized backend server. ## Threat Scenarios An adversary intercepts an authorization code via a browser redirect or log leakage and immediately executes a token exchange from their own infrastructure, successfully impersonating the legitimate application to gain access to the user's data. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Failure to require a secret facilitates unauthorized session establishment and data exfiltration, effectively turning a temporary, one-time code into a persistent gateway for account takeover. ## Higher Risk When When the application is hosted on a shared server or uses a custom URI scheme that increases the likelihood of authorization code interception by malicious local apps or network proxies. ## Low Risk When If the company has implemented PKCE (Proof Key for Code Exchange) as a compensating control, which adds a secondary dynamic layer of verification to the code exchange process. ## Business and Integration Considerations Enabling this requirement may break existing integrations if the third-party client was incorrectly configured to bypass the secret exchange or if the client-side code does not have secure access to the secret. ## Recommended Remediation Go to the Connected App OAuth Settings in Setup and select the checkbox for "Require Secret for Web Server Flow." ## Security Health Review Guidance Security Health Review identifies this as a foundational "Confidential Client" requirement so that sensitive CRM data is only released to verified, server-side applications that can protect their credentials. #### See Also - [Enable OAuth Settings for API Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&type=5&language=en_US) # API (Enable OAuth Settings): Secure Token Exchange Flow Control This control determines whether a client application must provide a secret when exchanging a third-party token for a Salesforce access token. ## Control Name Connected Apps: API (Enable OAuth Settings): Secure Token Exchange Flow ## Recommended Configuration Enable Token Exchange Flow. Set to Do not Require secret for Token Exchange Flow. ## Control Overview This control determines whether a client application must provide a secret when exchanging a third-party token (like an ID token from an external identity provider) for a Salesforce access token, specifically allowing public clients to bypass this requirement when they cannot securely store credentials. ## Security Risk If Not Configured If a secret is incorrectly required for public clients, developers are forced to hard code sensitive credentials into front-end code where they can be harvested. Conversely, failing to require it for private clients allows unauthorized servers to perform exchanges without proving their identity. ## Threat Scenarios An attacker extracts a hard-coded client secret from a public mobile app's binary or intercepts an external identity token and successfully "trades" it for a Salesforce session because the endpoint did not require a backend secret to validate the request. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Misconfiguring this setting leads to either the systemic exposure of client credentials or the enablement of "token-jumping," where compromised external identities are easily converted into persistent Salesforce access. ## Higher Risk When The Token Exchange Handler is configured with broad "Auto-Provisioning" logic that creates new users with extensive permissions based solely on the incoming untrusted token. ## Low Risk When Public clients use PKCE (Proof Key for Code Exchange) as a secondary validation layer and when Token Exchange Handlers strictly validate the "Issuer" and "Audience" claims of the incoming token. ## Business and Integration Considerations Implementing this requires a clear inventory of which "Subject" and "Actor" tokens are being exchanged to make sure that the security policy aligns with the technical limitations of the calling environment (browser vs. server). ## Recommended Remediation Deselect "Require Secret for Token Exchange Flow" to prevent secret leakage. ## Security Health Review Guidance Security Health Review identifies this as a critical "Identity Bridging" control, emphasizing that the security of a token exchange is only as strong as the verification of the client requesting the trade. #### See Also - [Integrate an App for the Token Exchange Flow](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_token_exchange_integrate.htm&type=5&language=en_US) # API (Enable OAuth Settings): Select the OAuth Scopes to Apply to the Connected App Control OAuth scopes are the "permissions of the token" that define exactly what data and actions a connected app can perform on behalf of a user. ## Control Name Connected Apps: API (Enable OAuth Settings): Select the OAuth scopes to apply to the connected app ## Recommended Configuration Selected OAuth Scopes - Select the OAuth scopes to apply to the connected app. ## Control Overview OAuth scopes are the "permissions of the token" that define exactly what data and actions a connected app can perform on behalf of a user. By selecting specific scopes, Salesforce admins apply the Principle of Least Privilege at the integration layer, making sure that even if an app is authenticated, it is restricted to a predefined subset of Salesforce resources (for example, only API access or only identity information). ## Security Risk If Not Configured When granular scopes are not enabled (or if "Full Access" is used by default), the connected app inherits the full permission set of the authorizing user, regardless of whether the app actually needs it. This creates a security gap where a simple integration for a specific task (for example: sending emails) could potentially be used to delete records, export the entire database, or modify system metadata. ## Threat Scenarios An attacker tricks a user into authorizing a connected app that has been granted broad scopes like `full_access`. After they are authorized, the attacker uses the resulting token to programmatically exfiltrate PII and sensitive CRM data via the REST API, bypassing the user's manual interface entirely. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations An exponentially larger "blast radius" in the event of a credential theft. If an integration partner is breached, an over-privileged OAuth token allows the attacker to move laterally across your org, leading to mass data exfiltration. ## Higher Risk When The risk is significantly higher when the `full` or `web` scopes are assigned, as these grant nearly unrestricted access to the Salesforce environment. The risk is further amplified if the connected app is associated with a System Administrator or a high-privilege integration user, as the token inherits those broad administrative powers. ## Low Risk When When the app is restricted to a single, specific scope such as `api` (Manage user data via APIs) and is paired with a Dedicated Integration User. By limiting the user's profile permissions and the app's OAuth scopes simultaneously, you restrict the integration's capabilities. ## Business and Integration Considerations Enforcing narrow scopes requires a deep understanding of the third-party application's technical requirements to avoid "Insufficient Permissions" errors that break the integration. This requires balancing security with agility, as overly restrictive scopes may require frequent manual updates as the vendor's application features evolve. ## Recommended Remediation - Audit Existing Scopes: Review all active connected apps in the Connected Apps OAuth Usage Setup page. - Apply Least Privilege: Edit the Connected App settings to remove broad scopes and replace them with the minimum required (typically `api`, `openid`, and `refresh_token`), then rotate or revoke existing tokens to force the new policy. ## Security Health Review Guidance Security Health Review identifies this as a contextual security gap. Selective scopes allow for granular, role-based data access within a single integrated application. #### See Also - [Enable OAuth Settings for API Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&type=5&language=en_US) - [OAuth Tokens and Scopes](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_tokens_scopes.htm&type=5&language=en_US) # API (Enable OAuth Settings): Use Digital Signatures - Selected Control This security setting mandates the use of asymmetric cryptography by requiring the connected application to sign authentication requests with a validated private key. ## Control Name Connected Apps: API (Enable OAuth Settings): Use Digital Signatures - Selected ## Recommended Configuration Use Digital Signatures - Selected. ## Control Overview This security setting mandates the use of asymmetric cryptography by requiring the connected application to sign authentication requests with a private key that is validated against a public certificate uploaded to the Salesforce platform. ## Security Risk If Not Configured The absence of digital signatures for application access verification leads to a vulnerability where forged identity assertions allow for unauthorized application impersonation and the potential bypass of standard credential-based security. ## Threat Scenarios A malicious actor intercepts or guesses a client secret and attempts to impersonate a trusted integration to execute administrative API calls without the secondary layer of cryptographic proof provided by a unique digital certificate. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to enforce digital signatures facilitates persistent unauthorized access to the organizational data tier, as static credentials are significantly easier to compromise and reuse than short-lived, signed assertions. ## Higher Risk When When the integration is granted administrative scopes or when the organization uses legacy authentication flows that rely solely on shared secrets transmitted over the network. ## Low Risk When If the org implements a robust certificate lifecycle management process that enforces short expiration periods and uses hardware security modules to protect private keys. ## Business and Integration Considerations Transitioning to digital signatures requires the external application to possess a valid X.509 certificate and the capability to perform RSA or ECDSA signing during the OAuth JWT bearer flow. ## Recommended Remediation Go to the API (Enable OAuth Settings) section of the Connected App, select Use Digital Signatures, and upload the corresponding public certificate to be used for identity verification. ## Security Health Review Guidance Security Health Review identifies the enforcement of digital signatures as a strongly recommended standard to replace static shared secrets with certificate-based authentication to prevent impersonation and ensure the integrity of all integration requests. #### See Also - [Enable OAuth Settings for API Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&type=5&language=en_US) # API Access Configure remote site settings and named credentials to control and secure API callouts, and understand the purpose of the Platform Integration User. - **[Configure Remote Site Settings](https://help.salesforce.com/s/articleView?id=xcloud.configuring_remoteproxy.htm&release=264.0.0&type=5)** Configure settings for a remote site. - **[Named Credentials](https://help.salesforce.com/s/articleView?id=xcloud.named_credentials_about.htm&release=264.0.0&type=5)** Intended to secure and simplify authenticated API callouts to external systems, a named credential specifies the URL of a callout endpoint and its required authentication parameters in one definition. To streamline your Apex code and simplify the setup of authenticated callouts, specify a named credential as the callout endpoint. - **[Platform Integration User](https://help.salesforce.com/s/articleView?id=xcloud.security_platform_integration_user.htm&release=264.0.0&type=5)** The Platform Integration User, sometimes called the System User, is an internal, API-only user that integrates features across Salesforce. This user allows Salesforce applications to securely access data on different properties. # API Access Control This control removes the "API Enabled" system permission from unauthenticated guest user profiles. ## Control Name API Access ## Recommended Configuration Disable API Access in Guest user profile. ## Control Overview This control removes the "API Enabled" system permission from unauthenticated guest user profiles, preventing anonymous users from accessing Salesforce data through programmatic interfaces like the REST or SOAP APIs. ## Security Risk If Not Configured When enabled, an anonymous attacker can use standard Salesforce API endpoints to systematically probe your org's metadata and attempt to extract records that might be inadvertently exposed through loose sharing rules. ## Threat Scenarios A malicious actor uses a script to scan the endpoints of your public site, discovering sensitive object names or fields and downloading all records they have "Read" access to without ever needing to log in. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Permitting API access to unauthenticated users significantly increases the risk of large-scale data exfiltration and automated "scraping" of your org, which can lead to major privacy violations and regulatory fines. ## Higher Risk When If the Guest User profile has "Read" access to objects containing Personally Identifiable Information (PII) or if the "Secure guest user record access" setting has been manually bypassed. ## Low Risk When If the company has already restricted the Guest User to zero object permissions and has enforced a "Private" sharing model that denies access to all records by default. ## Business and Integration Considerations Disabling this permission may break custom front-end components or external integrations that rely on making unauthenticated API calls to your site to show public information like product catalogs or store locations. ## Recommended Remediation - 1\. Uncheck "Allow guest users to access public APIs" in site settings. - 2\. Uncheck “API Enabled” in the Guest Profile. ## Security Health Review Guidance Security Health Review identifies the removal of guest API access as a mandatory step for reducing the available attack surface, making sure that public sites only provide data through authorized user interface components rather than open programmatic channels. #### See Also - [Best Practices and Considerations When Configuring the Guest User Profile](https://help.salesforce.com/s/articleView?id=platform.networks_guest_profile_best_practices.htm&type=5&language=en_US) # API Anomaly An _anomaly_ is any user activity that is sufficiently different from the historical activity of the same user. We use the metadata in Salesforce Core application logs about API generation and surrounding activities to build a baseline model of the historical activity. We then compare any new API generation activity against this baseline to determine if the new activity is sufficiently different to be called an anomaly. We don't look at the actual data that a user interacts with— we look at _how_ the user interacts with the data. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

- **[Training and Inference Steps](https://help.salesforce.com/s/articleView?id=xcloud.real_time_em_threat_detection_steps.htm&release=264.0.0&type=5)** Similar to other machine learning or statistical models, our detection model has a familiar two-step process: a training step and an inference or detection step. As a customer, you don't perform either of these steps—Salesforce performs them for you. You only review the detection events generated by our detection mode and take further action if necessary. - **[Investigate API Request Anomalies](https://help.salesforce.com/s/articleView?id=xcloud.real_time_em_threat_detection_investigate_api_anomaly.htm&release=264.0.0&type=5)** It's often necessary to further investigate an API request anomaly to either determine if a data breach occurred or to rule it out as benign. - **[Best Practices for Investigating API Request Anomalies](https://help.salesforce.com/s/articleView?id=xcloud.real_time_em_threat_detection_api_bestpractices.htm&release=264.0.0&type=5)** Keep these tips and best practices in mind when you investigate unusual user behavior. Find the information you require to make a well-informed evaluation of your data’s safety. - **[API Request Anomaly Detection Examples](https://help.salesforce.com/s/articleView?id=xcloud.real_time_em_threat_detection_api_anomaly_examples.htm&release=264.0.0&type=5)** Here are several examples that illustrate how you can investigate anomalous API request events thoroughly. # API Detection Event Is an Anomaly but Isn’t Clearly Malicious Alice is a sales rep based in St. Louis. She’s often on the road to meet with clients. When she travels, she generally, but not consistently, uses her company’s VPN to log into Salesforce. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

On July 27, 2020, Alice’s account was used to query an object from a relatively new IP address. Bob, the administrator for Alice’s Salesforce org, noticed a APIAnomalyEvent about this report generation activity. The event contained this information. | APIAnomalyEvent Field | Value | | --- | --- | | Score | .8671 | | SourceIp | 96.43.144.27 | | EventDate | 2015-07-27T07:45:07.192Z | | UserId | 00530000009M944 | | SecurityEventData | (see next table) | The SecurityEventData field contains this information. | featureName | featureValue | featureContribution | | --- | --- | --- | | rowCount | 50568 | 95.00% | | autonomousSystem | Bigleaf Networks, Inc. | 73.4% | | dayOfWeek | Sunday | 1.42% | | userAgent | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36} | 29.21% | | periodOfDay | Evening | 0.09% | | averageRowSize | 744 | 0.08% | | screenResolution | 900x1440 | 0.07% | Bob, the Salesforce admin, notices that the autonomous system—derived from the IP address—is the top-ranked feature with 73.4% feature contribution. This percentage indicates that Alice rarely uses this autonomous system. Bob also notices that the rowCount has around 50,000 rows, which isn’t small for this org. Bob then uses the UserId to identify the user as Alice. By looking at the events, Bob notices that Alice typically generates reports containing 1,000–10,000 rows. But on rare occasions, Alice generated reports with more than 50,000 rows. The userAgent has a smaller feature contribution, which could be attributed to Alice using her mobile device less when she travels. The numberFilters and periodOfDay features have small feature contributions, and are therefore not important. Because Alice rarely uses this autonomous system and the report is larger than reports Alice typically generates, Bob concludes that this report falls outside of typical activity. But Bob is unable to verify whether Alice or an attacker committed this malicious act. He attempts to get more information on this incident. #### See Also - [_Platform Events Developer Guide_: ApiAnomalyEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_apianomalyevent.htm?q=API%20Anomaly) - [_Platform Events Developer Guide_: ApiEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_apievent.htm) # API Detection Event Is Confirmed Malicious Alan, a Salesforce user, employs an API to query the Opportunity object and extracts 10 million records. It’s the first time that Alan queries the Opportunity object and uses this IP address to log in. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

The event contains this information. | APIAnomalyEvent Field | Value | | --- | --- | | Score | .95851 | | SourceIp | 96.43.144.26 | | EventDate | 2019-05-12T12:22:10.298+00:00 | | UserId | 00530000009M943 | | SecurityEventData | (see next table) | The SecurityEventData field contains this information. | featureName | featureValue | featureContribution | | --- | --- | --- | | rowCount | 1937568 | 95.00% | | autonomousSystem | Bigleaf Networks, Inc. | 1.62% | | dayOfWeek | Sunday | 1.42% | | userAgent | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36} | 29.21% | | periodOfDay | Evening | 0.09% | | averageRowSize | 744 | 0.08% | | screenResolution | 900x1440 | 0.07% | Kate, the security auditor, starts an investigation. She uses the UserId to determine that Alan’s account was used to query the Opportunity object. She then searches the events for Alan and notices that he’s never queried the Opportunity object. The table shows that rowCount contributes nearly 100% to this anomaly. This feature contribution value is a numerical value that indicates the importance of rowCount in flagging this report generation activity as an anomaly. Because Alan has no history of generating small reports (500–1,000 rows), a report with a million rows is a noticeable departure from that trend. This fact generates the high feature contribution value. Kate next discovers that Alan’s account was hacked and the attacker escalated Alan’s access privileges to access data for the entire sales team. As a result, the records contain sales leads for the entire sales team instead of only the sales leads assigned to Alan. Kate concludes that this detection event is malicious. #### See Also - [_Platform Events Developer Guide_: ApiAnomalyEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_apianomalyevent.htm?q=API%20Anomaly) - [_Platform Events Developer Guide_: ApiEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_apievent.htm) # API Detection Event Isn’t Anomalous Jason, a developer, uses APIs to query an Account object on a Sunday. He retrieves 10,000 records. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

The event contains this information. | APIAnomalyEvent Field | Value | | --- | --- | | Score | .5801 | | SourceIp | 96.43.144.30 | | EventDate | 2020-03-27T07:45:07.192Z | | UserId | 00530000009M946 | | SecurityEventData | (see next table) | The SecurityEventData field contains this information. | featureName | featureValue | featureContribution | | --- | --- | --- | | rowCount | 1937568 | 95.00% | | autonomousSystem | Bigleaf Networks, Inc. | 1.62% | | dayOfWeek | Sunday | 1.42% | | userAgent | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36} | 1.21% | | periodOfDay | Evening | 0.09% | | averageRowSize | 744 | 0.08% | | screenResolution | 900x1440 | 0.07% | Alia, the Salesforce admin, notices that 10,000 records were retrieved from an Account object on a Sunday. She investigates further. Using the UserId field value, Alia identifies Jason as the user. She then looks through Jason’s past activity. She notices that Jason, a developer, retrieves records of varying amounts, ranging from just a handful to 20,000 records. Alia also notices in the dayOfWeek and periodOfDay features that Jason often works Sundays and nights. Alia concludes that this detection event wasn’t anomalous because the activity is well within Jason's typical activity. #### See Also - [_Platform Events Developer Guide_: ApiAnomalyEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_apianomalyevent.htm?q=API%20Anomaly) - [_Platform Events Developer Guide_: ApiEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_apievent.htm) # API Detection Event Possibly Anomalous Rob, a relatively new Sales Operation Lead, uses an API to query the Opportunity object and extracts 10 million records. He previously queried the same object using a different browser and from a different IP address. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

The event contains this information. | APIAnomalyEvent Field | Value | | --- | --- | | Score | .7212 | | SourceIp | 96.43.144.28 | | EventDate | 2019-01-15T07:45:07.192Z | | UserId | 00530000009M945 | | SecurityEventData | (see next table) | The SecurityEventData field contains this information. | featureName | featureValue | featureContribution | | --- | --- | --- | | rowCount | 1937568 | 95.00% | | autonomousSystem | Bigleaf Networks, Inc. | 1.62% | | dayOfWeek | Sunday | 1.42% | | userAgent | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36} | 29.21% | | periodOfDay | Evening | 0.09% | | averageRowSize | 744 | 0.08% | | screenResolution | 900x1440 | 0.07% | Tony, the security auditor, notices that the rowCount feature is a bit high for their Salesforce org. The second-ranking feature is userAgent with a feature contribution of close to 30%. This percentage indicates that this user agent, or browser, isn’t common for their org. Tony finds Rob with the UserId field. Tony notices that Rob is a relatively new employee. By looking at the events, Tony notices that Rob used a different browser and IP address in the past. Because Rob is a relatively new employee, Tony can’t be certain whether this report matches Rob’s typical activity pattern. Tony concludes that this detection is possibly anomalous. #### See Also - [_Platform Events Developer Guide_: ApiAnomalyEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_apianomalyevent.htm?q=API%20Anomaly) - [_Platform Events Developer Guide_: ApiEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_apievent.htm) # API Request Anomaly Detection Examples Here are several examples that illustrate how you can investigate anomalous API request events thoroughly. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

- **[API Detection Event Isn’t Anomalous](https://help.salesforce.com/s/articleView?id=xcloud.real_time_em_threat_examples_api_notanomalous.htm&release=264.0.0&type=5)** Jason, a developer, uses APIs to query an Account object on a Sunday. He retrieves 10,000 records. - **[API Detection Event Possibly Anomalous](https://help.salesforce.com/s/articleView?id=xcloud.real_time_em_threat_examples_api_maybeanomalous.htm&release=264.0.0&type=5)** Rob, a relatively new Sales Operation Lead, uses an API to query the Opportunity object and extracts 10 million records. He previously queried the same object using a different browser and from a different IP address. - **[API Detection Event Is an Anomaly but Isn’t Clearly Malicious](https://help.salesforce.com/s/articleView?id=xcloud.real_time_em_threat_examples_api_anomalous.htm&release=264.0.0&type=5)** Alice is a sales rep based in St. Louis. She’s often on the road to meet with clients. When she travels, she generally, but not consistently, uses her company’s VPN to log into Salesforce. - **[API Detection Event Is Confirmed Malicious](https://help.salesforce.com/s/articleView?id=xcloud.real_time_em_threat_examples_api_malicious.htm&release=264.0.0&type=5)** Alan, a Salesforce user, employs an API to query the Opportunity object and extracts 10 million records. It’s the first time that Alan queries the Opportunity object and uses this IP address to log in. # API Versions for Apex Classes, Apex Triggers, and Visualforce Pages The International Components for Unicode (ICU) locale formats are available with API version 45.0 and later. To use the ICU locale formats in your customizations, all Apex classes, Apex triggers, and Visualforce pages must use API version 45.0 or higher.. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: all editions
User Permissions Needed
To define, edit, delete, set security, and set version settings for Apex classes: Author Apex
To run Apex tests: View Setup and Configuration
To view Apex triggers: View Setup and Configuration
To edit Apex triggers: Author Apex
Salesforce added the ICU locale formats in Spring ’19, which corresponded to API version 45.0. When the ICU locale formats are enabled, all Salesforce delivered functionality uses the ICU formats. However, Apex classes, Apex triggers, and Visualforce pages only use the ICU locale formats when ICU is enabled, and the API version of the Apex or Visualforce page is 45.0 or later. Custom code and components that use API version 44.0 or earlier can’t reference the ICU locale formats because they don’t exist in that API version. In that case, the custom code and components return the JDK locale formats, even if ICU locales are enabled in the org. Each Visualforce page, Apex class, and Apex trigger has an API version. The initial API version is always the API version of your Salesforce org when the component is created. A new API version is available with each Salesforce release. However, Salesforce doesn’t update the API version of your Apex classes, Apex triggers, and Visualforce pages because we can’t test them for any potential issues. Ideally, you update the API version for your components and validate the code with each release, but sometimes that doesn’t happen. Therefore, for example, it’s possible for an Apex class to use API version 41.0 in an org on API version 63.0. Salesforce Partners and independent software vendors (ISV) also use Apex classes, Apex triggers, and Visualforce pages to deliver functionality within their packages. ISVs are responsible for updating the API versions of their package components. ## Example Scenario and Potential Errors What’s the expected impact for an org has ICU locale formats enabled, and Apex Classes, Apex Triggers and Visualforce Pages that don’t meet the minimum required API version 45.0? Let's look at Spanish (United States) \[es\_US\] locale as an example. The JDK and ICU short date formats differ in the order that the month and day are listed. - JDK short date format for es\_US: MM/dd/yyyy (example: 2/11/2021) - ICU short date format for es\_US: dd/MM/yyyy (example: 11/2/2021) For an org with ICU locale formats enabled, all standard and custom UI components regardless of API version will display dates in the ICU format as dd/MM/yyyy. Custom components that use version 44.0 or lower will display the incorrect date. For example, the JDK date February 11, 2021 (2/11/2021) will display in the ICU locale format as November 2, 2021 (2/11/2021). In other scenarios, this month and day mismatch leads to an invalid date. For example, a JDK date of 11/28/2021 (MM/dd/yyyy) results in a ParseException "Invalid Date and Time" error when the ICU locale format tries to display it as (dd/MM/yyyy). The error occurs because there isn’t a 28th month. Custom datetime fields edited in Salesforce Classic and inline edits on Visualforce pages always use the current Salesforce API version. Because of that behavior, when ICU is enabled, these custom fields and inline edits always use the ICU locale formats, regardless of the Visualforce page's API version. Your users can experience a ParseException error in two situations: - The user makes an inline edit on a Visualforce page on API version 44.0 or earlier and saves their changes with invalid date in the ICU locale format (for example, 11/28/2021 in the es\_US locale). - The user enters a date/time in a custom field in Salesforce Classic. To avoid these issues when ICU is enabled, ensure that your Apex classes, Apex triggers, and custom Visualforce pages use API version 45.0 or later. ## Components in Managed Packages There are two sources for Apex classes, Apex triggers, and Visualforce pages in your org. Either someone built them directly in your org, or they were included in a managed package that was installed. Only package owners can edit the components included in a managed package. You can see items installed by a managed package in your lists, but you can’t edit them. To get updates to those items, you must install a new version of the package that contains the updates. If you’re a package owner, update your package to use the latest API version in Apex classes, Apex triggers, and Visualforce pages that reference dates, times, integers, and currencies. - **[Check for API Versions](https://help.salesforce.com/s/articleView?id=xcloud.admin_locales_check_version.htm&release=264.0.0&type=5)** Not sure whether your org has Apex classes, Apex triggers, and Visualforce pages? Each has a list in Setup that includes the version number. - **[Update the API Version](https://help.salesforce.com/s/articleView?id=xcloud.admin_locales_update_apis.htm&release=264.0.0&type=5)** API version 45.0 is the minimum required version for ICU. #### See Also - [Adopt the ICU Locale Formats](https://help.salesforce.com/s/articleView?id=xcloud.icu_migration_how.htm&release=264.0.0&type=5 "The ICU locale format release update is available for all orgs. Review the high-level process to successfully migrate to the new International Components for Unicode (ICU) locale formats. Some of the formats differ from the ones provided by Oracle’s Java Development Kit (JDK). Understand how to determine the impact of changes on your org, and learn about the updates required to support the new formats.") - [_Visualforce Developer Guide_](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_intro.htm) # API-Only Access Control Restricts system identities, such as integration users, to programmatic access only, enforcing the principle of least privilege for all external integrations. ## Control Name API Only Access ## Control Overview Restricts system identities, such as integration users, to programmatic access only, enforcing the principle of least privilege for all external integrations. ## Description Prevents integration service accounts from accessing the Salesforce UI and limits their scope to specific API calls through dedicated licenses and profiles. ## Recommended Configuration Enable the Integration User with the "API Only User" permission to restrict access only for API connections. ## Security Impact Eliminates the risk of UI-based phishing, credential reuse for manual data theft, and lateral movement by isolating system-level permissions from human user access. ## Business Impact Supports continuous uptime for business-critical connections by decoupling system access from individual employee lifecycles and passwords. ## Security Risk If Not Configured Excessive permissions to integration user increases the risk of unauthorized access to sensitive data, and unintended exposure to unauthorized users. ## Threat Scenarios Credential stuffing, unauthorized manual login by attackers, and unauthorized data exfiltration. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Risk increases for orgs with many integration users, or access to sensitive business processes. ## Higher Risk When API only access is not enabled, allowing wider permissions to integration users. ## Low Risk When Restricted or no usage of APIs, with stricter access controls to integration users. ## Business and Integration Considerations Requires coordination with business users to make sure that there are no implications of using accounts for API only access. ## Security Health Review Guidance Security Health Review identifies integration users that are not enabled for API only access. ## Who Is Impacted Internal employees, administrators, developers, and workforce users accessing Salesforce directly. # ApiAnomalyEventStore Policies API anomaly event policies monitor anomalies in how users make API calls. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

## Policy at a Glance | Object | Conditions Available in Condition Builder | Actions | | --- | --- | --- | | ApiAnomalyEventStore | User, Username, SourceIp, Score, QueriedEntities, Operation, RowsProcessed, UserAgent | Notifications | ## What You Can Do With It Create a policy that can: - Send you an email when Salesforce detects that a user has made more API calls than usual. - Generate an in-app notification when Salesforce detects an API anomaly event with a score greater than 0.5. # ApiEvent Policies API events monitor API transactions, such as SOQL queries and data exports. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

## Policy at a Glance | Object | Conditions Available in Condition Builder | Actions | Considerations | | --- | --- | --- | --- | | ApiEvent | API Type, API Version, Application, Client, Elapsed Time, Operation, Platform, Queried Entities, Query, Rows Processed, Session Level, Source IP, User Agent, User ID, Username | Block, Notifications | Multi-factor authentication isn’t supported. | ## What You Can Do With It You can monitor user behaviors taken through the API on a granular level. Create a policy that can: - Block access to particular versions of the API from specific platforms - Notify you when users run queries that return many rows ## Considerations for ApiEvent Policies - The supported SOAP, REST, Bulk API, and Bulk API 2.0 calls are `query()`, `query_more()`, and `query_all()`. Transaction Security supports only `query()`. API calls made from Visualforce (via an Apex controller) or XMLRPC aren’t supported in ApiEvent and ApiEventStream. - For Bulk API and Bulk API 2.0 queries, expect blank values for LoginHistoryId, Client, and UserAgent in ApiEvent. These queries are asynchronous and executed by a background job. # App Distribution Choose how you want to get your app into the hands of your users. Deciding on how you want to manage the release and distribution of your app is an important step. Mobile Publisher offers App Distribution Methods and App Distribution Types to help your org manage the release and distribution of your app, your way. Your apps can be distributed to end users either publicly or privately via different channels per platform according to Apple and Google guidelines. As an app developer, Salesforce complies with Apple and Google distribution guidelines. - App Distribution Methods: - Binary Handoff: Salesforce builds the app binary and provides it to you. You handle the resigning process of the binary, submitting the store listing information, and managing the release of the app. - Binary Upload: Salesforce builds and uploads the app to your store account. You submit the store listing information (screenshots, description, and so on) and manage the release of the app. - Fully Managed: Salesforce builds, releases, and manages the lifecycle of the app. - App Distribution Types: - Public Distribution: Your branded app is published via your developer account to the public Apple App Store or Google Play. - Private Distribution: You manage distribution of your branded app via your developer account privately. Your branded app is only accessible to your end users privately, and isn’t publicly available on the Apple App Store or Google Play. - **[Plan Your App Distribution](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_distribution_scope.htm&release=264.0.0&type=5)** Before you set up your branded app, decide how Salesforce manages the release process and who your app is available to. These two decisions (your distribution method and your distribution type) shape every step of your setup. - **[App Distribution Type Considerations](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_distribution_considerations.htm&release=264.0.0&type=5)** Choose the right distribution type based on your use case and Apple and Google guidelines. As an app developer, Salesforce complies with Apple and Google distribution guidelines, and violating the guidelines can cause Apple or Google to reject your branded app. - **[Set Up Distribution and External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_distribution_delegated.htm&release=264.0.0&type=5)** Your branded app is published via your developer account either publicly or privately. - **[Change Distribution Types](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_distribution_change_type.htm&release=264.0.0&type=5)** Consider the impact of changing the distribution type for your branded app. - **[Change Distribution Account](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_distribution_change_account.htm&release=264.0.0&type=5)** You may have to change your distribution account if you need to change the developer account associated with your distribution type. # App Distribution Choose how you want to get your app into the hands of your users. Deciding on how you want to manage the release and distribution of your app is an important step. Mobile Publisher offers App Distribution Methods and App Distribution Types to help your org manage the release and distribution of your app, your way. Your apps can be distributed to end users either publicly or privately via different channels per platform according to Apple and Google guidelines. As an app developer, Salesforce complies with Apple and Google distribution guidelines. - App Distribution Methods: - Binary Handoff: Salesforce builds the app binary and provides it to you. You handle the resigning process of the binary, submitting the store listing information, and managing the release of the app. - Binary Upload: Salesforce builds and uploads the app to your store account. You submit the store listing information (screenshots, description, and so on) and manage the release of the app. - Fully Managed: Salesforce builds, releases, and manages the lifecycle of the app. - App Distribution Types: - Public Distribution: Your branded app is published via your developer account to the public Apple App Store or Google Play. - Private Distribution: You manage distribution of your branded app via your developer account privately. Your branded app is only accessible to your end users privately, and isn’t publicly available on the Apple App Store or Google Play. - **[App Distribution Methods](https://help.salesforce.com/s/articleView?id=xcloud.s1_branded_apps_distribution_scope.htm&release=264.0.0&type=5)** Choose whether you want Salesforce to manage the release of your branded app, or if you want to manage the release of the app on your own. - **[App Distribution Type Considerations](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_distribution_considerations.htm&release=264.0.0&type=5)** Choose the right distribution type based on your use case and Apple and Google guidelines. As an app developer, Salesforce complies with Apple and Google distribution guidelines, and violating the guidelines can cause Apple or Google to reject your branded app. - **[Set Up Distribution and External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_distribution_delegated.htm&release=264.0.0&type=5)** Your branded app is published via your developer account either publicly or privately. - **[Set Up a New External Client App (ECA) in Mobile Publisher](https://help.salesforce.com/s/articleView?id=xcloud.branded_sapps_eca_create.htm&release=264.0.0&type=5)** Start setting up an external client app (ECA) for your mobile app after completing the Set Up the Mobile App step in Mobile Publisher. Don’t create your external client app in the External Client App manager (accessed through Setup). Create your ECA in Mobile Publisher instead. - **[Change Distribution Types](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_distribution_change_type.htm&release=264.0.0&type=5)** Consider the impact of changing the distribution type for your branded app. - **[Change Distribution Account](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_distribution_change_account.htm&release=264.0.0&type=5)** You may have to change your distribution account if you need to change the developer account associated with your distribution type. # App Distribution Deciding on how you want to manage the release and distribution of your app is an important step. App Distribution Methods and App Distribution Types to help your org manage the release and distribution of your app, your way. Your apps can be distributed to end users either publicly or privately via different channels per platform according to Apple and Google guidelines. - App Distribution Methods: - Binary Upload: Salesforce builds and uploads the app to your store account. You submit the store listing information (screenshots, description, and so on) and manage the release of the app. - Fully Managed: Salesforce builds, releases, and manages the lifecycle of the app. - App Distribution Types: - Public Distribution: Your branded app is published via your developer account to the public Apple App Store or Google Play. - Private Distribution: You manage distribution of your branded app via your developer account privately. Your branded app is only accessible to your end users privately, and isn’t publicly available on the Apple App Store or Google Play. As an app developer, Salesforce complies with Apple and Google distribution guidelines. - **[App Distribution Methods](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_plus_branded_dist_method.htm&release=264.0.0&type=5)** Choose whether you want Salesforce to manage the release of your branded app, or if you want to manage the release of the app on your own. - **[App Distribution Types](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_plus_branded_dist_considerations.htm&release=264.0.0&type=5)** Choose the right distribution type based on your use case and Apple and Google guidelines. As an app developer, Salesforce complies with Apple and Google distribution guidelines, and violating the guidelines can cause Apple or Google to reject your branded app. # App Distribution Methods Choose whether you want Salesforce to manage the release of your branded app, or if you want to manage the release of the app on your own. Choose your App Distribution Method before choosing your App Distribution Type.
Distribution FeatureFully ManagedBinary UploadBinary Handoff
App BuildSalesforce builds the app binary.Salesforce builds the app binary.Salesforce builds the app binary (.ipa or .aab) and delivers it to you.
Code SigningSalesforce handles all code signing.Salesforce handles all code signing.You have full control. Your organization re-signs the app binary with your own distribution certificates and private keys.
App Store Listing & MetadataSalesforce manages all store listing information (screenshots, etc.).Salesforce manages all store listing information (descriptions, etc.).You have full control. You submit and manage all store listing information.
Upload to App StoresSalesforce uploads the signed app binary to the store.Salesforce uploads the signed app binary to your store account.You have full control. Your organization is responsible for uploading the re-signed binary to the app stores.
Submission for ReviewSalesforce submits the app for final review and handles the release lifecycle.You have full control. You're responsible for submitting the app for review.You have full control. You're responsible for submitting the app for review.
Release ManagementSalesforce manages the release of the app to your users after Apple/Google has approved it.You have full control. This allows you to use advanced app store features like choosing your own release schedule and performing staged rollouts.You have maximum control over the entire submission and release process.
Best For...Organizations that are not familiar with the app stores and prefer Salesforce to handle the entire process.Organizations that are familiar with the app stores and want flexibility and control over their app's store listing, release schedule, and testing of new versions..Organizations with specific security protocols that mandate in-house code signing or established internal processes that require handling the final app submission themselves.
## Binary Handoff Distribution Method If you choose Binary Handoff, Salesforce builds the application binary file (.ipa for iOS or .aab for Android) and delivers it directly to you. Your organization is then responsible for re-signing the binary with your own signing certificates and submitting the app to the Apple App Store and/or Google Play Store. This method provides the maximum level of control over the final app signing and submission process. It’s ideal for orgs with specific security protocols or established internal processes for distributing mobile applications that require them to handle the final signing and upload to the app stores themselves. ## Binary Upload Distribution Method If you choose Binary Upload, you’re responsible for submitting App Store listing information, submitting the app for review, and releasing the app to your users. After you invite Salesforce to your App Store’s accounts and grant access to the credentials, Salesforce uploads the app to your account. Salesforce then manages your app branding assets and app updates. This distribution method is ideal for orgs who already have apps in the app stores and are familiar with how the app stores work. You can take advantage of App Store features like staged releases. ## Fully Managed Distribution Method If you choose Fully Managed, Salesforce builds and uploads your app to your App Store’s accounts after you grant access to the credentials. Salesforce then manages your App Store listing information, app branding assets, app updates, and releasing the app to your users. This distribution method is ideal for orgs that aren’t familiar with the app stores and its complexities. - **[Advantages of Binary Upload Distribution Method and Binary Handoff Distribution Methods](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_distribution_binary_adv.htm&release=264.0.0&type=5)** If your org is familiar with how the app stores work, the Binary Upload Distribution Method has many advantages for managing the release of your app on your end. # App Distribution Methods Choose whether you want Salesforce to manage the release of your branded app, or if you want to manage the release of the app on your own. ## Fully Managed Distribution Method If you choose Fully Managed, Salesforce builds and uploads your app to your App Store’s accounts after you grant access to the credentials. Salesforce then manages your App Store listing information, app branding assets, app updates, and releasing the app to your users. This distribution method is ideal for orgs that aren’t familiar with the app stores and its complexities. ## Binary Upload Distribution Method If you choose Binary Upload, you’re responsible for submitting App Store listing information, submitting the app for review, and releasing the app to your users. After you invite Salesforce to your App Store’s accounts and grant access to the credentials, Salesforce uploads the app to your account. Salesforce then manages your app branding assets and app updates. This distribution method is ideal for orgs who already have apps in the app stores and are familiar with how the app stores work. You can take advantage of App Store features like staged releases. Choose your App Distribution Method before choosing your App Distribution Type. ![App Distribution Method](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app_plus-264-0-0-production-enus/24dbd8e3-8820-4d77-ab26-f3c195bfdf66/salesforce_app_plus/images/mobile_publisher_dist_method.png) ![Choose App Distribution Method](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app_plus-264-0-0-production-enus/24dbd8e3-8820-4d77-ab26-f3c195bfdf66/salesforce_app_plus/images/mobile_publisher_binary.png) - **[Advantages of Binary Upload Distribution Method](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_plus_branded_binary.htm&release=264.0.0&type=5)** If your org is familiar with how the app stores work, the Binary Upload Distribution Method has many advantages for managing the release of your app on your end. # App Distribution Type Considerations Choose the right distribution type based on your use case and Apple and Google guidelines. As an app developer, Salesforce complies with Apple and Google distribution guidelines, and violating the guidelines can cause Apple or Google to reject your branded app. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/images/icon_note.png) Note You receive a beta app for testing, whether you choose private or public distribution. For Android private distribution, customers are responsible for distributing pre-release versions of the app to trusted test users because Salesforce doesn’t provide a beta app. App Store Distribution Guidelines - You can distribute Business to Business (B2B) and Business to Employee (B2E) only with Apple Business Manager (ABM). - You need an Apple Business Manager (ABM) ID for each country that you want to privately distribute your app in. For example, if you want to distribute your app in India, you must have a valid Apple Business Manager (ABM) ID in that country. - You can distribute Business to Consumer (B2C) only on the public App Store. - To ensure that there are no delays or surprises in the end-user experience when it’s live, read the distribution offerings. You can’t use the same app name for any app that's live that you want to change the distribution type for. For example, if you have an app with a private distribution type, you can’t use the same app name if you change the distribution type to public. For more information, see the [App Store guidelines](https://developer.apple.com/business/distribute/). Google Play Store Distribution Guidelines - You can distribute B2C, B2B, and B2E apps to various distribution types based on the customer case. - You can change distribution channels from private to public or from public to private for existing apps. - If you have a private distribution, always use a G-Suite with your organization domain. Access to the app is available only to users who are part of that G-Suite organization. For example, if your organization’s name is AYZ Inc., use a G-Suite with the same domain and app users who are part of the organization. For more information, your Google Play Store admin can review Google’s Mobile Device Management (MDM) and Enterprise Mobility Management (EMM) documentation, or contact your EMM provider. - There’s no beta app provided for Android private distribution. If you don’t use G-Suite and Google for work, refer to [Distribute private apps](https://support.google.com/work/android/answer/9495634?hl=en). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/images/icon_important.png) Important For Android private distribution, the beta status is misleading and not related to providing a beta app to testers. To make the app available for testing, the app status must be in live status.
Customer-Managed Distribution Type Attributes
Operating System Private Distribution Public Distribution
Android
  • Customer Developer Account: Required
  • App Distribution: Customer-Managed Google Play for Work (customer is responsible for beta testing)
  • Salesforce Required Access to Customer Developer Account: Yes
  • Customer Developer Account: Required
  • App Distribution: Customer Public Google Play account
  • Salesforce Require Access to Customer Developer Account: Yes
iOS
  • Customer Developer Account: Required
  • App availability: Customer-Managed Private on App Store account
  • Salesforce Required Access to Customer Developer Account: Yes
  • Customer Developer Account: Required
  • App availability: Customer Public on App Store account
  • Salesforce Required Access to Customer Developer Account: Yes
# App Distribution Type Considerations Choose the right distribution type based on your use case and Apple and Google guidelines. As an app developer, Salesforce complies with Apple and Google distribution guidelines, and violating the guidelines can cause Apple or Google to reject your branded app. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note You receive a beta app for testing, whether you choose private or public distribution. For Android private distribution, customers are responsible for distributing pre-release versions of the app to trusted test users because Salesforce doesn’t provide a beta app. App Store Distribution Guidelines - You can distribute Business to Business (B2B) and Business to Employee (B2E) only with Apple Business Manager (ABM). - You need an Apple Business Manager (ABM) ID for each country that you want to privately distribute your app in. For example, if you want to distribute your app in India, you must have a valid Apple Business Manager (ABM) ID in that country. - You can distribute Business to Consumer (B2C) only on the public App Store. - To ensure that there are no delays or surprises in the end-user experience when it’s live, read the distribution offerings. You can’t use the same app name for any app that's live that you want to change the distribution type for. For example, if you have an app with a private distribution type, you can’t use the same app name if you change the distribution type to public. For more information, see the [App Store guidelines](https://developer.apple.com/business/distribute/). Google Play Store Distribution Guidelines - You can distribute B2C, B2B, and B2E apps to various distribution types based on the customer case. - You can change distribution channels from private to public or from public to private for existing apps. - If you have a private distribution, always use a G-Suite with your organization domain. Access to the app is available only to users who are part of that G-Suite organization. For example, if your organization’s name is AYZ Inc., use a G-Suite with the same domain and app users who are part of the organization. For more information, your Google Play Store admin can review Google’s Mobile Device Management (MDM) and Enterprise Mobility Management (EMM) documentation, or contact your EMM provider. - There’s no beta app provided for Android private distribution. If you don’t use G-Suite and Google for work, refer to [Distribute private apps](https://support.google.com/work/android/answer/9495634?hl=en). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_important.png) Important For Android private distribution, the beta status is misleading and not related to providing a beta app to testers. To make the app available for testing, the app status must be in live status.
Customer-Managed Distribution Type Attributes
Operating System Private Distribution Public Distribution
Android
  • Customer Developer Account: Required
  • App Distribution: Customer-Managed Google Play for Work (customer is responsible for beta testing)
  • Salesforce Required Access to Customer Developer Account: Yes
  • Customer Developer Account: Required
  • App Distribution: Customer Public Google Play account
  • Salesforce Require Access to Customer Developer Account: Yes
iOS
  • Customer Developer Account: Required
  • App availability: Customer-Managed Private on App Store account
  • Salesforce Required Access to Customer Developer Account: Yes
  • Customer Developer Account: Required
  • App availability: Customer Public on App Store account
  • Salesforce Required Access to Customer Developer Account: Yes
# App Distribution Types Choose the right distribution type based on your use case and Apple and Google guidelines. As an app developer, Salesforce complies with Apple and Google distribution guidelines, and violating the guidelines can cause Apple or Google to reject your branded app. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app_plus-264-0-0-production-enus/24dbd8e3-8820-4d77-ab26-f3c195bfdf66/images/icon_note.png) Note You receive a beta app for testing, whether you choose private or public distribution. For Android private distribution, customers are responsible for distributing pre-release versions of the app to trusted test users because Salesforce doesn’t provide a beta app. App Store Distribution Guidelines - You can distribute Business to Business (B2B) and Business to Employee (B2E) only with Apple Business Manager (ABM). - You need an Apple Business Manager (ABM) ID for each country that you want to privately distribute your app in. For example, if you want to distribute your app in India, you must have a valid Apple Business Manager (ABM) ID in that country. - You can distribute Business to Consumer (B2C) only on the public App Store. - To ensure that there are no delays or surprises in the end-user experience when it’s live, read the distribution offerings. You can’t use the same app name for any app that's live that you want to change the distribution type for. For example, if you have an app with a private distribution type, you can’t use the same app name if you change the distribution type to public. For more information, see the [App Store guidelines](https://developer.apple.com/business/distribute/). Google Play Store Distribution Guidelines - You can distribute B2C, B2B, and B2E apps to various distribution types based on the customer case. - You can change distribution channels from private to public or from public to private for existing apps. - If you have a private distribution, always use a G-Suite with your organization domain. Access to the app is available only to users who are part of that G-Suite organization. For example, if your organization’s name is AYZ Inc., use a G-Suite with the same domain and app users who are part of the organization. For more information, your Google Play Store admin can review Google’s Mobile Device Management (MDM) and Enterprise Mobility Management (EMM) documentation, or contact your EMM provider. - There’s no beta app provided for Android private distribution. If you don’t use G-Suite and Google for work, refer to [Distribute private apps](https://support.google.com/work/android/answer/9495634?hl=en). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app_plus-264-0-0-production-enus/24dbd8e3-8820-4d77-ab26-f3c195bfdf66/images/icon_important.png) Important For Android private distribution, the beta status is misleading and not related to providing a beta app to testers. To make the app available for testing, the app status must be in live status.
Customer-Managed Distribution Type Attributes
Operating System Private Distribution Public Distribution
Android
  • Customer Developer Account: Required
  • App Distribution: Customer-Managed Google Play for Work (customer is responsible for beta testing)
  • Salesforce Required Access to Customer Developer Account: Yes
  • Customer Developer Account: Required
  • App Distribution: Customer Public Google Play account
  • Salesforce Require Access to Customer Developer Account: Yes
iOS
  • Customer Developer Account: Required
  • App availability: Customer-Managed Private on App Store account
  • Salesforce Required Access to Customer Developer Account: Yes
  • Customer Developer Account: Required
  • App availability: Customer Public on App Store account
  • Salesforce Required Access to Customer Developer Account: Yes
# App Launcher The App Launcher is how users switch between apps. It displays tiles that link to a user’s available Salesforce, connected (third-party), and on-premises apps. You can determine which apps are available to which users and the order in which the apps appear. You can also make the App Launcher the default landing page when users first open Salesforce. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
The App Launcher is available to all Lightning Experience and Salesforce Classic users. Salesforce Classic users need the Use Identity Features permission and the App Launcher option in their profile set to **Visible**. Users see only the apps that they are authorized to see according to their profile or permission sets. In Salesforce Classic, Salesforce admins using the System Administrator profile have access to the App Launcher. Admins using profiles cloned from the System Administrator profile don’t. - **[Enable the App Launcher with a Profile in Salesforce Classic](https://help.salesforce.com/s/articleView?id=xcloud.identity_app_launcher_profile.htm&release=264.0.0&type=5)** Create a profile and assign it to users, so they can access the App Launcher. - **[Enable the App Launcher with a Permission Set in Salesforce Classic](https://help.salesforce.com/s/articleView?id=xcloud.identity_app_launcher_permset.htm&release=264.0.0&type=5)** Create a permission set and assign it to users so that they can access the App Launcher. - **[Set the Default Sort Order for Apps](https://help.salesforce.com/s/articleView?id=xcloud.reordering_custom_apps_parent.htm&release=264.0.0&type=5)** As a Salesforce admin, you control the initial sort order of the Salesforce standard, custom, and connected apps that your users see in your org. You can also hide apps so that they don’t show in the App Launcher. - **[Make the App Launcher the Default Landing Page](https://help.salesforce.com/s/articleView?id=xcloud.identity_app_launcher_landing_page.htm&release=264.0.0&type=5)** Make it easy for your Salesforce Identity users to access what they need by presenting the redesigned App Launcher as the default landing page when they log in to Salesforce. #### See Also - [Connected Apps](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_overview.htm&release=264.0.0&type=5 "A connected app is a framework that enables an third-party application to integrate with Salesforce by using APIs and standard protocols, such as SAML, OAuth, and OpenID Connect. Connected apps use these protocols to authenticate, authorize, and provide single sign-on (SSO) for third-party applications. The third-party applications that are integrated with Salesforce can run on the customer success platform, other platforms, other devices, or even SaaS subscriptions. For example, when you log in to your Salesforce mobile app and see your data from your Salesforce org, you’re using a connected app.") # App Permissions for Device Capabilities If your app has features that need access to mobile device capabilities, your app users must explicitly grant access to these capabilities. For example, if your app supports taking photos, then your app must ask for camera permissions. Set up the permissions that your app needs in your Mobile Publisher project. - **[Enable App Permissions for Device Capabilities](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_user_permissions.htm&release=264.0.0&type=5)** Configure the permissions that your app needs in your Mobile Publisher project in Setup. - **[App Permissions on Android Devices](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_permissions_android.htm&release=264.0.0&type=5)** Learn the in-app user experience for Android devices when your app requests permission to a device capability. # App Permissions on Android Devices Learn the in-app user experience for Android devices when your app requests permission to a device capability. To meet [Google Play’s requirements for prominent disclosure and consent](https://support.google.com/googleplay/android-developer/answer/10144311?sjid=4461315687489780748-NA#personal-sensitive), Mobile Publisher for Experience Cloud Android apps show users two prompts for granting your app permissions to device capabilities that Google defines as [runtime permissions](https://developer.android.com/guide/topics/permissions/overview#runtime). Examples of runtime permissions include permissions for a device’s location, camera, and audio. In the first prompt, your app displays the permission description that you provide. Called a prominent disclosure, this description must clearly explain how your app uses the device capability, what user data is accessed, and how the data is used. If the user chooses to continue, the second prompt is the system-native dialog that requests permission to the device capability. ![Prominent disclosure screen for permission to post notifications](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/prominent_disclosure_notifications.png) ![Permission request screen for posting notifications](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/permission_notifications.png) ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_important.png) Important To turn on app permissions and enter your app’s permission descriptions, see [Enable App Permissions for Device Capabilities](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_user_permissions.htm&release=264.0.0&type=5 "Configure the permissions that your app needs in your Mobile Publisher project in Setup."). If your app has features that require device permissions, such as device location, you must turn on the relevant permissions in Setup for Mobile Publisher. Your app displays prompts with a prominent disclosure at these times. - When a new app user accesses a feature that requires a runtime permission. - When an app user, after tapping **Only this time** on an earlier permission request, accesses the feature that requires the runtime permission again. - On devices with Android 13 and later, when a new app user logs in to your app, they're shown your app's prominent disclosure and permission request for notifications. ## Considerations for App Permissions on Android Devices - Runtime permissions that require a prominent disclosure aren’t supported on your app’s login page. For example, access to a device’s camera isn’t supported on the login page. - If an app user dismisses a request with a prominent disclosure, they won’t be prompted with the request again in the same session, even if they close and re-open the app (warm start). - For the background location runtime permission, the app user is shown your prominent disclosure and then taken to their device’s Settings app, instead of the dialog that requests permission. When you write your app’s prominent disclosure, make sure to direct the user to update access to their background location in the Settings app. - On Experience Cloud Android apps in versions prior to 14.0, your app’s prominent disclosure and permission request to post notifications is shown to users by default and can’t be modified. On app versions 14.0 and later, you can configure the Post Notification app permission in Setup for Mobile Publisher. # App Selection Learn important considerations about selecting external client apps to associate with your briefcases. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
With the Briefcase Builder wizard, you can select and specify record data from any app enabled for offline syncing with the Briefcase Priming API, such as the Salesforce Field Service app. Being selective in your app choices helps control the resources chosen for offline access and reduces the volume of data records. Depending on the desired workflow, you can assign multiple apps to a briefcase or assign multiple briefcases to an app. Here are a few strategies to consider when organizing briefcases around apps. - Determine what kinds of offline record data users need from a particular mobile app. Can you separate different types of users with different needs and then map apps to briefcases and configure briefcases data records appropriately? - Organize briefcases and app selection groupings around the separation of duties, roles, or division of responsibility of your mobile workforce. ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-briefcase_builder-264-0-0-production-enus/be5c0b1c-2ff9-445c-85c4-e6337385a6af/images/icon_warning.png) Warning Some apps aren't enabled for offline syncing. Check if the app supports briefcase priming before adding it to the briefcase. To associate apps to a briefcase, on the final step of the New Briefcase flow, select the location of the app in the Search Applications dropdown, then click in the Select apps search bar field. To search for an app, start typing the app name into the search bar, and then select it from the dropdown when it appears. # App Switching in Lightning Experience Use the App Launcher to navigate between your apps. You can easily switch between apps and access other Salesforce items and features. ### Required Editions
Available in: Lightning Experience
Available in: all editions except Database.com>
User Permissions Needed
To use an app: Access to that app as specified in your user profile or permission sets.
## Vertical Navigation Bar For users that have the vertical navigation bar enabled, easily switch between apps like Sales, Service, Marketing, and Commerce with a single click. Use the App Launcher to personalize what apps appear on the vertical navigation bar. To open the App Launcher, click **More** and favorite the apps that you want in your navigation bar. You can order them directly in the navigation bar or in the App Launcher by dragging the app to the location you want. ![Access the App Launcher from the vertical navigation bar.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/pro_suite_app_launcher.png) ## App Launcher These steps work in Lightning Experience. If you see the App Launcher icon (![App Launcher icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/app_launcher_icon.png)) on the left side of the navigation bar at the top of your screen, you're in Lightning Experience. If not, you're in Salesforce Classic. - To open the App Launcher, on the left side of the navigation bar, click ![App Launcher icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/app_launcher_icon.png). The App Launcher displays all your available Salesforce apps and items. In contrast, the navigation bar displays all the items contained in the app that you’re currently using. ![App Launcher and navigation bar](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/app_launcher_lex_header.png) A quick view of the App Launcher displays a search bar and the first 7 apps listed in the App Launcher. ![A quick view of the App Launcher where you can access your top apps or search for apps and items](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/lex_app_launcher_quick_view.png) - To look for apps or items by name, use the **Search apps and items** box. For example, start typing the name of an app or item, such as Service. Up to 7 apps or items (or if there are both app and item results, up to 5 each) containing the string appear as you type. If there are more results, a **View More** link appears and when clicked, the full App Launcher opens with all the results highlighted. ![Find an app or item in the quick view of the App Launcher](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/lex_app_launcher_quick_view_search.png) - To see all your available Salesforce apps and items, click **View All**. The App Launcher displays standard Salesforce apps, custom apps, and the connected apps that your Salesforce admin has installed for your convenience. Connected apps are third-party apps, such as Gmail, Google Drive, and Windows365. ![App Launcher in Lightning Experience](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/app_launcher_lex.png) When you open a connected app, it opens in a new tab. If you are using Safari, be sure to set your popup blocker to allow popups. Otherwise, your connected app doesn’t launch. - To look for apps or items by name, use the **Search apps and items** box at the top of the App Launcher. For example, start typing the name of the app, such as Service, and all apps and items containing the string appear and are highlighted as you type. ![Find an app or item in the App Launcher](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/app_in_search_lex_no_number.png) - Drag an app tile from one position to another to sort them by the apps that you use most (1). Hover over a truncated description (2) to see the full description of the app. ![How to reorder apps in the App Launcher](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/security_identity_app_reorder.png) Don’t see what you want? Ask your Salesforce admin if more apps are available. #### See Also - [Turn On the Vertical Navigation Bar](https://help.salesforce.com/s/articleView?id=xcloud.base_vertical_nav.htm&type=5&language=en_US) - [Simplified Navigation and Easy Access to Important Tasks](https://help.salesforce.com/s/articleView?id=xcloud.base_easy_access&type=5&language=en_US) - [Vertical Navigation Bar Personalization](https://help.salesforce.com/s/articleView?id=xcloud.user_userdisplay_vertical_nav.htm&release=264.0.0&type=5 "Use the App Launcher to change what apps appear on the vertical navigation bar. Quickly access your most-used apps so you can work more efficiently.") # App Tracking Transparency (iOS) Learn about Apple's new policy on app tracking transparency. ## What Is App Tracking Transparency, and Why Is it Important? App tracking transparency is the act of being honest and up-front with app users about their data that's collected and what it’s used for. To avoid user distrust and to be more specific about data collection and use, Apple introduced a new policy that requires app publishers to comply with its principles of app tracking transparency. To track users, app publishers are required to request then receive consent from users through their AppTrackingTransparency framework. Apple’s definition of tracking is broad and subject to change, so for more information, see [Apple’s User Privacy and Data Use](https://developer.apple.com/app-store/user-privacy-and-data-use/). ## How Do I Know When to Request User Permission? App publishers must ask for user permission for a broad range of actions, including: - Sharing device location data with third parties - Displaying targeted advertisements in your app based on data collected from a third party - Sharing emails or any sort of ID with a third-party advertising network See [Apple’s User Privacy and Data Use](https://developer.apple.com/app-store/user-privacy-and-data-use/) for more information. ## How Can I Track User Responses? After a user responds to the permission request, the Mobile Publisher app stores their preference in a cookie. This cookie is assigned the Experience Site domain and can be accessed by server-side code. You can then take action based on the user’s preferences. The attributes of the cookie are: ``` version: 1.0 domain: path: “/” name: “UserTrackingPermission” value: “TRUE/FALSE” secure: TRUE expires: ``` # Append a Record from an Action on a Flexcard (Managed Package) For the managed package runtime, reduce the time to render a large list of records using the Append Record action. Instead of using the Update Datasource action to update a record, which renders the whole card again, use Append Record to add additional data tp the end of the record. When trying to render a large list of records, use the Append Record action when your record size exceeds 10 MB or is more than 140 records. This action increases your Flexcard’s performance considerably. If you use the Update Datasource action to update a large list of records, it takes a considerable amount of time to render the whole card again. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From the Flexcard Designer, drag an **Action** element into a state. 2. Select **Card** from the **Action Type** dropdown. 3. From the **Type** dropdown, select **Append Record**. 4. Choose whether to check **Append Directly to Records**. - To add the new data directly to the records array, keep **Append Directly to Records** selected and enter the new data as a merge field in the **Value** field. - To add the data to an existing JSON node, deselect **Append Directly to Records**. In the **Key** enter the name of an existing JSON node. In the **Value** input field, enter the new data as a merge field. 5. (Optional) To configure other options common among all action properties, see [Flexcards Action Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Action element properties are configurable from the Properties panel in the Flexcard Designer when you select an Action element. With the Action element, create an action to launch an Omniscript, navigate to a web page or application, display a flyout, fire an event, and more."). ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_example.png) Example Let’s say you want to enable your customer service reps to view a list of contacts for each account on a Flexcard with multiple accounts listed. On your Flexcard is a list of Accounts. Each account has an action element with two actions. The first action is a data action that fetches the contacts and saves it to the JSON node contacts. The second action is the Append Record action.In the Append Record Action, to add the new records directly to the records array, keep **Append Directly to Records** selected. In the **Value** field, enter {contacts} as the data fetched from the data action. To save the new data to an existing JSON node, deselect **Append Directly to Records**. In the **Key** field, enter the name of a node that exists in your data JSON, such as contactslist. In the **Value** field, enter {contacts} as the data fetched from the data action. What’s next: To style your action element, click **Style** to open the Style panel, and see [Flexcards Action Style Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_action_style_properties.htm&release=264.0.0&type=5 "For the managed package runtime, configure style properties specific to the Action element from the Style panel in the Flexcard Designer."). # Append Node: Stack Rows from Different Sets of Data Use an Append node in a Data Prep recipe in Salesforce Data Pipelines to stack rows from multiple sets of input data into one dataset. For example, use this node to combine sales records from two different Salesforce orgs, each containing sales transactions from a specific region.
User Permissions Needed
To manage and create a recipe: Edit CRM Analytics Dataflows OR Edit Dataset Recipes
Let’s look at an example of how you can use append in a recipe. Imagine you’re a company that uses separate Salesforce orgs for your APAC and Africa sales, but you want to report on worldwide sales. You sync the APAC opportunities to Salesforce Data Pipelines, add the data to a recipe, then use an Append node to combine it with the Africa sales data. After you match the columns from both sets of input data, both sets of sales records are combined into the same worldwide opportunity dataset. ![The recipe appends data from two sources, Opportunities - APAC and Opportunities - Africa, and writes the results to a dataset.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_graph_append.png) ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_tip.png) Tip If a recipe column contains unique IDs that identify each row, you must ensure that the appended data doesn't duplicate the IDs. The Append node doesn't remove duplicate records or validate the uniqueness of columns. 1. In a Data Prep recipe that already has at least one Input node, select the Add Node button (![Add Node button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_button_add_node.png)) between two nodes or at the end of the recipe. To show the Add Node button between two nodes, hover the cursor on the connecting line. 2. In the Add Node box, select **Append**. ![The Add Node modal shows all possible nodes that you can add, including the Append node.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_node_append.png) 3. Select the data to append (1), and then choose which columns to include (2). ![Select the input data and then the corresponding columns to append.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_node_append_select_data.png) 4. Click **Next**. Data Prep automatically maps columns from both sets of input data based on matching column names. These mappings are based on API names. You can change the mappings, manually map unmapped columns, or leave columns unmapped. To continuously map all columns as your recipe updates, turn on **Map all columns** in the node details section. To map all columns that don't have corresponding API names, select **Allow schema merge**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note Map all columns is available for datasets only. It is not available for direct data, staged, or connected datasets. If a column is mapped for one source and not the other, the Append node inserts null values for all source rows to which the column doesn’t apply. For example, the Product ID and Region columns aren’t mapped to Legacy Sales Data source. As a result, the preview shows nulls for these columns for all rows coming from Legacy Sales Data (1). If the reverse is true, and Legacy Sales Data contains rows that aren’t mapped to the recipe columns Product ID and Region, then preview inserts null values in those columns for all rows coming from Legacy Sales Data. ![The Legacy Sales Data rows show null values for the Product ID and Region columns.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_append_disjointresults.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note If a measure column isn’t mapped to a source and null measure handling isn’t enabled, the Append node inserts zeroes instead of nulls for those source rows. 5. To map two columns, enter the column name from the appended rows next to its corresponding recipe column. 6. To add a column from the appended rows that doesn’t exist in the recipe, click **+** (below the mapped columns) and select the column. Leave the recipe column blank. 7. Click **Apply** to add the node to the recipe. 8. Save the recipe. When you run the recipe, the Append node combines rows from both sets of input data into the same dataset. # Application Connectors Use an application connector to sync data from an external application to Salesforce Data Pipelines. ### Required Editions
Available in: Lightning Experience
Available with Salesforce Data Pipelines, which is available for an extra cost in Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create a remote connection: Add Analytics Remote Connections, Edit Analytics Dataflows, and Use Analytics
To use, edit, or delete a remote connection: Edit CRM Analytics Dataflows and use Analytics
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_important.png) Important These connectors sync data from cloud-based systems. You can’t use these connectors to sync data from an on-premises system. - **[Google Analytics 4 Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_ga4_settings.htm&release=264.0.0&type=5)** Create a remote connection using the Google Analytics 4 connector to sync Google Analytics data to Salesforce Data Pipelines. - **[Microsoft Dynamics 365 Sales Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_msdynamics_settings.htm&release=264.0.0&type=5)** Create a remote connection using the Microsoft Dynamics 365 Sales connector to sync sales data from your Microsoft Dynamics 365 account to Salesforce Data Pipelines. - **[NetSuite Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_netsuite.htm&release=264.0.0&type=5)** Create a remote connection using the NetSuite connector to sync data from NetSuite to Salesforce Data Pipelines. - **[Oracle Eloqua Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_oracle_eloqua.htm&release=264.0.0&type=5)** Create a remote connection using the Oracle Eloqua connector to sync data from Oracle Eloqua to Salesforce Data Pipelines. # Application Data Storage A mobile device may be lost or stolen at any time. Since mobile devices are small and designed to be highly portable, they may not remain under the physical control of a trusted person. Therefore, Salesforce provides methods to secure the device data if it passes out of control of the user or the user’s organization. Salesforce has multiple levels of security at the handheld device level. First, device vendors provide the ability to enforce OS-level password access restrictions on any device apps or data. Users must be required to use the device protection in accordance with the owning enterprise’s security policy. If the device is locked by a strong password, it is difficult for unauthorized persons to do anything with it. - **[Local Data Protection](https://help.salesforce.com/s/articleView?id=xcloud.mobile_security_local_data.htm&release=264.0.0&type=5)** The data stored locally on the device is saved in the device’s embedded memory and never on an external memory card. - **[Remote Wipe](https://help.salesforce.com/s/articleView?id=xcloud.mobile_security_remote_wipe.htm&release=264.0.0&type=5)** An org admin can restrict access to minimize the risk of information loss when a mobile device is compromised. # Application Feature Encryption Happens in the Application Tier The Lightning Platform’s foundation for FLE is a metadata-driven software architecture that enables multitenant applications. Application components, such as Salesforce objects, aren’t modeled directly in our underlying relational database. Instead, when customers interact with their data in a Salesforce application, the platform’s runtime engine materializes the data by using metadata stored separately in the Lightning Platform’s Universal Data Dictionary (UDD). This way, each tenant’s data is kept secure in the shared database, and tenants can customize their schema in real time without affecting other tenants’ data. Also, the application’s code base can be patched or upgraded without breaking tenant-specific customizations. See [Platform Multitenant Architecture](https://architect.salesforce.com/fundamentals/platform-multitenant-architecture) for details. The UDD includes metadata that determines which data is encrypted at runtime. The encryption service works in the Lightning Platform’s application layer. That is, data is encrypted directly before it’s stored in the database. The resulting encrypted payload is stored with metadata about the specific key used to encrypt it. For decryption, data is decrypted as it’s materialized. It’s then pushed up through the application pipeline and appears in plaintext to the user who requested it. By embedding the encryption metadata in the UDD, the Shield Platform Encryption architecture gives customers the option to choose what data to encrypt. The Shield Platform Encryption engine strictly manages the flow of encrypted data from the application layer to the database and vice versa. The relevant code path is run through the UDD before data is read or stored. ## Cryptographic Library and Algorithms For all Application tier features, Shield Platform Encryption uses the JCE to encrypt and decrypt data. Specifically, Shield Platform Encryption uses the Advanced Encryption Standard (AES- 256) in CBC mode with, by default, a random IV. Deterministic encryption uses a field-specific static IV, which is a hash of the entity ID, field ID, and key ID. This method makes the static IV unique to each customer and field per org. Upon key rotation, a new static IV is generated for each field. ## KMS Encrypted Key Cache Salesforce has taken steps to reduce access to encryption key material across the servers where encrypted keys are available for the application servers. Rather than holding data encryption keys on the application server, they’re temporarily held in an encrypted key cache on a regional KMS. This feature is a central service that all application servers in a particular region can access. When the customer accesses encrypted data on the application server, the server uses a DEK for a short time to perform encryption and decryption operations. After this transaction is complete, related memory containing the DEK is freed. The DEKs are never persisted on the application server, and they’re only available in the KMS cache that serves the application server’s region. # Application Tier and Data Tier Encryption Application tier encryption refers to encryption for specific Salesforce features, such as Field-Level Encryption, Chatter, Event Bus Data, and CRM Analytics data. The at-rest data for each features is encrypted using a feature-specific data encryption key (DEK). Encryption at the Data tier refers to encryption at the underlying data level, such as with Database Encryption. It covers everything in the transactional database, regardless of which feature makes use of the data. Application tier encryption happens before data tier encryption. So when Database Encryption is enabled, any feature-specifc encryption that is enabled benefits from two encryptions. This redundant encryption has no effect on performance. ## Database Encryption vs FLE In this guide, we focus on FLE as the representative application tier feature. To learn more about the other application tier products, refer to [What You Can Encrypt](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_encryptable_data.htm&type=5&language=en_US) in Help. Database Encryption and Field-Level Encryption are different features, and each has different advantages and limitations. - To benefit from Database Encryption, your org must be in Hyperforce. - Application tier encryption supports Salesforce-generated keys, Bring Your Own Key (BYOK), Cache-only keys, and External Key Management (EKM) options. - Database Encryption supports Salesforce-generated keys and BYOK. - Application tier encryption provides the ability to archive and destroy keys. - Database Encryption supports key archiving. - Application tier encryption provides the ability to synchronize all of your encrypted data with the most recent encryption key by hand. Database Encryption doesn’t. - Database Encryption provides full filtering, querying, searching, and sorting of the data that it encrypts. - Field-Level Encryption—the feature that enables you to exercise fine-grain control over record data—has some restrictions on filtering, querying, searching, and sorting. #### See Also - [Special Database Encryption Considerations](https://help.salesforce.com/s/articleView?id=xcloud.security_shield_pe_special_tle_considerations.htm&language=en_US) # Application Tier Encryption and Database Encryption Work Together Even if you’re using Database Encryption, you can still use application tier encryption like FLE on as required for security and compliance. Features like FLE happen at the application tier, and Database Encryption happens at the data tier. As a result, when a user saves data, the data configured for encryption at the application tier are encrypted first. When control passes to the database layer, the database fragment that contains the encrypted data is encrypted by Database Encryption. So, when Database Encryption is enabled, application tier data configured for encryption is encrypted twice. Though used at the same time, the encryption processes are completely separate. The data encryption keys are derived from different key material. To learn how using more than one encryption type affects another, refer to [Onboard to Shield Platform Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_onboard_to_shield_pe.htm&language=en_US) in Salesforce Help. # Apply a Percentage Discount Off the List Price Calculate a discount against the result of a prior pricing step, instead of against the raw order value. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise and Unlimited Editions in Manufacturing Cloud, Automotive Cloud, and Consumer Goods Cloud, with required add-ons.
Let's consider a scenario where Acme Fabrication, in addition to its $95 negotiated price from the previous scenario, qualifies for an extra 10% volume discount. The discount must apply to the $95 price already calculated for Acme Fabrication — not to the general $120 list price, and not to the raw order value. 1. Define the Discount Specification. 1. See [Create a Pricing Specification](https://help.salesforce.com/s/articleView?id=xcloud.ppp_create_specification.htm&release=264.0.0&type=5 "Define calculation behavior, rounding, and scale conditions for a pricing element.") for the create/activate procedure. Create a specification named "10% Volume Discount." 2. Set **Meta Type** to Percentage, **Rounding** to Commercial Rounding, and **Decimal Places** to 2. 3. Click **Save**, then **Activate**. 2. Add the Discount Step to the Calculation Schema. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-penny_perfect_pricing-264-0-0-production-enus/8ac1130d-00eb-4b6b-ba82-4b09e6f166a0/images/icon_note.png) Note To hold an intermediate result — for example, the lowest, highest, or summed value across several prior steps — so a later step can reference it, check the **Subtotal** checkbox on the referenced step, together with the Minimum, Maximum, or other reserved meta types. 1. Open the Standard Pricing Procedure calculation schema from the previous scenario. 2. Add a new Calculation Schema Step referencing the 10% Volume Discount specification, with **Position** = 20 and **Step Reference** = 10 — so the discount is calculated against step 10's result (Acme Fabrication's $95 price), not the raw order value. 3. Click **Save**, then **Activate**. 3. Load the Discount Data. 1. Using Data Loader, import an **External Pricing Key Value** record keyed to Acme Fabrication, with a Pricing Value of 10 (percent). 2. Run the **External Pricing Key Value Consolidation** job. See [Load Pricing Data from a Backend ERP System](https://help.salesforce.com/s/articleView?id=xcloud.ppp_scenario_load_erp_data.htm&release=264.0.0&type=5 "Export pricing condition data from an ERP system and consolidate it for runtime pricing lookups — the load-and-consolidate procedure shared by the pricing scenarios in this section.") for the full job procedure. 4. Simulate the Price. 1. Recalculate the price on Acme Fabrication's order from the previous scenario. 2. On the **Pricing Details** tab, step 10 shows $95 (the negotiated price), step 20 shows the 10% discount with Step Reference = 10, and the Calculation Result for step 20 shows $85.50 — confirming the discount was applied to the $95 negotiated price rather than to the $120 list price. # Apply a Product's List Price Configure a fallback search so an order uses a customer-specific price when one exists, and the product's standard list price otherwise. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise and Unlimited Editions in Manufacturing Cloud, Automotive Cloud, and Consumer Goods Cloud, with required add-ons.
Let's consider a scenario where Acme Fabrication orders Steel Bracket A100. Because Acme Fabrication has a negotiated customer-specific price, the order must use $95 per unit instead of the $120 standard list price. A different customer ordering the same product, with no negotiated price on file, must still see the $120 list price. 1. Define the Pricing Key Types. See [Create a Pricing Key Type](https://help.salesforce.com/s/articleView?id=xcloud.ppp_create_key_type.htm&release=264.0.0&type=5 "Create pricing key types that tell the system how to search for pricing rules.") for the create/activate procedure. Create two key types, as follows. 1. "Account + Product" — **Anchor Type**: Account And Account Hierarchy and Product And Product Hierarchy. Click **Save**, then **Activate**. 2. "Product" — **Anchor Type**: Product And Product Hierarchy. Click **Save**, then **Activate**. 2. Define the Search Strategy. 1. See [Create a Pricing Search Strategy](https://help.salesforce.com/s/articleView?id=xcloud.ppp_create_search_strategy.htm&release=264.0.0&type=5 "Configure the prioritized sequence of search steps used to look up pricing conditions.") for the create/activate procedure. 2. Enter a **Name** (for example, "Search By Account and Product"), select a **Context Definition**, and click **Save**. 3. Add two Pricing Search Strategy Steps: step 1 with **Pricing Key Type** = "Account + Product" and **Sort** = 10 (matches Acme Fabrication's negotiated price for Steel Bracket A100); step 2 with **Pricing Key Type** = "Product" and **Sort** = 20 (matches the product's list price when no account-specific record exists). 4. Click **Save**, then **Activate**. 3. Define the List Price Specification. 1. See [Create a Pricing Specification](https://help.salesforce.com/s/articleView?id=xcloud.ppp_create_specification.htm&release=264.0.0&type=5 "Define calculation behavior, rounding, and scale conditions for a pricing element.") for the create/activate procedure. Create a specification named "List Price." 2. Set **Meta Type** to Price, **Price Impact** to Plus, and **Condition Level** to OrderItem. Link the search strategy from the previous step. Click **Save**, then **Activate**. 4. Define the Calculation Schema. 1. See [Create a Pricing Calculation Schema](https://help.salesforce.com/s/articleView?id=xcloud.ppp_create_calc_schema.htm&release=264.0.0&type=5 "Build the ordered sequence of condition steps used to calculate order and line-item prices.") for the create/activate procedure. Create a schema named "Standard Pricing Procedure." 2. Add a Calculation Schema Step referencing the List Price specification, with **Position** = 10 and **Mandatory** checked, so pricing fails with an error rather than silently pricing an item at zero if no price is found. Click **Save**, then **Activate**. 5. Define the Procedure Plan. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-penny_perfect_pricing-264-0-0-production-enus/8ac1130d-00eb-4b6b-ba82-4b09e6f166a0/images/icon_note.png) Note There's no meta type literally called "List Price" — Price is the correct value for a base/list price step. 1. See [Create a Procedure Plan](https://help.salesforce.com/s/articleView?id=xcloud.ppp_create_procedure_plan.htm&release=264.0.0&type=5 "Configure the schema determination engine that maps order pricing type and Internal Organization Unit to a Calculation Schema.") for the create/activate procedure. Map your Sales Organization / Internal Organization Unit and Order Pricing Type to this calculation schema. 6. Load the Pricing Data. 1. From **Setup**, in **Quick Find**, enter Data Loader, and select it. Click **Insert**, select **External Pricing Key Value**, and import two records: one keyed by Acme Fabrication's Account + Steel Bracket A100 with a Pricing Value of 95, and one keyed by Steel Bracket A100 only with a Pricing Value of 120. 2. Run the **External Pricing Key Value Consolidation** job so the imported records become available at runtime. See [Load Pricing Data from a Backend ERP System](https://help.salesforce.com/s/articleView?id=xcloud.ppp_scenario_load_erp_data.htm&release=264.0.0&type=5 "Export pricing condition data from an ERP system and consolidate it for runtime pricing lookups — the load-and-consolidate procedure shared by the pricing scenarios in this section.") for the full job procedure — every scenario in this section reuses it. 7. Simulate the Price. 1. Create an order for Acme Fabrication with a line item for Steel Bracket A100 (see [Price an Order](https://help.salesforce.com/s/articleView?id=xcloud.ppp_price_an_order.htm&release=264.0.0&type=5 "Generate accurate order prices in Salesforce while connected to the network.")). 2. Click **Calculate Price**. 3. Open the **Pricing Details** tab for the line item. The Calculation Result for step 10 shows $95, and the Condition Found column confirms the "Account + Product" search step matched — the customer-specific price, not the list price. 4. Create a second order for a different customer, with no negotiated price on file, for the same product. The Calculation Result shows $120, and Condition Found confirms the "Product" step matched instead. - **[Load Pricing Data from a Backend ERP System](https://help.salesforce.com/s/articleView?id=xcloud.ppp_scenario_load_erp_data.htm&release=264.0.0&type=5)** Export pricing condition data from an ERP system and consolidate it for runtime pricing lookups — the load-and-consolidate procedure shared by the pricing scenarios in this section. # Apply a Theme to a Single Omniscript using Visualforce (Managed Package) For the managed package runtime, before Vlocity Spring '19, make your style changes available in Omniscript's Preview mode using Visualforce. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In Omniscript Designer, create or edit an Omniscript containing restyled elements. 2. Click **Preview**, then click **How to launch activated script**. The HOW TO LAUNCH dialog is displayed. 3. In the EMBEDDED section, click **Newport**, then click **Copy to Clipboard**. 4. In Salesforce, create a new Visualforce page and paste the copied code into it. 5. Exit the code and set the `strCSSFileList="[]"` and import the CSS file by adding the following line: ``` ``` 6. Save your Visualforce page. 7. In Omniscript Designer, go to the Script Configuration section of your test Omniscript and, under **Visualforce Pages Available In Preview**, click **Add New Key/Value Pair**. 8. Set the key to the text you want to display in the drop-down list of players at the Preview window's top right. Set the value to the name of the Visualforce page that you created in the previous steps. 9. Verify that the page is listed in the drop-down list of players at the Preview window's top right. # Apply a Value-Based Scale Discount Give customers a bigger discount as their order value crosses set thresholds. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise and Unlimited Editions in Manufacturing Cloud, Automotive Cloud, and Consumer Goods Cloud, with required add-ons.
Let's consider a scenario where Acme Fabrication earns an additional discount as its order value crosses set thresholds: no discount under $1,000, a $50 discount on orders from $1,000 up to $4,999.99, and a $200 discount on orders of $5,000 or more. This is a value scale — tiers are based on the order's total value, not the quantity of units ordered. 1. Define the Scale Discount Specification. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-penny_perfect_pricing-264-0-0-production-enus/8ac1130d-00eb-4b6b-ba82-4b09e6f166a0/images/icon_note.png) Note Condition Level can't be set to OrderHeader while Base is set to Quantity — quantity-based scales are evaluated per item, not at the header level. 1. See [Create a Pricing Specification](https://help.salesforce.com/s/articleView?id=xcloud.ppp_create_specification.htm&release=264.0.0&type=5 "Define calculation behavior, rounding, and scale conditions for a pricing element.") for the create/activate procedure. Create a specification named "Order Value Scale Discount." 2. Set **Meta Type** to FixAmount, **Base** to Value, **Scale Condition** to From/To (a single matching tier applies) or Graduated (each tier's discount accumulates progressively), and **Condition Level** to OrderHeader. Click **Save**, then **Activate**. 2. Add the Scale Step to the Calculation Schema. 1. Open the Standard Pricing Procedure calculation schema. 2. Add a new Calculation Schema Step referencing the Order Value Scale Discount specification, with **Position** = 30 and **Step Reference** = 20, so the scale discount evaluates against the order's net value after the volume discount is applied. Click **Save**, then **Activate**. 3. Load the Scale Tiers. 1. Using Data Loader, import an **External Pricing Key Value** record for the discount, and two **External Pricing Key Value Tier** child records: Tier Threshold Value = 1000 with Pricing Value = 50, and Tier Threshold Value = 5000 with Pricing Value = 200. 2. Run the **External Pricing Key Value Consolidation** job. See [Load Pricing Data from a Backend ERP System](https://help.salesforce.com/s/articleView?id=xcloud.ppp_scenario_load_erp_data.htm&release=264.0.0&type=5 "Export pricing condition data from an ERP system and consolidate it for runtime pricing lookups — the load-and-consolidate procedure shared by the pricing scenarios in this section.") for the full job procedure. 4. Simulate the Price. 1. Create an order for Acme Fabrication with enough units of Steel Bracket A100 to bring the order's net value to $4,500 (for example, 55 units at the discounted $85.50 unit price from the previous scenario). 2. Recalculate the price. On the **Pricing Details** tab, open [Review Scale-Based Pricing](https://help.salesforce.com/s/articleView?id=xcloud.ppp_view_pricing_waterfall.htm&release=264.0.0&type=5 "Inspect the step-by-step breakdown of which conditions were evaluated, applied, or excluded during price determination, including scale-tier details.") for step 30 to confirm the $1,000–$4,999.99 tier matched, applying a $50 discount. 3. Increase the order quantity so the net value reaches $5,000 or more, and recalculate. Confirm the tier changes to the $5,000-and-above tier, applying a $200 discount instead. # Apply Advanced Restore Filters in Salesforce Backup Refine your search beyond the required filters and return a targeted set of records by selecting an object and setting filter conditions. You can process records that meet all conditions, any condition, or a custom arrangement of conditions. 1. From the Restore & Export tab, after you select the required filters for your search, click **Advanced Filters**. 2. Under Filter Conditions, select the conditional logic that you want to use to return a set of records that match those conditions.
Conditional Logic Function Example
When All Conditions Are Met Applies your filter to records that meet all set conditions. Set a condition that the Account Source equals Web, and set another condition that the Created Date equals January 1. If a record’s source is Web and the record was created on January 1, then the record version appears in the search result.
When Any Condition Is Met Applies your filter to records that meet any of the conditions you set. Set a condition that the Account Source equals Web and another condition that the Created Date equals January 1. If a record’s source is the Web or the record was created on January 1, the record version appears in the search result.
Custom Applies your filter according to the boolean condition logic that you enter.

Set the first condition as the Account Source equals Web, the second condition as the Created Date equals January 1, and the third condition as the Primary field equals True. Then set the conditional logic to capture your set combination of these conditions, such as (1 OR 2) AND 3.

You can also filter for records that don’t meet a certain condition by adding ! in your conditional logic. For example, (1 OR 2) AND !3 filters for records that meet either condition 1 or 2 and don’t meet condition 3.

3. Click **Add a Condition**, and then select values for the Object, Operator, and Criteria fields. ![Example of an advanced restore filter where any condition is met](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/backup_restore_advanced_filters_example.png) 4. When you’re finished adding filter conditions, click **Apply**. You’re ready to view the record set from your backup that matches your advanced filter conditions. # Apply Clickjack Protection to Less Common Browsers To help protect your users against clickjacking attacks, Salesforce applies the Content-Security-Policy: frame-ancestors HTTP header directive to the pages that Salesforce serves when that directive is supported. To extend clickjack protection to more users, include that directive in the rare cases when Salesforce can’t identify whether the requesting app or specialized browser supports the directive. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Contact Manager, Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To modify session security settings: Customize Application
The supported browsers and devices for Salesforce Lightning Experience and Salesforce Classic support the required HTTP header directive for clickjacking protection. We recommend that you enable this feature only if your users access Salesforce via unsupported apps or specialized browsers with unclear support for Content-Security-Policy: frame-ancestors. ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_warning.png) Warning When this option is enabled, users who access Salesforce via an app or browser that doesn’t support the Content-Security-Policy: frame-ancestors directive can experience errors if that lack of support is unclear. We encourage you to test this feature in a sandbox via your users’ apps and browsers. Then weigh the benefit of the additional clickjack protection against the errors that users can experience. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Session Settings**. 2. In the Content Security Policy (CSP) Directive Rendering section, select **Apply CSP directives for less common browsers**, and then save your changes. #### See Also - [Configure Clickjack Protection](https://help.salesforce.com/s/articleView?id=xcloud.security_clickjack_protection_configure.htm&release=264.0.0&type=5 "Clickjacking is a type of attack that tricks users into clicking something, such as a button or link. The click sends an HTTP request that performs malicious actions that can lead to data intrusion, unauthorized emails, changed credentials, or similar results. To help protect against this kind of attack, most Salesforce pages can only be served in an inline frame by a page on the same domain. Learn which types of pages can be framed and how to configure the related clickjack settings.") # Apply Conditional Formatting in Spreadsheets Automatically highlight cells that meet certain conditions or match specific values. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. Select the cell or cells where you want to use conditional formatting. 2. From the Format menu, select **Conditional Formatting**. Or, right-click to open the cell menu, and select **Conditional Formatting**. 3. Add formatting rules. 4. Save your work. To remove conditional formatting from a cell, from the Format menu, select **Conditional Formatting**. Delete the formatting rules that you want to remove, and then save your work. # Apply Custom CSS to a Flexcard Element (Managed Package) For the managed package runtime, when the design interfaces available in the Style panel of the Flexcard Designer don't meet your design needs, apply custom CSS to your elements. Add custom CSS to edit the internal components of an element or a child element. Use this feature sparingly to optimize performance. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Apply classes from style sheets available to the Flexcard, such as the global SLDS and Newport style sheets. Or, apply classes that you create inside the Flexcard Designer with the **Add Custom CSS** feature. See [Create Custom CSS Within the Flexcard Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_custom_css_within_the_flexcard_designer.htm&release=264.0.0&type=5 "For the managed package runtime, create custom CSS classes within the Flexcard Designer to apply to Flexcard elements or supported fields inside elements. Create custom CSS classes when the design interfaces in the Style panel do not meet your design needs."). ![example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) example Example Grouped Datatable Element with Alternating Background Colors You have a Datatable element that displays Account Cases grouped by case Type. You want to show alternating background colors for all rows and set a different background color for the group heading. There is no option in the Style panel for alternating row background colors. But you can enter a class for the group heading. Use the **Add Custom CSS** feature to create two classes. An alt-table-rows class for the Datatable element, and an alt-bg-group-wrapper class for the group heading. ![FlexCards Add Custom CSS feature: apply classes](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_apply_custom_classes.png) Apply the alt-table-rows class to the element and the alt-bg-group-wrapper class to the group heading. 1. In the Flexcard Designer, select an element on the canvas. 2. To apply a custom class to an element, click Style to open the Style panel. From the **Custom CSS** section, complete one or both of these tasks: - To append a custom class to the element's container, enter the class name in the **Container Class** field, such as branded-tables. - To append a custom class directly on the element, enter the class name in the **Custom Class** field, such as alt-table-rows from the example above. 3. To apply a custom class to a specific field inside an element, in the Properties panel, enter a class in a field that supports classes. For example, from the previous grouped datatable example, enter alt-bg-group-wrapper in the **Group Wrapper Class** field in the Properties panel of a Datatable element. - **[Flexcards Custom CSS Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_custom_css_properties.htm&release=264.0.0&type=5)** For the managed package runtime, custom CSS properties are configurable from the Style panel in the Flexcard Designer when you select an element. When the design interfaces in the Style panel do not meet your design needs, apply a class from any style sheet available to the Flexcard, or add inline styles. # Apply Custom Lightning Styles to a Specific Flexcard (Managed Package) For the managed package runtime, overwrite global Lightning styles for a specific Flexcard. For example, if your Flexcard requires unique branding across multiple components, you can create custom Lightning styles and load them in your Flexcard as a static resource. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For minor style modifications on elements, see the Style panel in the Flexcard designer when an element is selected on the canvas. See [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more.").

Required Versions

Available beginning Winter '22.

Before You Begin Create a Flexcard with a Lightning **Theme**. See [Create a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."). 1. Get the Lightning styles from the Lightning Design System website's download page. See [Lightning Design System Downloads](https://www.lightningdesignsystem.com/resources/downloads/). 2. Follow instructions on the website to modify styles. See [Lightning Design System](https://www.lightningdesignsystem.com/). 3. Upload the custom styles as a zipped file into your org as a static resource. See [Creating a Static Resource](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_resources_create.htm). 4. In the Flexcard Designer, click the Setup tab, and click **Styling Options**. 5. In the **Custom Lightning StyleSheet File Name** field, enter the file name for that Static Resource that stores your custom Lightning styles. # Apply Custom Newport Styles to a Specific Flexcard (Managed Package) For the managed package runtime, overwrite global Newport styles for a specific Flexcard. For example, if your Flexcard requires unique branding across multiple components, you can create custom Newport styles and load them in your Flexcard as a static resource. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Loading custom Newport styles directly on the Flexcard overwrites custom global Newport styles. See [Brand Flexcards Globally with the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_brand_flexcards_globally_with_the_newport_design_system.htm&release=264.0.0&type=5 "For the managed package runtime, customize the appearance of Flexcards throughout your org with the Newport Design System. The Newport Design System enables you to download, edit, and override the existing Newport CSS styles with your own customizations. Newport includes Storybook.js, a browser-based preview tool that enables you to see your changes in action."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For minor style modifications on elements, see the Style panel in the Flexcard designer when an element is selected on the canvas. See [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more.").

Required Versions

Available beginning Winter '22.

Before You Begin Create a Flexcard with a Newport **Theme**. See [Create a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."). 1. Get the Newport styles and modify them by following one of the following tasks: - Get the Newport styles from the Newport Design System git repo, and modify as needed. See [Apply Global Branding to Flexcards with the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_apply_global_branding_to_flexcards_with_the_newport_design_system.htm&release=264.0.0&type=5 "For the managed package runtime, use the Newport Design System (NDS) to apply global style changes to Flexcards. The Newport Design System enables you to download, edit, and override the existing Newport CSS styles with your own customizations."). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important To avoid potential styling issues, confirm that the version available in the repo is the same version available in your org. Perform the following tasks: 1. From Setup, enter Static Resources in the Quick Find box, then select **Static Resources**. 2. Click newport. 3. Click **View file** to download the zip file. 4. Decompress the file and open the `package.json` file and note the `version` number. 5. Compare the version number with the latest version available in the git repo. - To overwrite newportZipUrl global custom styles available as a static resource, modify the styles in your local Newport project where the original custom styles were created. See [Deploy Global Style Changes to Flexcards with the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_global_style_changes_to_flexcards_with_the_newport_design_system.htm&release=264.0.0&type=5 "For the managed package runtime, add any changes to the Newport Design System theme by uploading the theme in a Salesforce org. Install your theme so that all Flexcard designer users can use it to preview their Flexcards. Apply modifications to the Newport templates by adding a Static Resource that overrides the Newport preview wherever it is available."). Otherwise, download the static resource as follows: 1. From Setup, enter Static Resources in the Quick Find box, then select **Static Resources**. 2. Click newportZipUrl. 3. Click **View file** to download the file. 4. Decompress the zip file and open the folder in your chosen code editor, such as in Visual Studio. 5. Modify the CSS as needed. 2. Upload the custom styles as a zipped file into your org as a static resource. See [Creating a Static Resource](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_resources_create.htm). 3. In the Flexcard Designer, click the Setup tab, and click **Styling Options**. 4. In the **Custom Newport StyleSheet File Name** field, enter the file name for that Static Resource that stores your custom Lightning styles. # Apply Custom Styling to Omniscripts with Static Resources (Managed Package) For the managed package runtime, to apply CSS changes to an Omniscript using SLDS or Newport styling, refer to a CSS file static resource in the Styling Options section of the LWC Omniscript Designer. For example, a CSS sheet can change the text color for every Number element in an Omniscript without using a custom Lightning web component to override the Number element. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Multi-Language Omniscripts provide beta support for right-to-left languages. See [Create Multi-Language Omniscripts (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_multi_language_omniscripts.htm&release=264.0.0&type=5 "For the managed package runtime, allow a single Omniscript to run in multiple languages using Salesforce custom labels."). 1. After you create a custom style sheet, add the CSS file as a static resource. See [Using Static Resources](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_resources.htm). For information about styling systems, see [Light DOM](https://lwc.dev/guide/light_dom#implement-scoped-styles), [CSS](https://lwc.dev/guide/css#assign-css-stylesheets-to-a-component-with-the-stylesheets-property), and [Styling Hooks](https://www.lightningdesignsystem.com/platforms/lightning/styling-hooks/). For example, customstyle.css is uploaded as a static resource named customstyle. 2. In the LWC Omniscript Designer, click **Setup**, and click **Styling Options**. 3. In the **Custom Lightning Stylesheet File Name** or **Custom Newport StyleSheet File Name** field, enter the name of the Static Resource that stores your custom Lightning or Newport styling. ![An OmniScript's Styling Options section using custom stylesheets.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/lwc_os_custom_stylesheets.png) For example, the static source customstyle refers to the uploaded customstyle.css file. 4. If needed, to add custom styling for right-to-left languages, see [Reference Stylesheet Names in an Omniscript's JSON (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_reference_stylesheet_names_in_an_omniscript_s_json.htm&release=264.0.0&type=5 "For the managed package runtime, apply CSS changes to an Omniscript using SLDS or Newport styling by referencing a CSS file static resource in your Omniscript's JSON properties. For example, a CSS sheet can change the text color for every Number element in an Omniscript without using custom Lightning web components to override the Number element."). 5. To view your custom styling, activate and preview the Omniscript. When you preview an Omniscript with a child Omniscript with a custom CSS, the content for the child Omniscript doesn't show the custom styling. # Apply Encryption to Fields Used in Matching Rules Matching rules used in duplicate management help you maintain clean and accurate data. To make fields encrypted with Shield Platform Encryption compatible with standard and custom matching rules, use the deterministic encryption scheme. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
User Permissions Needed
To view setup: View Setup and Configuration
To enable encryption key (tenant secret) management: Manage Profiles and Permission Sets
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Shield Platform Encryption. Read about implementing field-level encryption using Shield Extension in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). Before you start, turn on **Deterministic Encryption** from the Encryption Settings page. If you don’t have a Fields (Deterministic) type tenant secret, create one from the Key Management page. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important Matching rules used in duplicate management don’t support probabilistically encrypted data. Follow these steps to add encrypted fields to existing custom matching rules. 1. From Setup, in the Quick Find box, enter Matching Rules, and then select **Matching Rules**. 2. Deactivate the matching rule that reference fields that you want to encrypt. If your matching rule is associated with an active duplicate rule, first deactivate the duplicate rule from the Duplicate Rules page. Then return to the Matching Rules page and deactivate the matching rule. 3. From Setup, in the Quick Find box, enter Encryption Settings, and then select **Encryption Settings**. 4. In the Advanced Encryption Settings section, click **Select Fields**. 5. Click **Edit**. 6. Select the fields that you want to encrypt, and select **Deterministic** from the Encryption Scheme list. ![Deterministic encryption for standard fields](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/security_pe_deterministic_pilot.png) 7. Save your work. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip Standard matching rules are automatically deactivated when encryption is added to a field referenced by that rule. To encrypt fields referenced in standard matching rules, follow steps 3–8. 8. After you get the email verifying encryption’s been enabled on your fields, reactivate your matching rule and associated duplicate management rule. Matching rules used in duplicate management now return exact and fuzzy matches on encrypted data. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_example.png) Example Let’s say that you encrypted the Billing Address on your Contacts, and you want to add this field to a custom matching rule. First, deactivate the rule or rules that you want to add this field to. Make sure that the Billing Address field is encrypted with the deterministic encryption scheme. Then add Billing Address to your custom matching rule, just like how you add any other field. Finally, reactivate your rule. When you rotate your key material, you must update custom matching rules that reference encrypted fields. After you rotate your key material, deactivate and then reactivate the affected matching rules. Then contact Salesforce to request the background encryption process. When the background encryption process finishes, your matching rules can access all data encrypted with your active key material. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important To ensure accurate matching results, customers who used the beta version of this feature must deactivate any matching rules that reference encrypted fields and then reactivate them. If your custom matching rule fails on reactivation, contact Salesforce for help with reactivating your match index. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This page is about Shield Platform Encryption, not Classic Encryption. [What's the difference?](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_vs_classic_encryption.htm&type=5&language=en_US) # Apply Encryption to Standard Fields in Lightning Experience You can apply encryption to one or more standard fields at the same time on one or more standard objects by using the Encrypt Standard Fields page. To apply encryption to a standard field on a custom object, a custom field on a standard object, or a custom field on a custom object, do one field at a time. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
User Permissions Needed
To view setup: View Setup and Configuration
To encrypt files: Customize Application
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Shield Platform Encryption. Read about implementing field-level encryption using Shield Extension in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). ## Apply Encryption to Multiple Standard Fields at the Same Time You can configure encryption at rest for multiple standard fields across various standard objects at the same time. Use this procedure only for standard fields on standard objects. To apply deterministic encryption to a standard field, first turn on deterministic encryption from the Encryption Settings page in Setup. 1. Make sure that your org has an active encryption key. If you’re not sure, check with your Salesforce admin. 2. From Setup, in the Quick Find box, enter Encryption Settings, and then select **Encryption Settings**. 3. In the Advanced Encryption Settings section, click **Select Fields**. The Encrypt Standard Fields page shows all standard fields for all standard objects. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This page shows only standard fields on standard objects. Custom fields on standard objects aren’t listed. Configure encryption for a custom field from its field details page. Also, configure encryption for an eligible field on a custom object from its field details page. 4. Click **Edit**. 5. Select the fields that you want to encrypt. All new data entered in this field is encrypted. By default, data is encrypted using a probabilistic encryption scheme. To apply deterministic encryption to your data, from the Encryption Scheme list, select **Deterministic**. 6. Save your work. The automatic Platform Encryption validation service checks for settings in your org that can block encryption. You receive an email with suggestions for fixing incompatible settings. Depending on the size of your org, enabling a standard field for encryption can take a few minutes. Field values are automatically encrypted only in records created or updated after you’ve enabled encryption. Synchronize existing data with your active key material on the Encryption Statistics and Data Sync page. ## Apply Encryption to One Standard Field or One Custom Field Do these steps any time that you want to configure a standard field on a custom object, a custom field on a standard object, or a custom field on a custom object. To apply deterministic encryption to a standard or custom field, first turn on deterministic encryption from the Encryption Settings page in Setup. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This page describes how to apply encryption to a field in Lightning Experience. To configure encryption for a field in Salesforce Classic, see [Apply Encryption to Standard Fields in Salesforce Classic](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_apply_fle_in_classic.htm&release=264.0.0&type=5 "Applying encryption to multiple standard fields at the same time on one or more standard objects is the same process in Salesforce Classic and Lightning Experience. Applying encryption to a standard field on a custom object, a custom field on a standard object, or a custom field on a custom object, in Salesforce Classic is slightly different from the process in Lightning Experience."). 1. From Setup, select **Object Manager**, and then select your object. 2. Click **Fields & Relationships**. 3. When you create or edit a custom field, select **Encrypt the contents of this field**. By default, data is encrypted using a probabilistic encryption scheme. To apply deterministic encryption to your data, select a deterministic option listed under Advanced Encryption Settings. All new data entered in this field is encrypted. 4. Save your work. The automatic Platform Encryption validation service checks for settings in your org that can block encryption. You receive an email with suggestions for fixing incompatible settings. Depending on the size of your org, enabling a standard field for encryption can take a few minutes. Field values are automatically encrypted only in records created or updated after you’ve enabled encryption. Synchronize existing data with your active key material on the Encryption Statistics and Data Sync page. See Also - [Filter Encrypted Data with Deterministic Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_deterministic.htm&release=264.0.0&type=5 "You can filter data that’s protected with Shield Platform Encryption using deterministic encryption. Your users can filter records in reports and list views, even when the underlying fields are encrypted. You can apply case-sensitive deterministic encryption or exact-match case-insensitive deterministic encryption to data on a field-by-field basis.") - [Sync Data with Self-Service Background Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_stats_sync.htm&release=264.0.0&type=5 "Synchronizing your data with your active key material keeps your encryption policy up to date. You can sync data in standard and custom fields, the Attachment—Content Body field, and for field history and feed tracking changes from the Encryption Statistics and Data Sync page in Setup. To synchronize all other encrypted data, contact Salesforce Customer Support.") # Apply Encryption to Standard Fields in Salesforce Classic Applying encryption to multiple standard fields at the same time on one or more standard objects is the same process in Salesforce Classic and Lightning Experience. Applying encryption to a standard field on a custom object, a custom field on a standard object, or a custom field on a custom object, in Salesforce Classic is slightly different from the process in Lightning Experience. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
User Permissions Needed
To view setup: View Setup and Configuration
To encrypt files: Customize Application
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Shield Platform Encryption. Read about implementing field-level encryption using Shield Extension in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). You can apply encryption to many standard fields at once on one or more standard objects using the Encrypt Standard Fields page. If you need to apply encryption to a custom field on a standard object, or any type of field on a custom object, you do that one field at a time. ## Apply Encryption to Multiple Standard Fields at the Same Time You can configure encryption at rest for multiple standard fields across various standard objects at the same time. Use this procedure only for standard fields on standard objects. To apply deterministic encryption to a standard fields, first turn on deterministic encryption from the Encryption Settings page in Setup. 1. Make sure that your org has an active encryption key. If you’re not sure, check with your Salesforce admin. 2. From Setup, in the Quick Find box, enter Encryption Settings, and then select **Encryption Settings**. 3. In the Advanced Encryption Settings section, click **Select Fields**. The Encrypt Standard Fields page shows all standard fields for all standard objects. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This page shows only standard fields on standard objects. Custom fields on standard objects aren’t listed. Configure encryption for a custom field from its field details page. Also, configure encryption for an eligible field on a custom object from its field details page. 4. Click **Edit**. 5. Select the fields that you want to encrypt. By default, data is encrypted using a probabilistic encryption scheme. To apply deterministic encryption to your data, from the Encryption Scheme list, select **Deterministic**. All new data entered in this field is encrypted. 6. Save your work. The automatic Platform Encryption validation service checks for settings in your org that can block encryption. You receive an email with suggestions for fixing incompatible settings. Depending on the size of your org, enabling a standard field for encryption can take a few minutes. Field values are automatically encrypted only in records created or updated after you’ve enabled encryption. Synchronize existing data with your active key material on the Encryption Statistics and Data Sync page. ## Apply Encryption to One Standard Field or One Custom Field Do these steps any time that you want to configure only one field for encryption. This includes a standard field on a custom object, a custom field on a standard object, or a custom field on a custom object. To apply deterministic encryption to a standard or custom field, first turn on deterministic encryption from the Encryption Settings page in Setup. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This page describes how to apply encryption to a field in Salesforce Classic. To configure a field in Lightning Experience, see [Apply Encryption to Standard Fields in Lightning Experience](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_apply_fle_in_lightning.htm&release=264.0.0&type=5 "You can apply encryption to one or more standard fields at the same time on one or more standard objects by using the Encrypt Standard Fields page. To apply encryption to a standard field on a custom object, a custom field on a standard object, or a custom field on a custom object, do one field at a time."). 1. From the management settings for the object, go to **Fields**. 2. In the Custom Fields & Relationships section, create a field or edit an existing one. If encryption is available for the field, the **Encrypt contents of this field** checkbox appears. 3. Select **Encrypt the contents of this field**. By default, data is encrypted using a probabilistic encryption scheme. To apply deterministic encryption to your data, select a deterministic option listed under Advanced Encryption Settings. All new data entered in this field is encrypted. 4. Save your work. The automatic Platform Encryption validation service checks for settings in your org that can block encryption. You receive an email with suggestions for fixing incompatible settings. Depending on the size of your org, enabling a standard field for encryption can take a few minutes. Field values are automatically encrypted only in records created or updated after you’ve enabled encryption. Synchronize existing data with your active key material on the Encryption Statistics and Data Sync page. See Also - [Filter Encrypted Data with Deterministic Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_deterministic.htm&release=264.0.0&type=5 "You can filter data that’s protected with Shield Platform Encryption using deterministic encryption. Your users can filter records in reports and list views, even when the underlying fields are encrypted. You can apply case-sensitive deterministic encryption or exact-match case-insensitive deterministic encryption to data on a field-by-field basis.") - [Sync Data with Self-Service Background Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_stats_sync.htm&release=264.0.0&type=5 "Synchronizing your data with your active key material keeps your encryption policy up to date. You can sync data in standard and custom fields, the Attachment—Content Body field, and for field history and feed tracking changes from the Encryption Statistics and Data Sync page in Setup. To synchronize all other encrypted data, contact Salesforce Customer Support.") # Apply Global Branding to Flexcards with the Newport Design System (Managed Package) For the managed package runtime, use the Newport Design System (NDS) to apply global style changes to Flexcards. The Newport Design System enables you to download, edit, and override the existing Newport CSS styles with your own customizations. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before You Begin 1. Create a new Flexcard, and select Newport as the **Theme**. See [Create a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."). 2. If you are unfamiliar with using command-line interfaces, see [Command Line 101](https://www.git-tower.com/learn/git/ebook/en/command-line/appendix/command-line-101) (git-tower documentation). 3. System Requirements: - [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) (git-scm documentation) - [nodeJS v12.0 or higher](https://nodejs.org/en/download/package-manager/) (Node documentation) - Gulp CLI: `npm install --global gulp-cli` 1. Ensure that Node and NPM are installed on your local computer using the commands NPM outlines in their documentation [https://www.npmjs.com/get-npm](https://www.npmjs.com/get-npm). If you do not have Node or NPM, download them from [https://nodejs.org/en/download/](https://nodejs.org/en/download/). 2. Clone **vlocityinc/newport-design-system** from [https://github.com/vlocityinc/newport-design-system](https://github.com/vlocityinc/newport-design-system) using a command-line interface. To see which components are provided by Newport, look at the `UI/components` directory. 3. From the [GitHub](https://github.com/vlocityinc/newport-design-system) page, perform the latest steps to install the correct dependencies. 4. After installation is complete, launch the Storybook.js preview by issuing the command `npm start`. 5. Review the documentation in the Storybook preview. 6. Modify the CSS as needed. What’s next: Deploy the CSS to your Salesforce org. See [Deploy Global Style Changes to Flexcards with the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_global_style_changes_to_flexcards_with_the_newport_design_system.htm&release=264.0.0&type=5 "For the managed package runtime, add any changes to the Newport Design System theme by uploading the theme in a Salesforce org. Install your theme so that all Flexcard designer users can use it to preview their Flexcards. Apply modifications to the Newport templates by adding a Static Resource that overrides the Newport preview wherever it is available."). # Apply Global Branding to Omniscripts (Managed Package) For the managed package runtime, apply global style changes to Omniscripts by using the Newport Design System, which you can download and use to edit and override existing Newport CSS styling. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning with Vlocity Insurance and Health Summer '19 and CME Fall '19.

Before You Begin If you are unfamiliar with using command-line interfaces, see [Command Line 101](https://www.git-tower.com/learn/git/ebook/en/command-line/appendix/command-line-101) (git-tower documentation). System Requirements: - [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) (git-scm documentation) - [nodeJS v12.0 or higher](https://nodejs.org/en/download/package-manager/) (Node documentation) - Gulp CLI: `npm install --global gulp-cli` 1. Download Node.js. Ensure that Node.js is installed on your local computer according to the npm documentation at [https://www.npmjs.com/get-npm](https://www.npmjs.com/get-npm). If you don’t have Node.js download it from [https://nodejs.org/en/download/](https://nodejs.org/en/download/). 2. Download the package **npm-install** from: the docs.npmjs.com site. 3. Clone the Newport Design System (vlocityinc/newport-design-system) from [https://github.com/vlocityinc/newport-design-system](https://github.com/vlocityinc/newport-design-system) using a command-line interface. To see which components are provided by Newport, look at the `UI/components` directory. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If you cannot use a file from GitHub, download the Newport Design System [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m000000nYPd/QKUI5z3WBm6uS66cGLqil6FZsBlfIbysDqSDMbx6yHA). Newport Design System branches are common to all packages. 4. From the [GitHub](https://github.com/vlocityinc/newport-design-system) page, perform the latest steps to install the correct dependencies. 5. After installation is complete, launch the Storybook.js preview by issuing the command `npm start`. 6. Review the documentation in the Storybook preview. 7. Add customizations to your theme. See [Customize Omniscripts and Flexcards with the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_customize_omniscripts_and_flexcards_with_the_newport_design_system.htm&release=264.0.0&type=5 "For the managed package runtime, to customize the appearance of your Omniscripts or Flexcards, edit the CSS and HTML files in the UI subdirectory of the directory where you cloned Newport."). 8. Apply the Omniscript to individual Omniscripts or override the Newport theme for the entire org. See [Deploy and Apply Global Styling Changes using the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_and_apply_global_styling_changes_using_the_newport_design_system.htm&release=264.0.0&type=5 "For the managed package runtime, apply modifications to the Newport design system by adding a Static Resource that overrides the Newport theme wherever it is available. Once uploaded, the Newport changes are applied to any Omniscripts using Newport."). 9. Preview the changes in your Salesforce org by using the Newport Player in the Omniscript Designer Preview. # Apply Global Branding to Vlocity Cards (Managed Package) For the managed package runtime, apply global style changes to all Vlocity Cards in your org by using the Newport Design System. The Newport Design System enables you to download, edit, and override the existing Newport CSS styles with your own styles. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning with Vlocity Insurance and Health Summer '19 and CME Fall '19.

Before You Begin - If you are unfamiliar with using command-line interfaces, see [Command Line 101](https://www.git-tower.com/learn/git/ebook/en/command-line/appendix/command-line-101) (git-tower documentation). - System Requirements: - [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) (git-scm documentation) - [nodeJS v12.0 or higher](https://nodejs.org/en/download/package-manager/) (Node documentation) - Gulp CLI: `npm install --global gulp-cli` 1. Ensure that Node and NPM are installed on your local computer using the commands NPM outlines in their documentation [https://www.npmjs.com/get-npm](https://www.npmjs.com/get-npm). If you do not have Node or NPM, download them from [https://nodejs.org/en/download/](https://nodejs.org/en/download/). 2. Clone the latest Newport Design System package from [newport-design-system](https://github.com/vlocityinc/newport-design-system), and follow the instructions outlined in the GitHub repo. 3. Edit the CSS in a local text editor and save your changes. 4. Preview the changes using Storybook. For more information, see the instructions found in the [newport-design-system](https://github.com/vlocityinc/newport-design-system). 5. To deploy the CSS to Salesforce, see [Deploy Card Template Changes with the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_card_template_changes_with_the_newport_design_system.htm&release=264.0.0&type=5 "For the managed package runtime, the Newport Design System allows you to apply custom changes to the Newport templates that can then be applied to any Card using a Newport Design System template."). 6. Preview the changes in your Salesforce org in the Card Designer Preview. - **[Deploy Card Template Changes with the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_card_template_changes_with_the_newport_design_system.htm&release=264.0.0&type=5)** For the managed package runtime, the Newport Design System allows you to apply custom changes to the Newport templates that can then be applied to any Card using a Newport Design System template. # Apply Lightning Stylesheets to Visualforce Pages Manually With Lightning stylesheets, it’s easy to tweak your existing Visualforce pages so they’ll display with classic styling in Salesforce Classic and Lightning styling in Lightning Experience. ### Required Editions
Available in: Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create, edit, or delete Visualforce pages: Customize Application
1. From Setup, enter Visualforce in the **Quick Find** box, then select **Visualforce Pages**. 2. Click **Edit** next to the Visualforce page. 3. Add the lightningStylesheets="true" attribute to the initial component in the Visualforce markup. ```markup ``` 4. Save your changes. When Lightning stylesheets are applied, here’s how a Visualforce page looks in Salesforce Classic. ![Screenshot of how a Visualforce page that's using the Lightning stylesheets looks in Salesforce Classic.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/VF_Stylesheet_Before.png) And here’s how the same page appears in Lightning Experience. ![Screenshot of how a Visualforce page that's using the Lightning stylesheets looks in Lightning Experience.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/VF_Stylesheet_After.png) #### See Also - [_Style Existing Visualforce Pages with Lightning Stylesheets_ in the _Visualforce Developer Guide_](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/vf_dev_best_practices_slds_lightningstylesheets.htm) # Apply Promotions and Update Members' Progress When processing transaction journals, use Flow actions to find promotions that are applicable for a transaction and the transaction's associated member. Use the Apply Promotion template flow to apply selected promotions to members. The flow template can credit points or issue a voucher. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Growth or Loyalty Management - Advanced
Specify how to determine the applicable promotions for members based on what's used to define your promotion audience: Data Cloud or Campaigns. ## Promotion Audience Defined Using Data Cloud If Data Cloud segments define the target audience for promotions, use these Flow actions to determine which promotion is applicable for a transaction: | Sequence | Flow Action | Description | | --- | --- | --- | | 1 | [Get Loyalty Promotions for Transactions](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_promotion_action_transaction.htm&release=264.0.0&type=5 "The Get Loyalty Promotions for Transactions action lists promotions that you can offer for a transaction. The action uses predefined filter criteria to decide eligible promotions.") | Filters promotions that are applicable for the transaction. | | 2 | [Get Loyalty Promotions for Data Cloud](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_promotion_action_cdp.htm&release=264.0.0&type=5 "Use the Get Loyalty Promotions for Data Cloud action to determine the promotions applicable to a member based on the member's Data Cloud market segment. The action provides a list of promotions that are associated with the market segment a member belongs to.") | Filters promotions based on the member's Data Cloud segment. | ## Promotion Audience Defined Using Campaigns If Campaigns define the target audience for promotions, use Campaign data in Apex or Flows to decide which promotion is applicable for a transaction: | Sequence | Task | | --- | --- | | 1 | Use the Get Loyalty Promotions for Transactions action to filter promotions that are applicable for the transaction. | | 2 | Get the Contact record of the loyalty program member associated with the transaction journal. | | 3 | Get the Campaign Member record that's associated with the Contact record. | | 4 | Use the list of promotions provided by the Get Loyalty Promotions for Transactions action to check which promotion is applicable for the member. | ## Template Apply Promotion Flow After determining a transaction's applicable promotion, use the Apply Promotion template flow to: | Promotion Type | Action | | --- | --- | | Standard | Credit points or issue a voucher based on the fulfillment action of the applicable promotion. | | Cumulative | Increase the member's usage towards achieving the applicable promotion's target. Check whether the member has achieved the promotion's target and credit points or issue a voucher based on the fulfillment action of the promotion. | To calculate the number of points to credit for a promotion, the Apply Promotion template flow considers the points factor of the promotion. To use the Apply Promotion flow template, make a copy of the template, and then define how the flow gets the promotion details to apply for the members. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_example.png) Example A loyalty program member completes three transactions in a month. For the first two transactions, the member accrues 200 points and 400 points respectively. In the third transaction, the member redeems 150 points. A different promotion is applicable for each transaction. For the first transaction, a standard promotion that issues a voucher to members is applicable. The flow issues a voucher to the member for the voucher definition that's related to the promotion. For the second transaction, a standard promotion with a point factor of 2 is applicable. The flow checks the promotion's point factor and credits 800 points to the member. The third transcation is eligible for a cumulative promotion that credits 500 points when the member meets the target of 4. For the promotion, the member's cumulative usage towards the promotion is updated to 1 by the flow. When the member achieves the promotion's target, the flow updates the member's cumulative promotion usage to 4 and credits 500 points to the member. # Apply Promotions Based on Members' Segments When processing a transaction journal, you can apply promotions based on the associated loyalty program member's segment. If you’re using a loyalty program process to process transaction journals, the rule that’s associated with the promotion automatically filters transactions that don’t belong to members who are part of the promotion’s segment. If you’re using a flow to process transactions, an action to determine which promotions are applicable for a member based on their segment. Or, you can use an API to find the member's segment and the promotions associated with the segment. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Growth or Loyalty Management - Advanced and Data Cloud
Complete these prerequisites in Data Cloud before using segment data: - [Create segments for your loyalty program members](https://help.salesforce.com/s/articleView?id=data.c360_a_create_a_segment.htm&type=5&language=en_US). For example, you can create segments based on the tiers of your loyalty program. - [Associate promotions with segments](https://help.salesforce.com/s/articleView?id=xcloud.add_segments.htm&type=5&language=en_US). - [Activate your segments](https://help.salesforce.com/articleView?id=c360_a_add_activation_target.htm&language=en_US) to the [Data Cloud Objects](https://help.salesforce.com/s/articleView?id=data.c360_a_audiences_objects.htm&type=5&language=en_US). After activating your segments to the Data Cloud Data Model Object, you can either: - Associate the promotion with the loyalty program process rule that checks and applies the promotion for eligible transaction journals. A rule that’s associated with a promotion, automatically filters transaction journals based on a set [promotion-based criteria](https://help.salesforce.com/s/articleView?id=xcloud.promotion_setup_processing_rules.htm&type=5&language=en_US). - Use the [Get a List of Promotions Applicable for a Member action](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_promotion_action_cdp.htm&type=5&language=en_US) to find out the list of promotions that a member is eligible for based on their segment. You can add this action within a flow by using the Flows Builder declaratively, or as an invocable action. - Query the Data Cloud Data Model Object by using the [Data Cloud Query API](https://developer.salesforce.com/docs/atlas.en-us.c360a_api.meta/c360a_api/c360a_api_query_call_overview.htm) to find out which segments a member is a part of. After the query confirms the member's segment, customize the template [Apply Promotions flow](https://help.salesforce.com/s/articleView?id=xcloud.track_promotions.htm&type=5&language=en_US) to apply promotions for transactions. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note After you associate a promotion with a segment, sometimes loyalty program process rules or Flow actions aren’t able to filter members based on their segments when applying promotions. It takes around one hour for loyalty program process rules and Flow actions to update after segments are associated with promotions. # Apply Scale Insights Get insights about your Apex code, reports, and search. View database and deployment recommendations. - **[ApexGuru Insights](https://help.salesforce.com/s/articleView?id=xcloud.apexguru_overview.htm&release=264.0.0&type=5)** Use AI and machine learning models to analyze your Apex code, surface performance antipatterns, detect unused and duplicated code, and generate prescriptive optimization recommendations. - **[Database Insights](https://help.salesforce.com/s/articleView?id=xcloud.database_insights_overview.htm&release=264.0.0&type=5)** Fix expensive SOQL queries and reduce database time. - **[Deployment Insights](https://help.salesforce.com/s/articleView?id=xcloud.deployment_insights_overview.htm&release=264.0.0&type=5)** Compare org performance before and after deployment to identify regressions introduced by recent changes. - **[Governor Limit Insights](https://help.salesforce.com/s/articleView?id=xcloud.governor_limit_insights_overview.htm&release=264.0.0&type=5)** Monitor your org's governor limit usage and address potential breaches before they affect performance. - **[Lightning Experience Insights](https://help.salesforce.com/s/articleView?id=xcloud.lex_insights_overview.htm&release=264.0.0&type=5)** Use on-demand insights to identify, analyze, and improve the performance of your custom Lightning pages and Lightning components. Lightning Experience Insights provides a high-level overview of your users’ experience, and detailed metrics to identify bottlenecks and optimize page load times. You can find this data inside the Performance Insights and Usage Insights dashboards. - **[Multi-Framework Insights (Beta)](https://help.salesforce.com/s/articleView?id=xcloud.mfw_insights.htm&release=264.0.0&type=5)** Use Multi-Framework Insights (Beta) to measure and improve the performance of your most-used Multi-Framework apps. The dashboard identifies up to ten apps with the highest total page views over the last seven days. You can drill down into each app to see more detailed analytics and visualizations. - **[Report Insights](https://help.salesforce.com/s/articleView?id=xcloud.report_insights_overview.htm&release=264.0.0&type=5)** Use on-demand insights to identify slow reports and improve their performance. - **[Search Insights](https://help.salesforce.com/s/articleView?id=xcloud.search_insights_overview.htm&release=264.0.0&type=5)** Use on-demand insights to get recommendations and improve your search performance. # Apply Taxonomy Tags to Content When a content taxonomist creates a content taxonomy for your org, you search for tags and add them to the content record. Tag your enhanced CMS content with taxonomy tags, and then define conditions that automatically add content items to a dynamic collection. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create, edit, or clone content: Any CMS workspace contributor role
To publish or unpublish content: A CMS workspace contributor role of content admin or content manager
To tag or untag content:

View Content Taxonomy

AND

any CMS workspace contributor role

You can add and remove tags from content in any state. When the content publishes, all changes to content tags go live and apply to the content item and its variants. - If the content has a status of draft or revised, then the changes to tags save. The changes to tags publish when the content next publishes. - If the content has a status of published and has no other unpublished changes, then the tags publish when you save. To classify content in an enhanced CMS workspace, apply content taxonomy tags. For the best [dynamic collection results](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_collections_dynamic_create.htm&release=264.0.0&type=5 "A dynamic collection continuously updates based on the conditions and available content in your channels. Tag your enhanced CMS content with taxonomy tags, and then define conditions that automatically add content items to the collection."), tag the content as specifically as possible. To add new tags to your enhanced CMS workspace, work with your content taxonomist to [manage terms in a content taxonomy](https://help.salesforce.com/s/articleView?id=xcloud.cms_taxonomy_create.htm&release=264.0.0&type=5 "Each org can have one, overarching content taxonomy. Create a new taxonomy, or use Data Loader to import an existing taxonomy. Then, add, edit, delete, and view terms in a content taxonomy."). 1. Open an enhanced CMS workspace. 2. Open the content detail page. - Click the content title. - Click **![down arrow image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_down_arrow.png)**, then select **Edit** from the row-level actions. 3. Open the Tags tab on the content detail page. Click **Tags**. 4. Search for tags and add them to the draft or published content. 5. To apply the tags to draft or revised content, save your changes. 6. To remove a tag from a content record, open the Tags tab on the content detail page. Then click the tag you want removed. 7. To make the tag changes available to your CMS channels, save and publish the tags. To make the content changes available to your CMS channels, publish the content. # Apply the Visualforce Page for Omniscript in a Community (Managed Package) For the managed package runtime, to configure the Visualforce Page for the Omniscript in a Community: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Locate and write down the Namespace prefix of your Salesforce Org. Go to Setup and click **Installed Packages**. 2. To create a Visualforce page, from Setup, click **Develop**, and then click **Pages**, and then click **New**. 3. Paste the sample Apex code into the page, replacing all other code. - Set **NS** equal to the value collected in Step 1. - Set **strObjectType** to the object where the button or link is located. - Set **strOmniScriptType** equal to the Type of the Omniscript. - Set **strOmniScriptSubType** equal to the SubType of the Omniscript. - Set **Language** equal to the Language of the Omniscript. - Set **Text** equal to any value, as long as it’s the same in both places. - Set **verticalMode** to **false** to launch the script in Horizontal Mode. - Version 2.5 or prefilling into hidden Steps and Elements only: If you’re using Omnistudio Data Mapper to prefill data into the Omniscript, set **DRBundle** equal to the Data Mapper Interface (Bundle) name. If you aren’t using Data Mapper to prefill data, delete `strPrefillDataRaptorBundle="DRBundle"` from the code. ```java
``` 4. Click **Save**. # Approvals for Rebate Management Use Approval Process to automate the process of approving rebate payout amounts for program members. An approval process automates how records are approved in Salesforce. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
User Permissions Needed
To set up approvals: System Administrator
To set up Rebate Management: Rebate Management Admin permission set
You can set up an approval process for these use cases. | Use Case | Object | | --- | --- | | To enroll members in a rebate program | Rebate Program Member | | To activate a rebate program | Rebate Program | | To approve member payout amounts | Rebate Program Member Payout | | To adjust rebate payout amounts | Rebate Payout Adjustment | With approval processes, you can ensure that supervisors and executives have tighter control over rebate processes because the financial implications are significant. #### See Also - [Prepare to Create an Approval Process](https://help.salesforce.com/s/articleView?id=platform.approvals_checklist.htm&type=5&language=en_US) # Approvals: What’s Different or Not Available in the Salesforce Mobile App Learn the differences between the Salesforce desktop site and the Salesforce mobile app. ## Approval Responses You can’t unlock a record that’s locked for approval. ## Salesforce Mobile App Notifications for Approval Requests - Notifications for approval requests aren’t sent to queues or delegates. For each approval step involving a queue, add individual users as assigned approvers, so those individuals can receive the approval request notifications in the mobile app. To have both queues and individual users as assigned approvers, select **Automatically assign to approver(s)** instead of **Automatically assign to queue** in the approval step. - Notifications for approval requests are sent only to users who have access to the record being approved. Assigned approvers who don’t have record access can receive email approval notifications, but they can’t complete the approval request until someone grants record access. ## Approvals in Chatter In the Salesforce mobile app, you can’t respond to approval requests from Chatter. To respond to approval requests, go to the Approvals navigation item. ## Approval Comments - The Salesforce mobile app prompts you for comments after you tap Approve or Reject. - The Approval History related list displays truncated comments. To see the full comment for a given approval instance, tap the instance, then tap **Comments**. ## Approval History Related List - The Approval History related list doesn’t include the Submit for Approval button. - When working with approvals in Experience Cloud sites, role-based external users can see and take action from the Approval History related list, but they can’t submit requests for approval. # Approve Time-Off Requests Stay on top of everyone's schedules. Approve time-off requests by worker or by object type. 1. Open **Service Resources** from the App Launcher. 2. Click the name of a service resource. 3. Click **Related**. 4. Click a time sheet from the Time Sheets list or an absence from the Absences list. 5. Click to edit the Status field. 6. Save your changes. # Archive Activities Tab The Activities tab opens the Activities Table in the default list view of logs in the Archive app. You can create your own custom list views to filter and sort this information. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note The main table provides a high-level overview of each process.
Default View Fields
Field Description
Archive Policy Definition Name given to the policy upon creation.
End Time Time and date when the action ended.
Failed Count Number Total number of records not processed.
Name

Unique name of the Salesforce activity.

To view the Archive Activity ID, and access further actions, click the name.

Policy Type

Process type that the policy runs.

Valid values are:

  • Archive
  • Import
  • Purge
Progress Bar showing a colored scale of the status.
Root Entity Name Object archived.
Status

Status of the current activity.

  • Aborted: Policy manually aborted during policy run.
  • Aborting: Aborted process has started.
  • Archive Timeout: Process automatically stopped because it took too long to run a specific task or the entire run.
  • Completed: Process completed successfully, and all records were processed.
  • Discarded: All records from this import activity were moved to the Recycle Bin.
  • Ended with Delete Failures: Process finished its run but failed to delete one or more designated items.
  • Ended With Errors: Process finished successfully, but some records weren't processed. You can download a CSV of the failed records from the Execution Details‌ page.
  • Failed: Process failed, and no records were archived. A CSV of the failed records is available.
  • Interrupted: Process was paused temporarily or moved due to system resource availability. The system automatically attempts to resume the task up to 10 times from the last saved state.
  • Max Interruptions: Process was abandoned after reaching the limit of 10 system interruptions and tries again.
  • No Records: Process ran successfully but found no records matching the policy criteria.
  • Pending: Process is in a queue waiting to run.
  • Process Exceeds 23h: Activity started and ran successfully until it reached a time limit. When a policy is set to run daily, this status indicates partial success before exceeding the time limit.
  • Process Exceeds 120h: Activity started and ran successfully until it reached a time limit. When a policy is set to run one time in a 5-day period, this status indicates partial success before exceeding the time limit.
  • Process Exceeds 168h: Activity started and ran successfully until it reached a time limit. When a policy is set to run weekly, this status indicates partial success before exceeding the time limit.
  • Query Timeout: Process stopped because the database query took too long to run.
  • Running: Process is actively running its tasks.
  • Started: Process was initiated and is in progress.
  • Too Many Failures: Process was abandoned after too many records failed to read or delete.
Succeeded Count Number of root records successfully processed.
Total Record Count Total Total number of records processed.
Type

Action performed from these available actions.

  • Analyzer
  • Archive
  • Archive Failed to Delete
  • Estimate
  • Export
  • Export and Download
  • Export to External Bucket
  • Import Data Archive
  • Import Data Load
  • Purge
  • Purge By Retention
  • Purge Estimation
  • Right To Be Forgotten (RTBF) SDK
  • Unarchive
  • Unarchive Retry
  • Unarchive SDK
## Review Process Details and Reports After you click the Activity name, the page opens on the Details tab. You can see detailed metrics and download reports for that activity. When available, you can also run the Retry Unarchive and Undo actions. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note The top of the page shows the Archive Activity ID. This ID is required for support cases. These reports are available for an activity. - Download Execution Details: Report showing every record that the process attempted to process, including successes and failures. - Download Failed Records: Report showing only the records that failed to process. Use this report to identify records and perform remediation. Details tab fields include:
Fields Description
Attempted Root Records Count Total number of root records, skipped root records, and failed records.
Failure Reason Description why record or activity failed, if applicable.
Record Size in MB Estimated total size, in megabytes (MB), of the processed records.
Skipped Root Records Count

Total number of root records that were skipped intentionally.

For example, data that is protected from being archived by using the Salesforce Data Protection Period setting.

- **[Undo an Archive Operation](https://help.salesforce.com/s/articleView?id=xcloud.archive_activities_tab.htm&release=264.0.0&type=5)** Salesforce admins can undo any completed Archive operation and restore records in the Archive app. - **[Abort an Archive Operation](https://help.salesforce.com/s/articleView?id=xcloud.archive_activities_tab.htm&release=264.0.0&type=5)** Abort a running activity in the Archive app. This process is identical for Unarchive and Export activities. ## Undo an Archive Operation Salesforce admins can undo any completed Archive operation and restore records in the Archive app. Users need the Archive Enable Unarchive permission set. 1. Go to the Activities tab. 2. From the dropdown list, select **All Logs**. 3. Locate the operation that you want to undo. 4. From the dropdown list, click **Undo**. ## Abort an Archive Operation Abort a running activity in the Archive app. This process is identical for Unarchive and Export activities. Common use cases for aborting a running activity include: - The process is taking too long to complete. - You ran the activity by mistake.
Archive Abort Permission Sets
Archive Abort Archive Activity Permission to abort running archive activity with Started status.
Archive Abort Export Activity Permission to abort running export activity with Started status.
Archive Abort Unarchive Activity Permission to abort running unarchive activity with Started status.
1. Go to the Activities tab. 2. Select the activity with a `Started` status that you want to abort. 3. Click the Activity name and select **Edit**. 4. Click **Abort**. 5. In the window, select a reason for aborting the operation from the dropdown list. This step is mandatory. The reason selected appears in the downloaded CSV file. 6. Click **Abort**. 7. Go to the Activities tab and view the Status column. Valid values for Status include: `Aborted`: Abort operation has completed, or operation hasn't started yet. `Aborting`: Abort operation is in progress. The process can take up to 90 minutes. During this period, any ongoing bulk record processing is canceled and the details of the abort process are logged in the CSV file. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note If you click **Abort** quickly, Status can change from `Started` to `Aborted`, skipping `Aborting` altogether. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note These fields can be seen as display fields in the activities log. - Abort Reason - Triggered By - Triggered On 8. From the Execution Details column, download the CSV file. This file provides information on what records were processed before the Abort action was triggered. # Archive Admin Permissions To secure sensitive archived data and manage storage efficiently, configure granular access levels for admins and end users. A role-based approach restricts unarchive or purge capabilities to authorized users or teams based on their specific operational requirements. | Permission Label | Description | API Name | | --- | --- | --- | | Archive Abort Archive Activity | Abort archive activities in progress. | `ArchiveAbort` | | Archive Abort Export Activity | Abort export operations currently running. | `ExportAbort` | | Archive Abort Unarchive Activity | Abort unarchive operations in progress. | `UnarchiveAbort` | | Archive Activities Sidebar | Access the Activities Sidebar page. | `ActivitiesSideBar` | | Archive Analyzer | Run storage analysis and create archive policies from the Storage Analyzer workflow. | `ArchiveAnalyzer` | | Archive Define Archive Policy | Create and manage archive policies. | `DefineArchivePolicy` | | Archive Define Purge Policy | Create and manage purge policies. | `DefinePurgePolicy` | | Archive Download Files | Download archived files. | `DownloadFiles` | | Archive Enable Export | Export archived records and files. | `Export` | | Archive Enable Unarchive | Unarchive archived records and files. | `Unarchive` | | Archive Enable Unarchive via SDK | Unarchive archived data by using SDK integrations. | `UnarchiveSdk` | | Archive Import Data | Import data into Archive. | `ImportData` | | Archive Launch Application | Open and use the Archive app. | `RunArchiveApp` | | Archive Override Widget Sharing Rules | Override widget sharing restrictions. | `ArchiveOverrideWidgetSharingRules` | | Archive Perform Legal Hold | Apply legal holds to records. | `PerformLegalHold` | | Archive Remove Legal Hold | Remove legal holds from records. | `Unhold` | | Archive Right to be Forgotten | Use the Right to Be Forgotten (RTBF) GDPR functionality to delete data. | `Rtbf` | | Archive Settings | Access and edit Archive settings. | `ArchiveSettings` | | Archive Use Archive App | Access the archive app for general operations. | `UseArchiveApp` | | Archive View Activities Page | View the archive activities page. | `ViewActivitiesPage` | | Archive View Archived Records | View archived records. | `ViewArchivedRecords` | | Archive View Global Search Page | Access the archive global search page. | `ViewSearchPage` | | Archive View Legal Hold Report Page | View the legal hold report page. | `ViewLegalHoldReportPage` | | Archive View Policies Page | Access the Archive policies list view. | `ViewPoliciesPage` | | Archive View Settings Page | View the archive settings page. | `ViewSettingsPage` | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Some permission names still reference "widget" because they match the labels in the product UI. ## Role-Based Assignment Examples Not every user needs full Archive access. Use these examples to assign granular permissions.
Role Access Granted Permissions Needed
Standard End User (Viewer) See archived records in the Archive component without unarchiving or deleting data.

Archive View Archived Records

To prevent file downloads, clone the standard permission set and remove the Download Archived Files system permission.

Compliance and Security Officer Manage data retention and permanent purging without giving full Salesforce Admin rights. Archive Purge Policy Permission, Archive Legal Hold Admin, and Archive Search
Help Desk User Restore records archived by mistake. Archive Enable Unarchive, or Archive Unarchive SDK for custom tools
# Archive Apex Data Queries Archive Apex Data Queries enable programmatic access to archived data in the Archive app. These data queries automate business processes, support third-party system integrations, create custom views and reports, and cross-reference archived data with active records. The Archive component and Archive Search provide options for manual data retrieval. Apex offers advanced capabilities, such as query parameters, filters, and pagination, for direct data access via code. Apex Data Queries features include: - Search archived records by using specified criteria. - Use partial matching with an asterisk (\*). - Return large datasets in batches of up to 1,000 records per page. - Apply up to six filters to refine your results. - Query archived records even if the object has been deleted from your production org. These system-related Salesforce objects are filtered out and aren't searchable via Apex. - `Feed` - `History` - `Relation` - `Share` To maintain optimal performance and make sure that only relevant archived data is returned, Archive excludes these objects from searches. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Files and Attachments can't be retrieved through Archive Apex. To access archived files, use the Archive component or Archive Search. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Archive Apex enforces these request limits. | Interval | Request Limit | | --- | --- | | Per Minute | 1,000 | | Per Hour | 30,000 | | Per Day | 100,000 | If you exceed this limit, you receive HTTP status code 429. ## Archive Apex Data Query Methods To define how you query archived data, set the method provided by Archive Apex. - Accessing Archive Data—The methods within `ArchiverAccessor` are designed to interact with archived records. Then you can build queries and retrieve data stored in the Archive product. - Defining Query Operations—These signatures tell you what kinds of queries you can perform by using Apex, such as global searches and filtered queries. - Guiding Usage—By examining method signatures, developers can understand the inputs and outputs required for their implementations. ## `performArchiverGlobalSearch` Method This method indicates the functionality to perform a global search on archived data. ## `Query` Parameters Apex Data Queries use several parameters to refine your search. Some parameters are required, while others are optional. Understanding how to configure each parameter helps you get the most accurate and relevant results. - Object Name—Specifies the type of Salesforce object to query. For example, `string sObjectName = 'Account'` specifies that the query targets Account records. This parameter is mandatory. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Each query targets a single object. Use separate queries to retrieve data from multiple objects. - Search Filters—Filters that narrow search results based on field conditions. - Field Name—The field that you want to filter by, such as `Name` or `CreatedDate` - Value or List of Values—The specific value or values that you want to match Example: Single Value Filter ``` SF_Archive.SearchFilter filter = new SF_Archive.SearchFilter('Name', 'test'); ``` This query returns records where the Name field matches the string "test". Example: Multiple Value Filter ``` SF_Archive.SearchFilter filter = new SF_Archive.SearchFilter('Status', new List{'Open', 'Closed'}); ``` This query returns records where the Status field matches the strings "Open" or "Closed." Handling Empty or Null Values—To search for records where a field is empty or null, add an empty string ("") to the List of Values. Example: ``` List filters = new List(); filters.add(new SearchFilter('Subject', '')); ``` This query returns Case records where the Subject field is either empty or null. Search filter limits: - Queries require at least 1 filter per query. - Queries can have up to 6 filters, combined with `AND` logic, per query. - Filters are combined using `AND` logic by default. `OR` logic isn't currently supported. - A filter's value list can't exceed 1,000 items. This parameter is mandatory. - Date Filters—To search based on dates, use the `DateRange` parameter and the mandatory filters. `DateRange` filters records by fields such as `ArchiveDate`, `CreatedDate`, or `ModifiedDate`. Example: Date Filter for Specific Date Query ``` Date todayDate = Date.today(); Date jan1st2024 = Date.newInstance(2024, 1, 1); DateRange dateRange = new DateRange('archive_date', jan1st2024, todayDate); ``` This query returns records archived between January 1, 2024 and today. Example: Date Filter for Multiple Date Range ``` List filters = new List(); SF_Archive.SearchFilter filter = new SF_Archive.SearchFilter('Name', 'test'); filters.add(filter); string sObjectName = 'Account'; Date myDate = Date.newInstance(2024, 1, 11); // January 11, 2024 Date myDate2 = Date.newInstance(2023, 12, 25); // December 12, 2023 SF_Archive.dateRange range = new SF_Archive.dateRange('CreatedDate', myDate, myDate); SF_Archive.dateRange range2 = new SF_Archive.dateRange('CreatedDate', myDate2, myDate2); list ranges = new list {range, range2}; SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, filters, ranges); ``` This query returns records archived between December 12, 2023 and January 11, 2024. Date filter recommendations: - To search based on the Archive Date, add the `archive_date` date field. - Use the Apex date format: MM/DD/YYYY. This parameter is optional. - Returned Fields—Specify fields to include in the results. If not specified, all fields are returned. Example: Return Specific Fields ``` List fields = new List{'Name', 'CreatedDate'}; ``` This query returns only the `Name` and `CreatedDate` fields for each record. This parameter is optional. - Page Size—Sets the number of records per query. The default number of records per query is 25, and the maximum is 1,000. Example: Custom Page Size ``` SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch('Account', filters, 100, fields); ``` This query returns 100 records per page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Exceeding 1,000 records in your query triggers a run-time error. This parameter is optional. - Sorting Direction—Sorts results by a field, such as `CreatedDate`. - Ascending (`asc`): Oldest to newest. - Descending (`desc`): Newest to oldest. Example: Sorting Query ``` SF_Archive.SortingDirection sortingDirection = new SF_Archive.SortingDirection('desc'); ``` This query returns records sorted in descending order based on their `CreatedDate`. This parameter is optional. ## `getNextPage` Method If the results don't all fit on the same page, this method calls the next page. ## `ScrollId` Parameter Use pagination to return large datasets by fetching results in pages of up to 1,000 records. To set up the pagination workflow, perform the initial query, use the `scrollId` from the response to fetch subsequent pages, and continue until `scrollId = '-1'.`. Example: Fetch Results with Pagination ``` // Perform initial search query SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch('Account', filters, 100, fields); // Get the search response SF_Archive.ArchiverAccessorSearchResponse searchResponse = res.getSearchResponseMap(); // Process first page of results system.debug('Total result count: ' + searchResponse.totalResultCount); system.debug('Records: ' + searchResponse.records); // Fetch next page using the scrollId if (searchResponse.scrollId != '-1') { SF_Archive.ArchiverAccessorResponse nextPageRes = SF_Archive.ArchiverAccessor.getNextPage(searchResponse.scrollId); SF_Archive.ArchiverAccessorSearchResponse nextPageResponse = nextPageRes.getSearchResponseMap(); system.debug('Next Page Records: ' + nextPageResponse.records); } ``` ## Access the Methods To find the method signatures, from Setup, enter Apex Classes in the Quick Find box, then select Apex Classes. Open the `ArchiverAccessor` class. Locate all methods listed under the `performArchiverGlobalSearch` namespace. ## Sample Data Query This example retrieves `Account` records by using these conditions. - Fields: `Name`, `CreatedDate` - Limit: 100 records per page - Name: Contains string "test" - Sorting: Descending by `CreatedDate` ``` List filters = new List(); SF_Archive.SearchFilter filter = new SF_Archive.SearchFilter('Name', 'test'); filters.add(filter); List fields = new List{'Name', 'CreatedDate'}; SF_Archive.SortingDirection sortingDirection = new SF_Archive.SortingDirection('desc'); SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch('Account', filters, 100, fields, sortingDirection); ``` ## Troubleshoot Common Errors | Error Code | Description | Resolution | | --- | --- | --- | | `INTERNAL_ERROR` | An unexpected failure occurred. | Contact support with error details. | | `RESOURCE_LIMIT_ERROR` | Exceeded pagination or query size limits. | Reduce page size or refine search filters. | | `VALIDATION_ERROR` | Missing or invalid search criteria. | Make sure that all fields and filters are valid. | Additional Recommendations - Monitor your API usage to avoid hitting limits. - To cast the response to an object, serialize it into JSON and then deserialize it back into an object. - Verify that fields are enabled and accessible. - Double-check all query parameters. - For unresolved issues, contact Salesforce Support with detailed logs. For step-by-step testing procedures, see [Archive Apex Testing](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_testing.htm&release=264.0.0&type=5 "Before working in your production environment, test your Apex Class Wrapper in Archive Apex in the Archive app."). - **[Archive Apex Data Queries—Code Example](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_data_queries.htm&release=264.0.0&type=5)** In this code example, a filter, a date range, and an archive search request are validated through the status code in the Archive app. - **[Archive Apex Data Queries—Sample Use Case 1](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_data_queries.htm&release=264.0.0&type=5)** This example use case shows how to build and customize a component that displays High Priority Accounts in the Archive app. - **[Archive Apex Data Queries—Sample Use Case 2](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_data_queries.htm&release=264.0.0&type=5)** This example use case shows how Archive Apex handles tasks without exceeding governor limits, such as CPU limits or Timeout callouts, in the Archive app. ## Archive Apex Data Queries—Code Example In this code example, a filter, a date range, and an archive search request are validated through the status code in the Archive app. A `getNextPage` call following `(scrollId != -1)` is included because the size of the results is limited in the `performArchiverGlobalSearch` call. ``` string sObjectName = 'Account'; listrequest = new list(); SF_Archive.SearchFilter filter1 = new SF_Archive.SearchFilter('Name', 'test'); request.add(filter1); SF_Archive.dateRange range = new SF_Archive.dateRange('CreatedDate', system.today()-150, system.today()); SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, request, range); if(res.getStatusCode() == 200){ system.debug('code: ' + res.getStatuscode()); SF_Archive.ArchiverAccessorSearchResponse searchResponse = res.getSearchResponseMap(); system.debug('count: '+ searchResponse.totalResultCount); system.debug('scrollid: '+ searchResponse.scrollId); system.debug('list size: '+ searchResponse.records.size()); string scrollId = searchResponse.scrollId; integer page = 1; while(scrollId != '-1'){ page++; SF_Archive.ArchiverAccessorResponse secondPage = SF_Archive.ArchiverAccessor.getNextPage(searchResponse.scrollId); if(secondPage.getStatusCode() == 200){ SF_Archive.ArchiverAccessorSearchResponse searchResponse2 = secondPage.getSearchResponseMap(); scrollId = searchResponse2.scrollId; system.debug('count: '+ searchResponse2.totalResultCount); system.debug('scrollid: '+ searchResponse2.scrollId); system.debug('list size: '+ searchResponse2.records.size()); system.debug('page number: '+ page); } else{ system.debug('response is != 200: '+ secondPage.getStatusCode()); system.debug('body: '+ secondPage.getBody()); break; } } } else { system.debug('status code erorr|: '+ res.getStatusCode()); system.debug('status code message|: '+ res.getErrorMessage()); } ``` ## Archive Apex Data Queries—Sample Use Case 1 This example use case shows how to build and customize a component that displays High Priority Accounts in the Archive app. ### Use Case Your business requires that the Tier 3 Support Team has access to view archived Cases with a high-priority status. This example shows how to: - Create a customized Lightning Web Component (LWC). - Pull archived data by using Apex data queries. - Apply the filter (High Priority). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Other filters can be customized by referring to the code in Archive Apex Data Queries — Code Example. This example is limited to 25 records. Apex enables you to set the results at 1,000 per page. The default is 25, with the option of pagination through the results. ### Component Displaying High-Priority Cases Sample SdkUseCaseWidget.js In this code example, the parameter is `AccountRecordId`. ``` import { LightningElement, api, track } from 'lwc'; import getCases from '@salesforce/apex/ArchiveSdk.getCases'; export default class SampleSdkUseCaseWidget extends LightningElement { @api recordId; columns = [ { label: 'Case Number', fieldName: 'caseNumber', type: 'text', cellAttributes: {alignment: 'center'}}, { label: 'Subject', fieldName: 'subject', type: 'text' , cellAttributes: {alignment: 'center'}, }, { label: 'Priority', fieldName: 'priority', type: 'text', cellAttributes: {alignment: 'center'}, }, { label: 'Status', fieldName: 'status', type: 'text', cellAttributes: {alignment: 'center'}, } ]; @track records; @track data @track _loading; async connectedCallback() { this._loading = true; try { const result = await getCases({parentId: this.recordId}) this.records = result; this._loading = false; } catch (error) { this._loading = false; }} } ``` Sample SdkUseCaseWidget.html The Apex controller that the LWC uses calls Apex Data Queries. ``` SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, request, fields, range); ``` This is the call for Archive Apex. It includes these parameters. - sObjectName—Depicts the Search - Filters—Used to retrieve the data - Fields—The projected fields to return from data. - Range—The date range used to query the data. ``` ``` ArchiveSdk.cls This code block is the Apex controller. ```apex public with sharing class ArchiveSDK { @AuraEnabled public static List getCases(String parentId) { // Create an empty list to hold maps with String keys and Object values List> totalRecords = new List>(); // Create a list to store search filter objects List request = new List(); // Create a search filter for the 'AccountId' field with a given 'parentId' value SF_Archive.SearchFilter filter1 = new SF_Archive.SearchFilter('AccountId', parentId); // Create a search filter for the 'Priority' field with a given 'High' value SF_Archive.SearchFilter filter2 = new SF_Archive.SearchFilter('Priority', 'High'); // Add the filters to the request list request.add(filter1); request.add(filter2); // Define the object name as 'Case' String sObjectName = 'Case'; // Create a list of Strings representing field names to be retrieved from Archive DB List fields = new List{'CaseNumber', 'Subject', 'Priority', 'Status'}; // Create the DateRange based on the created date SF_Archive.DateRange range = new SF_Archive.DateRange('CreatedDate', system.today() - 150, system.today()); // Perform an initial global search and store the response SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, request, range); // Check if the HTTP response status code is 200 (success) if (res.getStatusCode() == 200) { system.debug('code: ' + res.getStatuscode()); // Retrieve the initial search response map SF_Archive.ArchiverAccessorSearchResponse searchResponse = res.getSearchResponseMap(); system.debug('count: ' + searchResponse.totalResultCount); system.debug('scrollid: ' + searchResponse.scrollId); system.debug('list size: ' + searchResponse.records.size()); // Store the scroll ID for pagination String scrollId = searchResponse.scrollId; // Initialize the page number Integer page = 1; // Add the records from the initial search to the totalRecords list totalRecords.addAll(searchResponse.records); // Continue to fetch additional pages while the scroll ID is not '-1' while (scrollId != '-1') { page++; // Get the next page of search results using the UPDATED scrollId SF_Archive.ArchiverAccessorResponse nextPageResponse = SF_Archive.ArchiverAccessor.getNextPage(scrollId); // Check if the HTTP response status code is 200 (success) if (nextPageResponse.getStatusCode() == 200) { // Retrieve the search response for the current page SF_Archive.ArchiverAccessorSearchResponse searchResponse2 = nextPageResponse.getSearchResponseMap(); // CRITICAL FIX: Update the scrollId with the value from the new response scrollId = searchResponse2.scrollId; system.debug('count: ' + searchResponse2.totalResultCount); system.debug('scrollid: ' + searchResponse2.scrollId); system.debug('list size: ' + searchResponse2.records.size()); system.debug('page number: ' + page); // Add the records from the current page to the totalRecords list totalRecords.addAll(searchResponse2.records); } else { // Output an error message if the HTTP response status code is not 200 system.debug('response is != 200: ' + nextPageResponse.getStatusCode()); system.debug('body: ' + nextPageResponse.getBody()); // Break out of the loop if there is an error break; } } // End of while loop } else { // Handle error from initial search system.debug('status code error: ' + res.getStatusCode()); system.debug('status code message: ' + res.getErrorMessage()); } // Return the list of total records List result = new List(); return CaseTableWrapperExample.getCasesTable(totalRecords); } } ``` CaseTableWrapperExample.cls Helper class to formulate class from Apex to LWC ``` public class CaseTableWrapperExample{ public static List getCasesTable(list> cases){ List caseReturnList = new List(); for(Map caseRecord: cases){ caseRecord tempCase = new caseRecord(); tempCase.caseNumber = String.valueOf(caseRecord.get('CaseNumber')); tempCase.id = String.valueOf(caseRecord.get('Id')); tempCase.origin = String.valueOf(caseRecord.get('Origin')); tempCase.status = String.valueOf(caseRecord.get('Status')); tempCase.subject = String.valueOf(caseRecord.get('Subject')); tempCase.priority = String.valueOf(caseRecord.get('Priority')); caseReturnList.add(tempCase); } return caseReturnList; } public class caseRecord { @AuraEnabled public string caseNumber; @AuraEnabled public string id; @AuraEnabled public string origin; @AuraEnabled public string status; @AuraEnabled public string priority; @AuraEnabled public string subject; }} ``` The above code describes a sample scenario whereby you can add LWC as a component to the Lightning page. To view the actual Lightning data table, add this code to the `sampleSdkUseCaseWidget.js-meta.xml` file. Then add the Archive component to the Lightning page. ``` ; 55.0 true lightning__RecordPage lightning__AppPage ``` ## Archive Apex Data Queries—Sample Use Case 2 This example use case shows how Archive Apex handles tasks without exceeding governor limits, such as CPU limits or Timeout callouts, in the Archive app. For more information, see [Apex Governor Limits](https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_apexgov.htm). ### Use Case Your business requires that the Tier 3 Support Team has access to view archived Cases with a high-priority status. This example shows how to work around an error when the number of archived records retrieved via Apex is too large. The error reads: `SF_Archive.ArchiverAccessor.ArchiverAccessorException: Exceeded time allotted for callout, please contact support`. Code from these Apex classes creates this use case. The `ArchiveSecondPageJob` class processes paginated data from Archive by using a scroll ID, making callouts as needed. It runs asynchronously via the Queueable interface, tracking the total execution time to avoid exceeding limits and enqueuing itself for continued processing if necessary. The class handles responses, updates the scroll ID, and logs details about each retrieved data page. ``` public class ArchiveSecondPageJob implements Queueable,Database.AllowsCallouts {           private String scrollId;        private long totalTime;        private integer pageNumber;        public archiveSecondPageJob(String prevScrollId, integer pageNumber) {            scrollId = prevScrollId;            this.pageNumber = pageNumber;        }        public void execute(QueueableContext context) {            system.debug('executing');            doExecute();        }        private void doExecute() {                SF_Archive.ArchiverAccessorSearchResponse searchResponse = null;                integer page = 1;                long totalTime = 0;                           while(scrollId != '-1')                        {                                   //avoid 12000 ms limit                            if(totalTime > 90000){                                system.debug('Creating new task');       archiveSecondPageJob q = new archiveSecondPageJob(scrollId,this.pageNumber);                                System.enqueueJob(q);                                return;                            }                            //Get the next page using the scrollId                                 Long startTime = DateTime.now().getTime();                             SF_Archive.ArchiverAccessorResponse nextPage = SF_Archive.ArchiverAccessor.getNextPage(scrollId);                             Long stopTime = DateTime.now().getTime();                            totalTime += stopTime - startTime;                            if(nextPage.getStatusCode() == 200){                                     this.pageNumber++;                                SF_Archive.ArchiverAccessorSearchResponse searchResponse2 =nextPage.getSearchResponseMap();                                      scrollId = searchResponse2.scrollId;                                system.debug('count: '+ searchResponse2.totalResultCount);                                    system.debug('scrollid: '+ searchResponse2.scrollId);                                 system.debug('list size: '+ searchResponse2.records.size());                                  system.debug('body: '+ searchResponse2.records);                                  system.debug('page: '+ pageNumber);                                  system.debug('time: '+ totalTime);                             }                                   else{                                           system.debug('response is != 200: '+ nextPage.getStatusCode());                                           system.debug('body: '+ nextPage.getBody());                                return;                            }                                   }        } } ``` The `ArchiveSearch` class performs a search on the Case object by using specific filters, retrieves the results, and logs details such as the total count and scroll ID. If the search returns a valid scroll ID, indicating more pages of results, it enqueues the `archiveSecondPageJob` to process the next page asynchronously. This class essentially initiates the search and hands off further processing to the previously defined `archiveSecondPageJob`. Here's the format for the initial search call. ``` public class ArchiveSearch {          public void doSearch(){                  string sObjectName = 'Case';         list request = new list();              SF_Archive.SearchFilter filter1 = new SF_Archive.SearchFilter('Priority', 'High');         request.add(filter1);                      list fields = new list{'CaseNumber', 'Id'};                  SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch(sObjectName, request, fields);            if(res.getStatusCode() == 200){            system.debug('code: ' + res.getStatuscode());            SF_Archive.ArchiverAccessorSearchResponse searchResponse = res.getSearchResponseMap();            system.debug('count: '+ searchResponse.totalResultCount);            system.debug('scrollid: '+ searchResponse.scrollId);            system.debug('list size: '+ searchResponse.records.size());            string scrollId = searchResponse.scrollId;            integer page = 1;               if(scrollId != '-1'){                system.debug('calling next page');                integer pageNumber = 2;                archiveSecondPageJob q = new archiveSecondPageJob(scrollId, pageNumber);                System.enqueueJob(q);    }}}} ``` For more information, see [Salesforce Apex Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_dev_guide.htm). #### See Also - [Archive Apex Data Queries—Code Example](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_data_queries.htm&release=264.0.0&type=5 "Archive Apex Data Queries enable programmatic access to archived data in the Archive app. These data queries automate business processes, support third-party system integrations, create custom views and reports, and cross-reference archived data with active records.") - [Archive Component Restriction Rules](https://help.salesforce.com/s/articleView?id=xcloud.archive_widget_restriction_rules.htm&release=264.0.0&type=5 "Control end-user visibility in Salesforce of specific archived records according to object sharing tables in the Archive app. Applicable to Archive Single Objects and Archive Multiple Objects components.") # Archive Apex Testing Before working in your production environment, test your Apex Class Wrapper in Archive Apex in the Archive app. ## MockHttpResponseGenerator.cls This code depicts the mock for the callout. The `MockHttpResponseGenerator` class implements the `HttpCalloutMock` Apex interface. ``` @isTest global class MockHttpResponseGenerator implements HttpCalloutMock { public String fakeResponseJson; public integer statusCode; String redirectHeader; public MockHttpResponseGenerator(String fakeResponseJson,Integer statusCode){ this.statusCode = statusCode; this.fakeResponseJson = fakeResponseJson; this.redirectHeader = '/example/test'; } public HTTPResponse respond(HTTPRequest req) { HTTPResponse res = new HTTPResponse(); res.setBody(this.fakeResponseJson); res.setStatusCode(this.statusCode); res.setHeader('Location', this.redirectHeader); return res; } } ``` ## SearchSdkTest.cls This code tests the global search functionality of the `SF_Archive.ArchiverAccessor` by setting up a mock HTTP response using the `MockHttpResponseGenerator` class. This test verifies that the search operation returns the expected JSON data and status code. ``` @isTest public with sharing class SearchSdkTest { @isTest private static void searchSdk() { String jsonBody = '{"records":[{"CaseNumber":"01916767","Id":"500Xx000000XXXXXX"}],"total_result_count":1,"scroll_id":"-1"}'; SF_Archive.ArchiverAccessor.setMock(new MockHttpResponseGenerator( jsonBody, SF_Archive.ArchiverAccessorResponse.HTTP_200_OK)); List filters = new List{ new SF_Archive.SearchFilter('Name', 'test') }; Test.startTest(); SF_Archive.ArchiverAccessorResponse res = SF_Archive.ArchiverAccessor.performArchiverGlobalSearch('Account', filters); Test.stopTest(); System.assertEquals(SF_Archive.ArchiverAccessorResponse.HTTP_200_OK, res.getStatusCode()); System.assertEquals(jsonBody, res.getBody()); } } ``` # Archive Apex—Right to Be Forgotten (RTBF) Data privacy regulations grant individuals the Right to Be Forgotten (RTBF), requiring organizations to securely erase personal data upon request. Archive Apex enables compliance by identifying and deleting specific data from the Archive app, ensuring thorough removal while preserving the integrity of other archived data. ## RTBF Filter Criteria To process an RTBF request, specify the appropriate filter criteria. For example: | Criteria | Example | | --- | --- | | Field Name | Employee ID | | Object | Contact | | Value | ID 123456789011121314 | ## Important Considerations - Submissions are limited to 10,000 requests per day with a 10,000 root record search limit. - The RTBF deletion process extends to directly and indirectly related child records within a hierarchy. - Overlapping search results can mark some records as already deleted in the audit file. - If the search result limit is reached, Apex activity status displays a `200` status code with this error. `Request processed. Maximum search results reached. Refine your search or submit a new request.` - Most standard RTBF requests complete within 30 minutes. - For optimal results, target the root object. - Object and Field Name filters aren't case-sensitive. - Archive doesn't support partial deletion. ## RTBF Behavior for Child Records in an Archived Hierarchy When executing an RTBF request on a child record, the request removes the entire archived hierarchy associated with it. For example, if you search for a specific Case record and submit an Archive RTBF request, the request removes the Case, its associated Tasks, and its related Account root record. Because these records were archived together, RTBF deletes the entire archived hierarchy. However, if the Account was archived separately, running RTBF on the Case record removes only the Case and its Tasks, but not the Account record. ## How RTBF Works The RTBF process runs as an asynchronous process and follows these sequential API calls. - Data Identification—Apex queries Archive to locate all records matching the specified filter criteria. - Data Deletion—Apex sends a deletion request to Archive, removing all matching records. When the process is complete, an RTBF activity icon appears under the Activities tab in Archive Console. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Purge queries only objects archived as root objects. RTBF can target root objects and child records. ## RTBF Request Example A former employee, Maria Johnson, submits an RTBF request to delete all personal data from your system. Your company archives employee records along with their email correspondence, customer interactions, and project assignments. To follow the RTBF request, use this filter criteria. | Object | Field Name | Value | | --- | --- | --- | | Contact | Email | [Maria@own.com](mailto:Maria@own.com) | | Case | Employee ID | 987654321 | | Task | Assigned To | Maria Johnson | | Email | Sender | [Maria@own.com](mailto:Maria@own.com) | | Document | Owner | Maria Johnson | This request ensures the complete removal of Maria's data, including her contact information, cases she was involved in, tasks assigned to her, and all email and document records linked to her. This process helps maintain compliance with data privacy regulations while ensuring a thorough and accurate deletion of sensitive information. ## API Methods and Response Handling ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Verify that the Filter Criteria are specific so you don't unintentionally remove records. We recommend validating your criteria by running the query on Apex Data Queries before submitting the RTBF request.
Input Output Definition
ArchiverAccessorResponse
  • ArchiverAccessorResponse.getBody();

    String that contains the requestId for follow up.

  • ArchiverAccessorResponse.getStatusCode();
  • ArchiverAccessorResponse.getErrorMessage();
The response from the Forget API call. Returns a requestId to track the status of the request by using the getRTBFStatus method.
Criteria(string sObjectName, string fieldName, string value)    
forgetArchivedRecords(list<Criteria> inputFilters) ArchiverAccessorResponse Public method that creates a Forget request to Archive and a list of criteria to delete.
getRTBFStatus(string requestId) A CSV report containing all the details of the information that was deleted. Public method that gives you the ability to follow up with your RTBF request.
- **[Archive Apex—Run a RTBF Request](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_rtbf.htm&release=264.0.0&type=5)** Manually test Archive Apex and run a RTBF request in the Archive app. - **[Archive Apex—RTBF Use Case Scenarios](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_rtbf.htm&release=264.0.0&type=5)** Use case scenarios for RTBF in the Archive app. - **[Archive Apex—Anonymize PII in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_rtbf.htm&release=264.0.0&type=5)** Anonymize personally identifiable information (PII) in archived records without deleting the record itself. Anonymization replaces sensitive values with irreversible placeholders to help you comply with privacy regulations while retaining the record structure of the Archive app. ## Archive Apex—Run a RTBF Request Manually test Archive Apex and run a RTBF request in the Archive app. 1. Click the Settings icon. 2. Select **Developer Console**. 3. To open the console, press `F12` or `Ctrl+Shift+I` on Windows, or `Cmd+E` on Mac. 4. In the console, execute this code to create a criteria list, send a RTBF request, and get the `requestId` from Archive. ``` SF_Archive.Criteria criteria1 = new SF_Archive.Criteria('Account', 'Name', 'example name'); list lst = new list(); lst.add(criteria1); SF_Archive.ArchiverAccessorResponse response = SF_Archive.ArchiverAccessor.forgetArchivedRecords(lst); Map values = (Map)JSON.deserialize(response.getBody(), Map.class); String requestId = values.get('request_id'); system.debug(requestId); ``` 5. Click **Execute**. The request begins. When completed, the `requestId` is stored in the Execution Log. ### View the Status of the RTBF Request After you send a RTBF request, you can view the status of the request. 1. At the top-right of the page, click the Settings icon. 2. Select **Developer Console**. 3. Press `Command + E`. 4. Using the `requestId` for your RTBF request, run this code. ``` SF_Archive.ArchiverAccessorResponse reportResponse = SF_Archive.ArchiverAccessor.getRTBFStatus(requestId); system.debug(reportResponse.getBody()); ``` 5. Click **Execute**. The status request begins. When completed, one of these statuses is displayed in the Execution Log. - `Request failed, please contact support.` The request was unsuccessful and failed. - `Request handled, no matching results were found.`: There were no records matching the specified criteria. - `Request is open. Scan is still in progress.` The request is still in progress. When the request finishes successfully, you receive a CSV report containing all the details of the information that was deleted. The CSV report contains this information. | Field | Description | | --- | --- | | Criteria Record | The record field that matches the deletion criteria of the request. | | Criteria Record Type | The criteria of the request. | | Related Salesforce ID That Provoked Deletion | The row that's referred to by another record in the table that also matches the criteria. | | Salesforce ID | The ID of the record contained in the report row. | | Status | Indicates if the record was deleted or not. | #### RTBF Common Errors Invalid Criteria - Field must match an object. - No more than one criteria with the same object is allowed. - You can send up to 10 criteria per request. No Results - Value can't be partial. - Criteria must be of record type that has been archived. For example, if you have an Account with ID `X` and you archived the cases belonging to that ID, you must exclude cases belonging to that Account. To achieve this, create this filter criteria. ``` Object type: Case, field: AccountId, value: X ``` ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note The common mistake is creating this filter criteria. ``` Object type: Account, field: Id, value: X ``` This criteria doesn't delete anything because Archive doesn't have the relevant Account. ## Archive Apex—RTBF Use Case Scenarios Use case scenarios for RTBF in the Archive app. ### Scenario 1: RTBF with Multiple Objects Jane Doe is a customer of XYZ Bank, where she has had an account for the past 2 years. Recently, she decided that she wants to exercise her RTBF under the General Data Protection Regulation (GDPR). Jane believes that the bank holds unnecessary personal data about her and wants it erased from their records. Jane submits her RTBF request to XYZ Bank and specifies the personal data that she wants erased, which can include account information, transaction history, and any other personal data held by the bank. The bank proceeds to identify and locate Jane's personal data. RTBF Request | Criteria | Filter | Filter | Filter | Filter | | --- | --- | --- | --- | --- | | Object | Account | Transaction\_c | Case | Email | | Field Name | Name | Transaction user | Customer Name | From | | Value | Jane Doe | Jane Doe | Jane Doe | Jane Doe | The RTBF request can contain up to 10 separate objects. Results: Archive finds 1 Account, 2,000 Transactions, 15 Cases as roots, and 30 emails. ### Scenario 2: RTBF Single Object A pharmaceutical company released an experimental drug, Eddy's Elixirs, to treat arthritis. However, it resulted in severe adverse reactions among patients. After recalling the drug, the company submitted a RTBF request to remove all public records and digital content related to Eddy's Elixirs. RTBF Request | Criteria | Filter | | --- | --- | | Object | Case | | Field Name | Drug Name | | Value | Eddy's Elixirs | Results: Archive finds 1,000 Cases as roots and 1,000 patient records archived underneath the root as child records. It removes them all. One Activity is created in the Archive Console Activities tab, showing the RTBF icon. ### Scenario 3: RTBF Over 10,000 Root Records Found Emily Jones, a regular user of a popular social media platform called ConnectWorld, deactivates her account and requests to exercise her RTBF under data protection regulations. RTBF Request | Object | Filter | Filter | Filter | | --- | --- | --- | --- | | Object | User Account | Contact | Case | | Field Name | Name | Phone | Related Id | | Value | Account id For Emily Jones | Emily's phone number | Account Id For Emily Jones | Results: Archive finds 20,000 root Case records, 300,000 Contacts and 10,000 Cases as roots, and 150,000 Contacts archived underneath the root as child records are removed. One Activity is created in the Archive Console Activities tab, showing the RTBF icon. `getRTBFStatus` returns a status code 200 with the error message "Request processed. Maximum search results reached. Refine your search or submit a new request to see more records". Archive can only process up to 10,000 root records per RTBF Apex request. To solve this error, run the query again to retrieve the remaining records. ## Archive Apex—Anonymize PII in the Archive App Anonymize personally identifiable information (PII) in archived records without deleting the record itself. Anonymization replaces sensitive values with irreversible placeholders to help you comply with privacy regulations while retaining the record structure of the Archive app. Anonymization, also known as masking, helps you comply with privacy requests, such as the Right to Be Forgotten (RTBF). This process performs an in-place update on archived records. Unlike a purge action, which permanently deletes data, anonymization replaces specific sensitive values with generic text, such as redacted@example.com. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This feature is available only through Archive Apex. It isn't available in the UI. How Anonymization Works The system detects PII fields, such as Name, Email, Phone, and Address, by using object metadata. When you submit a request, the system masks original PII values with irreversible placeholders. Non-PII data, such as record IDs and timestamps, remains unchanged and searchable. Anonymization is comprehensive. When you anonymize a root record, the anonymization process automatically cascades to all related child records within the same archived hierarchy. For example, anonymizing a Contact record also anonymizes PII in that record’s related Tasks and Events. Important Considerations - The anonymization process is permanent. You can't recover or view original PII values after anonymization. - You can anonymize a record only one time. If you submit a duplicate request for an anonymized record, the system ignores it. - Anonymization shares the standard Archive RTBF rate limit of 10,000 requests per org per day. - You can't manually select fields to anonymize. The system identifies PII fields automatically based on the Recover algorithm. - You can't anonymize records that are legally held. The system automatically excludes records currently under legal hold or retention lock. #### See Also - [Manage Personal User Information Visibility for External Users](https://help.salesforce.com/s/articleView?id=platform.users_manage_personal_info_visibility.htm&type=5&language=en_US) ### Submit an Anonymization Request Define your target criteria and submit an anonymization job by using the `SF_Archive.ArchiverAccessor` Apex class. Make sure that you meet these requirements. - The user running the Apex code has permission to access the `SF_Archive` namespace. - Access to the Developer Console or an IDE to run Execute Anonymous Apex. 1. Open the Developer Console or your preferred Apex execution tool. 2. Open an Execute Anonymous window. 3. To define the criteria and submit the request, run this code. This code block anonymizes the email address field on a Contact record. ``` // 1. Define the criteria for the records to anonymize. // Syntax: new Criteria('ObjectAPIName', 'FieldAPIName', 'ValueToMatch'); List criteriaList = new List(); // Example: Anonymize a specific Contact by Email criteriaList.add(new SF_Archive.Criteria( 'Contact', 'Email', 'mickey.mouse@example.com' )); // 2. Submit the anonymization request. SF_Archive.ArchiverAccessorResponse response = SF_Archive.ArchiverAccessor.maskArchivedRecords(criteriaList); // 3. Process the response to get the request ID. Map values = (Map)JSON.deserialize(response.getBody(), Map.class); String requestId = values.get('request_id'); // Output the request ID for tracking. System.debug('Anonymization Job Submitted. Request ID: ' + requestId); ``` ### Verify Anonymization Status Check the status of your anonymization job and retrieve the anonymization results by using the request ID generated during submission. Anonymization is an asynchronous process. After you submit a request, use the returned request ID to track its progress and verify the results. To check the job status and retrieve the anonymization results, run this code in the Execute Anonymous window. ``` // Paste the Request ID found in the Debug Log from the anonymization request. // Example: String requestId = '0Qn5e000000abcD'; String requestId = 'YOUR_REQUEST_ID_HERE'; // Check the status. When the job completes, the response body contains the masking results in CSV format. SF_Archive.ArchiverAccessorResponse response = SF_Archive.ArchiverAccessor.getMaskingStatus(requestId); System.debug('Anonymization Results: ' + response.getBody()); ``` ### Anonymization Results Review how PII fields appear after the anonymization process is complete. When the job status is `HANDLED`, the system updates the archived data immediately. - Searches that use the original PII like an email address return no results. - Searches that use non-sensitive identifiers like a record ID return the anonymized record. - When you view the record via Search, Export, or Unarchive, PII fields show placeholder values. | Field | Original Value | Anonymized Value | | --- | --- | --- | | Name | Mickey Mouse | redacted\_first\_name | | Email | mickey.mouse@example.com | redacted@example.com | | Phone | +1-415-555-1234 | 000-000-0000 | | ContactId | 003XX0000123AbC | 003XX0000123AbC | # Archive App Manage growing data volumes and improve system performance by archiving old or inactive data. The Archive app not only enhances system performance by reducing data volume but also helps you maintain accurate and consistent data. You keep only important and reliable information in production. - **[Get Started with the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_get_started_with_archive.htm&release=264.0.0&type=5)** The Archive app helps you manage storage costs and improve performance. Archive moves historical data out of your org. - **[Archive Admin Permissions](https://help.salesforce.com/s/articleView?id=xcloud.archive_admin_permissions.htm&release=264.0.0&type=5)** To secure sensitive archived data and manage storage efficiently, configure granular access levels for admins and end users. A role-based approach restricts unarchive or purge capabilities to authorized users or teams based on their specific operational requirements. - **[Authenticated User Permission Requirements for Archive](https://help.salesforce.com/s/articleView?id=xcloud.archive_authenticated_user_permission_requirements.htm&release=264.0.0&type=5)** Archive connects to your Salesforce org through the API via an Authenticated User. This user account serves as the integration point for all Archive operations. - **[Troubleshoot OAuth and Connected Apps Access Blockages](https://help.salesforce.com/s/articleView?id=xcloud.archive_troubleshoot_oauth_connected_apps_access.htm&release=264.0.0&type=5)** Resolve OAuth and Connected Apps issues that block access when you authenticate the Archive app. - **[Hyperforce Infrastructure in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_hyperforce_infrastructure.htm&release=264.0.0&type=5)** Your Archive region—not your Salesforce org's Hyperforce status—determines whether Archive uses an authenticated user or the Platform Integration User (PIU), and which setup, security, and import and export options you see. - **[Archive Regions and IP Addresses for Allowlisting](https://help.salesforce.com/s/articleView?id=xcloud.archive_regions_and_ip_addresses_for_allowlisting.htm&release=264.0.0&type=5)** Find the AWS data center locations where Archive stores data. To ensure successful connection requests, add the IP addresses for your specific region to your organization's allowlist. - **[Archive Dashboard (Home Tab)](https://help.salesforce.com/s/articleView?id=xcloud.archive_dashboard_home_tab.htm&release=264.0.0&type=5)** The Archive app dashboard under Home provides a comprehensive overview of your data, file storage, and other essential metrics. - **[Run an Archive Field-Level Security (FLS) Report](https://help.salesforce.com/s/articleView?id=xcloud.archive_run_an_archive_fls_report.htm&release=264.0.0&type=5)** To identify which fields to include or exclude during the archive process, run a Field-Level Security (FLS) Report in the Archive app. - **[Archive Storage Analyzer](https://help.salesforce.com/s/articleView?id=xcloud.archive_storage_analyzer.htm&release=264.0.0&type=5)** Analyze data and file storage consumption in your org to identify archiving opportunities and create policies directly from the analysis workflow. - **[Configure Archive Settings](https://help.salesforce.com/s/articleView?id=xcloud.archive_configure_archive_settings.htm&release=264.0.0&type=5)** Configure settings to archive, unarchive, purge, search, display, and export records in the Archive app. - **[Get Started with Archive Policies](https://help.salesforce.com/s/articleView?id=xcloud.archive_get_started_with_archive_policies.htm&release=264.0.0&type=5)** Use the Archive app to create automated, scheduled policies that manage your data's lifecycle. - **[Create Archive Policies](https://help.salesforce.com/s/articleView?id=xcloud.archive_create_policies.htm&release=264.0.0&type=5)** To select specific records for archiving, define filters, schedule a process, and set data retention periods, create a policy in the Archive app. - **[Manage Archive Policies](https://help.salesforce.com/s/articleView?id=xcloud.archive_manage_policies.htm&release=264.0.0&type=5)** To streamline your data archiving process in the Archive app, run, edit, clone, estimate, and preview archive policies. - **[Archive Activities Tab](https://help.salesforce.com/s/articleView?id=xcloud.archive_activities_tab.htm&release=264.0.0&type=5)** The Activities tab opens the Activities Table in the default list view of logs in the Archive app. You can create your own custom list views to filter and sort this information. - **[Set Up the Archive Component in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_set_up_archive_widget.htm&release=264.0.0&type=5)** Show archived data as related lists within Salesforce. Even though the data has been archived and is no longer stored directly in Salesforce, end users can still access and view the data in the familiar Salesforce interface. - **[Manage Archive Component Controls and Layout](https://help.salesforce.com/s/articleView?id=xcloud.archive_manage_widget_controls_and_layout.htm&release=264.0.0&type=5)** Manage the display and configuration of objects within the Archive component, defining both root and child objects that end users can query. Also, the layout provides insights into root-child object relationships via the Is Root identifier. - **[Grant Access to the Archive Component in Experience Cloud](https://help.salesforce.com/s/articleView?id=xcloud.archive_grant_widget_access_in_experience_cloud.htm&release=264.0.0&type=5)** To access the Archive component in Experience Cloud, assign users the appropriate permission set. - **[Add the Archive Component to Lightning Pages](https://help.salesforce.com/s/articleView?id=xcloud.archive_add_archive_widget_to_lightning_pages.htm&release=264.0.0&type=5)** Add an Archive component to Lightning Experience record pages with one of these recommended procedures. - **[Add the Archive Component to Page Layouts in Salesforce Classic](https://help.salesforce.com/s/articleView?id=xcloud.archive_add_the_archive_component_to_page_layouts_in_salesforce_classic.htm&release=264.0.0&type=5)** Add Archive components to Salesforce Classic page layouts so users can view archived related records directly from primary records. - **[Archive Component Restriction Rules](https://help.salesforce.com/s/articleView?id=xcloud.archive_widget_restriction_rules.htm&release=264.0.0&type=5)** Control end-user visibility in Salesforce of specific archived records according to object sharing tables in the Archive app. Applicable to Archive Single Objects and Archive Multiple Objects components. - **[View Archived Records in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_view_archived_records.htm&release=264.0.0&type=5)** When a record is archived, the Archive app preserves the record's metadata at the time of archiving, including its assigned Record Type and the data available on the layout. Page Layouts are based on the viewing user's profile, while Dynamic Forms aren't supported for archived records. - **[Archive Search](https://help.salesforce.com/s/articleView?id=xcloud.archive_search.htm&release=264.0.0&type=5)** Search for and view the records you've archived. Archive Search respects only object-level permissions, not sharing rules or role hierarchy, so users with access can view all records for accessible objects. Limit access to admins. - **[Manage Index Fields in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_manage_index_fields.htm&release=264.0.0&type=5)** Efficient management of index fields in the Archive app is essential for optimizing search and query performance. Archive automatically indexes certain fields based on internal algorithms. However, some fields can't be indexed at all, and you configure others manually. The Index Fields Setup feature shows admins which fields are indexable so that they can manually select fields to improve search performance. - **[Retention Vs Purge Policies in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_retention_vs_purge_policies_in_archive.htm&release=264.0.0&type=5)** Retention sets how long Archive keeps records. A purge policy deletes records before that period ends, such as for Right to Be Forgotten requests. - **[How Purge Policies Work](https://help.salesforce.com/s/articleView?id=xcloud.archive_how_purge_policies_work.htm&release=264.0.0&type=5)** A purge policy permanently deletes archived records that match your query conditions, up to 1,000,000 records in each run. It doesn't delete records under legal hold or records protected by Archived Data Protected from Purge. - **[Purge Policies](https://help.salesforce.com/s/articleView?id=xcloud.archive_purge_policies.htm&release=264.0.0&type=5)** Define data removal policies for archived records in the Archive app. Purge policies override the original data retention expiration set at the time of archiving. When designated to do so, purge policies permanently delete data. - **[Unarchive from Archive Search or the Archive Component](https://help.salesforce.com/s/articleView?id=xcloud.archive_unarchive_from_archive_search_or_widget.htm&release=264.0.0&type=5)** Restore archived records with Archive Search or the Archive component in the Archive app. - **[Archive Apex—Right to Be Forgotten (RTBF)](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_rtbf.htm&release=264.0.0&type=5)** Data privacy regulations grant individuals the Right to Be Forgotten (RTBF), requiring organizations to securely erase personal data upon request. Archive Apex enables compliance by identifying and deleting specific data from the Archive app, ensuring thorough removal while preserving the integrity of other archived data. - **[Archive Apex Data Queries](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_data_queries.htm&release=264.0.0&type=5)** Archive Apex Data Queries enable programmatic access to archived data in the Archive app. These data queries automate business processes, support third-party system integrations, create custom views and reports, and cross-reference archived data with active records. - **[Archive Apex Testing](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_testing.htm&release=264.0.0&type=5)** Before working in your production environment, test your Apex Class Wrapper in Archive Apex in the Archive app. - **[Unarchive Apex](https://help.salesforce.com/s/articleView?id=xcloud.archive_apex_unarchive_records.htm&release=264.0.0&type=5)** Programmatically unarchive records in the Archive app based on specific filters and retrieve search results that match your request. - **[Manage Legal Hold Requests in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_manage_legal_hold_requests_in_archive.htm&release=264.0.0&type=5)** Place archived records on legal hold by creating a legal hold request in the Archive app. When records are under legal hold, they can't be unarchived, deleted, or removed—whether accessed through the SDK RTBF or the user interface. - **[Restrict Visibility for Imported Data in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_import_restrict_data_visibility.htm&release=264.0.0&type=5)** Secure sensitive archived records by manually enabling Archive Component Restriction Rules and uploading custom sharing entries for specific objects. This configuration prevents unauthorized users from accessing imported data in the Archive component while maintaining visibility for record owners. - **[Import Data from a Local Drive in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_import_data_from_local_drive.htm&release=264.0.0&type=5)** Import offloaded Salesforce data stored in local CSV files to the Archive app staging area. Then manage the final data migration and set specific retention periods for your records by configuring an Archive import policy. - **[Prepare Your Data and AWS S3 Environment for Archive Import](https://help.salesforce.com/s/articleView?id=xcloud.archive_import_prepare_data_aws_s3_environment.htm&release=264.0.0&type=5)** Successfully import offloaded Salesforce data into the Archive app. - **[Manage Staged Data](https://help.salesforce.com/s/articleView?id=xcloud.archive_import_manage_staged_data.htm&release=264.0.0&type=5)** View or clear records in the staging area before archiving them. - **[Export Archive Search Results](https://help.salesforce.com/s/articleView?id=xcloud.archive_export_search_results.htm&release=264.0.0&type=5)** Set criteria to find target archived records in the Archive app and export the search results. You can download these search results as a CSV file. - **[Export from Archive CSV to Download](https://help.salesforce.com/s/articleView?id=xcloud.archive_export_from_archive_csv_to_download.htm&release=264.0.0&type=5)** Export records from the Archive app by selecting single or multiple criteria. - **[Export to AWS S3 Bucket](https://help.salesforce.com/s/articleView?id=xcloud.archive_export_to_aws_s3_bucket.htm&release=264.0.0&type=5)** Export data from the Archive app to an AWS S3 bucket. - **[Archive Incremental Export](https://help.salesforce.com/s/articleView?id=xcloud.archive_incremental_export.htm&release=264.0.0&type=5)** Rather than exporting the entire dataset from the Archive app every time, export only the data that was changed or added after the last export. - **[Archive Limitations](https://help.salesforce.com/s/articleView?id=xcloud.archive_limitations.htm&release=264.0.0&type=5)** Various limitations and unsupported features for archiving, unarchiving, and other functionalities within the Archive app, including policy record limits, object exclusions, and operational constraints. - **[Image Limitation for Archive Content Notes](https://help.salesforce.com/s/articleView?id=xcloud.archive_content_note_image_limitation.htm&release=264.0.0&type=5)** Content Notes that contain embedded images can't be archived in the Archive app. - **[Common Errors and Warnings in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_common_errors_and_warnings.htm&release=264.0.0&type=5)** Errors and warnings that occur when using the Archive app, and how to solve them. - **[Salesforce Objects Excluded from the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_objects_excluded_from_archive.htm&release=264.0.0&type=5)** Objects excluded from the Archive app fall into one of these categories: non-deletable and non-queryable objects, or objects without relationship names. - **[Create a Custom Agent Action](https://help.salesforce.com/s/articleView?id=xcloud.archive_create_a_custom_agent_action.htm&release=264.0.0&type=5)** Create a reusable action, and then assign that action to the agent in the Archive app. - **[Search with the Archive Agent](https://help.salesforce.com/s/articleView?id=xcloud.archive_search_with_archive_agent.htm&release=264.0.0&type=5)** Search for archived records in the Archive app by using the Archive Agent. Specify an object directly in your search phrase, add criteria for accuracy, and work within system limitations to find the records you need. # Archive Component Restriction Rules Control end-user visibility in Salesforce of specific archived records according to object sharing tables in the Archive app. Applicable to Archive Single Objects and Archive Multiple Objects components. When applied, a restriction rule dictates how records are shared or restricted in your org. This information is stored and managed in the object sharing tables, which track the access levels and permissions granted to users or groups for specific records or objects based on the rules that you defined. Only when object sharing is set to private can you enforce record-level access to the archived records on the component. To view and check your sharing settings, go to Sharing Settings under Setup. Similar to Salesforce's restriction rules, users logged into Archive can access records that were shared according to sharing rules. Access to archived records is restricted only according to the sharing rules applied to those records. When the Archive component is enabled, the records available on the component are only the records that respect the sharing rules. The Archive Override Widget Sharing Rules permission enables system admins to access all archived records and ignore the component restriction rules. We recommend adding this permission set to `Admins Only`. When the record owner is a public group, Archive supports these sharing rule types. - Queues - Roles - Roles and Internal Subordinates ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important Archive supports up to five levels of nesting for roles and groups. Any levels beneath the fifth are ignored. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Verify that the Exclude Share Objects feature, under Archive Settings, is turned off. 1. From the Component Search Restriction Rules setting tab in Search under Archive Settings, click **+Add Object** to open the dropdown list of available objects to apply a restriction. If the object you want doesn't show up in the list, verify that the object has been archived. 2. Select the object to share. For example, Case Share. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note You can click **Delete** to change your selection. This feature is only available before clicking **Submit All**. 3. Click **Add Object**. You can add up to 5 objects. 4. Click **Submit All**. This message appears: "You are applying restrictions to your organization's access to this object. The restrictions limit access according to the object sharing table." 5. Click **Confirm**. A banner appears at the start of the process and disappears after the new request has been processed. The process can take up to 30 minutes. The table shows these fields.
Field Description
API Name Obejct API name
End Date When the recalculation was completed and the restriction was applied
Object Name Object label name
Start Date First recalculation of access restriction
Status

Default value is Processing. Value changes to Active upon completion.

Status can be deleted.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note After an object sharing table is selected and submitted, you aren’t able to select another object to share. A banner appears that you’ve reached the limit of Archive Component Restriction Rules. - **[Archive Component Restriction Rules Q&A](https://help.salesforce.com/s/articleView?id=xcloud.archive_widget_restriction_rules.htm&release=264.0.0&type=5)** Common issues for configuring and troubleshooting Archive Component Restriction Rules in the Archive app. ## Archive Component Restriction Rules Q&A Common issues for configuring and troubleshooting Archive Component Restriction Rules in the Archive app. Q: As a system admin, I've restricted component access for end users to Case Share, and now I can't see the archived Cases on the component, only through Archive Search. Is this a bug? A: No. The new restriction only respects the object sharing table. Archive Search doesn't respect Sharing Rules. Q: As a system admin, how can I view archived records after I restricted access for Case Share? A: All the archived records are viewable through Archive Search. Alternatively, you can assign the Archive Override Widget Sharing Rules permission set. Q: How do I add Sharing Settings to Case children when their Organization-Wide Defaults (OWD) is Controlled by Parent? A: You can't add sharing to the Case children. To enforce record-level-access on this object, restrict access to the Case object via the Sharing Settings. Access to child records is according to their root Case. Q: If I add Sharing Settings on the Case, and then add new sharing rules, does this impact the archived record access? A: No. The archived record access is controlled by the Case Share table that was archived with that record. Q: I'm a newly onboarded customer. I added a new policy on Case, and I want to restrict Access for Case. Why don't I see the Case in the sharing object list? A: There are three possible reasons that Case doesn't appear in the sharing object list. - The object Sharing Settings aren't set to private, and there are no Sharing Rules in Salesforce before archiving the Case record. - You excluded sharing in Exclude Share Objects under Archive Settings. - The Case policy hasn't run yet. To confirm this, go to the Activities tab. Q: Can I remove the limitation for the Sharing Settings? A: Yes. This change is immediate. No recalculation is required. Q: Can I change the object sharing table? A: When an object has been submitted, it isn't possible to make changes. Q: I saved the Case share in the Search Settings. Does the recalculation impact my current OWD for Case sharing? A: No. the recalculation is an Archive internal process and has no impact on the OWD. Q: I added the Archive Component Restriction Rule to the Case Share. Then I unarchived a Case. What would be the Sharing Rules of the newly created record? A: When a record is unarchived, it's added to your org with its current sharing configuration. In this example, a new Case is added according to the current Salesforce OWD Sharing Settings of the Case object. Q: When the queue is record owner, do all users in the queue have access to that record? A: Yes. Q: I've assigned a component restriction rule, but end users can still access records outside their permission set. What do I check to resolve this issue? A: Verify that the user doesn't have these permission sets or profiles assigned. - Archive Override Widget Sharing Rules permission set - Archive Admin permission set - System Admin profile, or any other custom administrative profile #### See Also - [Restriction Rules](https://help.salesforce.com/s/articleView?id=platform.security_restriction_rule.htm&language=en_US) # Archive Dashboard (Home Tab) The Archive app dashboard under Home provides a comprehensive overview of your data, file storage, and other essential metrics. ## Dashboard Sections (Monitoring & Usage) These sections provide a real-time view of your data and file storage consumption, focusing on both current and archived records. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note The numbers on the dashboard home page are approximate and designed for scale assessment. Discrepancies with exported data are normal. For exact counts, refer to the exported data.
Section Description
Salesforce Used Data Storage

The percentage of your data storage limit that's being used. Data storage is consumed primarily by records, such as Accounts, Contacts, Leads, and custom objects.

To go to the detailed Salesforce Storage Usage page, click Salesforce Storage Usage in Storage Summary.

Objects in the Recycle Bin aren't included in the count.

Salesforce Used File Storage

The percentage of your file storage limit that is currently being used. File storage is consumed by attachments.

To go to the detailed Salesforce Storage Usage page, click Salesforce Storage Usage in Storage Summary.

Objects in the Recycle Bin aren't included in the count.

Current Data Storage Usage

The current, active data storage consumption by specific object type.

  • Object Type: The specific standard and custom objects consuming data storage, such as Lead, Account, Case, and Contract.
  • Salesforce Records: The number of currently active records for that object type.
  • Archived Records: The number of records that have been archived for that object type.
Current File Storage Usage

The current, active file storage consumption by specific object type.

  • Object Type: The specific standard and custom objects consuming data storage, such as Lead, Account, Case, and Contract.
  • Salesforce Records: The number of currently active records for that object type.
  • Archived Records: The number of records that have been archived for that object type.
Total Archived Records Storage & File Timelines (Last 6 months)

A timeline of what’s been archived over time according to data and file consumption. The timeline updates every 2 hours and reflects changes due to these events.

  • Purge
  • Retention
  • Right to Be Forgotten (RTBF)
  • Unarchive
Archive API Usage (Last 30 Days) This component has been retired. Your org has a daily limit of 100,000,000 API calls per org.
Archived Records (Last 6 Months) This graph shows the weekly count of archived records over the last 6 months. This graph is updated every 2 hours and shows Archive activities, excluding subtracted events.
Recent Active Policies (Up to 6) The most recent policies in real time, keeping you informed about the latest changes and updates.
## Feature Access Points (Top Navigation) | Feature | Description | | --- | --- | | Storage Analyzer | Access a detailed breakdown and analysis of your Salesforce data and file storage. | | Legal Hold Requests | Opens the Legal Hold Request Report page, providing insights into legal hold requests. | | Field Level Security (FLS) Report | Generate a report detailing the FLS settings across your objects. | | Settings | Opens the Archive Settings window so that you can configure options for the app. | | Import | Opens the Import Data window. | | Export | Opens the Export Data window so that you can export your data. | | Refresh | Refreshes the page to make sure that you have the latest data. | # Archive Incremental Export Rather than exporting the entire dataset from the Archive app every time, export only the data that was changed or added after the last export. In Archive, the incremental export runs each day and exports as much as possible in a 23-hour period. The next day, a new incremental export begins, starting after the last recorded exported record of the previous day. The incremental export can take some time to catch up on all the data in Archive, depending on how much data has accumulated before the incremental export was initiated. After the incremental export catches up, only newly archived data is exported. There can be days when the incremental export doesn't run. When you export to your AWS S3 bucket or Azure Blob Container, you can select specific objects to export. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note You can only export to storage that matches your account platform, such as S3 Bucket for AWS or Blob Storage for Azure. The next daily export reviews all records in Archive, exporting only the records that match the selection criteria. This export is done in daily runs up to 23 hours, until all the data in Archive is covered and any new data is exported as it's detected. For more information, see [Export to AWS S3 Bucket](https://help.salesforce.com/s/articleView?id=xcloud.archive_export_to_aws_s3_bucket.htm&release=264.0.0&type=5 "Export data from the Archive app to an AWS S3 bucket."). # Archive Limitations Various limitations and unsupported features for archiving, unarchiving, and other functionalities within the Archive app, including policy record limits, object exclusions, and operational constraints. ## Archive Policy Record Limits A single archiving policy is restricted to 2 million root records. Users who archive more than 2 million records are recommended to set multiple archive policies at complimentary time intervals with the same SOQL. When setting multiple policies with the same SOQL, or policies with the same date range, make sure to schedule them to run at different times to avoid conflicts. These objects aren't supported in Archive. - Big Objects - ContentDocument links to a ContentVersion with `FileType='SNOTE'`, and the file contains an `img` tag. - ContentNotes with files or attachments - MacroUsage - Non-Deletable Objects - Orders where Status is set to `Active` - Objects Without Relationship Names ## Unarchiving Unarchiving is only available for Root Objects. When you unarchive a root object, Archive also restores all lookup records that were archived with it. The following items are unsupported or excluded: - An Account with an Inactive Account Team Member. - A Case with an Inactive Case Team Member. - FeedItems - ActivityFieldHistory objects aren't supported for unarchiving or exporting. - Oversized EmailMessage HTML Body fields. - Embedded Images in Unarchived Emails: When you unarchive an email message that contains inline images, the images don't display in the restored record. The unarchive process creates a new email record with a unique ID. Because the inline image links in the HTML body point to the original record's ID, the connection to the images is broken. ## Knowledge Articles Archive actions are only supported when these criteria are met. - You have Salesforce Knowledge enabled. For more information, see [Salesforce Knowledge Help and Resources](https://help.salesforce.com/s/articleView?id=service.knowledge_map.htm&type=5&language=en_US). - There's only one version of the knowledge article. - Articles are without translations. ## Recurring Activities - When archiving a task or an event as a root, the task or the event is part of the series. Simply, when archiving recurring tasks or events, the archive includes all future tasks and events in the series, even if they aren't part of the original SOQL. - When archiving a root where the child records are part of a recurring series, only the child is deleted, not the entire series. - To delete the series, define the policy on the task or event. - Unarchive of recurring Tasks and Events are archived without the series flag and their relation to the Task or Event root record. These fields appear empty as they refer to a series that has been broken. Events - `IsRecurrence` - `IsRecurrence2` - `IsRecurrence2Exception` - `Recurrence2PatternStartDate` - `Recurrence2PatternText` - `Recurrence2PatternVersion` - `RecurrenceActivityId` - `RecurrenceDayOfMonth` - `RecurrenceDayOfWeekMask` - `RecurrenceEndDateOnly` - `RecurrenceInstance` - `RecurrenceInstance` - `RecurrenceMonthOfYear` - `RecurrenceTimeZoneSidKey` - `RecurrenceType` Tasks - `IsRecurrence` - `RecurrenceActivityId` - `RecurrenceDayOfMonth` - `RecurrenceDayOfWeek` - `RecurrenceInstance` - `RecurrenceInterval` - `RecurrenceMonthOfYear` - `RecurrenceRegeneratedType` - `RecurrenceStartDateOnly` - `RecurrenceTimeZoneSidKey` - `RecurrenceType` ## Deleted Objects Deleted Objects aren't supported for Archive Search or the Archive component. To be referenced in Archive Search or the Archive component, Objects must be live. ## Objects Excluded from Archive Search Some objects are excluded from Archive Search by default and don't appear as searchable options, even when the object is included in an archive policy and its records are archived. - Objects with the standard suffixes `Feed`, `History`, `Relation`, `Role`, and `Share` - `LiveChatTranscriptEvent` ## Archive Component Search Layout Constraints The Archive Component Search Layout is subject to specific Salesforce Platform security and data volume constraints. - Including the Activity ID field in the component search layout for EmailMessage records can cause system errors in orgs with high data volumes. Typically, these errors occur in orgs with more than 100,000 distinct activity references. - To view the Activity ID field in the component, assign users the **View All Data** user permission. With this permission, the system can bypass sharing rule evaluations for polymorphic fields, such as `WhoId` or `WhatId`. - If your users don’t have the **View All Data** permission, remove the Activity ID field from the `EmailMessage` component search layout. Removing this field makes sure that all other fields in the component display correctly. ## File Download Limitations - The file size is limited by what can be transferred within 15 minutes, typically up to 5 GB on standard internet connections. - For files larger than 5 GB, we recommend exporting to an AWS S3 bucket. Only relevant for archived file. - If a download stops due to a timeout, click **Resume** to continue the download. The download remains resumable for up to 15 minutes after the timeout, after which you restart the download. - The download process is limited to 15 minutes. #### See Also - [Archive ActivityFieldHistory](https://help.salesforce.com/s/articleView?id=xcloud.archive_create_policies.htm&release=264.0.0&type=5 "To select specific records for archiving, define filters, schedule a process, and set data retention periods, create a policy in the Archive app.") - [Archive EmailMessages with Related Tasks](https://help.salesforce.com/s/articleView?id=xcloud.archive_create_policies.htm&release=264.0.0&type=5 "To select specific records for archiving, define filters, schedule a process, and set data retention periods, create a policy in the Archive app.") - [Unarchive Oversized EmailMessages](https://help.salesforce.com/s/articleView?id=xcloud.archive_unarchive_from_archive_search_or_widget.htm&release=264.0.0&type=5 "Restore archived records with Archive Search or the Archive component in the Archive app.") - [Non-Deletable Objects](https://help.salesforce.com/s/articleView?id=xcloud.archive_objects_excluded_from_archive.htm&release=264.0.0&type=5 "Objects excluded from the Archive app fall into one of these categories: non-deletable and non-queryable objects, or objects without relationship names.") - [Objects Without Relationship Names](https://help.salesforce.com/s/articleView?id=xcloud.archive_objects_excluded_from_archive.htm&release=264.0.0&type=5 "Objects excluded from the Archive app fall into one of these categories: non-deletable and non-queryable objects, or objects without relationship names.") # Archive or Rename Mobile Publisher Projects Keep your project list organized by renaming projects or archiving ones that are no longer in active use. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
You can rename existing projects to better reflect their purpose, or archive projects that are no longer in active use. Archiving keeps your workspace focused on current priorities without permanently losing project configurations. 1. From Setup, enter Mobile Publisher in the Quick Find box, then select **Mobile Publisher**. 2. On the mobile app project list, locate the project you want to manage and click the arrow next to it. 3. To rename the project, select **Rename**. 1. Enter a new name in the project name field. 2. Save your changes. You see the updated name immediately across your dashboard. 4. To archive the project, select **Archive**. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_important.png) Important When you archive a project: - Salesforce no longer builds new versions of the app. - Older versions that were published before archiving remain available on the App Store and Google Play Store. - To remove the app from the app stores, you must manually unpublish it from the App Store and Google Play Store. Until removed, the app remains available for download. - The project is removed from your primary list of active apps while preserving its configurations. - You can't unarchive the project, but you can still access the configuration to manually copy settings to a new project. 1. In the confirmation prompt, confirm that you want to archive the project. The project is now archived and no longer appears in your active project list. # Archive Regions and IP Addresses for Allowlisting Find the AWS data center locations where Archive stores data. To ensure successful connection requests, add the IP addresses for your specific region to your organization's allowlist. ## AWS Regions for Archive **North America**
Own Region Name AWS Region Name Location Archive IP Addresses
app1 us-east-1 N. Virginia, US 3.208.161.146, 18.209.216.97, 52.1.80.130, 34.193.199.243
hipaa1 us-east-1 N. Virginia, US 3.208.249.4, 52.0.134.234, 18.235.144.247, 34.193.199.243
usgov2 us-gov-west-1 Oregon, US 15.200.132.239, 3.32.119.6, 3.32.105.253, 52.222.56.157
us2.ogc-ownbackup (Federal Risk and Authorization Management Program Authorized) us-gov-west-1 North West, US 3.32.93.141/32, 3.30.8.217/32, 52.61.11.209/32, 15.200.15.219/32, 3.30.123.114
ca1 ca-central-1 Central Region, Canada

52.60.147.26, 15.156.183.237, 3.97.126.104, 3.97.153.26

**Europe and The United Kingdom** | Own Region Name | AWS Region Name | Location | Archive IP Addresses | | --- | --- | --- | --- | | emea1 | eu-central-1 | Frankfurt, Germany | 52.57.171.186, 35.157.197.161, 52.58.118.47, 3.69.64.14 | | uk1 | eu-west-2 | London, UK | 35.178.141.95, 18.130.174.209, 3.10.1.76, 52.56.35.139 | **Singapore** | Own Region Name | AWS Region Name | Location | Archive IP Addresses | | --- | --- | --- | --- | | sg1 | ap-southeast-1 | Asia Pacific (Singapore) | 52.74.74.165, 18.140.206.238, 54.254.115.16, 13.251.218.171 | **Australia** | Own Region Name | AWS Region Name | Location | Archive IP Addresses | | --- | --- | --- | --- | | au1 | ap-southeast-2 | Sydney, Australia | 54.79.91.194, 3.104.161.68, 13.55.207.198, 52.64.207.106 | # Archive Related Objects in Legacy Salesforce Archive Select any related objects in Legacy Salesforce Archive that you want to archive in addition to the primary object. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Salesforce Archive license.
User Permissions Needed
To create, edit, and schedule Archive Policies: Manage Archive Policies
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Legacy Salesforce Archive. Read about the Archive managed package in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). Before completing this task, understand how related objects are affected when the primary object gets archived. - Objects with a detail relationship to the primary object are cascade-deleted from your org. You can maintain a copy of these objects in the archived data by adding them to the policy. - Objects with a lookup relationship to the primary object remain in your org, but their connection to the primary object is lost. You can maintain a copy of these objects and preserve their relationships in the archived data by adding them to the policy. On the Configure Related Objects screen, the available objects are categorized by Cascade-Delete Relationships and Lookup Relationships. To configure a related object: 1. Click the plus (+) icon in the Add to Policy column. 2. Using the dropdown menus, specify how the object's files and attachments are processed. For information about file and attachment options, see [Configure Files and Attachments for Archived Records in Legacy Salesforce Archive](https://help.salesforce.com/s/articleView?id=xcloud.archive_files_attachments.htm&release=264.0.0&type=5 "Select what happens to files and attachments when their associated records become archived in Legacy Salesforce Archive."). When you're finished adding related objects to the policy, click **Done**. ## Archive Additional Related Objects as Needed Related objects can have detail or lookup objects of their own. For each related object that you add to your policy, you can see how many detail or lookup objects correspond to it from the policy details page, under Related Objects. Add these objects to your policy as needed, using the Configure buttons. Keep in mind that related object hierarchies can have three or even four tiers. While detail objects are cascade-deleted all the way down the hierarchy tree, lookup objects are preserved unless you add them to your policy. To avoid preserving unwanted data in your org, examine all lookup objects and decide whether you want them archived. You're ready to set the run schedule for your archive policy. #### See Also - [Set the Run Schedule for a Legacy Salesforce Archive Policy](https://help.salesforce.com/s/articleView?id=xcloud.archive_run_schedule.htm&release=264.0.0&type=5 "Define when and how often your Legacy Salesforce Archive policy executes. For example, you can choose to manually start your policy, or you can schedule it to run at regular intervals.") # Archive Search Search for and view the records you've archived. Archive Search respects only object-level permissions, not sharing rules or role hierarchy, so users with access can view all records for accessible objects. Limit access to admins. The Archive Policy permission set automatically grants access to Archive Search. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Archive Search respects only object-level permissions. Users with Archive Search access can view all records for accessible objects. For standard users who need sharing rules applied, use the Archive component instead. - **[Archive Search FAQs](https://help.salesforce.com/s/articleView?id=xcloud.archive_search.htm&release=264.0.0&type=5)** Here are some frequently asked questions related to Archive Search in the Archive App. ## Use Archive Search 1. Open the Archive Search tab. 2. Enter your search criteria. - To search a specific field, select an object and field from the dropdown list. - To search across all indexed fields, enter an ID or text string in **Term**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note To avoid an error message, enter a term for a specific field. 3. Optionally, to specify the date range, select a value.
Value Description
Adjust Date Range

Adjust the default date range. Archive Search defaults to Last Modified Date for non-indexed objects. Valid values include:

  • Created Date: Time and date when the record was created.
  • Last Modified Date: Time and date when the record was last updated.
  • Date Archived: Time and date when the record was archived. Date Archived is the default date field.
The default **To Date** is the current day, and the default **From Date** is one year ago. 4. To begin the search, select the **Search** icon. Archive Search shows results based on your Salesforce global search settings. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note The number of results is an approximation. To see the exact count, select **Show more results** at the end of the list. Matching archived records appear in the results list. ## Search Limitations
Limitation Description
Boolean Operators Boolean operators such as AND or OR aren't supported. A result appears only when both values in the search match.
Case Sensitivity Archive Search isn't case-sensitive, except for field-level searches that end in an asterisk (*). For most of those searches, enter the term in lowercase.
Email Addresses Archive Search matches only the whole email address.
Excluded Objects Archive Search excludes some objects by default. They don't appear as searchable options, even when their records are archived. For example, LiveChatTranscriptEvent isn't searchable.
File Attachments Archive Search scans only file attachment metadata, not file content.
Filtered Objects

Objects with these suffixes aren't searchable:

  • Feed
  • History
  • Relation
  • Role
  • Share
Fuzzy Searches For how fuzzy searches work, see Fuzzy Searches.
Indexed Fields Only indexed fields are searchable. Non-indexed fields appear in Archive Settings | Search | Archive Search Layout, marked with an asterisk in the Available Fields list.
Record Retrieval To find a record, search for its 18-character Salesforce ID.
Related Records View up to 200 related records. To view all related records, search by the root record in the Search filter. Related records appear in the order in which they were archived, not in a preset order or the order set by the root record's page layout.
Regular Expressions Searches such as ab*c aren't supported.
Subset Search Searching for a subset of a word or term isn't supported.
Time Zone The Lightning-formatted-date-time is based on your system's time zone.
For more information on indexing, see [Manage Indexed Fields](https://help.salesforce.com/s/articleView?id=xcloud.archive_manage_index_fields.htm&release=264.0.0&type=5 "Efficient management of index fields in the Archive app is essential for optimizing search and query performance. Archive automatically indexes certain fields based on internal algorithms. However, some fields can't be indexed at all, and you configure others manually. The Index Fields Setup feature shows admins which fields are indexable so that they can manually select fields to improve search performance."). ## Fuzzy Searches Archive splits each text value into separate searchable pieces, called tokens, and stores them in lowercase. When you search with an asterisk (`*`) at the end of a term, Archive removes the asterisk and looks for tokens that match within two character edits of what you typed. Archive splits at spaces, hyphens, and most punctuation. It keeps letters and digits together and keeps underscores and periods inside a token. - `R-0001` becomes `r` and `0001`. - `INV-2024-0042` becomes `inv`, `2024`, and `0042`. - `Acme Corp` and `Acme-Corp` both become `acme` and `corp`. - `ABC123` stays one token: `abc123`. So does `CASE00012345`. - `abc_123` stays one token: `abc_123`. - `john.smith@example.com` becomes `john.smith` and `example.com`. - Archive splits text in languages written without spaces, such as 東京支店, into single characters. For most fields, a search ending in `*` isn't a "starts with" search. Archive compares your term against each token individually. An edit is one added, removed, or changed character. In field-level searches, uppercase counts as an edit because tokens are lowercase. - `2024*` finds `INV-2024-0042`, because `2024` is one of its tokens. - `acm*` finds `Acme`, because `acm` is one edit away from `acme`. - `INV*` finds nothing, because `INV` is three edits away from the token `inv`. - `INV-2024*` finds nothing, because Archive compares `INV-2024` separately against each token, and none match within two edits. - `corp*` doesn't find `Acme Corporation`, because `corporation` is seven edits from `corp`. - `acme*` also finds `Acne Group`, because `acme` is one edit away from `acne`. - For most fields, `*` on its own finds nothing. To get relevant results, use one of these approaches. - Search for the exact value, such as `INV-2024-0042`. - Search for a single token, such as `2024`. - Narrow your search. These ID fields require an exact match and don't support fuzzy search: - `AccountId` - `ActivityId` - `CaseId` - `ContactId` - `CreatedById` - `Id` - `LastModifiedById` - `LeadId` - `OwnerId` - `ParentId` - `policy_id` - `RelatedToId` - `WhatId` - `WhoId` ## Archive Search FAQs Here are some frequently asked questions related to Archive Search in the Archive App. Q. Why can't I see the Archive Search tab? A. Verify that you have Archive Search permission set. Q. How can I improve my search? A. Try these methods. - Search for the record ID. - Instead of searching for the Owner display name, which isn't searchable, search for the owner ID of the record. - If you still can't find what you're looking for, contact Support and provide these details. - Search terms - What you expect to see, such as object type, number of records, or root or child records. - Any materials that reference when the result was archived, such as an audit file or request ID. Q. I can't find a particular record in Archive. What could be the problem? A. Due to a sync process between the Archive database and the search engine, it can take up to 2 hours to see archived data in the Archive Search results. Q. Are any objects not searchable? A. `Feed`, `History`, `Relation`, and `Share` aren't searchable. Q. Can I search within an EmailMessage? A. You can search for the email subject or sender name, but searching for the email content isn't supported. #### See Also - [Manage Archive Component Controls and Layout](https://help.salesforce.com/s/articleView?id=xcloud.archive_manage_widget_controls_and_layout.htm&release=264.0.0&type=5 "Manage the display and configuration of objects within the Archive component, defining both root and child objects that end users can query. Also, the layout provides insights into root-child object relationships via the Is Root identifier.") # Archive Storage Analyzer Analyze data and file storage consumption in your org to identify archiving opportunities and create policies directly from the analysis workflow. ### Required Editions Use Storage Analyzer to identify which objects consume the most storage space and create targeted archive policies based on the analysis. This visual dashboard helps you prioritize archiving efforts by showing storage trends and usage patterns.
User Permissions Needed
To use Storage Analyzer: Archive Analyzer
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important The Archive Analyzer permission set grants the ability to create, edit, and delete archive policies from the Storage Analyzer workflow. The Storage Analyzer dashboard shows the following information. - Total consumption for data and file storage - Top five objects by record count in descending order - Quarterly storage usage history To access the Storage Analyzer dashboard: 1. At the top right of the Home Page, click **Storage Analyzer**. For first-time users, the Storage Analyzer is empty. 2. Click **Analyze Now**. 3. Select the object that you want to analyze. The dashboard shows a quarterly analysis of the selected object. 4. To continue with the policy wizard, click **Next**. The analysis chart shows the last modified date. Green bars show data that meets the policy criteria and is scheduled for archiving. Blue bars, or purple for files, show data that doesn't meet the criteria and remains in your org. 5. Enter a policy name. 6. To turn on an active running policy, change **Set Policy** value to `Active`. 7. Enter the number of years or quarters to view. 8. Select **Date Category**. 9. To add second- and third-layer filters for specific objects, such as Case, EmailMessage, Lead, Opportunity, and Task, click **+Add Condition**. 10. Select whether to include ContentDocuments. 11. Click **Accept**. 12. To change a parameter, click **Advanced**. 13. Review the summary. 14. Click **Save & Close**. The policy is saved and appears in the Policies list. If you set the policy to Active, Archive automatically runs the policy based on the configured schedule. # Area Charts Use an area chart to spot trends in data over time. Use a stacked area chart to visualize parts of a whole in datasets over time. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
## Data Options for Area Charts To customize data in area charts, open the Chart Editor, and click the **Customize** tab. - Stacking: Choose whether to stack data series in the area chart. - Style: Change the position of the chart legend, or hide it entirely. Select the colors for the chart’s background and border. - Series: Apply data labels to show values directly in the chart, and set the labels’ position and color. - Horizontal Axis: Give the axis a title, change the number formatting, display grid lines, reverse the axis order, and treat data labels as text. - Vertical Axis: Give the axis a title, adjust its scale, set the number of tick marks shown, change the number formatting, and display grid lines. ## Sample Data for Area Charts
DateExpensesIncome
8/9/2021$500$2,500
8/23/2021$340$1,900
9/6/2021$600$3,300
9/20/2021$100$2,400
10/4/2021$150$2,600
![Quip area chart](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_charts_area.png) ## Sample Data for Stacked Area Charts
DateHouse ExpensesFood Expenses
8/1/2021$500$140
9/1/2021$340$60
10/1/2021$600$50
11/1/2021$100$100
12/1/2021$150$230
![Quip stacked area chart](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_charts_stacked_area.png) # Arrange, Duplicate, and Remove Elements on a Flexcard (Managed Package) For the managed package runtime, arrange, duplicate, and delete elements on the canvas of a Flexcard in the Flexcard Designer. Drag elements onto the canvas, and rearrange them by dragging them below, above, and next to other elements. Duplicate and remove elements with one click. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. To rearrange an element inside a state, or move an element between states, click and hold down the element, then drag it to the desired position. Wait for the position indicator to appear at the desired position before letting go. ![Move FlexCard elements](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_move_element.png) ![Reorder FlexCard elements](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_drag_up_down_element2.png) 2. To rearrange a state, click and hold down the state and move it up or down to the desired position. 3. To duplicate an element, click the element, and click the double square icon. ![Duplicate FlexCard elements](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_duplicate_element_icon.png) ![FlexCard duplicate state icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_duplicate_state_icon.png) 4. To delete an element, click the element, and click the trash icon. # Assert Action for Integration Procedures The Assert Action compares the expected and actual results of a Test Procedure using an expression that evaluates to true or false. You can use environment variables in the Assert Conditional Formula to test performance.

Property

Description

Assert Conditional Formula

Expression that tests results of previous steps and evaluates to true or false. If the result is false, the assertResult for the Assert Action is set to false. This sets the testResult for the Test Procedure to failed.

Assert Failure Message

Message that explains why the test failed.

Fail Test On Assert

If checked, the Test Procedure stops and returns the result of the transaction if the Assert Conditional Formula evaluates to false.

If not checked, the Test Procedure continues running even if the Assert Conditional Formula evaluates to false.

#### See Also - [Test Procedures: Integration Procedures for Unit Testing](https://help.salesforce.com/s/articleView?id=xcloud.os_test_proceduresintegration_procedures_for_unit_testing_55410.htm&release=264.0.0&type=5 "An Integration Procedure that performs a unit test is a Test Procedure. You can use a Test Procedure to unit test almost anything an Integration Procedure can invoke, such as an Omnistudio Data Mapper, a Calculation Matrix, an Apex class, or another Integration Procedure.") # Assert Action for Integration Procedures (Managed Package) For the managed package runtime, the Assert Action compares the expected and actual results of a Test Procedure using an expression that evaluates to true or false. You can use environment variables in the Assert Conditional Formula to test performance. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Assert Action Properties for Integration Procedures (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_assert_action_properties_for_integration_procedures.htm&release=264.0.0&type=5)** For the managed package runtime, these properties are unique to or function in a unique manner in Assert Actions. The Assert Action compares the expected and actual results of a Test Procedure using an expression that evaluates to true or false. # Assert Action Properties for Integration Procedures (Managed Package) For the managed package runtime, these properties are unique to or function in a unique manner in Assert Actions. The Assert Action compares the expected and actual results of a Test Procedure using an expression that evaluates to true or false. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Property

Description

Assert Conditional Formula

Expression that tests results of previous steps and evaluates to true or false. If the result is false, the assertResult for the Assert Action is set to false. This sets the testResult for the Test Procedure to failed.

Assert Failure Message

Message that explains why the test failed.

Fail Test On Assert

If checked, the Test Procedure stops and returns the result of the transaction if the Assert Conditional Formula evaluates to false.

If not checked, the Test Procedure continues running even if the Assert Conditional Formula evaluates to false.

# Assess Member Tier by Using Flows Configure a flow to assess and upgrade the tier of members. Use Data Processing Engine to find the members who are eligible for a tier upgrade and a decision table to choose the tier that an eligible member can be upgraded to. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To create a flow in Flow Builder: Manage Flow
To create a Data Processing Engine definition:
  • Customize Application
  • Modify All Data
To create a decision table: System Administrator profile
1. Find the members who are eligible for a tier upgrade. 1. Create a custom object that stores the details of the members who are eligible for a tier upgrade, including their current tier and qualifying points balance. 2. Create a Data Processing Engine definition to select the members who are eligible for a tier upgrade and to add records of the eligible members in the custom object. The definition assesses only the members whose qualifying points balance has changed since the definition’s last run. 2. Create a custom object to store the tier assignment rules that determine the qualifying points balance range for each tier. 3. Create a standard type decision table using the tier assessment rules custom object as source to decide which tier members are eligble for based on their qualifying point balance. 4. Create a flow that: - Runs the Data Processing Engine definition to find the members who are eligible for a tier upgrade. - Run the decision table rules to find the tier that the eligible members are to be assigned to. - Uses the Get Tier action to get the current tiers of the members. - Checks whether a member’s current tier is lower than the member’s eligible tier. - Upgrades the tier of members whose current tier is lower than their eligible tier. - (Optional) Assigns tier benefits to members based on their upgraded tier. If you have Loyalty Management - Growth or Loyalty Management - Advanced license enabled, you can also run the benefit actions that are associated with the tier benefits assigned to members. 5. Run the tier upgrade flow. 1. Create a Batch Management job to run the tier upgrade flow. 2. Create a scheduled flow to run the batch job. # Assess Member Tier by Using Loyalty Program Process Configure a Tier Processing type loyalty program process to change the tier of your members. To help assess and change member tiers based on your required schedule, use a Batch Management job to run the tier change process. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Growth or Loyalty Management - Advanced
User Permissions Needed
To create a loyalty program process: Loyalty Management permission set
To create a batch job: System Administrator profile
Tier Processing type loyalty program processes allow you to use the Change Member Tier action to change the tier of eligible members. And you can use batch jobs to run Tier Processing type loyalty program processes. Before you design the process and create the batch job, create a Data Processing Engine definition or an Apex class that determines the members who are eligible for a tier change. The data about the list of eligible members is written back to a standard or a custom object that has a lookup relationship with the Loyalty Program Member records. The records of the object help the batch job identify the members eligible for a tier change and then the batch jobs runs the loyalty program process to change the tier of the eligible members. If you have a large volume of members, you can run unique processes with each process upgrading only the members who are eligible for a particular tier. In this case, you can either: - Create a single process to upgrade all eligible members to their eligible tiers. In the rule, use conditions to find the members who are eligible for each tier. Add a Change Member Tier action as a child of each condition. In the action, select the tier as a fixed value in the New Tier field. - Create separate processes with each process upgrading only the members who are eligible for a particular tier. In the Change Member Tier action, in the New Tier field, select the tier that the process is upgrading members to, as a fixed value. For each process, create a unique batch job that filters only the members who are eligible for the particular tier that the process is upgrading members to. 1. Determine which members are eligible for a tier upgrade. 1. Create a custom object that stores the details of the members who are eligible for a tier upgrade, including their current qualifying points balance and the current tier. 2. Create a Data Processing Engine definition or an Apex class to find the members who are eligible for a tier upgrade and to add records in the custom object for the eligible members. The definition or class assesses only the members whose qualifying points balance has changed since the last tier assessment. 2. Create a Tier Processing type loyalty program process. 1. Either create a TierProcessing type loyalty program process from scratch or use the Change Member Tier process template to create a process. 2. Design a rule that includes the Change Member Tier action. If the process is used to upgrade members who are eligible for a particular tier, select the tier in the New Tier input parameter of the change Member Tier action. If the process is used to upgrade all eligible members, add conditions to find the tier that they’re eligible for. 3. Activate the rule and the process. 3. Create a batch job to run the tier change loyalty program process. 1. In the Define job step, select **Loyalty Program Process** as the process type, and select the TierProcessing type process that you want to run as the execution process. 2. In the Select criteria step, select the object that contains the details of the eligible members, and select the object field that has a lookup relationship with Loyalty Program Member. 3. Configure the criteria that filters the list of members whose data is sent to the selected process for the tier upgrade. If the process is used to upgrade members eligible for a particular tier, add a filter to identify the members who are eligible for the particular tier. If the process is used to upgrade all eligible members, you don’t need to select a filter criterion. # Assess the Migration Readiness in Your Development Sandbox (Omnistudio Foundation Package and Standard Data Model) In the development sandbox, run the Omnistudio Migration Assistant in Assess mode to assess how the migration process impacts each Omnistudio component. Before You Begin To run the Omnistudio Migration Assistant, you must have the Omnistudio admin and Omnistudio user permission sets assigned. See [Omnistudio Permission Sets](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_permission_sets_licenses.htm&language=en_US&type=5). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Always run the Assess mode before running the Migrate mode to understand the impact and avoid incomplete or incorrect migration. Review the assessment report for any failed statuses and resolve them before proceeding with migration. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If your org is already on the standard data model with the Omnistudio Metadata API setting enabled, the Omnistudio Migration Assistant does not assess and generate assessment reports for the Omnistudio components such as Data Mappers, Omniscripts, Integration Procedures, and Flexcards. In this scenario, the Omnistudio Migration Assistant assesses only Custom Labels, and related objects such as Apex classes, LWCs, FlexiPages, and Experience Cloud site pages to resolve namespace and reference dependencies. 1. Authenticate to the migration sandbox org: ``` sf org login web --instance-url= ``` 2. When prompted, enter your username and password. The authorization successful message appears. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note All prompts in the Omnistudio Migration Assistant have a timeout of five minutes. If no input is provided within this time, the command exits automatically. 3. Open the [Omnistudio Migration Assistant tool](https://www.npmjs.com/package/@salesforce/plugin-omnistudio-migration-tool?activeTab=versions) Versions page and install the Omnistudio Migration Assistant version 2.0.0-preview.27 by running this command in the terminal: `sf plugins install @salesforce/plugin-omnistudio-migration-tool@2.0.0-preview.27` See [Install the Omnistudio Migration Assistant](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_install_oma.htm&release=264.0.0&type=5 "The Omnistudio Migration Assistant is a command-line interface (CLI) plug-in that you install using Salesforce CLI."). 4. Run the Omnistudio Migration Assistant in Assess mode. `sf omnistudio:migration:assess [-u ] [-a] [--only=(dm|ip|os|fc|autonumber|cl)] [--relatedobjects=(apex|lwc|expsites|flexipage) [--verbose]` - To assess all versions of the components, use `-a` or `–allversions`: ``` sf omnistudio:migration:assess -u -a ``` Where, `YOUR_ORG_USERNAME@DOMAIN.COM` is your username in the sandbox. Example: `sf omnistudio:migration:assess -u asmith@sample.com -a` If you don’t specify either -a or –allversions parameter in the command, the Omnistudio Migration Assistant requests for your consent to assess all versions of the Omnistudio components. Enter `y` to consent. If you don't consent to assess all versions of the Omnistudio components, you cannot proceed with the assessment. - To assess specific components, use the `-o` or `--only=dm` parameter: - `--only=dm`: Data Mappers - `--only=ip`: Integration Procedures - `--only=os`: Omniscripts - `--only=fc`: Flexcards - `--only=cl`: Custom Labels Example: `sf omnistudio:migration:assess -u asmith@sample.com –only=dm` - To assess specific or all related objects, use the `-r` or `--relatedobjects` parameter: - `--relatedobjects=apex`: Apex classes - `--relatedobjects=lwc`: Lightning web components - `--relatedobjects=expsites`: Experience Sites - `--relatedobjects=flexipage`: FlexiPages - `--relatedobjects="apex,lwc,expsites,flexipage"`: all related objects Example: `sf omnistudio:migration:assess -u asmith@sample.com --relatedobjects=apex` - To assess username or alias for the target org and to override the default target org: - `-u ` or `--targetusername=`: Username of the target org or alias you’ve set up in Salesforce CLI for that org. Example: `sf omnistudio:migration:assess -u asmith@sample.com` - To control the amount of details shown in the command output, use the `--verbose` parameter with the command: Example: `sf omnistudio:migration:assess -u asmith@sample.com --verbose` 5. If multiple Omnistudio packages are found, select one of the packages by entering its number. 6. When prompted, enter y or n to specify whether you already have a Salesforce project with related objects. - If you entered n: 1. The tool connects to your org and retrieves related objects such as Apex classes, FlexiPages, Experience Cloud site pages, and Lightning web components (LWCs). 2. Enter y to proceed. 3. Create an empty project folder where the tool can retrieve and store the related objects. 4. When prompted, enter the path to the project folder. For example: /Users//Downloads/OMA - If you entered y: 1. When prompted, enter the path to the project folder that contains the retrieved related objects. For example: /Users//Downloads/OMA 7. Enter y to confirm that you consent to enable the ExperienceBundle metadata API and migrate Experience Cloud sites. The assessment process is initiated. After the assessment is complete, a confirmation message appears indicating that the reports are ready for review. For example: ``` Migration assessment for org XYZ is complete and reports are ready for review in the folder /assessment_reports ``` Where, `` is the location on your machine where the assessment reports are stored. The assessment reports also appear in a new browser window. The assessment reports are generated for these components: - Omniscripts - Flexcards - Data Mappers - Integration Procedures - Apex Classes - FlexiPages - Experience Cloud Site Pages - Lightning Web Components - Custom Labels 8. Click the component for which you want to view the assessment report, and review it to identify potential migration issues and determine whether any updates are required before migration. See [Review the Assessment Reports](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_review_assess_reports_std_dm_std_runtime.htm&release=264.0.0&type=5 "When you run the Omnistudio Migration Assistant in Assess mode, it generates assessment reports for Omniscripts, Flexcards, Data Mappers, Integration Procedures, Apex Classes, Omni Global Auto Numbers, FlexiPages, Experience Cloud Site Pages, Lightning Web Components, and Custom Labels. These assessment reports highlight several key areas that require attention before migrating Omnistudio components."). 9. To ensure a smooth migration, complete all the pending action items that are listed as **Needs Manual Intervention** in the assessment reports. 10. To validate readiness, re-run the Omnistudio Migration Assistant in Assess mode. Each time you run the Omnistudio Migration Assistant, it reruns assessments on all components and generates new reports. 11. Make sure that all records listed in the Assessment Status column in the Assessment Report are marked as either Ready for Migration or Warnings before proceeding with the migration. # Assess the Migration Readiness in Your Development Sandbox (Vlocity Industries Managed Package and Standard Data Model) In the development sandbox, run the Omnistudio Migration Assistant in Assess mode to assess how the migration process impacts each Omnistudio component. Before You Begin To run the Omnistudio Migration Assistant, you must have the Omnistudio admin and Omnistudio user permission sets assigned. See [Omnistudio Permission Sets](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_permission_sets_licenses.htm&language=en_US&type=5). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Always run the Assess mode before running the Migrate mode to understand the impact and avoid incomplete or incorrect migration. Review the assessment report for any failed statuses and resolve them before proceeding with migration. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If your org is already on the standard data model with the Omnistudio Metadata API setting enabled, the Omnistudio Migration Assistant does not assess and generate assessment reports for the Omnistudio components such as Data Mappers, Omniscripts, Integration Procedures, Flexcards, and Omni Global Auto Number. In this scenario, the Omnistudio Migration Assistant assesses only Custom Labels, and related objects such as Apex classes, LWCs, FlexiPages, and Experience Cloud site pages to resolve namespace and reference dependencies. 1. Authenticate to the migration sandbox org: ``` sf org login web --instance-url= ``` 2. When prompted, enter your username and password. The authorization successful message appears. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note All prompts in the Omnistudio Migration Assistant have a timeout of five minutes. If no input is provided within this time, the command exits automatically. 3. Open the [Omnistudio Migration Assistant tool](https://www.npmjs.com/package/@salesforce/plugin-omnistudio-migration-tool?activeTab=versions) Versions page and install the Omnistudio Migration Assistant version 2.0.0-preview.27 by running this command in the terminal: `sf plugins install @salesforce/plugin-omnistudio-migration-tool@2.0.0-preview.27` See [Install the Omnistudio Migration Assistant](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_install_oma.htm&release=264.0.0&type=5 "The Omnistudio Migration Assistant is a command-line interface (CLI) plug-in that you install using Salesforce CLI."). 4. Run the Omnistudio Migration Assistant in Assess mode. `sf omnistudio:migration:assess [-u ] [-a] [--only=(dm|ip|os|fc|autonumber|cl)] [--relatedobjects=(apex|lwc|expsites|flexipage) [--verbose]` - To assess all versions of the components, use `-a` or `–allversions`: ``` sf omnistudio:migration:assess -u -a ``` Where, `YOUR_ORG_USERNAME@DOMAIN.COM` is your username in the sandbox. Example: `sf omnistudio:migration:assess -u asmith@sample.com -a` If you don’t specify either -a or –allversions parameter in the command, the Omnistudio Migration Assistant requests for your consent to assess all versions of the Omnistudio components. Enter `y` to consent. If you don't consent to assess all versions of the Omnistudio components, you cannot proceed with the assessment. - To assess specific components, use the `-o` or `--only=dm` parameter: - `--only=dm`: Data Mappers - `--only=ip`: Integration Procedures - `--only=os`: Omniscripts - `--only=fc`: Flexcards - `--only=autonumber`: Omni Global Auto Numbers - `--only=cl`: Custom Labels Example: `sf omnistudio:migration:assess -u asmith@sample.com –only=dm` - To assess specific or all related objects, use the `-r` or `--relatedobjects` parameter: - `--relatedobjects=apex`: Apex classes - `--relatedobjects=lwc`: Lightning web components - `--relatedobjects=expsites`: Experience Sites - `--relatedobjects=flexipage`: FlexiPages - `--relatedobjects="apex,lwc,expsites,flexipage"`: all related objects Example: `sf omnistudio:migration:assess -u asmith@sample.com --relatedobjects=apex` - To assess username or alias for the target org and to override the default target org: - `-u ` or `--targetusername=`: Username of the target org or alias you’ve set up in Salesforce CLI for that org. Example: `sf omnistudio:migration:assess -u asmith@sample.com` - To control the amount of details shown in the command output, use the `--verbose` parameter with the command: Example: `sf omnistudio:migration:assess -u asmith@sample.com --verbose` 5. If multiple Omnistudio packages are found, select one of the packages by entering its number. 6. When prompted, enter y or n to specify whether you already have a Salesforce project with related objects. - If you entered n: 1. The tool connects to your org and retrieves related objects such as Apex classes, FlexiPages, Experience Cloud site pages, and Lightning web components (LWCs). 2. Enter y to proceed. 3. Create an empty project folder where the tool can retrieve and store the related objects. 4. When prompted, enter the path to the project folder. For example: /Users//Downloads/OMA - If you entered y: 1. When prompted, enter the path to the project folder that contains the retrieved related objects. For example: /Users//Downloads/OMA 7. Enter y to confirm that you consent to enable the ExperienceBundle metadata API and migrate Experience Cloud sites. The assessment process is initiated. After the assessment is complete, a confirmation message appears indicating that the reports are ready for review. For example: ``` Migration assessment for org XYZ is complete and reports are ready for review in the folder /assessment_reports ``` Where, `` is the location on your machine where the assessment reports are stored. The assessment reports also appear in a new browser window. The assessment reports are generated for these components: - Omniscripts - Flexcards - Data Mappers - Integration Procedures - Apex Classes - Omni Global Auto Numbers - FlexiPages - Experience Cloud Site Pages - Lightning Web Components - Custom Labels 8. Click the component for which you want to view the assessment report, and review it to identify potential migration issues and determine whether any updates are required before migration. See [Review the Assessment Reports](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_review_assess_reports.htm&release=264.0.0&type=5 "When you run the Omnistudio Migration Assistant in Assess mode, it generates assessment reports for Omniscripts, Flexcards, Data Mappers, Integration Procedures, Apex Classes, Omni Global Auto Numbers, FlexiPages, Experience Cloud Site Pages, Lightning Web Components, and Custom Labels. These assessment reports highlight several key areas that require attention before migrating Omnistudio components."). 9. To ensure a smooth migration, complete all the pending action items that are listed as **Needs Manual Intervention** in the assessment reports. 10. To validate readiness, re-run the Omnistudio Migration Assistant in Assess mode. Each time you run the Omnistudio Migration Assistant, it reruns assessments on all components and generates new reports. 11. Make sure that all records listed in the Assessment Status column in the Assessment Report are marked as either Ready for Migration or Warnings before proceeding with the migration. - **[Review the Assessment Reports (Vlocity Industries Managed Package or Omnistudio Foundation Package and Standard Data Model)](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_review_assess_reports_std_dm_std_runtime.htm&release=264.0.0&type=5)** When you run the Omnistudio Migration Assistant in Assess mode, it generates assessment reports for Omniscripts, Flexcards, Data Mappers, Integration Procedures, Apex Classes, Omni Global Auto Numbers, FlexiPages, Experience Cloud Site Pages, Lightning Web Components, and Custom Labels. These assessment reports highlight several key areas that require attention before migrating Omnistudio components. # Assess the Migration Readiness in Your Development Sandbox (Vlocity Industries Managed Packages and Custom Data Model) In the development sandbox, run the Omnistudio Migration Assistant in Assess mode to assess how the migration process impacts each Omnistudio component. Before You Begin To run the Omnistudio Migration Assistant, you must have the Omnistudio admin and Omnistudio user permission sets assigned. See [Omnistudio Permission Sets](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_permission_sets_licenses.htm&language=en_US&type=5). ![phase1\_step2\_assess](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/os_oma_migrate_phase1_step2_assess.png) ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Always run the Assess mode before running the Migrate mode to understand the impact and avoid incomplete or incorrect migration. Review the assessment report for any failed statuses and resolve them before proceeding with migration. 1. Authenticate to the migration sandbox org: ``` sf org login web --instance-url= ``` 2. When prompted, enter your username and password. The authorization successful message appears. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note All prompts in the Omnistudio Migration Assistant have a timeout of five minutes. If no input is provided within this time, the command exits automatically. 3. [Install the Omnistudio Migration Assistant](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_install_oma.htm&release=264.0.0&type=5 "The Omnistudio Migration Assistant is a command-line interface (CLI) plug-in that you install using Salesforce CLI."). 4. Run the Omnistudio Migration Assistant in Assess mode. `sf omnistudio:migration:assess [-u ] [-a] [-v ] [--only=(dm|ip|os|fc|autonumber|cl)] [--relatedobjects=(apex|lwc|expsites|flexipage) [--loglevel=(trace|debug|info|warn|error|fatal|trace)]` - To assess all versions of the components, use `-a` or `–allversions`: ``` sf omnistudio:migration:assess -u -a ``` Where, `YOUR_ORG_USERNAME@DOMAIN.COM` is your username in the sandbox. Example: `sf omnistudio:migration:assess -u asmith@sample.com -a` - To assess specific components, use the `-o` or `--only=dm` parameter: - `--only=dm`: Data Mappers - `--only=ip`: Integration Procedures - `--only=os`: Omniscripts - `--only=fc`: Flexcards - `--only=autonumber`: Omni Global Auto Numbers - `--only=cl`: Custom Labels - `--only=sfl`: Omniscript Saved Sessions (Save For Later) Example: `sf omnistudio:migration:assess -u asmith@sample.com –only=dm` Use `--only` to scope the assessment to specific component types (for example, `--only=dm,ip`). This scoping applies to assess mode only. When you migrate, always migrate all component types together. See [Migrate Your Components in Your Development Sandbox (Vlocity Industries Managed Packages and Custom Data Model)](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_phase1_step3.htm&release=264.0.0&type=5 "Migrate all your custom components from Omnistudio for Vlocity to Omnistudio Standard using the Omnistudio Migration Assistant. It overwrites any previously migrated components.") - To assess specific or all related objects, use the `-r` or `--relatedobjects` parameter: - `--relatedobjects=apex`: Apex classes - `--relatedobjects=lwc`: Lightning web components - `--relatedobjects=expsites`: Experience Sites - `--relatedobjects=flexipage`: FlexiPages - `--relatedobjects="apex,lwc,expsites,flexipage"`: all related objects Example: `sf omnistudio:migration:assess -u asmith@sample.com --relatedobjects=apex` - To assess username or alias for the target org and to override the default target org: - `-u ` or `--targetusername=`: Username of the target org or alias you’ve set up in Salesforce CLI for that org. Example: `sf omnistudio:migration:assess -u asmith@sample.com` - To assess username or alias for the Dev Hub org and to override the default Dev Hub org: - `-v ` or `--targetdevhubusername=`: Username of the target Dev Hub org or alias you’ve set up in Salesforce CLI for that org. Example: `sf omnistudio:migration:assess -v asmith@sample.com` - To control the amount of details shown in the command output: - `--loglevel=(trace|debug|info|warn|error|fatal`) : Sets the logging level for this command invocation. Default is warn. - `trace` or `debug`: Show very detailed logs, useful for troubleshooting. - `info`: Shows general informational messages. - `warn` (default): Shows warnings and errors only. - `error` or `fatal:` Show only errors or critical failures. Example: `sf omnistudio:migration:assess -u asmith@sample.com –loglevel=debug` 5. If multiple Omnistudio packages are found, select one of the packages by entering its number. 6. When prompted, enter y or n to specify whether you already have a Salesforce project with related objects. - If you entered n: 1. The tool connects to your org and retrieves the Apex classes. 2. Enter y to proceed. 3. Create an empty project folder where the tool can retrieve and store Apex classes. 4. When prompted, enter the path to the project folder. For example: /Users//Downloads/OMA - If you entered y: 1. When prompted, enter the path to the project folder that contains the retrieved Apex classes. For example: /Users//Downloads/OMA 7. Enter y to confirm that you consent to enable the ExperienceBundle metadata API and migrate Experience Cloud sites. The assessment process is initiated. After the assessment is complete, a confirmation message appears indicating that the reports are ready for review. For example: ``` Migration assessment for org 00DDR0000008bj32AA is complete and reports are ready for review in the folder /assessment_reports ``` Where, `` is the location on your machine where the assessment reports are stored. The assessment reports also appear in a new browser window. The assessment reports are generated for these components: - Omniscripts - Flexcards - Data Mappers - Integration Procedures - Apex Classes - Omni Global Auto Numbers - FlexiPages - Experience Cloud Site Pages - Lightning Web Components - Custom Labels - Omniscript Saved Sessions 8. Click the component for which you want to view the assessment report, and review it to identify potential migration issues and determine whether any updates are required before migration. See [Review the Assessment Reports](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_review_assess_reports.htm&release=264.0.0&type=5 "When you run the Omnistudio Migration Assistant in Assess mode, it generates assessment reports for Omniscripts, Flexcards, Data Mappers, Integration Procedures, Apex Classes, Omni Global Auto Numbers, FlexiPages, Experience Cloud Site Pages, Lightning Web Components, and Custom Labels. These assessment reports highlight several key areas that require attention before migrating Omnistudio components."). 9. To ensure a smooth migration, complete all the pending action items that are listed as **Needs Manual Intervention** in the assessment reports. 10. To validate readiness, re-run the Omnistudio Migration Assistant in Assess mode. Each time you run the Omnistudio Migration Assistant, it reruns assessments on all components and generates new reports. 11. Make sure that all records listed in the Assessment Status column in the Assessment Report are marked as either Ready for Migration or Warnings before proceeding with the migration. - **[Review the Assessment Reports (Vlocity Industries Managed Packages and Custom Data Model)](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_review_assess_reports.htm&release=264.0.0&type=5)** When you run the Omnistudio Migration Assistant in Assess mode, it generates assessment reports for Omniscripts, Flexcards, Data Mappers, Integration Procedures, Apex Classes, Omni Global Auto Numbers, FlexiPages, Experience Cloud Site Pages, Lightning Web Components, and Custom Labels. These assessment reports highlight several key areas that require attention before migrating Omnistudio components. # Assessing Contact, Lead, and Pipeline Activity Using Enhanced List Views for Partners When partners have access to Contact Intelligence View, Lead Intelligence View, and Pipeline Inspection, partners can view activities, complete actions, and update records from a single page of their Experience Cloud site.
Available for partners in Experience Cloud Aura sites, accessed through Lightning Experience in Enterprise, Performance, and Unlimited Editions with Sales Cloud or Service Cloud. A PRM add-on license is required for each partner user.
Available with Sales Cloud Einstein, which is available in Performance and Unlimited Editions, and for an extra cost in Enterprise Edition.
Your site admin can add an enhanced view of your contacts, leads, or deals from your partner site. Some partner sites let you access enhanced list views from Leads, Contacts, or Deals on the main site navigation menu (1). If you can’t find the enhanced list views on your site, ask your site admin for help. Let’s take a closer look at the enhanced list view for leads. ![Partner site showing navigation to lead or contact intelligence view, filters for records that the user owns that were created this quarter, and a series of metrics including 3 leads with no activity, 3 leads with overdue activity, and 5 with upcoming activity scheduled.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-partner_cloud-264-0-0-production-enus/cd9c08c3-2648-4867-ab9d-a0251a8a86a5/partner_cloud/images/prm_li_ci_metrics_filters.png) Select one of your leads list views to filter the leads you want to peruse (2). If you want, further filter records (3) and check out the aggregate activity statistics across the displayed list (4). To see activity metrics and health insights on a record, click the side panel icon (5). From the side panel, see more activity metrics, such as which records are overdue (5) and which have activities scheduled today (6). You can also send an email to the prospect or customer (7), or create a task or log a call (8). ![Partner site showing an overdue task, a task and event scheduled for today, the Send Email button, and two action menu activities to create a task or log a call.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-partner_cloud-264-0-0-production-enus/cd9c08c3-2648-4867-ab9d-a0251a8a86a5/partner_cloud/images/prm_li_ci_activity.png) The contacts enhanced list view is similar to leads, but it also includes Case Insights from the Insights tab on the side panel. The pipeline enhanced list view includes a different collection of metrics and insights. After selecting a list view, select quick filters for narrowing the opportunities partners are viewing by owner, projected close date, and the time frame of recent changes. See health metrics across the opportunities listed, such as the amount of pipeline that’s overdue, open, or lost (1). ![Partner site showing pipeline inspection view with filters for records that the user owns that are scheduled to close this month, closing metrics, a high opportunity score, a task due tomorrow to send a quote, a meeting scheduled yesterday, and a call logged for today.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-partner_cloud-264-0-0-production-enus/cd9c08c3-2648-4867-ab9d-a0251a8a86a5/partner_cloud/images/prm_pi_activity.png) ![Partner site showing pipeline inspection view with filters for records that the user owns that are scheduled to close this month, closing metrics, a high opportunity score, a task due tomorrow to send a quote, a meeting scheduled yesterday, and a call logged for today.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-partner_cloud-264-0-0-production-enus/cd9c08c3-2648-4867-ab9d-a0251a8a86a5/partner_cloud/images/prm_pi_activity.png) To see activity metrics and health insights on a record, click the side panel icon (2). The side panel shows opportunity metrics for Days to Close, Days in Stage, and Push Count (3). For partner users who are assigned the Sales Cloud Einstein for Partners permission set, an Opportunity Score insight is also available (4). From the Activity tab (5), see upcoming (6) and recent (7) activities, and edit them (8). Partners can also complete actions, such as sending emails (9); logging related calls, events, and tasks; and editing the opportunity’s next step (10). From the Insights tab, you can also see more insights on scores, activities, service cases, and the likelihood of the deal to close. # Asset Coverage View Use the Asset Coverage View for quick access to customer entitlements. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
The Asset Coverage View provides agents with a central place to access a comprehensive list of entitlements. Agents assess what’s entitled to the customer and choose the applicable coverage when opening a case or work order. The Warranties View and Contracts View actions on the asset displays the entitlements associated with an asset, including maintenance plans, warranties, and service contracts. Agents can also see details such as term length and type, what’s covered, and what’s been consumed. - **[Set up the Asset Coverage View](https://help.salesforce.com/s/articleView?id=xcloud.fs_manage_entitlements_setup.htm&release=264.0.0&type=5)** To provide agents with quick access to customer entitlements, set up the Asset Coverage View. - **[Manage Entitlements with the Asset Coverage View](https://help.salesforce.com/s/articleView?id=xcloud.fs_entitlements_use.htm&release=264.0.0&type=5)** Access your customers entitled services quickly with the Asset Coverage View. # Asset Health Score Dashboard Proactive Asset Service monitors asset usage, age, and maintenance history to assign an asset an overall health score. The score is based on the Recent Repairs KPI, Total Usage KPI, and Asset Age KPI calculated insights. Based on the score, the insight is also assigned a badge, Looking Good, Warning, or Critical, to help quickly assess the asset’s performance. | METRIC | CALCULATION | | --- | --- | | Asset Health Score | The overall health score for the asset based on its age, usage, and repair history. | | Score | The numeric asset health score. Refers to the time that has passed since an asset was acquired and put into use. It gauges maintenance, upgrades, reliability, and eventual replacement. | | Age | Tracks the amount of time that has elapsed since the asset was initially installed. It gauges the maturity of the asset, assess the need for updates, maintenance, or support, and indicates the lifespan of the asset. | | Days since installation | The amount of time between when the was case was created and when it was closed for the first time. This total excludes cases that are immediately closed upon opening. | | Total Usage | The asset health rating for the asset’s use. | | Hours | Quantifies the cumulative amount of time an asset has been used since it was put into service. It helps to predict lifespan and schedule maintenance. | | Repairs | Indicates the total count of repairs an asset has undergone. | | Repairs in the last 6 months | Tracks the maintenance history and reliability of the asset. A higher number of repairs might signal frequent issues or potential decline in asset performance. | # Asset Interactive Hierarchy Asset Interactive Hierarchy offers a way to easily visualize and navigate a complex asset and its child assets. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To use Field Service Asset Interactive Hierarchy features FieldServiceAssetHierarchyAddOn
To see the Field Service Asset Interactive Hierarchy current view in Unlimited Edition AssetInteractiveHierarchyCurrentView
Asset interactive hierarchy helps organize and categorize assets in a structured manner tree-like format. Asset interactive Hierarchy helps companies keep track and manage all the assets more efficiently. The interactive hierarchy view helps mobile workers see the asset relationships at a work site so that they can diagnose problems, make better decisions, and get the job done faster. This view also helps you quickly identify parts and understand how the assets are related. An asset manager can replace or relocate an asset. They can see the asset lifecycle at a glance, instead of going to multiple record pages. This saves time and costs for our customers. The Asset Interactive Hierarchy is different from the Asset Hierarchy. To learn about Asset Hierarchy, see [Asset Hierarchies](https://help.salesforce.com/s/articleView?id=service.assets_rel_hierarchical.htm&type=5&language=en_US). - **[Set up Asset Interactive Hierarchy](https://help.salesforce.com/s/articleView?id=xcloud.aslm_asset_interactive_hierarchy_setup.htm&release=264.0.0&type=5)** Set up Asset Interactive Hierarchy to provide asset hierarchy capabilities and view an extended hierarchy of assets on the console and on the mobile. - **[Asset Interactive Hierarchy Views](https://help.salesforce.com/s/articleView?id=xcloud.aslm_asset_interactive_hierarchy_views.htm&release=264.0.0&type=5)** Asset Interactive Hierarchy offers real-time views of current, installed, and maintained assets, including key information such as installation dates, maintenance history, and current status. The asset interactive hierarchy views help technicians manage and maintain assets efficiently during field operations. # Asset Interactive Hierarchy Views Asset Interactive Hierarchy offers real-time views of current, installed, and maintained assets, including key information such as installation dates, maintenance history, and current status. The asset interactive hierarchy views help technicians manage and maintain assets efficiently during field operations. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
To configure the asset hierarchy tab, see [Set up Asset Interactive Hierarchy](https://help.salesforce.com/s/articleView?id=xcloud.aslm_asset_interactive_hierarchy_setup.htm&language=en_US). ‌To see the different views of an asset, go to the Asset Hierarchy tab on the asset details page. ![Asset interactive hierarchy views](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/asset_service_lifecycle_mgmt/images/aslm_asset_interactive_hierarchy_views.png) ## Different Views of Asset Interactive Hierarchy An asset goes through various replacements and upgrades during its lifecycle. These views help you see the different lifecycles of the asset within the existing asset hierarchy. Current View Asset hierarchy view in the way the asset is used. As Maintained View Asset hierarchy view with all maintenance work done on the asset. As Installed view Asset hierarchy view as on the day it was installed. See how you can use the different asset hierarchy views on the Field Service Mobile app.
Field Service Mobile App View What You Can See on Current View What You Can See on AS Maintained view What You Can See on As Installed view
Uses Find current assets quickly for easy troubleshooting. Access the maintenance history from your mobile device while you’re on-site. Compare what’s on-site with the original installation layout.
NA Make informed decisions about replacing or repairing components based on historical data.

See the asset’s original installation status at the time of its first installation. To see the last change made to the asset, switch to the Maintained view.

As installed view helps you troubleshoot any issues quickly and effectively.

NA NA Assets show up if you installed them on or before the root asset.
NA NA If you don’t provide the install date, the asset is considered orphaned in this hierarchy. You can view orphaned assets in a list view at the bottom of your screen.
NA

Gray tags indicate the relationship with the asset in context. We provide three out-of-the-box relationships: Replacement, Cross-Grade, and Upgrade.

You can also create custom relationship types, which appear as labels on an asset in this view.

NA
You can see 10 child assets for a particular parent. You can see 10 child assets for a particular parent. You can see 10 child assets for a particular parent.
You can replace and relocate an asset. You can’t replace or relocate an asset. You can view the asset’s history. You can’t replace or relocate an asset.
See how you can use the different asset hierarchy views on Field Service desktop version.
Field Service Desktop View What You Can See on Current View What You Can See on AS Maintained view What You Can See on As Installed view
Uses

Your assets’ current status. Get a real-time operational state view of your asset hierarchy.

Service managers can dive into the components of each asset for quick, easy root-cause analysis.

Asset’s complete maintenance history, including active and inactive components.

Highlights past replacements to help service managers identify recurring issues.

Provides insights into repair frequency and component lifespan.

See a snapshot of the asset’s configuration at the time of installation.

As installed view enables you to compare it with the current asset setup to identify any discrepancies.

Service managers can verify part replacements and updates easily.

You can replace and relocate an asset. You can’t replace or relocate an asset. You can view the asset’s history. You can’t replace or relocate an asset.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note We have a limit of 50,000 records that you can prime on the Field Service mobile app. For the desktop view, if you're loading an asset at level 5 or higher, the Installed view can take 2 seconds or more to load. Similarly, if you're loading an asset at level 50 or higher, the Current and Maintained view can take 2 seconds or more to load. ## Replace Use the asset detail page to track tasks related to the replacement or relocation. On the console, you can individually replace each child asset. You can also replace an asset with another asset. You can access the replace action through Flows and REST api. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note When you replace an asset, its parent ID isn't updated and it is not automatically removed from **As Maintained View**. If you want to remove the replaced asset from **As Maintained View**, update its parent ID. You can see the replacement asset in the **Related** tab under Primary Assets. On the Asset details page, select the asset name you want to replace. Click **Replace**. Select a replacement asset. Enter the duration for the replacement. Save your changes. ## Relocate In the Relocate window, choose the asset name you want to move and the location you want to move it‌ to. On the console, you can relocate an asset from one location to another location. In the Replace window select the replacement duration. You can access the relocate action through Flows and REST api. On the Asset details page, select the asset name you want to relocate. Click **Relocate**. Enter the location name. Save your changes. In the offline mobile mode, to replace and relocate an asset, add the records to **Briefcase**. Offline mode is limited to a few entities, and Asset isn’t one of them. # Asset Management Starter Data Kit for Connected Assets Get a head start in your Data Cloud implementation for Connected Assets by installing the Asset Management Starter data kit. The data kit includes preconfigured data streams and calculated insights that help you unify and analyze data related to asset revenue and services. Install the data kit in your org, deploy the data streams, and activate the calculated insights. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
## Data Kit Installation To start using the predefined data streams and calculated insights, install the Asset Management Starter Data Kit package. Ensure that you’re logged into the Salesforce org where you want to install the package, and use this installation URL to install the data kit: [https://sf-industries.my.salesforce-sites.com/assetmanagementstarterdk](https://sf-industries.my.salesforce-sites.com/assetmanagementstarterdk). To verify that the package is installed, in Setup, go to Installed Packages and look for the name of the package. After the installation, deploy the data streams that you need from the data kit. Also, create and activate the calculated insights from the installed data kit in Data Cloud. ## Data Streams in the Data Kit Data streams map data model objects in Data Cloud to objects in your Salesforce org. The Asset Management Starter data kit contains predefined data streams for data model objects, such as Asset, Account, Case, Product, Work Order, and Order. The fields on the data model objects are mapped to the corresponding fields on the source objects in your Salesforce org. You can map other fields as necessary, or delete the mappings that you don’t use. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-connected_assets-264-0-0-production-enus/eb4c6dd7-4aef-4e97-9c56-46929d5b166e/images/icon_note.png) Note If you deploy multiple data kits with data streams for the same data model objects in an org, avoid duplication of data by using only one set of data streams. ## Calculated Insights in the Data Kit Calculated insights are metrics created by using complex calculations that aggregate data based on numerous factors. Sales and service managers can use these calculated insights to focus on high revenue-generating assets and optimize scheduled maintenance of assets. Review the calculated insights that are included in the Asset Management Starter data kit.
Calculated Insight Description
Asset Lifetime Revenue

This insight calculates the lifetime revenue that a manufacturer generates from all sales and service activities related to an asset. The lifetime revenue for an asset is calculated by aggregating the revenue generated from the direct orders and work orders related to the asset. This calculated insight derives revenue values from the asset revenue components and aggregates the results by asset.

Sales and service managers can use this calculated insight to make informed decisions about asset management, pricing strategies, and resource allocation.

Asset Revenue Components

This insight calculates the revenue for an asset from different revenue streams. This calculated insight aggregates information from the Asset Revenue From Direct Sales and the Asset Revenue From Services calculated insights, and groups the results by account and asset.

Sales and service managers can use this calculated insight to understand the revenue generated for an asset from each revenue stream.

Asset Revenue From Direct Sales

This insight calculates the lifetime revenue that a company generates from direct orders for a specific asset. This calculated insight aggregates revenue from sales orders for an asset.

Sales managers can use this calculated insight to optimize sales performance and maximize revenue from orders.

Asset Revenue From Services

This insight calculates the lifetime revenue that a company generates from services, repairs, and maintenance activities performed on a specific asset. This calculated insight aggregates revenue from work orders for an asset.

Sales and service managers can use this calculated insight to analyze the profitability of asset services and improve service strategies.

Count Of Closed Cases By Asset

This insight calculates all the cases that are in Closed status for an asset.

Service managers can use this calculated insight to monitor the resolution of cases related to specific assets.

Count Of Closed Cases By Customer

This insight calculates all cases that are in Closed status for an account.

Service managers can use this calculated insight to track the progress and resolution of customer issues.

Count Of Open Cases By Asset

This insight calculates all the open cases for an asset.

Service managers can use this calculated insight to prioritize assets with a high number of open cases.

Count Of Open Cases By Customer

This insight calculates all the open cases for an account.

Service managers can use this calculated insight to focus on resolving open cases for high-value customers or customers with the most urgent issues.

Count Of Total Cases By Asset

This insight calculates the total number of cases for an asset. This calculated insight considers cases in all statuses.

Service managers can use this calculated insight to understand the overall asset performance and customer satisfaction for the asset.

Count Of Total Cases By Customer

This insight calculates the total number of cases for an account. This calculated insight considers cases in all statuses.

Service managers can use this calculated insight to gauge the level of customer satisfaction and identity trends in customer issues.

Customer Lifetime Revenue From Assets

This insight calculates the lifetime revenue that a company generates from the sale and service of assets for a specific account. This calculated insight aggregates the lifetime revenue from the assets purchased by the account. It also aggregates the service and maintenance activities performed on the assets that the customer owns.

Sales and service managers can use this calculated insight to analyze the long-term revenue potential for a customer and identify opportunities to upsell and cross-sell products and services.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-connected_assets-264-0-0-production-enus/eb4c6dd7-4aef-4e97-9c56-46929d5b166e/images/icon_note.png) Note If you deploy multiple data kits with similar calculated insights in an org, avoid data misinterpretation and misrepresentation by using only one set of calculated insights. #### See Also - [Data Kits](https://help.salesforce.com/s/articleView?id=data.c360_a_data_package_kits.htm&language=en_US) - [Trailhead: Packaging and Data Kits in Data Cloud](https://trailhead.salesforce.com/content/learn/modules/packaging-and-data-kits-in-salesforce-cdp) # Asset Service Lifecycle Management Asset Service Lifecycle Management empowers businesses to manage the entire lifecycle of asset service operations, streamline field service operations, and boost the productivity and satisfaction of your field service teams. Asset Service Lifecycle Management offers a suite of features that help businesses maximize asset lifetime value, minimize asset downtime, improve service delivery, manage product services at scale, and simplify the work order management process. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
- **[Asset Service Lifecycle Management Editions](https://help.salesforce.com/s/articleView?id=xcloud.aslm_editions.htm&release=264.0.0&type=5)** Review the supported products and editions for Asset Service Lifecycle Management features. - **[Agentforce for Asset Service Lifecycle Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_agentforce_overview.htm&release=264.0.0&type=5)** Agentforce for Asset Service Lifecycle Management offers a suite of AI-powered agent templates that help you manage inventory tasks and asset service estimation through natural language interactions. With out-of-the-box agent topics and actions, quickly generate performance summaries, estimate service requirements for assets, and search for products or assets based on user-defined criteria. - **[Discover and Set Up Asset Service Lifecycle Management Features With Salesforce Go](https://help.salesforce.com/s/articleView?id=xcloud.aslm_discover_setup_features_with_sfgo.htm&release=264.0.0&type=5)** Explore, set up and configure, and monitor usage of Asset Service Lifecycle Management features in one streamlined setup location. Access content resources, such as videos, online tours, Trailhead, and Salesforce Help articles, to learn about features, and get help with configuration - all without leaving the setup page. Discover more ASLM features and add-on licenses that are available based on your Salesforce edition. And if you've turned on the Your Account app, you can quickly buy add-on licenses for some products directly from Salesforce Go. - **[Advanced Exchange](https://help.salesforce.com/s/articleView?id=xcloud.aslm_advancedexchange_parent.htm&release=264.0.0&type=5)** Use Advanced Exchange to streamline the creation of return and replacement requests for defective products or parts. Field technicians or service managers can quickly capture product details and initiate both return and replacement requests in a single, unified process—ensuring smooth operations with minimal disruption. - **[Asset Coverage View](https://help.salesforce.com/s/articleView?id=xcloud.fs_manage_entitlements.htm&release=264.0.0&type=5)** Use the Asset Coverage View for quick access to customer entitlements. - **[Asset Interactive Hierarchy](https://help.salesforce.com/s/articleView?id=xcloud.aslm_asset_interactive_hierarchy_overview.htm&release=264.0.0&type=5)** Asset Interactive Hierarchy offers a way to easily visualize and navigate a complex asset and its child assets. - **[Book Service Appointment](https://help.salesforce.com/s/articleView?id=xcloud.aslm_bookservice_book_service_appointment_parent.htm&release=264.0.0&type=5)** Agents can easily view, book, reschedule, or cancel service appointments. This feature is accessible from a work order and other features. - **[Depot Repair](https://help.salesforce.com/s/articleView?id=xcloud.aslm_depotrepair_parent.htm&release=264.0.0&type=5)** Depot Repair streamlines the repair process for damaged products or parts returned to depots. Work orders for depot repair can be created directly from return order line items with auto-populated data, simplifying the work order creation process. Structured workflows and real-time tracking improve service performance and ensure consistency across depot operations. - **[Inventory Allocation](https://help.salesforce.com/s/articleView?id=xcloud.aslm_inventory_allocation.htm&release=264.0.0&type=5)** Inventory Allocation enables organizations to soft reserve inventory for diverse demand sources such as Sales Orders and Work Orders, while maintaining visibility into on-hand, allocated, and available inventory. It ensures inventory is reserved, prevents over commitment, and provides accurate inventory visibility even during high-volume, concurrent transactions. - **[Inventory Batch Management](https://help.salesforce.com/s/articleView?id=xcloud.aslm_inventorybatchmanagement_parent.htm&release=264.0.0&type=5)** Track and manage inventory more efficiently for both serialized and non-serialized products using batch details. - **[Inventory Search and Transfer](https://help.salesforce.com/s/articleView?id=xcloud.aslm_inventorysearch_parent.htm&release=264.0.0&type=5)** Manage inventory stock and movement, and streamline your inventory operations by using Inventory Search and Transfer. Design a search experience to empower inventory and service teams to monitor products and parts at warehouses, plants, and other inventory locations. Configure the searchable object that's the basis of the search experience, what criteria users use to search for products, how search results appear, and what actions users perform on the search results by using Criteria-Based Search and Filter. Maintain optimal inventory levels and fulfill customer demand by easily transferring serialized and non-serialized products across inventory locations. - **[Inventory Count](https://help.salesforce.com/s/articleView?id=xcloud.aslm_inventorycount_parent.htm&release=264.0.0&type=5)** Get an accurate picture of your inventory, compare your physical and system stocks, and maintain reliable inventory records with inventory counts. Plan cycle counts and create ad hoc counts for products and parts across inventory locations. Easily capture inventory counts for serialized and non-serialized products and take count notes at designated inventory locations by using the Salesforce Field Service mobile app. Get a single view of the accuracy, progress, counted quantities, and other key details of inventory counts. - **[Inventory Replenishment](https://help.salesforce.com/s/articleView?id=xcloud.aslm_inventoryreplenishment_parent.htm&release=264.0.0&type=5)** Prevent stockouts, ensure consistent product availability, and cultivate customer trust with a reliable, streamlined inventory replenishment process. Manage inventory replenishment policies to define how product items are restocked, where they're restocked from, and by how much they're restocked. Periodically run an automated inventory replenishment to trigger replenishment when stock levels drop below predefined thresholds—all without manual inventory checks. - **[Product Service Campaign](https://help.salesforce.com/s/articleView?id=xcloud.aslm_psc_parent.htm&release=264.0.0&type=5)** Organize impactful, timely product service campaigns to service products in disrepair, recall defective products, upgrade eligible products, and streamline product communications at scale. Product service campaigns help companies nurture a robust reputation, cultivate customer loyalty, and ensure customer safety. Service managers can design product service campaigns to assess issues in a large number of assets in a product line and coordinate activities to address the issues. They can easily segment and curate actionable lists of assets in product service campaigns, and assign lists to service agents. Service agents can monitor the services to be performed on the assets. - **[Service Parts Return](https://help.salesforce.com/s/articleView?id=xcloud.aslm_spr_parent.htm&release=264.0.0&type=5)** Manage the return process for service parts to improve service process efficiency for users. Field service technicians can request the return of damaged parts related to a work order when the part must be replaced. - **[Timesheets and Labor Cost Optimization](https://help.salesforce.com/s/articleView?id=xcloud.aslm_tmsht_timesheet_automation_and_labor_cost_association.htm&release=264.0.0&type=5)** Streamline the timesheet management process, improve compliance with labor union regulations, and reduce costs with Timesheets and Labor Cost Optimization. - **[Work Order Estimation](https://help.salesforce.com/s/articleView?id=xcloud.aslm_woe_parent.htm&release=264.0.0&type=5)** Before starting any field service work, assess the costs and effort required to provide reliable quotes and plan efficiently. You can estimate field service work for different sources, such as repair or extension work for assets, installation tasks for quote items or order items within existing sales quotes and orders, and network and infrastructure expansions for specific work type groups. # Asset Service Lifecycle Management Editions Review the supported products and editions for Asset Service Lifecycle Management features. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions with Field Service
Available in: Enterprise, Unlimited, and Developer Editions with Automotive Cloud
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Communications Cloud
Available in: Enterprise, Unlimited, and Developer Editions with Consumer Goods
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Energy and Utilities Cloud
Available in: Enterprise, Unlimited, and Developer Editions with Manufacturing Cloud
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Media Cloud
# Assign Access to the Security Health Review Tool Control who can view and manage Security Health Review reports and findings using two dedicated system permissions: View Health Assessments and Manage Health Assessments.
Available in: Lightning Experience in Enterprise and Unlimited editions
User Permissions Needed
To configure permissions: System Administrator profile
Access to Security Health Review is limited to Signature Success customers. Security Health Review uses two system permissions: | Permission | What it allows | | --- | --- | | **View Health Assessments** | View reports, generate reports, download PDF and CSV, track remediation status, view findings and compliant controls, use the Health Assessments Agent. | | **Manage Health Assessments** | Everything in View Health Assessments, plus: disposition findings, reclassify dispositions, remove dispositions. | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note The **Manage Health Assessments** permission includes all capabilities of **View Health Assessments**. You don't need to assign both permissions to the same user. ## Default Access Users whose profile includes the **Customize Application** or **Modify All Data** permission have access to Security Health Review by default, with no additional configuration required for view access. The System Administrator profile includes both of these permissions by default. All other users must be explicitly granted access using the **View Health Assessments** or **Manage Health Assessments** permission via a permission set or profile edit. ## Grant View Access To give a user read-only access to Security Health Review: 1. In Setup, enter Permission Sets in the Quick Find box and click **Permission Sets**. 2. Click **New** to create a permission set, or open an existing one. 3. Click **System Permissions**. 4. Click **Edit** and turn on **View Health Assessments**. 5. Click **Save**. 6. Click **Manage Assignments** > **Add Assignments**, select the users to assign, and click **Assign**. ## Grant View Access Using a Profile Alternatively, you can turn on **View Health Assessments** directly on a custom profile. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note Editing permissions on standard profiles isn't recommended. Use permission sets to follow the principle of least privilege. 1. In Setup, enter Profiles in the Quick Find box and click **Profiles**. 2. Click the profile name. 3. Go to **System Permissions** and click **Edit**. 4. Turn on **View Health Assessments** and click **Save**. ## Grant Manage Access To give a user the ability to disposition findings and manage dispositions: 1. In Setup, enter Permission Sets in the Quick Find box and click **Permission Sets**. 2. Click **New** to create a permission set, or open an existing one. 3. Click **System Permissions**. 4. Click **Edit** and turn on **Manage Health Assessments**. 5. Click **Save**. 6. Click **Manage Assignments** > **Add Assignments**, select the users to assign, and click **Assign**. # Assign AI Relationship Research Permissions Assign the correct permission set to each user based on whether they set up AI Relationship Research or use it on record pages. | Permission | Required for | | --- | --- | | Manage Users | Assign permission sets | AI Relationship Research uses two permission roles: | Role | What it allows | Assign to | | --- | --- | --- | | AI Relationship Research Admin | Allows admins to enable AI Relationship Research and define configurations for specific use cases. | Salesforce admins responsible for setup and configuration | | AI Relationship Research User | Allows users to view the AI Relationship Research insights generated for use cases based on their org's configurations. | Sales reps, account executives, and other end users | 1. From Setup, in the Quick Find box, enter Permission Sets, then select **Permission Sets**. 2. Click the permission set you want to assign: **AI Relationship Research Admin** or **AI Relationship Research User**. 3. Select **Manage Assignments**. 4. Select **Add Assignments**. 5. Select the users to assign, then select **Assign**. # Assign an Approver to Complete a Self-Service Quote with Docusign If you prepare a purchase but need someone else to sign for it, you can pass the documents to another person to complete the signing process. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: Starter, Professional, Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To use the Your Account app: Manage Billing or the Manage Subscriptions in Your Account: Identity User permission set
1. [Launch the Your Account app](https://help.salesforce.com/s/articleView?id=xcloud.users_launch_subscription_mgmt.htm&release=264.0.0&type=5 "Open the Your Account app from one of these areas depending on your edition."). 2. [Add the products and licenses that you want to buy](https://help.salesforce.com/s/articleView?id=xcloud.users_add_products_subscription_management.htm&release=264.0.0&type=5 "Purchase new products and licenses for your Salesforce org using the Your Account app. Products are pieces of Salesforce functionality, such as Sales Cloud, Sales Dialer, or extra file storage."). 3. Click **Order & Sign**. 4. Click **Sign Later**. 5. Check your inbox for an email from Docusign. To proceed in Docusign, click the link in the email. 6. In Docusign, click **Other Actions**. Then click **Assign to Someone Else**. ![Assign to Someone Else](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/users_subscription_management_reassign.png) 7. Enter the new signer's email address, name, and reason for changing the signing responsibility. 8. Click **ASSIGN TO SOMEONE ELSE**. Your signer receives an email with a link to complete the signing process in Docusign. When the signer completes the process, you both receive confirmation emails and your purchase is processed. For more information on what to expect and how to assign licenses to users, see [Add New Products and Licenses with the Your Account App](https://help.salesforce.com/s/articleView?id=xcloud.users_add_products_subscription_management.htm&release=264.0.0&type=5 "Purchase new products and licenses for your Salesforce org using the Your Account app. Products are pieces of Salesforce functionality, such as Sales Cloud, Sales Dialer, or extra file storage."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This process is available only if your payment process isn’t a credit card. # Assign an OAuth Custom Scope to an External Client App After you create an OAuth custom scope in your Salesforce org, you can assign it to an external client app to set data-access permissions for the app. For example, an external client app with an order\_status custom scope has the correct permission set to access order status data from the external entity. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

External client apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

External client apps can be installed in: All editions

User Permissions Needed
To manage, create, edit, and delete OAuth apps: Manage external client apps
Typically, to receive custom scopes that are assigned to an external client app, you must include the `scope` parameter in the authorization request. With the OAuth 2.0 JWT bearer flow, for external client apps that are pre-authorized, custom scopes are automatically returned with an access token. For more information, see [OAuth 2.0 JWT Bearer Flow for Server-to-Server Integration](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_jwt_flow.htm&release=264.0.0&type=5 "Sometimes you want to authorize servers to access data without interactively logging in each time the servers exchange information. For these cases, you can use the OAuth 2.0 JSON Web Token (JWT) bearer flow. This flow uses a certificate to sign the JWT request and doesn’t require explicit user interaction. However, this flow does require prior approval of the client app."). 1. From Setup, in the Quick Find box, enter external client apps, and select **External Client Apps Manager**. 2. From the list, select the external client app. 3. Expand the OAuth Policies section of the Policies page. 4. Select the OAuth custom scopes to assign to the external client app, and save your updates. # Assign Analytics for Loyalty Administrator Permissions Allow admins to create and manage the Analytics for Loyalty app by assigning admin permissions. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited editions that have Loyalty Management enabled.
1. From Setup, in the Quick Find box, enter Users, and then select **Users**. 2. Click the name of a user with the System Administrator profile. 3. Click **Permission Set Assignments**, and then click **Edit Assignments**. 4. Select permission sets. - If you have the Loyalty Analytics Plus subscription, select both the **CRM Analytics Plus Admin** and **Loyalty Analytics Admin** permission sets. - If you have only the Loyalty Analytics Base subscription, select **CLAAnalytics Base Admin** permission set. 5. Click **Add**, then save your changes. 6. Repeat Steps 2–5 for all users who create and manage the Analytics for Loyalty app. # Assign Analytics for Loyalty User Permissions Allow your users to view the Analytics for Loyalty app by assigning the relevant permissions. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited editions that have Loyalty Management enabled.
1. From Setup, in the Quick Find box, enter Users, and then select **Users**. 2. Click the name of a user who requires access to Loyalty Analytics. 3. Click **Permission Set Assignments**, and then click **Edit Assignments**. 4. Select permission sets. - If you have the Loyalty Analytics Plus subscription, select both the **CRM Analytics Plus User** and **Loyalty Analytics User** permission sets. - If you have only the Loyalty Analytics Base subscription, select **CLAAnalytics Base User** permission set. 5. Click **Add**, then save your changes. 6. Repeat Steps 2–5 for all users who view the Analytics for Loyalty app. # Assign Badges to Members Use actions in loyalty program process rules to assign badges to members and to check whether a badge is assigned to a member. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Growth or Loyalty Management - Advanced
## Assign Badges to Members In a loyalty program process rule, use the Assign Badge to Member action to assign badges to members. The action assigns the badge to a member for whom the rule’s related loyalty program process is run. If the process is run to credit points to a member, the badge is assigned to the member to whom points are credited. In the action, you provide values for these inputs: - Select the badge that's assigned to the member. - Select Active as the status of the member’s badge. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip To expire member badges that have passed the validity end date, admins can create and run a Data Processing Engine definition. - Enter an end date when the badge is no longer assigned to the member. If you don’t enter a date, the validity end date is automatically calculated based on the badge’s validity defined in the Loyalty Program Badge record. - Specify the reason for assigning the badge to the member. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_example.png) Example The Cloud Kicks Inner Circle loyalty program is running a cumulative promotion that assigns the Top Shopper badge to members who cross over US$1,000 in purchases in a month. The rule associated with the promotion updates the member’s usage towards the cumulative promotion. Next, a condition checks whether the member’s usage has crossed US$1,000. The Assign Badge to Member action is used as a child step on the condition. The Top Shopper badge is assigned to a member if the member’s promotion usage matches the condition’s criteria. ## Check Member Badge Assignment Use the action to check whether a badge is assigned to a member for whom the rule’s related loyalty program process is run. In a rule, use the action to verify whether the member is assigned a badge already to ensure that the badge isn’t assigned to the member multiple times. If the badge is associated with a reward, you can check whether the member is assigned the badge and then reward the member. In the action, you provide these inputs: - Select the badge that you want to assign to check if the member is already assigned the badge. - Select whether to check if the member’s badge is active or expired. The action provides these outputs: - Indicates whether the badge is assigned to the member. You can store this output in a Boolean data type parameter. - Provides the validity end date of the member badge. You can store this output in a Date data type parameter. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_example.png) Example As part of a promotion, members who post on social media about a loyalty program are assigned the Social Media Star badge. The loyalty program manager has to ensure that members who post more than one time aren’t assigned the badge multiple times. In the rule that assigns the badge to the member, the loyalty program manager adds the Check Member Badge Assignment action. Then, a condition checks if the output of the action has specified that the member isn’t assigned the badge. The Assign Badge to Member action is added as a child step of the condition to assign the badge to members when the condition’s criteria is met. # Assign Custom Home Pages to Specific Apps and Profiles Assign home pages to different apps and app-and-profile combinations to give your users access to a Home page perfect for their role. ### Required Editions
Available in: Lightning Experience
Available in: Essentials, Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create and save Lightning Pages in the Lightning App Builder Customize Application
To view Lightning Pages in the Lightning App Builder View Setup and Configuration
You can set page assignments by app in three different ways. You can use the Lightning App Builder to assign profiles to a single Home page, but Setup offers more control over page assignments. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This applies only to Lightning apps. Classic apps can be viewed in Lightning Experience, but you can’t display different Home pages assigned for specific apps and profiles. Upgrade Classic apps to Lightning apps in the App Manager to take advantage of Lightning Experience features. - From Setup, enter Lightning App Builder in the Quick Find box, then select **Lightning App Builder**. After you save a page, click **Activate** from the Page Saved dialog, or click **Activation**. - While editing a Lightning app, select the **Pages** tab, click **Open Page**, then click **Activation**. - In Setup—Enter Home in the Quick Find box, then select **Home**. # Assign Customer Lifecycle Analytics Administrator Permissions Enable admins to create and manage Customer Lifecycle Analytics app by assigning the relevant permissions. ### Required Editions
Available for an extra charge in Enterprise, Unlimited, and Developer editions where Salesforce Surveys is enabled.
1. From **Setup**, enter Users in the Quick Find box, and then select **Users**. 2. Click the name of the user who requires administrator access to Customer Lifecycle Analytics. 3. Click **Permission Set Assignments**, and then click **Edit Assignments**. 4. Select permission sets. - If you have the Customer Lifecycle Analytics license subscription, select both the **CRM Analytics Plus Admin** and **Customer Experience Analytics Admin** permission sets. - If you have the Salesforce Feedback Management license subscription, select **CLA Analytics Base Admin** permission set. 5. Click **Add**, then click **Save**. 6. Repeat Steps 2–5 for all the users who create and manage the Customer Lifecycle Analytics app. # Assign Customer Lifecycle Analytics User Permissions Enable users to view the Customer Lifecycle Analytics app by assigning the relevant permissions. ### Required Editions
Available for an extra charge in Enterprise, Unlimited, and Developer editions where Salesforce Surveys is enabled.
1. From **Setup**, enter Users in the Quick Find box, and then select **Users**. 2. Click the name of a user who requires access to Customer Lifecycle Analytics. 3. Click **Permission Set Assignments**, and then click **Edit Assignments**. 4. Select permission sets. 1. If you have the Customer Lifecycle Analytics license subscription, select both the **CRM Analytics Plus User** and **Customer Experience Analytics User** permission sets. 2. If you have the Salesforce Feedback Management license subscription, select **CLA Analytics Base User** permission set. 5. Click **Add**, then click **Save**. 6. Repeat these steps for all the users who create and manage the Customer Lifecycle Analytics app. # Assign Dynamic Benefits to Members Use dynamic benefits to reward members based on the members' level of engagement with their loyalty program regardless of their current tier. For example, Early Access to Level X shoes is a benefit that is given to members who have completed a survey. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions that have Loyalty Management enabled
User Permissions Needed
To assign benefits to members: Loyalty Management permission set
1. From the App Launcher, find and select **Member Benefits**. 2. Complete these fields:
Field Description Example
Member Benefit Name The name of the benefit that is assigned and the member who's assigned the member fit. Exclusive New Product Access for Maria
Member The member to whom the benefit is assigned. Maria Jimenez
Status The status of the benefit actions that are associated with the selected benefit. If the benefit doesn’t have a benefit action, the status can be set to Processed. Processed
Account The account associated with the member. —
Contact The contact associated with the member. —
Start Date

The date from when the benefit is assigned to the member.

If you don’t specify a start date, the benefit is assigned to the member as soon as you save the record.

10/01/2022
End Date The date until when the benefit is assigned to the member. 10/02/2022
Description Add details about why the benefit is provided to the member. Member completed the Product Return Experience survey.
Source Type Indicates that the member is provided the benefit manually. Manual
Primary Reference Object Record The ID of the record that’s created by the associated benefit action. —
Primary Reference Object Title The name of the record that’s created by the associated benefit action. —
3. Save your changes. # Assign Licenses for Installed Packages To give users access to a package that you installed, assign licenses in Setup. If you purchased a site license or if the managed package isn't licensed, Salesforce assigns licenses to all your users and you can’t manage licenses. Your users can use the package as long as they have the appropriate permissions. ### Required Editions
Available in: Salesforce Classic (not available in all orgs)
Available in: Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To manage licenses for installed packages: Manage Package Licenses
To assign licenses to specific users: 1. From Setup, enter Installed Packages in the Quick Find box, then select **Installed Packages** to find the installed package that has available licenses. 2. Click the **Manage Licenses** link next to the package name. 3. Click **Add Users**. 4. Choose a view from the dropdown list, or click **Create New View** to build a new custom view. 5. Select a letter to filter the users with a last name that corresponds with that letter, or click **All** to display all users who match the criteria of the current view. 6. Select users. 1. To select individual users, use the checkboxes. Selected users are listed in the Selected list. When the list includes all users to which you want to assign licenses, click **Add**. 2. To select all users for the current view, click **Add All Users** then click **OK**. 7. (Optional) Certain managed packages created by Salesforce require external access to data within your org. To allow an installed managed package to connect with external data, click **Enable for Platform Integrations**. Alternatively, to revoke access between an installed managed package and external data, click **Disable for Platform Integrations**. Enable this functionality only upon request from a Salesforce-owned managed package. #### See Also - [Manage Licenses for Installed Packages](https://help.salesforce.com/s/articleView?id=xcloud.distribution_managing_licenses.htm&release=264.0.0&type=5 "When you install a licensed managed package from AppExchange, you purchase a certain number of licenses from the provider. You can assign each license to a user within your org. If you assign all available licenses, but want to grant licenses to additional users, you can reassign a license, or purchase more. To get more licenses, contact the provider of the managed package.") # Assign Licenses Using the API Admins can use the API to assign or revoke licenses for any managed package installed in their org. ### Required Editions
Available in: Salesforce Classic (not available in all orgs)
Available in: Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To manage licenses for an AppExchange app: Manage Package Licenses
License information for a package is stored in two objects, PackageLicense and UserPackageLicense, which are also accessible from the Manage Licenses page under Setup. These objects are also accessible as standard objects, so an admin can assign licenses to specific users via API calls. This makes managing package licenses in a subscriber org faster and easier, especially for large-scale deployments. For example, suppose an admin installs an app for use by all 200 salespeople in the company. Assigning a license to each salesperson from the UI is inefficient and time-consuming. Using the API, the administrator can assign licenses to all salespeople, based on their profile, in one step. Here are some common licensing tasks that administrators can use the API to do. - Determine the number of package licenses in use and available. - Verify if a specific user has a license for the package. - Get a list of all users who have a license for the package. - Assign a package license to a user or group of users. - Revoke a package license that was previously assigned to a user. For details of the PackageLicense and UserPackageLicense objects and a code sample, see the [Object Reference for Salesforce and Lightning Platform](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/). # Assign Loyalty Users Permissions to Work with Agentforce Assign marketing managers and other users the permission they require to create promotions using Agentforce.
Task Permissions
Run standard agent actions: Common User Access for Standard Agent Actions
Run Loyalty Management's agent actions:
  • Promotion Designer Basic permission set
  • Promotion Designer Extension permission set
  • Data Cloud Segment Access for Promotion Designer permission set
  • Loyalty Program Promotion Designer permission set
  • Data Cloud Access for Loyalty Promotions Designer permission set
  • Data Cloud Activation Specialist OR Data Cloud Activation Manager OR Data Cloud Architect permission set
# Assign Member Tier Benefits The Assign Member Tier Benefits is a flow action used as part of tier assessment. The action creates, updates, or expires records in the Member Benefits table. The action is based on the tiers associated with member benefits that include a defined Benefit Action. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
Based on the tiers assigned to a member, the Assign Member Tier Benefits action determines the benefits that must be assigned. The action also resolves if there’s any conflict in the benefit assignment based on the Priority Sequence. For benefits that have a defined Benefit Action, the action creates or updates records in the Member Benefits table. The action calculates the start date and end date of the benefit, and it updates the status of the member benefit records. The various statuses of the member benefits are: - **New – Awaiting Processing:** The status indicates that a new member benefit is created, but the benefit action is yet to be processed. - **Updated – Awaiting Processing:** The status indicates that member benefit is updated, but the benefit action is yet to be processed. - **Expired – Awaiting Processing:** The status indicates that member benefit is updated for expiration, but the benefit action is yet to be processed. - **Processed:** The status indicates that the benefit action is processed successfully. - **Expired:** The status indicates that the benefit has been expired and the benefit action is processed successfully. As part of tier processing flow, after the tiers are assigned, you can stitch the **Assign Member Tier Benefits** action to the flow to assign benefits for a member. The flow must have **Member Benefit ID** as the input variable. The flow gets executed whenever a benefit action is processed. Depending on the status of the member benefit, the benefits are created or updated or expired. - For example, when a member changes from Silver to Gold tier and is eligible for Priority Support, a service entitlement record is created in the Service Cloud. - If the tier is evaluated for a member in the program and the same benefit is retained for the member. You can extend the end date of the service entitlement to the end date of member benefit through the same benefit action. For Member Benefit Update Record, provide these field values in the Flow: - ID of the record created by the member benefit in **PrimaryRefObjectRecord** . - Title of the record created by the member benefit in **PrimaryRefObjectRecordTitle**. - If the tier is evaluated for a member in the program and finds that the benefit is no longer applicable to the member. You can expire the benefits in the Service Cloud through the same benefit action. If the benefit action is configured to issue voucher for new member benefit, then the benefit action doesn’t support update or expiry for the issued vouchers. # Assign Permission Set Groups from Quick Settings In Quick Settings, assign permission set groups in a few clicks. ### Required Editions
Available in: View supported editions
User Permissions Needed
To assign permission set groups from Quick Settings:

Assign Permission Sets

AND

Customize Application

AND

Manage Users

AND

Modify All Data

AND

View Setup and Configuration

#### See Also - [Assign Permission Set Groups to Users](https://help.salesforce.com/s/articleView?id=platform.perm_set_groups_assign.htm&type=5&language=en_US) - [Turn On Quick Settings](https://help.salesforce.com/s/articleView?id=xcloud.base_quick_settings.htm&release=264.0.0&type=5 "Easily access important settings such as user management and business details in a few clicks.") ## Add a User and Assign Permissions 1. Click ![gear icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-base-264-0-0-production-enus/cd97a2ff-8dc4-4a9d-a8f3-2c94cb4fdc33/base/images/setup_60.png) to open the Quick Settings panel. 2. Click **Users**. 3. Click **New User**. 4. Add user details and click **Next**. 5. Select each permission set group to assign to the user and save. ## Edit a User’s Permissions 1. Click ![gear icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-base-264-0-0-production-enus/cd97a2ff-8dc4-4a9d-a8f3-2c94cb4fdc33/base/images/setup_60.png) to open the Quick Settings panel. 2. Click **Users**. 3. Click the action menu next to the user’s name and click **Edit User**. 4. Click **Next**. 5. Select each permission set group to assign to the user and save. # Assign Permission Set Licenses Assign permission set licenses (PSLs) to administrators and sales representatives so they can configure and use pricing features. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise and Unlimited Editions in Manufacturing Cloud, Automotive Cloud, and Consumer Goods Cloud, with required add-ons.
1. From **Setup**, enter Users in the **Quick Find** box, and then select **Users**. 2. Select the user you want to assign licenses to. 3. In the **Permission Set License Assignments** related list, click **Edit Assignments**. 4. Confirm or assign the following license, based on user role: 1. **For Administrators:** Advanced Pricing for your cloud (Advanced Pricing for Manufacturing, Advanced Pricing for Automotive, or Advanced Pricing for Consumer Goods), Salesforce Pricing Design Time, Salesforce Pricing Run Time, Actionable Segmentation Engagement, Query for Datapipelines User, Data Processing Engine Psl 2. **For Sales Users:** Advanced Pricing for your cloud (Advanced Pricing for Manufacturing, Advanced Pricing for Automotive, or Advanced Pricing for Consumer Goods), Salesforce Pricing Run Time, Actionable Segmentation Engagement, Query for Datapipelines User 5. Click **Save**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-penny_perfect_pricing-264-0-0-production-enus/8ac1130d-00eb-4b6b-ba82-4b09e6f166a0/images/icon_note.png) Note Your cloud's Foundation add-on (Manufacturing Foundation Add-On, Automotive Foundation Add-On, or Penny-Perfect Pricing Add-On) entitles your org to the matching Advanced Pricing license for your cloud, and the Core Pricing Design Time add-on entitles your org to the Salesforce Pricing Design Time license — each add-on grants one of these licenses, not both. This entitlement makes the license available in your org; you still must manually assign it to each user, as described in the steps above. # Assign Permission Set Licenses Assign the right permission set licenses so that internal users and supplier portal users can access Supplier Engagement. ### Required Editions
Available in: Lightning Experience
Available with the Supplier Management AddOn license and the External Supplier Management AddOn license, included with Net Zero Cloud and the Manufacturing, Automotive, and Consumer Goods Cloud SKUs (and other industry Cloud SKUs). See required licenses and permissions.
User Permissions Needed
To assign permission set licenses Manage Internal Users
1. From **Setup**, in the **Quick Find** box, enter Users, and then select **Users**. 2. Select the user who requires access. 3. In the **Permission Set License Assignments** section, select **Edit Assignments**. 4. For internal users, assign the **Supplier Management User** permission set license, then assign the **Supplier Onboarding** permission set. 5. For supplier portal users, assign the External Supplier Management User License permission set license. Confirm the user also has a Power Partner or Partner Community base license. Assign the permission set itself later, in Configure the Supplier Portal, using a cloned copy of Suppliers Onboarding to Site rather than the original. 6. Save the assignment. 7. Repeat for each user who configures or uses Supplier Engagement. The two permission sets grant equivalent user permissions, scoped to where the user works: | Permission Set | Permission Set License | User Permissions Granted | | --- | --- | --- | | Supplier Onboarding | Supplier Management User | Manage Supplier Programs, Manage Supplier Targets, Manage Sustainability Unit of Measure, Onboard Suppliers | | Suppliers Onboarding to Site | External Supplier Management User License | Manage Supplier Programs on Site, Manage Supplier Targets on Site, Onboard Suppliers to Site | The Supplier Onboarding permission set grants Read, Create, Edit, and Delete object permissions on Accounts, Contacts, Suppliers, Sustainability Scorecards, Programs, Program Initiatives, Supplier Products, and related objects. The Suppliers Onboarding to Site permission set, used by external supplier portal users, grants more limited access: Read only on Accounts, Contacts, Programs, and Program Initiatives, and Read and Edit (no Create or Delete) on Suppliers, Sustainability Scorecards, Supplier Products, and Program Enrollment. Users can access Supplier Engagement features after their permission set license assignment is saved. # Assign Permission Set to Users Give your admins access to Privacy Center features by assigning a permission set license and permission set to them. With this license, users can create retention and portability policies, manage Right to Be Forgotten requests, and view run logs and Privacy Center schedules. Privacy Center comes with 30 licenses. ### Required Editions
Available in: all editions
User Permissions Needed
To assign permission set license: Modify All Data and Privacy Center
To assign permission set: Modify All Data and Privacy Center
1. From **Setup**, in the Quick Find box, enter Users, and then select **Users**. 2. Click the user who you want to assign the permission set license to. 3. In the Permission Set License Assignments related list, select **Edit Assignments**. 4. Enable **Privacy Center User**, and click **Save**. 5. Click the user who you want to assign the permission set to. 6. In the Permission Set Assignments related list, select **Edit Assignments**, then add **Privacy Center**. If the user isn’t an admin, add **Manage Data Subject Access Policies** and **Execute Data Subject Access Policies**. ![Privacy Center under Enabled Permission Sets list](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/data_protection_and_privacy/images/permission_sets.png) 7. Save your changes. # Assign Permission Sets for Rebate and Accrual Management Advanced Assign permission sets to users to give them access to objects, fields, and features for Advanced Rebate and Accrual Management and related features. Permission sets extend users' functional access beyond their user profiles but can't take access away. You can assign multiple permission sets to a user. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
License Permission Set Who Needs It?
RebateAndAccrualMgmtAdvncd Rebate and Accrual Management Advanced Admin Admins who configure DPEs and Data Kits. Program Managers create rebate programs and enroll members. Finance Managers process the accrual and payout, and apply adjustments.
Rebate and Accrual Management Advanced User Sales and account managers who view accrual and payout amounts for their members and track accruals.
Rebate and Accrual Management Advanced Read Only Users who need read-only visibility into rebate programs, accruals, and payouts without edit access.
Rebate and Accrual Management Advanced for Experience Cloud Users Partner users who use the Experience Cloud site to view rebate program details and accrual and payout information.
# Assign Permission Sets for Stock Rotation Incentive Give your admins and users access to Stock Rotation by assigning the appropriate permission set licenses and permission sets. With these permissions, users can access Stock Rotation features and objects such as Stock Rotation Executions, Stock Rotation Execution Line Items, and Rebate Claims. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Stock Rotation enabled.
License Permission Set Who Needs It?
StockRotationIncentivesUserAddOn Stock Rotation Admin User Stock Rotation Program Manager who create stock rotation incentive programs, process claims, and apply adjustments.
Stock Rotation Claim Analyst User Stock Rotation claim analysts who view and process stock rotation claims.
StockRotationExperienceCloudAddOn Stock Rotation Experience Cloud User Partner users who use the Experience Cloud site to upload stock rotation incentive claims and proof of scrap documents and view claim amounts and program details.
ChannelRevManagementReadOnlyUserAddOn -
  • Stock Rotation Incentives (PLD) - StockRotation Org Perm
  • Data Processing Engine (PLD)
1. From Setup, in the Quick Find box, enter Users, and then select **Users**. 2. Select the user you want to assign the permission set license to. 3. In the Permission Set License Assignments related list, select **Edit Assignments**. 4. Enable the Stock Rotation permission set license, and click **Save**. 5. In the Permission Set Assignments section, click **Edit Assignments**, and add the appropriate permission set, such as Stock Rotation Admin User. # Assign Permission Sets for Using Agentforce for Timesheets Give your users access to the Agentforce for Timesheets by assigning them the required permission sets. With these permission sets, users can enable Agentforce and use this feature. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
User Permissions Needed
To assign permission sets to users: Manage Profiles and Permission Sets
1. From Setup, in the Quick Find box, enter Users and select it. 2. Open the field service technician user from the list. 3. Go to Permissions Set Assignments, and click **Edit Assignments**. 4. Enable these permission sets. - Access Agentforce Default Agent - Prompt Template User 5. Save your changes. # Assign Permission Sets to Users Assign the required Agentforce permissions to the Field Technician and Service Representative users to grant agent access on both the desktop console and the Salesforce Field Service mobile app. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, and Manufacturing Cloud, with Agentforce enabled. View edition availability.
Before you begin, set up Einstein Generative AI and enable Agentforce. 1. From Setup, in the Quick Find box, enter Users and select it. 2. Open the Admin user from the list. 3. Go to Permissions Set Assignments, and click **Edit Assignments**. 4. Enable these permission sets. - Prompt Template Manager - Prompt Template User - Applicable Industries Einstein license. For example, Einstein for Communications. - Work Order Estimation - Product Catalog Management Designer - Product Catalog Management Viewer - Salesforce Pricing Run Time User 5. Save your changes. # Assign Permissions Select who can use the Proactive Asset Service. The Tableau Next Limited Consumer permission set and Data Cloud Admin permission set are assigned to users of Proactive Asset Service. - The Tableau Next Limited Consumer permission set grants users the necessary access to consume data and insights generated by Tableau, which is integral for monitoring and understanding asset performance. It allows for informed decision-making regarding proactive maintenance and service. - The Data Cloud Admin permission set empowers users with the administrative capabilities required to manage and configure the underlying data infrastructure within the Data Cloud. It includes managing data sources, ensuring data quality, and setting up the necessary data pipelines that feed into the Proactive Asset Service functionalities. This dual assignment ensures that key personnel can effectively oversee, analyze, and optimize the proactive management of assets, contributing to improved operational efficiency and reduced downtime. # Assign Permissions Select who can use the Proactive Asset Service. Assign the CRM Analytics Plus Admin permission set. On the Proactive Asset Service Setup page, click Assign in the Assign Permissions step. Assign the CRM Analytics Plus User permission set to users who need to use Proactive Asset Service. On the Proactive Asset Service Setup page, click Assign in the Assign User Permissions step. # Assign Permissions for Advanced Orders for Telesales Assign permission set licenses (PSLs) to administrators and sales representatives so they can configure and use Advanced Orders features. ### Required Editions

View supported editions

1. From **Setup**, enter Users in the **Quick Find** box, and then select **Users**. 2. Select the user to whom you want to assign the licenses. 3. In the **Permission Set License Assignments** related list, click **Edit Assignments**. 4. Confirm or assign the following licenses: 1. Order Capture for your cloud (Order Capture for Manufacturing, Order Capture for Automotive, or Order Capture for Consumer Goods) 2. Industries Service Excellence 5. Click **Save**. For more information on pricing related permissions, see [Assign Permissions for Penny Perfect Pricing](https://help.salesforce.com/s/articleView?id=xcloud.ppp_assign_psl.htm&type=5&language=en_US) # Assign Permissions for Global Promotions Management to Loyalty Management Users Provide access to Global Promotion Management features based on the user's role in the company. After you assign the permissions, provide additional Loyalty Management specific permissions to your users. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
## Get Started [Assign role-based permissions for Global Promotions Management](https://help.salesforce.com/s/articleView?id=mktg.global_promotions_management_setup_permissions.htm&type=5&language=en_US). Then, provide these additional loyalty-specific permissions. ## Marketing Managers Additional Permissions Here’s the list of additional objects that marketing managers need access to.
Business requirement Object ACCESS LEVEL
Users can select loyalty promotion templates such as Accrual Events and add loyalty rewards such as points, vouchers, badges, and games. Account
  • Read
Product Catalog
Product Category
Expression Set Object Alias
Journal Sybtype
Loyalty Program Partner
Loyalty Partner Product
Loyalty Program
Loyalty Program Badge
Loyalty Program Currency
Loyalty Tier
Loyalty Tier Group
Product2
Promotion
Loyalty Program Engagement Attribute Promotion
  • Read
  • Create
  • Edit
  • Delete
Loyalty Program Engagement Attribute
Loyalty Program Process
Loyalty Tier Membership Fee Option
Loyalty Tier Promotion
Promotion Loyalty Partner Product
## System Integrators Additional Permissions System integrators needs these additional permission sets. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note Loyalty Management doesn't provide the Data Cloud Segment Access for Promotion Designer permission set.
Name Use Business Requirement
Data Cloud Access for Loyalty Promotions Designer

Provides users the required object access to run promotions whose target audience is a Data Cloud segment.

The permission set is only available in orgs where Data Cloud is enabled.

Users can execute the Eligible Promotions API to find the list of promotions that are eligible for a customer's cart.
Here’s the list of additional objects that system integrators need access to.
Business requirement Object ACCESS LEVEL
Users can run loyalty promotions Account
  • Read
Product Catalog
Product Category
Expression Set Object Alias
Journal Sybtype
Loyalty Program Partner
Loyalty Partner Product
Loyalty Program
Loyalty Program Badge
Loyalty Program Currency
Loyalty Tier
Loyalty Tier Group
Product2
Promotion
Loyalty Program Engagement Attribute Promotion
  • Read
  • Create
  • Edit
  • Delete
Loyalty Program Engagement Attribute
Loyalty Program Process
Loyalty Tier Membership Fee Option
Loyalty Tier Promotion
Promotion Loyalty Partner Product
# Assign Permissions for Salesforce Feedback Management Assign the required permissions for users to create, send, respond to, and translate surveys.
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
Assigning permissions entails assigning user permissions for people in your Salesforce Feedback Management org, and then assigning additional perms for different categories of users: You can also assign permissions for users in your org who need to translate surveys into different languages. - People in the org who create and send surveys - People in the org who respond to surveys, and - People who respond to surveys as guest users on an Experience Cloud site - **[Assign User Permissions](https://help.salesforce.com/s/articleView?id=xcloud.concept_setup_sfm_profiles.htm&release=264.0.0&type=5)** Give users permission to access Salesforce Feedback Management. - **[Permissions to Create and Send Surveys](https://help.salesforce.com/s/articleView?id=xcloud.concept_create_send_permission.htm&release=264.0.0&type=5)** Give your users the user and object permissions they need to create and send surveys. - **[Assign Permissions to Respond to Surveys](https://help.salesforce.com/s/articleView?id=xcloud.concept_allow_user_response.htm&release=264.0.0&type=5)** Give your users the object permissions they need to respond to surveys. - **[Assign Permissions to Guest Users to Respond to Surveys](https://help.salesforce.com/s/articleView?id=xcloud.task_allow_guest_survey_create_permission.htm&release=264.0.0&type=5)** Give guest users on Aura or Visualforce sites in Experience Cloud the object permissions they need to respond to unauthorized surveys sent to contacts and leads. - **[Assign Permissions to Translate Surveys](https://help.salesforce.com/s/articleView?id=xcloud.concept_translate_permission.htm&release=264.0.0&type=5)** Give your users the permissions they need to translate surveys in other languages. # Assign Permissions Sets Give your admins access to Price Protection by assigning a permission set license and permission sets to them. With this license, users can access Price Protection features and objects such as Price Protection Execution Line items, Product Detected Price Changes, and Rebate Claims. ### Required Editions
Available in: Enterprise, Professional, and Unlimited Editions with Price Protection enabled.
User Permissions Needed
To assign permission sets Manage Users
## List of Permission sets and Permission set Licences for Price Protection Review the list of the permissions and permissions set licences required to create and execute Price Protection programs. | License | description | | --- | --- | | Price Protection | Grants uers access to Price Protection. | | Price Protection for Experience Cloud | Grants Experience Cloud users access to Price Protection. | | Price Protection for Standard Users | Grants standard users access to Price Protection. | | Persona | permission set | what they do | | --- | --- | --- | | Admin | Price Protection Admin User | Grants admin users access to create and process price protection. | | Claim Analyst | Price Protection Claim Analyst User | Grants claim analysts access to create and process price protection programs. | | Experience Cloud User | Price Protection for Experience Cloud Users | Grants partners access to create and process price protection programs. | | Standard User | Price Protection for Standard Users | Grants standard users access to create and process price protection programs | ## Assign Price Protection Permissions 1. From Setup, in the Quick Find box, enter Users, and then select **Users**. 2. Select the user you want to assign the permission set license to. 3. In the Permission Set License Assignments related list, select **Edit Assignments**. 4. Enable Price Protection Admin user, and click **Save**. 5. In the Permission Set Assignments section, click **Edit Assignments**, and add **Price Protection**. ## Assign Permissions to Integration User Assign Price Protection permission sets to data integration users to grant them access to Price Protection-related entities and objects within Data Processing Engines (DPEs). # Assign Permissions to Guest Users to Respond to Surveys Give guest users on Aura or Visualforce sites in Experience Cloud the object permissions they need to respond to unauthorized surveys sent to contacts and leads. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
User Permissions Needed
To give guest users permissions to respond to surveys: Customize Application
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_note.png) Note Surveys are unsupported for LWR sites in Experience Cloud. 1. From Setup, enter Survey in the Quick Find box, then select **Survey Settings**. 2. Make note of the Experience Cloud site that's selected as the default site to create public survey invitations. 3. Enter Sites in the Quick Find box, then select **All Sites**. 4. Open Experience Builder for the default site. 5. In Experience Builder, click ![Settings icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/communities_settings.png), and select **General**. 6. Click the profile name under Guest User Profile. 7. Click Object Settings and give the guest user profile these permissions. | Object | Permissions | | --- | --- | | Surveys | Read | | Survey Invitations | Read | | Survey Responses | Read AND Create | 8. Click **Save**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_note.png) Note To enable guest users to respond to unauthorized surveys, select **Don’t require authentication** in invitation link settings. # Assign Permissions to Respond to Surveys Give your users the object permissions they need to respond to surveys. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
User Permissions Needed
To give users permissions to respond to surveys: System Administrator profile
| Object | Permissions | | --- | --- | | Surveys | Read | | Survey Invitations | Read | | Survey Responses | Read AND Create | # Assign Permissions to Translate Surveys Give your users the permissions they need to translate surveys in other languages. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
User Permissions Needed
To give users permissions to translate surveys: System Administrator profile
To allow users to translate surveys into other languages, give them these permissions. - Permission to translate in one or more languages using the Translation Workbench. - Read permission on the Surveys object. To allow translators to translate surveys in end-user languages or platform-only languages, enable them. # Assign Standard Permission Sets Assign the standard permission sets that ship with Penny Perfect Pricing to grant administrators and sales users access to pricing tasks — you don't need to build these from scratch. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise and Unlimited Editions in Manufacturing Cloud, Automotive Cloud, and Consumer Goods Cloud, with required add-ons.
1. From **Setup**, enter Permission Sets in the **Quick Find** box, and then select **Permission Sets**. 2. Assign the following standard permission sets based on user role: | User Role | Standard Permission Sets to Assign | | --- | --- | | Administrators | Salesforce Pricing Admin • Salesforce Pricing Design Time User • Advanced Pricing for your cloud | | Sales Users | Salesforce Pricing Run Time User | 3. Click **Save** and assign these permission sets to the appropriate users. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-penny_perfect_pricing-264-0-0-production-enus/8ac1130d-00eb-4b6b-ba82-4b09e6f166a0/images/icon_note.png) Note For task-specific permissions beyond this org-level setup, see the User Permissions Needed table at the start of each topic in this guide. # Assign the External Named Credential Permission Set to the Automated User Since the Survey Data Mapping for Sentiment Insights executes as an automated user, it's essential to assign the external named credential’s permission set to the automated user.
Available in: Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Feedback Management - Starter and Feedback Management - Growth licenses, and the Sentiment Insights license
1. In the Developer Console, click **Debug** and then click **Open Execute Anonymous Window** to open the Enter Apex Code window. 2. In the Enter Apex Code window, enter the following code to assign the external named credential’s permission set to the automated user. ``` insert new PermissionSetAssignment( AssigneeId = [SELECT Id FROM User WHERE alias = 'autoproc'].Id, PermissionSetId = 'SELECT PermissionSet Id' ); ``` ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_note.png) Note Enter the IDs of the automated user and the external named credential permission set. 3. Execute the code: 1. To execute the entire code in the window, click **Execute** or press CTRL+E. 2. To execute only selected lines of code, select the lines and click **Execute Highlighted** or press CTRL+SHIFT+E. # Assign the Permission Set License and Permission Set to Users To enable a user to access Data Pipelines features, grant them the Use Data Pipelines Add On User Settings permission set license and the Data Pipelines Add On permission set. 1. From Setup, in the Quick Find box, enter Users, then select **Users**. ![The Users screen shows users defined in your Salesforce org.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/sdp_setup_users.png) 2. Click the user’s name. 3. Hover over Permission Set License Assignments, and click **Edit Assignments**. ![The Permission Set License Assignments tab shows all no licenses assigned to the user.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/sdp_setup_edit_permsetlicenses.png) 4. To enable the permission set license, select **Data Pipelines Add On User Settings**, and then save. ![Data Pipelines Add On User Settings appears as one of the permission set licenses on the page.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/sdp_setup_edit_select_permsetlicense.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note The user must have one of these Salesforce user licenses to assign them the Data Pipelines Add On User Settings permission set license. - Lightning Platform (app subscription) - Lightning Platform (one app) - Full CRM - Salesforce Platform - Salesforce Platform One 5. Hover over Permission Set Assignments, and click **Edit Assignments**. ![The Permission Set Assignments tab shows all no permission sets assigned to the user.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/sdp_setup_edit_permsets.png) ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_tip.png) Tip For efficiency, you can assign a permission set to groups of users. 6. To assign all user permissions available in the Data Pipelines Add On User Settings permission set license, select the Data Pipelines Add On User option. Then click the Add button and save the changes. # Assign the Quip Permission Set To give your users access to Quip features in Lightning Experience, assign them the Quip permission set. ### Required Editions
Available in: Lightning Experience
1. From Setup, enter Quip, and select **Quip (Salesforce Anywhere)** 2. Under Give Your Team Access to Quip, select **Manage Assignments** to give certain users access to Quip, or select **Assign to Everyone** to give all users access. ![Assign to Everyone button highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_manage_perms_setup.png) After your users are assigned the Quip permission set, they must click **Take the Last Step** from the Quip banner in Lightning Experience. ![Take the Last Step connection banner](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_setup_take_the_last_step.png) # Assign the Salesforce Backup & Recover Next Permissions Use Backup & Recover Next permissions so that users can run backups, configure specific settings, and run Backup & Recover Next activities. Assign them to profiles or permission sets to give your users the specific permissions that they need in Backup & Recover Next. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Backup & Recover Data and Backup & Recover Files add-on licenses
User Permissions Needed
To assign permission sets:

Assign Permission Sets

AND

View Setup and Configuration

A permission set that grants all the Backup & Recover Next permissions is available for users. To assign access: 1. From Setup, in the Quick Find Box, enter `Users`, and select **Users**. Then select the user that you want to grant admin access to Salesforce Backup & Recover Next. 2. From Permission Set Assignments, click **Edit Assignments**. 3. Under Available Permission Sets, select **BackupRecoverSuperAdmin**, click **Add** and then save. These permissions are only available with Salesforce Backup & Recover Next. | Permission | Use | | --- | --- | | Run Backup | Enable the backup policy. | | Manage Backup Exclusions | Add or remove exclusion rules. | | Manage Backup of Files and Attachments | Include or exclude files and attachments from backups. | | Manage Backup Retention Policy | Edit backup retention policy. | | Manage Backup Schedule | Update when the backup runs. | | Run Compare | Initiate a compare between backups. | | Run Restore | Initiate a restore from a backup to the org. | | View Compare | View compare activities in the Activities list. | | View Restore | View restore activities in the Activities list. | | View Backup & Recover Audit Logs | View audit logs. | | Download Backup & Recover Audit Log | Download audit logs. | | View Backup Exclusions | View backup exclusions settings. | | View Backup Files and Attachments Settings | View the Files and Attachments settings page. | | View Backup Retention Policy | View the backup retention policy settings. | | View Backup Schedule | View the backup schedule settings. | | View Backup Details | View backup details in the Backup tab. | | Access Activities Tab | View the activities tab. | | View Region Selection | View the region selection page. | | Manage Region Selection | Select the storage region for backups. | | Cancel Backup | Cancel a running backup. | | Cancel Pending Data Privacy Requests | Cancel pending data privacy requests. | | Download Backup | Download metadata backups. | | Run Search | Initiate search across backups. | | Submit Data Privacy Requests | Submit data privacy requests. | | View Data Privacy Requests | View data privacy requests. | | View Search | View search activities and results. | #### See Also - [_Salesforce Help_: Profiles](https://help.salesforce.com/s/articleView?id=platform.admin_userprofiles.htm&type=5&language=en_US) - [_Salesforce Help_: Permission Sets](https://help.salesforce.com/s/articleView?id=platform.perm_sets_overview.htm&type=5&language=en_US) # Assign the Salesforce Backup License and Permission Set Give users access to the Salesforce Backup app. Then assign them permission to back up and restore data on specific objects. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Salesforce Backup & Recover add-on license.
User Permissions Needed
To assign permission sets:

Assign Permission Sets

AND

View Setup and Configuration

To edit object permissions:

Manage Profiles and Permission Sets

AND

Customize Application

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Salesforce Backup. Read about Backup & Recover in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). Salesforce Backup requires access to Salesforce data when creating copies of data for backup and when updating or creating records during restore operations. Configure the permissions of the individual user who has Salesforce admin access to Salesforce Backup, initiates backup and restore operations, and assigns permissions to the integration user. To avoid complications when an integration user is replaced or removed, we recommend that the integration user be a technical or non-named account. 1. From Setup, in the Quick Find Box, enter `Users`, and then select **Users**. Select the users that you want to grant access to Salesforce Backup. 2. From Permission Set License Assignments, click **Edit Assignments**, and select **Backup and Restore User Permission Set License**. Save your work. You can now assign the BackupRestore permission set to users. 3. From Setup, in the Quick Find Box, enter `Users`, and then select **Users**. Select the users that you want to grant access to Salesforce Backup. 4. From Permission Set Assignments, click **Edit Assignments**. 5. Under Available Permission Sets, select **BackupRestore**, click **Add**, and then save your work. 6. Give users access to the objects that they plan to manage in Salesforce Backup. - [Edit object permissions in profiles](https://help.salesforce.com/s/articleView?id=platform.perm_sets_object_perms_edit.htm&type=5&language=en_US). - [Create a permission set](https://help.salesforce.com/s/articleView?id=platform.perm_sets_create.htm&type=5&language=en_US) with the relevant object-level permissions and assign it to users. Confirm that permissions were assigned correctly. To identify your current integration user, go to the Logs tab and review the Created By column of the most recent activity logs. Use this reference table to match the correct object permission for different backup and restore tasks. | User Task | Object Permission | | --- | --- | | Back up records | Read | | Restore records | Read, create, and edit | | Restore only existing records | Edit | | Restore only deleted records | Create | # Assign User Permissions Give users permission to access Salesforce Feedback Management. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Feedback Management - Starter and Feedback Management - Growth licenses
User Permissions Needed
To assign user permissions: System Administrator profile
| License | User Permission | | --- | --- | | Salesforce Feedback Management - Starter | Salesforce Advanced Features Starter | | Salesforce Feedback Management - Growth | Salesforce Surveys Advanced Features | Assign these user permissions on the System Permissions page of a new or cloned permission set or profile. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_note.png) Note There are no user permissions required for the Survey Response Pack license. # Associate a Case with a Loyalty Program Member You can associate a case with a loyalty program member. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
User Permissions Needed
To associate a case with a loyalty program member:

Edit on cases

AND

Loyalty Management

1. On the Case page, click **Related**. The Loyalty Program Members related list appears. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note This list is not available by default. Navigate to Setup to enable it. 2. Click **Add Member to Case**. The member case details page appears. 3. Select the **Loyalty Program Member**. The case number is prepopulated. 4. Save your changes. # Associate an External Client App with the Source Org Global Settings File To associate an external client app with the source org’s global settings, configure the metadata files to reference the source org and then deploy the external client app from the linked org. 1. Delete OAuth settings file from org 3. ``` sf project delete source --source-dir force-app/main/default/extlClntAppOauthSettings --target-org johndoe@example3.com ``` 2. Retrieve metadata files from the source org. ``` sf project retrieve start --manifest package.xml --target-org johndoe@example.com ``` 3. Remove the global settings file in the package.xml file. 4. Deploy the configured external client app metadata in org 3. ``` sf project deploy start –-manifest package.xml --target-org johndoe@example3.com ``` 5. Verify that the deployment succeeds by locating three files in the external client app. - Header file - Settings file - Policies file - **[Initiate the Authorize Endpoint for an Associated External Client App](https://help.salesforce.com/s/articleView?id=xcloud.initiate_the_authorize_endpoint_for_associated_external_client_app.htm&release=264.0.0&type=5)** After the associated org metadata is configured to reference the developer org’s global settings file, initiate an OAuth flow to acquire an access token. # Associate Engagement Attributes with Promotions You can create engagement attributes that track member engagement for a specific promotion. For example, you can create an engagement attribute that tracks the number of items that members purchased during a promotion that runs every year on Cyber Monday. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To associate an engagement attribute with a promotion: Loyalty Management
If you create engagement attributes for promotions, you can design loyalty program process rules that only update the members' progress during the promotion period. An engagement attribute can be associated with only one promotion and can't be used to track member engagement for two or more promotions. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_important.png) Important An engagement attribute can only be associated with one promotion. 1. On the Loyalty Program tab of the Loyalty Management app, select the program that contains your engagement attribute and promotion. 2. Click **Loyalty Experiences**. 3. From the Promotions related list, open the promotion to which you want to associate an engagement attribute. 4. Click **Related**. 5. On the Loyalty Program Engagement Attribute Promotions related list, click **New**. 6. Select the engagement attribute that you want to associate with the promotion. 7. Save your changes. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_example.png) Example An engagement attribute named Items Purchased during Cyber Monday is associated with a promotion that runs on Cyber Monday every year. The engagement attribute doesn't have an end date. The members' progress for the engagement attribute is updated by using a rule that's associated with the Cyber Monday promotion. The members' progress is only updated during Cyber Monday and are rewarded when they achieve the engagement attribute's target. When using rules to update the members' progress for an engagement attribute, ensure that the promotion associated with the rule and the engagement attribute match. If the promotion associated with the rule and the engagement attribute don't match, the rule doesn't process the input data. # Associate the Experience Cloud Site with a Loyalty Program You can associate a member with multiple loyalty programs. The Loyalty Member Portal shows the member’s loyalty programs that are associated with the Experience Cloud site. You can associate a Loyalty Member Portal only to one loyalty program member. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
1. In the Loyalty Programs tab, select your loyalty program. 2. Click **Associate with Site**. 3. To associate the site with the loyalty program, select the Experience Cloud Site. 4. Save your changes. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note You can’t associate the same Experience Cloud site to another loyalty program. - **[Change Site Association](https://help.salesforce.com/s/articleView?id=xcloud.change_site_association.htm&release=264.0.0&type=5)** Change the Experience Cloud site association with your loyalty program using Change Site Association. - **[Delete Site Association](https://help.salesforce.com/s/articleView?id=xcloud.delete_site_association.htm&release=264.0.0&type=5)** You can delete an Experience Cloud site association with your loyalty program. # Asynchronous Apex Example When executing a transaction security policy, use an asynchronous Apex process to offload time-consuming operations, such as sending a notification email to an external recipient. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

This example has two parts. First, you create an asynchronous Apex class that uses an event within the execute method to invoke a callout or a DML operation. Second, you create a transaction security policy and modify the Apex class to implement TxnSecurity.EventCondition and TxnSecurity.AsyncCondition. TxnSecurity.AsyncCondition enqueues the asynchronous Apex process when you trigger the transaction security policy. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Only DML operations and callouts are supported when you use asynchronous Apex with an enhanced transaction security policy. ## Create Asynchronous Apex Class In this section, you create an asynchronous Apex class that takes in an SObject. In this example, we use ApiEvent. Then you invoke a callout or a DML operation. ```java public class SimpleAsynchronousApex implements Queueable { private ApiEvent apiEvent; public SimpleAsynchronousApex(ApiEvent apiEvent) { this.apiEvent = apiEvent; } public void execute(QueueableContext context) { // Perform your callout to external validation service // or a DML operation } } ``` ## Create Policy In this section, you create the transaction security policy, which modifies the Apex class associated with the policy. Then you create the SimpleAsynchronousApex object, pass in the ApiEvent, and enqueue the job. ```java global class SimpleApiEventCondition implements TxnSecurity.EventCondition, TxnSecurity.AsyncCondition { public boolean evaluate(SObject event) { // Cast SObject to an ApiEvent object ApiEvent apiEvent = (ApiEvent) event; SimpleAsynchronousApex simpleAsynchronousApex = new SimpleAsynchronousApex(apiEvent); System.enqueueJob(simpleAsynchronousApex); return false; // In a typical implementation may return true if it triggers an action } } ``` #### See Also - [_Apex Developer Guide_: Queueable Apex](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_queueing_jobs.htm) - [_Apex Reference Guide_: Apex Implementation Examples](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_dml_section.htm#apex_dml_section) - [_Apex Developer Guide_: Asynchronous Apex](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/api/apex_async_overview.htm#!) - [_Apex Developer Guide_: Invoking Callouts Using Apex](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_callouts.htm) # AsyncUtils ReadMe (Managed Package) For the managed package runtime, this page contains an AsyncUtils ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Spring '20 This module exposes a collection of utilities designed to simplify asynchronous operations. ## ns/asyncUtils.debounce(func, wait, immediate) Delay the execution of a function for the given amount of time. Use to throttle the the call rate of a method that can be repeatedly called. Kind: static method of ns/asyncUtils

Param

Type

Description

func

function

Function to execute after the given duration.

wait

number

Time in milliseconds to delay.

immediate

boolean

When true, will execute on the front end onf the duration instead of after.

## ns/asyncUtils.delay(waitFor, \[result\]) Delays execution in the form of a promise. Kind: static method of ns/asyncUtils

Param

Type

Description

waitFor

number

Number of milliseconds to delay by.

[result]

*

Pass through a previous result.

# Attribute Management Attribute Management controls the picklist values and custom attributes that consent records capture. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires the Privacy Center license.
Consent records capture standard attributes, such as Consent Status and Consent Purpose, along with any custom attributes your business requires. Configure these attributes before you build consent definitions. - **[Customize Consent Status Picklist Values](https://help.salesforce.com/s/articleView?id=xcloud.global_consent_status.htm&release=264.0.0&type=5)** Define the Consent Status picklist values that reflect your privacy states, such as Opt In, Opt Out, Seen, or Pending. - **[Customize Consent Purpose Picklist Values](https://help.salesforce.com/s/articleView?id=xcloud.global_consent_purpose.htm&release=264.0.0&type=5)** Define the legal or business reasons that you capture consent, such as a specific data processing action or marketing communication. - **[Configure Additional Attributes](https://help.salesforce.com/s/articleView?id=xcloud.global_consent_attributes.htm&release=264.0.0&type=5)** Add custom fields to consent records for business-specific data, such as product lines, division IDs, or delivery frequencies. # Audit an EKM Key In this context, auditing means examining the details about the EKM key, such as when it was last modified. You can also view each external key’s unique policy. ### Required Editions
Available in both Lightning Experience and Salesforce Classic (not available in all orgs).
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires purchasing Salesforce Shield or Shield Platform Encryption, and the External Key Management Service. Data 360 customers must also have the Platform Encryption for Consumption license.
User Permissions Needed
To generate, destroy, export, import, upload, and configure tenant secrets and customer-supplied key material: Manage Encryption Keys
1. From Setup, in the Quick Find box, enter Platform Encryption, and then select **Key Management**. 2. In the External Key Inventory, click **Details**. For a list of past actions taken on the key management page, visit Setup Audit Trail. #### See Also - [Monitor Setup Changes with Setup Audit Trail](https://help.salesforce.com/s/articleView?id=xcloud.admin_monitorsetup.htm&type=5&language=en_US) # Audit Backup & Recover Next Events You can download the audit log for a detailed record of all events in Backup & Recover Next, including who initiated the event and when. Events are stored for up to a year. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Backup & Recover Data and Backup & Recover Files add-on licenses
User Permissions Needed
To download the audit log: Download Backup & Recover Audit Log
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note To keep a log of all events in Backup & Recover Next over multiple years, we recommend downloading the audit log annually. 1. In Salesforce Backup & Recover Next, click the **Settings** tab. 2. From the navigation bar on the left, click **Audit**. 3. Click **Download Audit Log**. # Auditing Auditing provides information about use of the system, which can be critical in diagnosing potential or real security issues. Salesforce auditing features don't secure your org by themselves. Have someone from your org perform regular audits to detect potential abuse. To verify that your system is secure, monitor for unexpected changes or usage trends. | Auditing Feature | Description | | --- | --- | | Record Modification Fields | All objects include fields to store the name of the user who created the record and who last modified the record. These fields provide basic auditing information. | | Login History | Review a list of successful and failed login attempts to your org for the past 6 months. | | Field History Tracking | You can enable auditing for individual fields, which automatically track any changes in the values of selected fields. Although auditing is available for all custom objects, only some standard objects allow field-level auditing. | | Setup Audit Trail | Salesforce admins can view the Setup Audit Trail, which logs modifications made to your Salesforce configuration. | To monitor your org in real time, retain audit data longer, and enforce security policies automatically, add [Salesforce Shield](https://help.salesforce.com/s/articleView?id=xcloud.shield.htm&type=5&language=en_US), an add-on subscription. Shield includes these auditing and monitoring features. | Salesforce Shield Feature | Description | | --- | --- | | [Event Monitoring](https://help.salesforce.com/s/articleView?id=xcloud.real_time_event_monitoring_overview.htm&type=5&language=en_US) | Track detailed performance, security, and usage data across your Salesforce apps, including who accessed data, when, and from where. | | [Real-Time Events](https://help.salesforce.com/s/articleView?id=xcloud.real_time_event_monitoring_events.htm&type=5&language=en_US) | Subscribe to events published by Salesforce to monitor activity in your org as it happens, and store the event data for auditing or reporting. | | [Transaction Security](https://help.salesforce.com/s/articleView?id=xcloud.enhanced_transaction_security_policy_types.htm&type=5&language=en_US) | Enforce security policies in real time. When a request meets a policy's conditions, the policy can block the action, require multi-factor authentication (MFA), or send a notification. | | [Field Audit Trail](https://help.salesforce.com/s/articleView?id=xcloud.field_audit_trail.htm&type=5&language=en_US) | Extend Field History Tracking so that you can retain archived field history data indefinitely, rather than for the standard 18–24 months. | # August '26 Release Notes Explore what's new in Salesforce Suites for August '26. - **[General Enhancements for Salesforce Suites](https://help.salesforce.com/s/articleView?id=xcloud.starter_prosuite_rn_2026_aug_release.htm&release=264.0.0&type=5)** Keep your business data in sync and skip the manual data entry by connecting your favorite external apps directly to Salesforce Suites. - **[AI Enhancements for Salesforce Suites](https://help.salesforce.com/s/articleView?id=xcloud.starter_prosuite_rn_2026_aug_release.htm&release=264.0.0&type=5)** Get Agentforce with Free Suite! Chat with an AI agent in plain language to manage business tasks and surface key insights. - **[Marketing](https://help.salesforce.com/s/articleView?id=xcloud.starter_prosuite_rn_2026_aug_release.htm&release=264.0.0&type=5)** Send emails to your Contact and Lead lists right away with the redesigned List Sends experience. ## General Enhancements for Salesforce Suites Keep your business data in sync and skip the manual data entry by connecting your favorite external apps directly to Salesforce Suites. ### **Integrate Your External App Data with Salesforce Suites using Prebuilt Integrations** Your business runs smoother when all your data lives under one roof. Keep your business data in sync and skip the manual data entry by connecting your favorite external apps directly to Salesforce Suites. Powered by MuleSoft and Flows, our new prebuilt integrations create a secure bridge between Salesforce and the tools you use every day. **Where:** This change applies to Lightning Experience in Starter Suite and Pro Suite editions. **When:** This feature is available in August 2026. **Why:** Prebuilt integrations act as a secure, digital bridge between Salesforce and the tools you rely on most, like QuickBooks Online and Jira. Instead of copying and pasting between disconnected systems, your data flows automatically both ways—update something in one app, and it changes in the other instantly. Bringing your external app data into your Suites workspace clears out frustrating data silos and creates a clean, connected foundation that's ready for AI. With prebuilt integrations, you can: - **Connect your data quickly:** Skip the complex setup and link your third-party apps in minutes with a simple, guided wizard. - **See everything in one place:** Gather all your critical business metrics into one central workspace. - **Stop manual data entry:** Prevent typos, duplicates, and human errors by letting automation do the heavy lifting. - **Let your workflow do the heavy lifting:** Save hours of tedious admin time every week with instant, two-way updates that happen in the background. **How:** In your Starter Suite or Pro Suite org, open the Automations app, select the Integrations tab, and follow the guided wizard to securely connect to your external account and choose your templates. ## AI Enhancements for Salesforce Suites Get Agentforce with Free Suite! Chat with an AI agent in plain language to manage business tasks and surface key insights. ### **Agentforce Now Included in Free Suite** **Where:** This change applies to Lightning Experience in Free Suite Edition. **When:** This feature is available in August 2026. **Why:** Meet your new teammate that's always there for you and ready to help. Simply ask Agentforce what you're looking for in plain language and it instantly pulls up what you need. For instance, if you ask, "Summarize the Acme account," the agent creates a quick summary highlighting opportunities linked to Acme, key facts, recent cases, and so on. You can also delegate everyday tasks to Agentforce, like following up with new leads. For example, tell it, "Draft an email to the VP of Marketing of Acme about our upcoming meeting." The agent handles the heavy lifting by pulling in the right recipient email address, crafting the message, and generating the subject line. Agentforce saves you from digging through endless records and pulling the pieces together yourself. It acts as a force multiplier by taking on the repetitive tasks that eat up your day so you and your team can focus on what matters most—building customer relationships and growing your business. ![Agentforce panel](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/suites_agentforce_panel_and_page_free_org.png) **How:** If you've turned on AI in your org, Agentforce is available automatically. If you haven't turned on AI yet, select the Agentforce logo in the top-right corner of the page to open the Agentforce panel, then select **Agree and Enable**. See Also: [Boost Productivity and Gain Actionable Intelligence with Agentforce in Suites](https://help.salesforce.com/s/articleView?id=xcloud.suites_agentforce.htm&type=5&language=en_US) ## Marketing Send emails to your Contact and Lead lists right away with the redesigned List Sends experience. ### **Skip the Wait When Sending Emails to Contact and Lead Lists** Send promotional, transactional, or relational emails to your Contact and Lead lists right away, without the extra processing step it used to require. Previously, sending emails from lists required creating a Data 360 segment, which introduced delays and occasional failed sends. The redesigned List Sends experience also brings the initial message configuration and audience selection steps into a single page. Design your message without clicking through separate pages or losing your place. **Where:** This change applies to Lightning Experience in Free, Starter, and Pro Suite. **When:** This feature is available starting mid-August 2026. **Why:** With the redesigned List Sends experience, you can: - Skip segment creation entirely with Actionable Lists, which process your audience directly from your Contact or Lead list instead of requiring a Data 360 segment. - Get emails out faster on time-sensitive campaigns. List-based sends don't wait on segment processing that can delay delivery or cause failed sends. - Configure your send on one page instead of clicking through separate modal pages. Audience, message type, and save location are all visible together, so it's easy to see what's done and what's left. ![List Sends message setup showing the message type, recipients, and message creation steps next to an email preview.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/starter_prosuite_listsends.png) **How:** From the Marketing app, access Leads or Contacts and apply a filter to select your intended recipients. Click **Send Email** to start the workflow. In Free Suite, emails go out immediately. Starter Suite and Pro Suite add the option to schedule sends for later. In Free, Starter, and Pro Suite, access List Sends from Marketing Home. # Australia State Codes These state codes are available for all orgs. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: All Editions except Database.com
| State Code | STATE/Province | | --- | --- | | ACT | Australian Capital Territory | | NSW | New South Wales | | NT | Northern Territory | | QLD | Queensland | | SA | South Australia | | TAS | Tasmania | | VIC | Victoria | | WA | Western Australia | # Auth. Provider Client Configuration URLs for Mobile Publisher Apps When you create an Apple Auth. Provider in Salesforce for your Mobile Publisher app, Salesforce generates important client configuration URLs. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
![Apple auth. provider return URLs](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/apple_authprovider_return_urls.png) ## Test-Only Initialization URL Use this URL to ensure that the third-party provider is set up correctly. The admin opens this URL in a browser, signs in to Apple, and is redirected back to Salesforce with a map of attributes. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_important.png) Important To test your app’s SSO connection, open the Test-Only Initialization URL in a browser. When you’re redirected to the Apple Account page, sign in with your credentials. After you log in, Apple asks you to authorize your app. After you authorize your app, you’re redirected back to Salesforce. ## Single Sign-On Initialization URL Use this URL to perform SSO into Salesforce from Apple (using Apple credentials). The user opens this URL in a browser and signs in to the third party. Apple either creates a user or updates an existing user. Then Apple signs the user into Salesforce as that user. ## Existing User Linking URL Use this URL to link existing Salesforce users to their Apple account. The user opens this URL in a browser, signs in to Apple, logs in to Salesforce, and approves the link. ## OAuth-Only Initialization URL Use this URL to obtain OAuth access tokens for Apple. Users must authenticate with Salesforce for the Apple service to get a token. This flow doesn’t provide for future SSO functionality. ## Callback URL Use this URL for the endpoint that the Sign In with Apple service uses to call back to Salesforce. Apple redirects to the callback URL with information for each client configuration URL. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_important.png) Important You must update your app’s Apple configuration with the Callback URL. After creating the Apple authentication provider in Salesforce, return to your Services ID configuration page in Apple App Store Connect, and then update the Return URL to use the Callback URL generated in Salesforce. # Authenticate Experience Cloud Site Users Control The control objective of enabling SAML-based SSO for Experience Site users is to centralize external identity management. ## Control Name Experience Cloud Site Users Authentication ## Recommended Configuration Enable centralized SSO integrated with SAML authentication using an enterprise Identity Provider (IdP), enforce strong authentication policies. ## Control Overview The control objective of enabling SAML-based SSO for Experience Site users is to centralize external identity management, making sure that partners and customers authenticate against a single, managed corporate directory. This setup allows for real-time access revocation and consistent enforcement of enterprise security policies, such as Multi-Factor Authentication (MFA), preventing unauthorized access from orphaned or weak local credentials. ## Security Risk If Not Configured The primary security risk is a credential management gap where external users maintain active, unmonitored access via weak local passwords that are not synchronized with your corporate identity store. This lack of centralized control prevents real-time de-provisioning, allowing terminated partners or customers to retain access to proprietary documents and sensitive data long after their professional relationship has ended. ## Threat Scenarios An attacker exploits a weak or reused password on a partner's personal account to gain unauthorized entry into your Experience Site, silently harvesting proprietary pricing or customer data. Because the account is managed locally rather than through a centralized SSO, your IT team remains unaware of the breach and cannot instantly revoke access across the entire ecosystem. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Risk severity depends on user privilege levels, sharing rules, and the authentication mechanisms used. ## Higher Risk When Lack of strict roles and permissions of object access defined for users and profiles. ## Low Risk When This control can be considered low risk when one or more compensating controls are implemented, including: - Multi-Factor Authentication: MFA is enforced at the IdP or via Salesforce high-assurance authentication policies. - Login IP Allowlist: Restrict the IP address of the user profile to ensure it is from a trusted network. ## Business and Integration Considerations Customers should consider their business process, users permission and roles, and user experience for configuring the authentication process for experience site users. ## Recommended Remediation Configure Experience Site Users to authenticate using SAML. ## Security Health Review Guidance Require SAML authentication for experience site users. #### See Also - [Authentication Provider SSO](https://help.salesforce.com/s/articleView?id=xcloud.sso_authentication_providers.htm&release=264.0.0&type=5 "With authentication providers, your users can log in to your Salesforce org or Experience Cloud site with single sign-on (SSO) using credentials from a third party. Authentication providers also give your users access to protected third-party data. Salesforce offers several ways to configure authentication providers, such as with OpenID Connect or with a custom OAuth 2.0 configuration. Which protocol you can use depends on the third party.") - [Configure SAML SSO Between Salesforce Orgs or Experience Cloud Sites](https://help.salesforce.com/s/articleView?id=xcloud.sso_between_multiple_orgs.htm&release=264.0.0&type=5 "If your company deploys more than one Salesforce org or Experience Cloud site, set up SAML single sign-on (SSO) so users can easily move between them. In this SSO configuration, a single org or site acting as the identity provider authenticates users for one or more orgs or sites in the service provider role. Users can log in to all orgs or sites with a single set of credentials.") - [SAML for Experience Cloud Sites](https://help.salesforce.com/s/articleView?id=experience.networks_auth_configure_saml.htm&type=5&language=en_US) # Authenticated User Permission Requirements for Archive Archive connects to your Salesforce org through the API via an Authenticated User. This user account serves as the integration point for all Archive operations. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note The permission requirements in this topic are not applicable to orgs on Hyperforce. On Hyperforce, permissions are assigned automatically to the Platform Integration User (PIU), which replaces the authenticated user. For more information, see [Hyperforce Infrastructure in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_hyperforce_infrastructure.htm&release=264.0.0&type=5 "Your Archive region—not your Salesforce org's Hyperforce status—determines whether Archive uses an authenticated user or the Platform Integration User (PIU), and which setup, security, and import and export options you see."). We recommend that the Authenticated User be a dedicated Integration User, a full-licensed account created specifically so that all automated operations, such as purges, are logged to this user. This assignment provides a clean audit trail and distinguishes app-based actions from manual changes made by an admin. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important The standard Salesforce Integration User license isn't compatible with Archive. The user account designated as the Authenticated User must be assigned a full Salesforce license with a profile that grants the full required permission scope, such as a clone of the Salesforce System Admin profile. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Verify that the Integration User has read and delete access to all objects that you want to archive via the Field-Level Security (FLS) report. ## Basic Permissions
Permission Permission Type Purpose
Bulk API System Permissions

Authenticated User with System Admin profile can activate Hard-Delete to permanently delete records and bypass the Recycle Bin during Archive operations.

This permission is necessary for managing large datasets and directly purging records without them lingering in the Recycle Bin.

Modify All System Permissions Grants full control over all records for a specified object. The user can view, edit, delete, and transfer ownership of records, regardless of sharing rules or other restrictions.
## Additional Permissions To handle ContentDocuments and restore unarchived records correctly, the Authenticated User requires these additional permissions.
Permission Purpose
Manage Multi-Factor Authentication (MFA) in API

When MFA enforcement is enabled, Salesforce restricts access to org-level metadata fields.

With this permission, Archive can read storage or limit fields, such as FileStorageMB, through the API.

Without this permission, Archive processes that reference these fields can fail or return incomplete results.

Query All Files Grants access to all files, bypassing sharing rules for complete capture during archiving.
Set Audit Fields upon Record Creation Retains original metadata such as CreatedBy, CreatedDate, ModifiedBy, and ModifiedDate during unarchiving.
Update Records with Inactive Owners Restores records assigned to inactive users.
## Enable Org-Level Settings 1. In Setup, go to User Interface. 2. Select **Set Audit Fields upon Record Creation** and **Update Records with Inactive Owners**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Verify that the Integration User has read and delete access to all objects that you want to archive. You can verify this access via the Field-Level Security (FLS) report. ## Special Configuration for Veeva-Integrated Orgs If Archive is used with a Veeva-integrated Salesforce org, the Authenticated User requires these permissions to support Archive operations specific to Veeva.
PermissionPurpose
Veeva AdministratorGrants Veeva Administrator permissions to the Authenticated User.
CALL_ARCHIVE_USERThe Authenticated User can delete submitted Veeva calls, which is required for proper Archive functionality within Veeva.
## Archive Admin Permission Set The Archive Admin permission set gives Authenticated User access to comprehensive permissions for managing Archive and includes these permissions. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Before continuing setup, make sure the Archive Admin permission set is assigned to these users. - Integration User—Required for the API user to run scheduled and background processes. - Salesforce Admin—Required for the admin to access and complete all setup and configuration steps.
Permission Description
Archive Abort Archive Activity Abort running archive activities with a status of Started.
Archive Activities Access the Activities table.
Archive Analyzer Run storage analysis and create archive policies from the Storage Analyzer workflow.
Archive Enable Export Export records from the archive.
Archive Enable Unarchive

Unarchive records from the Archive, or via the Archive SDK.

If you need only one unarchive permission, you can enable one of these custom permissions, and then manually assign it to a custom permission set or profile.

  • Archive Unarchive—Permission to unarchive records from Archive only.
  • Archive Unarchive SDK—Permission to unarchive records via Archive SDK only.
Archive Field-Level Security (FLS) Run an Archive FLS report.
Archive Home Page Access the home page.
Archive Legal Hold Admin Enable Legal Hold operations, such as hold, unhold, search, and export of legal hold data.
Archive Legal Hold Table Access the Legal Hold report.
Archive Override Widget Restriction Rule Override Archive Widget Restriction Rule.
Archive Policy Permission Create archive policies.
Archive Purge Policy Permission Create purge policies.
Archive Search Search archived records.
Archive Settings View and configure Archive settings.
Archive View Archived Records View archived records on the Visualforce page.
Export Abort Activity Abort running export activities with a status of Started.
Unarchive Abort Activity Abort running unarchive activities with a status of Started.
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important The Archive Analyzer permission set grants the ability to create, edit, and delete archive policies, in addition to read access to the entire archive. Because archive policies control data retention and can permanently delete data through purge policies, this permission set is generally reserved for admins only. The Archive Policy permission set also provides delete capabilities and is generally reserved for admins only. ## Archive Component Access and Download Control Standard users can't access archived data through the Archive component and can encounter a `system.security.NoAccessException` error. Optionally, to turn on component access, assign the Archive View Archived Records user permission. 1. In Setup, locate Permission Sets. 2. Select **Archive View Archived Records**. 3. To assign the user permission to relevant users, click **Manage Assignments**. 4. Click **Add Assignments**. ## Restrict File Downloads in the Archive Component To prevent users from downloading files via the component, remove the download permission from a cloned permission set. 1. In Setup, clone Archive View Archived Records. 2. In the cloned set, remove `DownloadFiles` under Custom SystemPermissions. 3. Save the changes. 4. Assign the cloned set to the relevant users. #### See Also - [Activation of Bulk API Hard Delete on System Administrator Profile](https://help.salesforce.com/s/articleView?id=000385694&type=1&language=en_US) - [Enable Custom Permissions in Permission Sets](https://help.salesforce.com/s/articleView?id=platform.perm_sets_custom_perms.htm&type=5&language=en_US) - [Enable Custom Permissions in Profiles](https://help.salesforce.com/s/articleView?id=platform.users_profiles_custom_perms.htm&type=5&language=en_US) # Authentication This information helps you troubleshoot authentication issues when using Mobile Publisher. - If you use SAML authentication, configure it to use HTTP POST to avoid RelayState cut off. - Use the default login page if you have only one auth provider. - Don’t enforce IP restrictions unless you’re required to not allow access to the Experience Cloud site from outside networks or LTE. - For mobile apps, the ideal setting for refresh token policy is to never expire. This setting provides the best experience for your users. - Use the “SsoUrl” defined in “.well-known/auth-configuration” to trigger a login request in Experience Cloud sites. - If there are missing or incomplete CA (Certificate Authority) intermediate certificates, Android users could experience messages stating the Experience Cloud site is unable to load. Some Android devices don’t have trusted intermediate certificates. To resolve this issue, the certificates must be installed and trusted or the certificate chain must be uploaded to Salesforce and associated with the custom domain. - Qualys SSL Labs offers a web-based free service ([https://www.ssllabs.com/ssltest/analyze.html](https://www.ssllabs.com/ssltest/analyze.html)) that can quickly analyze custom domain URLs and check for incomplete certificate chains. - For more information about certificate chains, see [Merge a complete certificate chain for custom HTTPS domains](https://help.salesforce.com/articleView?id=000333504&language=en_US&type=1&mode=1). - If you use reCAPTCHA for your login flow you must specify the login page to open in an in-app browser. Also make sure to use a [supported mobile browser (Google)](https://support.google.com/recaptcha/answer/6223828?hl=en). For more information on setting up reCAPTCHA, see [Set Up ReCaptcha](https://help.salesforce.com/s/articleView?id=service.workdotcom_quemgmt_set_up_captcha.htm&type=5&language=en_US). # Authentication This information helps you troubleshoot authentication issues when using Mobile Publisher. - If you use SAML authentication, configure it to use HTTP POST to avoid RelayState cut off. - Use the default login page if you have only one auth provider. - Don’t enforce IP restrictions unless you’re required to not allow access to the Experience Cloud site from outside networks or LTE. - For mobile apps, the ideal setting for refresh token policy is to never expire. This setting provides the best experience for your users. - Use the “SsoUrl” defined in “.well-known/auth-configuration” to trigger a login request in Experience Cloud sites. - If there are missing or incomplete CA (Certificate Authority) intermediate certificates, Android users could experience messages stating the Experience Cloud site is unable to load. Some Android devices don’t have trusted intermediate certificates. To resolve this issue, the certificates must be installed and trusted or the certificate chain must be uploaded to Salesforce and associated with the custom domain. - Qualys SSL Labs offers a web-based free service ([https://www.ssllabs.com/ssltest/analyze.html](https://www.ssllabs.com/ssltest/analyze.html)) that can quickly analyze custom domain URLs and check for incomplete certificate chains. - For more information about certificate chains, see [Merge a complete certificate chain for custom HTTPS domains](https://help.salesforce.com/articleView?id=000333504&language=en_US&type=1&mode=1). - If you use reCAPTCHA for your login flow you must specify the login page to open in an in-app browser. Also make sure to use a [supported mobile browser (Google)](https://support.google.com/recaptcha/answer/6223828?hl=en). For more information on setting up reCAPTCHA, see [Set Up ReCaptcha](https://help.salesforce.com/s/articleView?id=service.workdotcom_quemgmt_set_up_captcha.htm&type=5&language=en_US). # Authentication Methods for the Omnistudio Build Tool (Managed Package) For the managed package runtime, use one of three available authentication methods for the Build Tool: Salesforce DX CLI, org properties files, or OAuth authentication. Salesforce DX CLI is recommended. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Salesforce DX CLI If you’re using a Salesforce DX org, use `-sfdx.username` for authentication. The Build Tool uses the Salesforce DX information from `sf org display --target-org `. The org can be a scratch org, or one authorized through `sf org login web`. ## Org Properties Files Alternatively, create your own property files for your source and target Salesforce orgs with these settings: ``` sf.username = < Salesforce Username > sf.password = < Salesforce Password + Security Token > sf.loginUrl = < https://login.salesforce.com or https://test.salesforce.com for Sandbox > ``` Use this command format: ``` vlocity packExport -propertyfile -job ``` If your CI/CD server is behind a proxy, specify the proxy URL with a username and password by adding this line to your property file: ``` sf.httpProxy: http://[:@][:] ``` For best results, use named properties files for each org. For example: ``` build_source.properties and build_target.properties ``` ## OAuth As another alternative, the Build Tool supports OAuth style information sent through the command line or property file. ``` vlocity packExport -sf.accessToken -sf.instanceUrl -sf.sessionId ``` If you use the OAuth method, include `oauthConnection: true` in your job file. # Authentication Protocols for Named Credentials Your connections between Salesforce and external systems use an authentication protocol to confirm secure communication between the two systems. Choose the authentication protocol that matches the configuration of the external system that you connect to. When you do, keep the strengths and considerations of each authentication protocol in mind. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: all editions
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important In Winter ’23, Salesforce introduced an improved named credential that’s extensible, customizable, and more secure. We strongly recommend that you use this preferred credential instead of legacy named credentials, which are no longer updated or enhanced. For information on extensible, customizable named credentials, see [Named Credentials Schema](https://help.salesforce.com/s/articleView?id=xcloud.nc_parts_of_nc.htm&release=264.0.0&type=5 "Named credentials and external credentials simplify and enable greater reuse of setup for secure and authenticated callouts."). If you don’t want to specify an authentication protocol: - Select the Custom protocol, and use custom headers for non-legacy named credentials. - Select **No Authentication** if you’re creating a non-legacy or legacy named credential. ## AWS Signature Version 4 A protocol to authenticate callouts to resources in Amazon Web Services over HTTP. The identity type must be Named Principal. The AWS Signature Version 4 protocol supports these variants. Roles Anywhere Use this variant to request temporary, limited-privilege credentials controlled via IAM policies and roles using a certificate. IAM User Use this variant to request temporary, limited-privilege credentials for AWS IAM users. For an example of how to make a connection using named credentials, AWS Signature Version 4, and STS, see [Define a Named Credential for Salesforce Connect Adapter for Amazon Athena](https://help.salesforce.com/s/articleView?id=athena_named_credentials_external_credentials.htm&language=en_US). ## Basic A static username and password are used to directly authenticate into the external system. Basic authentication offers the functionality of the Password protocol with the increased security of permission set assignments. With these permission set assignments, you grant users explicit access to make callouts using a specified set of credentials. This protocol isn’t available for legacy named credentials. With the Named Principal identity type, a Salesforce admin uses one username and password to authenticate into the external system on behalf of all users. With the Per User identity type, each user accessing the external system manages their own username and password. ## Custom A user-created authentication. Specify a permission set, sequence number, and authentication parameters. Each authentication parameter requires a name and value. This authentication protocol isn’t available for legacy named credentials. ## JWT A JWT (rhymes with hot), or JSON Web Token, manages your authentication into the external system. The subject is a string when the identity type is Named Principal, and it’s a formula when the identity type is Per User. Users don’t manage their credentials for the external system. With this protocol, when users view their authentication settings for external systems, they can’t see options. Signing certificates aren’t included in packages. If you’re using JWT or JWT Bearer Flow as the authentication protocol for a packaged named credential, recreate the package’s referenced signing certificate in the subscriber org before installing the package. ## OAuth 2.0 ![OAuth authentication](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/user_api_access/oauth_schema_01.png) A user or the admin applies a credential for a specified OAuth 2.0 system that authenticates into the external system. If you’re using the Per User identity type, each user accessing the external system manages their own credential. OAuth uses an _authentication provider_, which issues a token to Salesforce for calling a target endpoint, after the user logs in via a browser and allows access. To an end user, an authentication provider can appear distinct from the actual target endpoint. For example, a user logs into Google to give an application access to Google Photos or Nest smart home devices. The authentication provider gives Salesforce a “valet key” that it can use for limited access to the user’s resources. For more on OAuth authentication, see [OAuth Authorization Flows](https://help.salesforce.com/s/articleView?id=remoteaccess_oauth_flows.htm&language=en_US). The OAuth2.0 protocol supports these variants. Browser Flow One or more users logs into the remote system via a web browser, triggering a callback that includes tokens used to authenticate calls to the endpoint in the named credential. Browser Flow is sometimes referred to as Authorization Code Grant Flow. Client Credentials with Client Secret Flow The client app exchanges its client credentials defined in client identifier and client secret for an access token. Client Credentials with Client Secret Flow Managed by External Auth Identity Provider The client app exchanges its client credentials defined in a client identifier and client secret for an access token. The client identifier and client secret are configured in an external auth identity provider. Client Credentials with JWT Assertion The client app exchanges its client credentials defined client identifier and in JWT assertion for an access token. JWT Bearer Flow A JWT (JSON Web Token) is sent to an authorization provider and receives a token in return that’s used to authenticate into the external system. Users don’t manage their credentials for the external system. With this protocol, when users view their authentication settings for external systems, they can’t edit options. But users can delete their JWT Bearer Flow settings to use a different named credential. Signing certificates aren’t included in packages. If you’re using JWT or JWT Bearer Flow as the authentication protocol for a packaged named credential, recreate the package’s referenced signing certificate in the subscriber org before installing the package. For legacy named credentials, JWT Bearer Flow is referred to as JWT Token Exchange. ## Password A static username and password are used to directly authenticate into the external system. If you’re using the Per User identity type, each user accessing the external system manages their own username and password. This authentication protocol is available only for legacy named credentials. But if you’re using the Custom authentication protocol, you can configure a credential that supports the standard HTTP Basic authentication protocol. That protocol uses passwords. #### See Also - [Named Credentials](https://help.salesforce.com/s/articleView?id=xcloud.named_credentials_about.htm&release=264.0.0&type=5 "Intended to secure and simplify authenticated API callouts to external systems, a named credential specifies the URL of a callout endpoint and its required authentication parameters in one definition. To streamline your Apex code and simplify the setup of authenticated callouts, specify a named credential as the callout endpoint.") - [Create Named Credentials and External Credentials](https://help.salesforce.com/s/articleView?id=xcloud.nc_named_creds_and_ext_creds.htm&release=264.0.0&type=5 "To simplify the setup of authenticated callouts, create an external credential to specify an authentication protocol and then specify a named credential as the callout endpoint. Add custom headers to cover more use cases and security requirements. Use a permission set or profile to grant access so that users can make authenticated callouts. You can create and configure named credentials programmatically or through the Salesforce UI.") - [Understand Legacy Named Credentials](https://help.salesforce.com/s/articleView?id=xcloud.named_credentials_legacy_about.htm&release=264.0.0&type=5 "A legacy named credential specifies the URL of a callout endpoint and its required authentication parameters in one definition. Legacy named credentials are deprecated and are unsupported in future releases.") - [Authentication Provider SSO](https://help.salesforce.com/s/articleView?id=xcloud.sso_authentication_providers.htm&release=264.0.0&type=5 "With authentication providers, your users can log in to your Salesforce org or Experience Cloud site with single sign-on (SSO) using credentials from a third party. Authentication providers also give your users access to protected third-party data. Salesforce offers several ways to configure authentication providers, such as with OpenID Connect or with a custom OAuth 2.0 configuration. Which protocol you can use depends on the third party.") # Authentication Provider Control In Salesforce, an authentication provider is used when you want Salesforce to let users log in using their credentials from another service. Security Health Review evaluates your authentication provider list allowed in your Salesforce org using configuration signals aligned with Salesforce-recommended best practices and highlights gaps that present the highest security and business risk. ## Control Name Authentication Provider Configuration and Validation ## Recommended Configuration Configure, validate, and regularly review all authentication providers to make sure that they are trusted, correctly scoped, and securely integrated. ## Control Overview Authentication providers allow Salesforce to delegate user authentication to trusted third-party identity platforms such as Apple, Google, Microsoft, OpenID Connect providers, and other supported services. Proper configuration ensures that authentication assertions are accepted only from verified sources and that user provisioning and access are securely controlled. ## Security Risk If Not Configured Unverified or misconfigured authentication providers can allow Salesforce to accept fraudulent authentication assertions, leading to unauthorized user creation, account takeover, or access from untrusted identity sources. ## Threat Scenarios Acceptance of forged or replayed authentication tokens, unauthorized user provisioning via misconfigured identity provider (IdP) mappings, trust relationships with deprecated or compromised IdPs, misuse of overly permissive provider configurations. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Risk severity depends on the number of authentication providers configured, user population size, access privileges granted upon login, and whether providers are externally managed or consumer-facing. ## Higher Risk When Authentication providers are not formally verified, provider metadata is outdated, attribute mappings are overly permissive, or multiple consumer-grade providers are enabled without governance controls. ## Low or No Risk When This control can be considered low risk when implementing one or more of the following: - Trusted Provider Validation: Authentication providers are enabled only for approved and trusted identity platforms. - Secure Attribute Mapping: User attributes and provisioning rules are tightly scoped to enforce least privilege. - Metadata Management: Provider certificates, endpoints, and metadata are kept current and reviewed periodically. - MFA Enforcement: MFA is enforced at the authentication provider or via Salesforce high-assurance policies. - Governance Controls: Authentication providers are centrally governed, documented, and reviewed as part of identity lifecycle management. ## Business and Integration Considerations Customers should evaluate business justification for each authentication provider, especially consumer identity platforms, and ensure alignment with access policies, regulatory requirements, and user experience expectations. ## Recommended Remediation Review all configured authentication providers, turn off unused or untrusted providers, validate provider metadata and certificates, restrict attribute mappings, enforce MFA, and establish periodic governance reviews. ## Security Health Review Guidance Security Health Review identifies authentication providers configured in Salesforce to help customers reduce identity federation risk, prevent unauthorized access, and align third-party authentication integrations with Salesforce-recommended security baselines and Zero Trust principles by identifying connected authentication providers. #### See Also - [Define an Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_predefined_authentication_provider_parent.htm&release=264.0.0&type=5 "To use an authentication provider for single sign-on (SSO), define an authentication provider in Setup by using configuration information from a third-party identity provider. Control security settings, customize the SSO experience with error and logout URLs, and configure registration handler settings. Most authentication providers support single sign-on (SSO) and third-party data access, with the exceptions of GitHub, Microsoft Access Control Service, and X (formerly Twitter).") # Authentication Provider SSO With authentication providers, your users can log in to your Salesforce org or Experience Cloud site with single sign-on (SSO) using credentials from a third party. Authentication providers also give your users access to protected third-party data. Salesforce offers several ways to configure authentication providers, such as with OpenID Connect or with a custom OAuth 2.0 configuration. Which protocol you can use depends on the third party. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_tip.png) Tip Setup with Agentforce can help you manage authentication providers more efficiently. For more information, see [Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_overview.htm&language=en_US) and [Identity Management in Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_identity.htm&language=en_US). ## Single Sign-On Authentication and Authorization Flow Most authentication providers serve a dual purpose. In addition to authenticating users for SSO, they provide access to user data. With access to this third-party data, you can enrich your users’ Salesforce profiles with additional information after they log in with SSO. For example, when a user logs in to Salesforce using their Facebook credentials, they can authorize access to their Facebook data. Facebook then sends Salesforce an access token, which you can use to access Facebook profile data in order to populate the user’s Salesforce user profile. ## Authentication Provider Setup Authentication provider setup includes these high-level steps. - Create a registration handler. The registration handler is a key part of your implementation. It handles the heavy lifting of creating and updating users during SSO. You can set up a registration handler by using Apex or Flow Builder. - Define the authentication provider. This step includes creating an app on the identity provider, creating an authentication provider in Setup, and configuring the provider to use the registration handler. - Add the provider to the login page for your org or Experience Cloud site. - Optionally, add functionality to the authentication provider with request parameters. - **[Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5)** To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex. - **[Define an Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_predefined_authentication_provider_parent.htm&release=264.0.0&type=5)** To use an authentication provider for single sign-on (SSO), define an authentication provider in Setup by using configuration information from a third-party identity provider. Control security settings, customize the SSO experience with error and logout URLs, and configure registration handler settings. Most authentication providers support single sign-on (SSO) and third-party data access, with the exceptions of GitHub, Microsoft Access Control Service, and X (formerly Twitter). - **[Add an Authentication Provider to Your Org’s Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_org_login_page.htm&release=264.0.0&type=5)** After you set up an authentication provider, make it easy for your employees to use it by adding it to your org’s login page. - **[Add an Authentication Provider to Your Experience Cloud Site’s Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_customer_add_login_option.htm&release=264.0.0&type=5)** After you set up an authentication provider, make it easy for customers and partners to use it by adding it to your Experience Cloud site’s login page. - **[Add Functionality to an Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params.htm&release=264.0.0&type=5)** After you set up single sign-on (SSO) with an authentication provider, Salesforce generates several client configuration URLs, such as the Single Sign-On Initialization URL. These client configuration URLs support request parameters, which you can use to add functions to your authentication provider. For example, use these parameters to get customized permissions from the third party or direct users to a specific location after authenticating. # Authorize Apps with OAuth OAuth is an open protocol that authorizes a client application to access data from a protected resource through the exchange of tokens. OAuth tokens are essentially permissions given to a client application. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: All Editions
The resource server can validate the tokens and allow the client application access to the defined protected resources. In Salesforce, you can use OAuth authorization to approve a client application’s access to your org’s protected resources. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_important.png) Important You can’t use OAuth independently to authenticate a user’s identity. Instead, use OpenID Connect as an authentication service in addition to OAuth authorization. - **[OAuth Authorization Flows](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_flows.htm&release=264.0.0&type=5)** OAuth authorization flows grant a client application restricted access to protected resources on a resource server. Each OAuth flow offers a different process for approving access to a client app, but in general the flows consist of three main steps. To initiate an authorization flow, a client app requests access to a protected resource. In response, an authorizing server grants access tokens to the client app. A resource server then validates these access tokens and approves access to the protected resource. - **[Generate a Frontdoor URL to Bridge into UI Sessions](https://help.salesforce.com/s/articleView?id=xcloud.frontdoor_singleaccess.htm&release=264.0.0&type=5)** To give users uninterrupted access to Salesforce and other apps, use an existing session to automatically log users into a new UI without making them enter their credentials again. For example, redirect users from a custom app to a specific record in Salesforce. To bridge from one session to another, use Single Access UI Bridge API (UI Bridge API for short). With this API, exchange an access token for a frontdoor URL that you use to load a new session. You can also specify a redirect URI where users are sent when their new session begins. - **[Proof Key for Code Exchange (PKCE) Extension](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_pkce.htm&release=264.0.0&type=5)** To improve the security of your OAuth and authentication provider implementations, use the OAuth 2.0 Proof Key for Code Exchange (PKCE) extension. You can require PKCE at an org-wide level, require it for a specific connected app, and automatically enable it for supported authentication providers. - **[OAuth 2.0 DPoP Guide](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_dpop_guide.htm&release=264.0.0&type=5)** To secure your client apps, implement the Demonstrating-Proof-of-Possession (DPoP) extension for OAuth integrations. DPoP cryptographically binds OAuth access and refresh tokens to your client. To use a token, clients must prove that they own the private key. Even if a token is leaked or stolen, a threat actor can’t use it without the private key. - **[OAuth 2.0 DPoP Supported Flows and Endpoints](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_dpop_supported_flows.htm&release=264.0.0&type=5)** The OAuth 2.0 Demonstrating Proof-of-Possession (DPoP) extension protects access to your Salesforce data. It works by cryptographically binding OAuth access and refresh tokens to the client that requested them. Even if an attacker gets access to a token, they can’t use it to access your data. You can use DPoP with most OAuth flows, and you can use DPoP-bound access tokens to request access to Salesforce resources for supported endpoints. - **[OAuth Tokens and Scopes](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_tokens_scopes.htm&release=264.0.0&type=5)** OAuth tokens authorize access to protected resources. Connected apps receive tokens on behalf of a client after authorization. Scopes further define the type of protected resources that the connected app can access. You assign scopes to a connected app when you build it, and they’re included with the OAuth tokens during the authorization flow. - **[Access Tokens](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_access_tokens.htm&release=264.0.0&type=5)** Access tokens are your key to Salesforce APIs. When a client successfully completes an authorization flow, whether it’s a standard OAuth 2.0 flow or a headless identity flow, Salesforce issues an access token that can be used to access protected Salesforce data. Salesforce supports two types of access tokens: opaque tokens and JSON Web Token (JWT)-based access tokens. Each type has its own merits and limitations based on your use case. - **[Revoke Data Cloud Access Tokens](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_revoke_dc_token.htm&release=264.0.0&type=5)** Revoke a Data Cloud access token to remove client access to Salesforce Data Cloud data. - **[OAuth Custom Scopes](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_customscopes.htm&release=264.0.0&type=5)** An external client app can use the OAuth authorization protocol to access protected resources. As part of the protocol, OAuth default scopes fine-tune the app’s permissions to access protected resources in Salesforce. However, these default scopes are insufficient when an external entity hosts the protected resource. In this scenario, Salesforce plays the role of OAuth authentication and authorization provider, but it has little knowledge about the resource it’s protecting. To define an external client app’s permissions to access protected resources hosted by an external entity, create an OAuth custom scope. The custom scope tells the external entity which information the external client app is authorized to access. - **[Identity URLs](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_using_openid.htm&release=264.0.0&type=5)** The identity URL is the gateway to the Salesforce Identity Service that can be accessed using the OAuth 2.0 user-agent or web server flows. In these flows, when a connected app with the `id` scope is successfully authorized, it receives an identity URL along with the access token. The connected app can then send a GET request with the access token to the identity URL. In response, Salesforce returns details about the queried user and org. - **[OAuth Endpoints](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_endpoints.htm&release=264.0.0&type=5)** OAuth endpoints are the URLs that you use to make OAuth authorization requests to Salesforce. Each OAuth flow defines which endpoints to use and what request data to provide. - **[OAuth 2.0 Echo Endpoint](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_echo_endpoint.htm&release=264.0.0&type=5)** Use the OAuth 2.0 echo endpoint to simplify development when you configure the Authorization Code and Credentials Flow for public clients, such as single-page apps. You can also use this endpoint for variations of the Authorization Code and Credentials Flow, including headless registration, passwordless login, and guest user flows. - **[Enable CORS for OAuth Endpoints](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_endpoints_cors.htm&release=264.0.0&type=5)** Web applications use Cross-Origin Resource Sharing (CORS) to request resources from origins other than their own. For example, a web page can use CORS to request information about a user from your My Domain login URL or Experience Cloud site URL. In addition to public and allowlisted web pages, Salesforce supports CORS for certain OAuth endpoints when requested from a My Domain login URL or Experience Cloud site URL. - **[Query for User Information](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_using_userinfo_endpoint.htm&release=264.0.0&type=5)** A connected app can query the UserInfo endpoint for information about the user associated with the connected app’s access token. Salesforce returns basic personal information about the user and important endpoints that the connected app can talk to, such as photos and accessible API endpoints. This UserInfo endpoint provides access to information only for the current user. It doesn’t give access to other users in the org. - **[Query for the OpenID Connect Configuration](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_using_openid_discovery_endpoint.htm&release=264.0.0&type=5)** Use the OpenID Connect discovery endpoint to query for information about the Salesforce OpenID Connect configuration. Salesforce returns basic information about endpoints, supported scopes, and other values used for OpenID Connect authorization. - **[Query SAML Authentication Settings](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_auth_configuration_endpoint.htm&release=264.0.0&type=5)** You can query the authentication configuration endpoint for information about an org's or Experience Cloud site's SAML single sign-on (SSO) and authentication provider settings. Use this functionality when you’re developing apps that need this information on demand. #### See Also - [Connected Apps](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_overview.htm&release=264.0.0&type=5 "A connected app is a framework that enables an third-party application to integrate with Salesforce by using APIs and standard protocols, such as SAML, OAuth, and OpenID Connect. Connected apps use these protocols to authenticate, authorize, and provide single sign-on (SSO) for third-party applications. The third-party applications that are integrated with Salesforce can run on the customer success platform, other platforms, other devices, or even SaaS subscriptions. For example, when you log in to your Salesforce mobile app and see your data from your Salesforce org, you’re using a connected app.") # Authorized Email Domains To send email on behalf of your users, Salesforce requires that you verify ownership of your email domains. We recommend that you set up DomainKeys Identified Mail (DKIM) to complete that requirement. If you can’t set up DKIM keys, verify that you own a domain via an authorized email domain. - **[Set Up an Authorized Email Domain](https://help.salesforce.com/s/articleView?id=xcloud.security_email_auth_domain_setup.htm&release=264.0.0&type=5)** To verify your email-sending domain without DomainKeys Identified Mail (DKIM), set up an authorized email domain. For example, if your users’ email addresses are in the format `name@example.com`, set up an authorized email domain for `example.com`. - **[Copy Authorized Email Domains into a Sandbox](https://help.salesforce.com/s/articleView?id=xcloud.security_email_auth_domain_copy.htm&release=264.0.0&type=5)** To avoid a second round of DNS verification, import your authorized email domains from production to a sandbox. In production, specify the authorized email domains to copy to a sandbox. Then, in a sandbox, import the available domains with one click. #### See Also - [Authorized Email Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_email_auth_domains.htm&release=264.0.0&type=5 "To send email on behalf of your users, Salesforce requires that you verify ownership of your email domains. We recommend that you set up DomainKeys Identified Mail (DKIM) to complete that requirement. If you can’t set up DKIM keys, verify that you own a domain via an authorized email domain.") - [Email Security Mechanisms](https://help.salesforce.com/s/articleView?id=xcloud.emailadmin_security_mechanisms.htm&release=264.0.0&type=5 "Salesforce supports several email security mechanisms: Transaction Layer Security (TLS), Sender Policy Framework (SPF), DomainKeys Identified Mail (DKIM), and Domain-based Message Authentication, Reporting, and Conformance (DMARC). Each mechanism protects different aspects of an email message.") - [Requirements to Send Email from Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_requirements.htm&release=264.0.0&type=5 "To protect your org and brand, Salesforce requires domain-level and user-level email verification. To send email from Salesforce with your email domain, verify ownership of your email-sending domains.") # Autocomplete Addresses When you enable autocomplete addresses, users of Salesforce app, Experience Cloud Aura, and Experience Cloud Lightning Web Runtime (LWR) sites can enter text in address fields and see possible matching addresses in a picklist. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To modify maps and location settings: Customize Application
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note When a user selects an address from an autocomplete picklist result, the address is stored in the language assigned to that user. 1. From Setup, in the Quick Find box, enter Maps, select **Maps and Location Settings**, and then click **Edit**. 2. Select **Enable Maps and Location Services (powered by Google)**, and then select **Autocomplete standard address fields**. 3. Save your changes. #### See Also - [Considerations for Autocompleting Addresses](https://help.salesforce.com/s/articleView?id=xcloud.customize_maps_considerations.htm&release=264.0.0&type=5 "Get familiar with these considerations before you enable the autocomplete address fields feature.") # Automate Close Plans and Account Folder Creation with Flow Builder Save time manually creating and filling out Close Plans with templates in Flow Builder. Use Flow Builder to automatically create Account folders in Quip and add your Close Plans to them. ### Required Editions
Available in: Lightning Experience
Use a flow to automatically populate a Close Plan attached to an Opportunity when an Opportunity is created. After you create a document from the template, the flow moves the document to an existing folder named for the Opportunity’s parent Account or creates a one. ## Create an All Accounts Folder in Quip To keep all of your Account folders in one organized place, create an All Accounts parent folder in Quip. Flow later adds Account folders to this parent folder. ### Required Editions
Available in: Lightning Experience
1. In Quip, click **Compose**, and then **New Folder**. 2. Name the folder All Accounts and click **Create**. 3. Click **Share** and turn on link sharing. ## Create a Custom Folder URL Field To store the folder URL of documents created from a template, create a custom Folder URL field. Flow later uses this field to check whether a folder exists for an Account. ### Required Editions
Available in: Lightning Experience
1. From Salesforce Setup, go to the Object Manager, and select **Account**. 2. Select **Fields & Relationships**, and then **New**. 3. Select **URL**, and then **Next**. 4. Enter Quip Folder as the field label and click **Next**. 5. Select the profiles that can edit the field, and click **Next**. 6. Save the action. ## Set Up the Quip Document Component Set up the Quip Document component on the Opportunity page layout. Create a Close Plan custom URL field to store Close Plans created from your template. ### Required Editions
Available in: Lightning Experience
1. Navigate to an Opportunity record in Lightning Experience. 2. Click the gear icon, and select **Edit Page** to go to the Lightning App Builder. 3. Create a new tab called Close Plan. 4. In the left pane, select **Quip Document** and drag it to your new tab. ![Quip Document component in Lightning App Builder](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_doc_component_setup_one_template_for_each_record.png) 5. Select **One template for each record**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note One template for each record lets you add a template via Flow Builder or lets your users manually add a template. To use Flow Builder only, select **Different Docs for each record**. 6. Click **![Edit icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/button_edit_pencil.png).** You can either paste your Close Plan template URL or select a template from the Template Library. 7. Click **Next** and validate the template. The validation checks that you have access to the document, that link sharing is turned on, that the document is marked as a template, and that it isn’t a slide. 8. To create a custom URL field to store the new document URLs, select **Create a new field**. 9. Enter Close Plan as the field label and Close\_Plan as the field name. You can make changes later from the Object Manager. ![Create a Custom Field modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_custom_url_field_modal_228.png) 10. Save and activate the action. ## Build a Flow to Add Opportunity Close Plans to New or Existing Account Folders Use Flow Builder to create Close Plans from a template when an Opportunity is created and move them to the parent Account folder. If the folder doesn’t exist, use Flow Builder to create one. ### Required Editions
Available in: Lightning Experience
![Final canvas of all elements connected](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_automate_folders_canvas.png) 1. From the Quick Find box in Setup, enter Flows. 2. Click **New Flow**. 3. Select **Record-Triggered Flow** and click Next. Flow Builder displays the flow in the Auto-Layout flow layout. You can access Interactions, Logic, and Data via the plus icon. 4. Under Trigger, click **Edit**. Set the flow to trigger when a **record is created**, and run the flow **after the record is saved**. Click **Done**. 5. Click **Choose Object**. 6. Select **Opportunity** as the object and set the conditions to **None**. 7. Check to see if a folder exists. 1. From the Elements tab, drag **Decision** onto your flow’s canvas. ![New Decision modal with highlighted fields](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_decision_automate_folders.png) 2. Name the decision Folder Exists?. 3. Create outcomes for when the folder is already created and for when it’s not. | Label | Condition Requirements to Execute Outcome | Resource | Operator | Value | | --- | --- | --- | --- | --- | | Yes | All Conditions Are Met (AND | {!$Record.Account.Quip\_Folder\_\_c} | Is Null | False | 4. For the document exists outcome, set the Account Plan URL field reference to **Is Null**, and the Value to **False**. For the document doesn’t yet exist outcome, set the Account Plan URL field reference to **Is Null**, and the Value to **True**. 8. If a folder exists, add Close Plans created from a template to it. 1. From the Elements tab, drag **Assignment** onto your flow’s canvas. 2. Name the assignment Use Existing Folder URL. 3. For the Variable, click **New Resource**. ![New Resource window with fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_folderurl_resource.png) 4. Set the Resource Type to **Variable** and enter FolderURL as the API Name. Set the Data Type to **Text** and click **Done**. 5. Set the variable values. ![New Assignment window with fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_new_assignment_new_folder.png) | Variable | Operator | Value | | --- | --- | --- | | FolderURL | Equals | {!$Record.Account.Quip\_Folder\_\_c} | 6. Click **Done**. 7. Connect the Decision and Assignment elements and set the Outcome to **Yes**. 9. If a folder doesn’t exist, check to see the Opportunity’s parent Account. 1. From the Elements tab, drag **Get Records** onto your flow’s canvas. ![Get Records window with highlighted fields](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_get_records_folder.png) 2. Enter a name for the action. Here, we use Look Up Account. Select **Account** as the Object, and set conditions. Here, we set **All Conditions to be met**, and Id to equal {!$Record.Account.Name}.{!$Record.Account.Id}. 3. Click **Done**. 10. If a folder doesn’t exist, create one. 1. From the Elements tab, drag a new action onto the canvas. 2. Select **Quip** and enter Create Quip Folder. ![Create Quip Folder action with fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_create_folder.png) 3. Enter a name for the action. Here, we use Create Quip Folder. 4. Enter {!$Record.Account.Name} as the Folder Name. 5. Include the **Parent Folder URL** and enter the All Accounts folder URL. 6. Under Advanced, click **Manually assign variables**. 7. Enter {!Look\_Up\_Account.Quip\_Folder\_\_c} as the Folder ID. 8. Click **Done**. 9. Connect the Lock Up Account and Create Quip Folder actions on the canvas. 11. If a folder doesn’t exist, add Close Plans created from a template to it. 1. From the Elements tab, drag Assignment onto your flow’s canvas. ![New Assignment window with fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_new_assignment_new_folder.png) 2. Name the assignment Use New Folder URL. 3. Set the variable values. | Variable | Operator | Value | | --- | --- | --- | | FolderURL | Equals | {!Look\_Up\_Account.Quip\_Folder\_\_c} | 4. Click **Done**. 5. Connect the Create Quip Folder and Use New Folder URL elements on the canvas. 12. If a folder doesn’t exist, update the Account with the new folder information. 1. From the Elements tab, drag **Update Records** onto your flow’s canvas. ![Update Records modal with fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_update_records_folder.png) 2. Name the action Update the Account. 3. Select **Use the IDs and all field values from a record or record collection**. 4. Under Select Record(s) to Update, enter {!Look\_Up\_Account}. 5. Click **Done**. 6. Connect the Use New Folder URL and Update the Account elements on the canvas. 13. Create Close Plans from a template. 1. From the Elements tab, drag a new action onto the canvas. 2. Select **Quip** and enter Copy Quip Document as the Quip action. ![Copy Quip Document modal with fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_copy_doc_close_plan.png) 3. Name the action Create Close Plan from Template. 4. Enter the Document URL for the Close Plan. 5. Include the **Member Folder URLs** and enter {!FolderURL}. 6. Include the **Source Record ID** and enter {!$Record.Id}. 7. Under Advanced, click **Manually assign variables**. 8. For the Document Link, enter {!$Record.Close\_Plan\_\_c}. 9. Connect the Use Existing Folder URL and Update the Account elements to the Create Close Plan from Template action. 14. Update the Opportunity record with the new document URL. 1. From the Elements tab, drag **Update Records** onto your flow’s canvas. ![Update Records modal with fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_update_record_opportunity.png) 2. Name the action Update the Opportunity. 3. Select **Use the IDs and all field values from a record or record collection**. 4. Under Select Record(s) to Update, enter {!$Record.}. 5. Click **Done**. 6. Connect the Create Close Plan from Template action and Update the Opportunity element on the canvas. 15. Click **Save**. Name the flow. For this example, we use the name Automate Account Folders. To auto-create the API name, press Tab. Click **Save**. 16. Click **Activate**. ## Create an Opportunity To see your flow in action and automatically create a Close Plan and add it to an Account folder, create an Opportunity in Lightning Experience. ### Required Editions
Available in: Lightning Experience
1. In Salesforce, click **New Opportunity**. 2. Select **Simple Opportunity**, and then **Next**. 3. Enter your opportunity information and save the action. ![New Opportunity modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_new_opportunity.png) A Close Plan is automatically created and added to the Close Plan tab on the record. A new Account folder is created with the Account name to the All Accounts folder in Quip and the Close Plan is added to it. ![Haven Enterprises Close Plan is inside a Haven Enterprise folder, nested inside the All Accounts folder](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_close_plan_folder.png) # Automate Close Plans with Flow Builder Save time manually creating and filling out Mutual Close Plans with templates in Flow Builder. Use Process Builder and Flow Builder to automatically add a Mutual Close Plan template to a record and generate an auto-populated Close Plan when the Opportunity stage changes. Add the copied document to a folder and send a message to @everyone to notify users that a document was created. ### Required Editions
Available in: Lightning Experience
Use a flow to automatically populate a Mutual Close Plan attached to an Opportunity. After you create a document from the template, the flow moves the document to a folder and sends a message in the conversation panel. Process Builder then autolaunches the flow when an Opportunity stage changes to Proposal/Quote. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip This workflow works for other Salesforce objects. To add an Account Plan to an Account, set up the Quip Document component on an Account page, create an Account Plan URL field, and select Account as the object in Flow Builder. ## Set Up the Quip Document Component Set up the Quip Document component on the Opportunity page layout. Create a Mutual Close Plan custom URL field to store Mutual Close Plans created from your template. ### Required Editions
Available in: Lightning Experience
1. Navigate to an Opportunity record in Lightning Experience. 2. Click the gear icon, and select **Edit Page** to go to the Lightning App Builder. 3. Create a new tab called Close Plan. 4. In the left pane, select **Quip Document** and drag it to your new tab. ![Quip Document component in Lightning App Builder](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_quip_doc_component_opportunity.png) 5. Select **Different docs for each record**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note Different Docs for each record uses Flow Builder to add a template to a record. To use Flow Builder or let users manually add templates, select **One template for each record**. 6. To create a custom URL field to store the new document URLs, select **Create a new field**. 7. Enter Mutual Close Plan as the field label and field name. You can make changes later from the Object Manager. ![Create a Custom Field modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_custom_url_field_modal_228.png) 8. Save the action. To add your Mutual Close Plan template to the Quip Document component and to automate Mutual Close Plan creation, create actions in Flow Builder and Process Builder. ## Create a Mutual Close Plan Use Flow Builder to add your Mutual Close Plan template to the Opportunity and to automatically populate Mutual Close Plans created from it. ### Required Editions
Available in: Lightning Experience
1. From the Quick Find box in Setup, enter Flows. 2. Click **New Flow**. 3. Select **Autolaunched Flow** and click **Next**. Flow Builder displays the flow in the Auto-Layout flow layout. You can access Interactions, Logic, and Data via the plus icon. Process Builder later launches the flow when an Opportunity stage is changed. 4. Drag the Action element onto the canvas. 5. Select **Quip**. 6. Enter Copy Quip Document as the Quip action. 7. Name the action Create Mutual Close Plan from Template. To auto-create the API name, press **Tab**. ![New Action modal with Document URL and Source Record ID highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_process_flow_modal.png) 8. Enter the Document URL for the Mutual Close Plan ([https://quip.com/Rm1bAaCxx71a/OpportunityName-Close-Plan](https://quip.com/Rm1bAaCxx71a/OpportunityName-Close-Plan)). 9. Include the Source Record ID. Under Source Record ID, click **\+ New Resource**. 10. Select **Variable** as the Resource Type. 11. Enter the API name OpportunityRecord. 12. Select **Record** as the Data Type. 13. Select **Opportunity** as the Object. 14. Select **Available for input** and click **Done**. 15. When you get the “Data type of the resource you entered isn’t compatible” error for the Source Record ID, enter .id after OpportunityRecord. Select **Opportunity ID**. ![Opportunity ID highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_flow_opportunityrecordid.png) 16. Select **Manually assign variables**. Under Store Output Values, click **Document Link** and select **\+ New Resource**. ![New Resource modal with Resource Type, API Name, and Data Type highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_new_resource.png) 17. Select **Variable** as the Resource Type. 18. Enter NewDocumentURL as the API Name. 19. Select **Text** as the Data Type. Click **Done**, then **Done**. 20. Drag the Update Records onto the canvas. 21. Name the action Update Opportunity Record. To auto-create the API name, press **Tab**. ![Update Records modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_new_update_records.png) 22. Select **Specify conditions to identify records, and set fields individually**. 23. Enter Opportunity as the Object. 24. Under Filter Opportunity Records, enter Id as the Field, select **Equals**, and enter {!OpportunityRecord.Id}. 25. Under Set Field Values for the Opportunity Records, enter Mutual\_Close\_Plan\_\_c as the Field and {!NewDocumentURL} as the Value. Click **Done**. 26. Connect the elements and click **Save**. ![flow canvas with Start, Create Mutual Close Plan, and Update Records](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_flow_canvas.png) 27. Name the flow. For this example, we use the name Create Close Plan from Template. To auto-create the API name, press **Tab**. Click **Save**. 28. Click **Activate**. ## Trigger the Process Create a process that launches the Mutual Close Plan flow when an Opportunity stage is changed to Proposal/Quote. When a user updates the Opportunity stage to Proposal/Quote, a Mutual Close Plan is created from the attached template and autopopulated based on the Opportunity’s data. ### Required Editions
Available in: Lightning Experience
1. From the Quick Find box in Setup, enter Process. Select **Process Builder**. 2. Click **New**. ![New Process modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_new_process.png) 3. Name the process Create Close Plan. To auto-create the API name, press **Tab**. 4. Select **A record changes** as the process trigger. Click **Save**. 5. Click **\+ Add Object** and select **Opportunity** as the object type. ![Opportunity object type and "when a record is created or edited" highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_process_add_object.png) 6. Start the process **when a record is created or edited**. Click **Save**. 7. Click **\+ Add Criteria**. ![Define Criteria with Opportunity Stage Change highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_process_define_criteria.png) 8. Name the criteria Opportunity Stage Change. 9. To determine when to trigger the process, select **Conditions are met**. 10. Set the conditions:
FieldOperatorTypeValue
[Opportunity]StageEqualsPicklistProposal/Quote
11. Click **\+ Add Row** and set conditions:
FieldOperatorTypeValue
[Opportunity]StageIs changedBooleanTrue
12. Under Conditions, click **All of the conditions are met (AND)**. 13. Click **Save**. 14. Click **\+ Add Action**. ![Flows, Action Name, Flow Name, and Flow Variables highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_process_launch_flow.png) 15. Select **Flows** as the Action Type. 16. Name the action Call Flow to Create Document from Template. 17. Select the flow **Create\_Close\_Plan\_from\_Template**. 18. Set the flow variables:
Flow VariableTypeValue
OpportunityRecordField Reference[Opportunity]
19. Click **Save** and then **Activate**. When your users update an Opportunity stage to Proposal/Quote, a Mutual Close Plan is automatically created and data from the Opportunity is autopopulated. The created document is then stored in the Mutual Close Plan field added to the Opportunity layout. ## Move and Share a Mutual Close Plan To make it easier to manage your Mutual Close Plans, use Flow Builder to move Mutual Close Plans created from a template to a specific folder. Automatically send a message in the conversation pane to let users know that a document was created. ### Required Editions
Available in: Lightning Experience
1. In Flow, open the Create Close Plan from Template flow. 2. Drag a new action onto the canvas after Update Records. 3. Select **Quip**. 4. Enter Add Quip Document to Folder as the Quip action. 5. Name the action Add Quip Document to Folder. To auto-create the API name, press **Tab**. ![New Quip Action with Label, API Name, Document URL, and Folder URL highlighted.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_flow_new_add_doc_to_folder.png) 6. For the Document URL, enter {!NewDocumentURl}. 7. To get the folder URL, first go to the Quip Admin Console. ![Quip Admin Console with Include Docment Titles and Folder Titles in URLs highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_flow_admin_console_folder_title.png) 1. Under Settings, click **Site Settings**. 2. Disable **Include Document Titles and Folder Titles in URLs**. 3. In Quip, go to the folder where you want to add Mutual Close Plans created from a template. Copy the folder URL. 4. Paste the folder URL in the Flow Builder action and click **Done**. 8. Connect the elements and click **Save**. 9. To send a message alerting everyone that a document was created, drag a new action onto the canvas. 10. Select **Quip**. 11. Enter Send Message in Document as the Quip action. 12. Name the action Notify Everyone. To auto-create the API name, press **Tab**. ![Send Message in Document action](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_flow_new_message_in_doc_action.png) 13. For the Document URL, enter {!NewDocumentURL}. 14. Enter a custom message. To make sure that everyone gets notified, include @everyone. 15. Click **Done**. 16. Connect the last action. Click **Save As** and then **Activate.** ![Final canvas layout with everything connected](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_flow_final_canvas.png) ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_example.png) Example [![Watch Video Demo](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/play_btn.png) Watch an Account Plan Automation Demo (English only)](https://salesforce.vidyard.com/watch/NzZb6RFrBmdD8yPpcPM5bH) Your flows and process are ready to go! To see them in action, go to an Opportunity page and change the stage to Proposal/Quote. # Automate Exporting a Quip Document to PDF Use Flow Builder to export a Quip document to PDF anytime the record associated with the document is updated. ### Required Editions
Available in: Lightning Experience
User Permissions Needed
To create or change custom fields: Customize Application
To open, edit, or create a flow in Flow Builder: Manage Flow
1. From Setup, create a custom field labeled Generate\_PDF for the object you want to export a Quip document from. For example, to export a Quip document to PDF from the Account object, click **Objects and Fields** | **Object Manager** | **Account** | **Fields & Relationships** | **New**, and follow the steps to create the field. The field name is autopopulated as Generate\_PDF\_\_c. 2. Open Flow Builder. From Setup, you can type Flows in the Quick Find box, select **Flows**, and then click **New Flow**. 3. In the New Flow dialog box, select **Record-Triggered Flow**, and then click **Create**. ![New Flow dialog box with Record-Triggered Flow selected](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_flow_builder_export_to_pdf.png) 4. Fill in the fields using the following values, and then click **Done**. | Field | Description | | --- | --- | | Object | Object that you want to export the PDF from, for example, Account. | | Trigger the Flow When | A record is updated | | Condition Requirements | All Conditions Are Met (AND) | | Field | Generate\_PDF\_\_c | | Operator | Equals | | Value | True | | When to Run the Flow for Updated Records | Every time a record is updated and meets the condition requirements | | Optimize the Flow for | Actions and Related Records | 5. In the Flow Builder canvas, add the **Export Quip Document to PDF** action, and connect the start of the flow to the action. 6. Click **Save**. 7. Activate the flow. The next time an Account record associated with the Account Plan is updated, a new Competitive Analysis section appears in the Account Plan. # Automate Multi-Factor Authentication with Salesforce Authenticator Authenticator can automatically approve multi-factor authentication (MFA) requests. Automation relies on several conditions, including your device and browser information, your location, and the service that you’re logging into. When all factors of an incoming request match a request that was approved three times, Authenticator automatically verifies the activity and approves it. ### Required Editions
Salesforce Authenticator setup available in: both Salesforce Classic and Lightning Experience
Multi-factor authentication with Salesforce Authenticator available in: all editions
The automation feature is enabled only if you have at least one Salesforce ecosystem account connected to the app. These accounts make up the Salesforce ecosystem. - Salesforce.com - Commerce Cloud - Heroku - Sales Cloud - Marketing Cloud - MuleSoft - Quip - Tableau ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note The automation feature is available only when your Salesforce admin enables it. To use the app as a verification method for an MFA login requirement, first [connect it to your Salesforce account](https://help.salesforce.com/articleView?id=xcloud.salesforce_authenticator_add_account.htm&language=en_US). You’re prompted to allow location services when you first connect a Salesforce Ecosystem account or when restoring accounts that include a Salesforce Ecosystem account. Automated verification works best when Salesforce Authenticator always has access to your precise location and you permit it to run in the background. Your mobile device’s location data doesn’t leave the app. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note During periods of extremely high traffic, automated approvals and push notifications may be temporarily unavailable in the Authenticator app. If your activity isn’t automated, and you don’t receive a push notification, you can verify your identity with [TOTP codes instead](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_authenticator_notifications_unavailable.htm&release=264.0.0&type=5 "If your mobile device doesn’t have a data connection or if push notifications from Salesforce Authenticator aren’t working, you can still log in with multi factor authentication (MFA). Simply enter a time-based one-time password (TOTP) code from the app to verify your identity. Salesforce Authenticator automatically generates TOTP codes for each of your connected accounts, even when push notifications are unavailable."). To automate a request in Salesforce Authenticator, approve the request three times and leave automation enabled. The Einstein icon is blue when it is enabled ![The blue Einstein icon indicates automation is enabled.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/salesforce_authenticator_einstein_icon_blue.png) and gray when disabled ![The gray Einstein icon indicates automation is disabled.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/salesforce_authenticator_einstein_icon_gray.png). 1. Respond to a request notification by opening the app on your mobile device. The app shows you five factors describing the request. | Factor | Description | | --- | --- | | Service | The service that’s trying to verify your identity, such as your Salesforce org. | | Username | Your username for the account. You can have multiple accounts with a single service. | | Action | The action that requires identity verification, such as logging in to your account. | | Location | Your approximate location at the time of the request, such as your home or office. | | Client | Information about your device and the browser or app that you’re using to access your account. | 2. If you trust all the factors shown, leave the Einstein icon enabled. 3. Tap **Approve**. In Salesforce, you’re logged in or granted access to the desired resource. After you approve the request three times with the same five factors, the app automatically verifies the activity without prompting you for approval. If all factors of a request match one of your previous requests except the client, save the request with a new client: - On the first notification, manually approve the request. - On the second notification, switch on **New recurring client detected. Automate future requests from this client?** and approve the request again. The detected client of your incoming requests can change based on your web browser configuration. Using private browsing modes, using virtual desktop infrastructure (VDI), and switching between browser applications can inhibit automation performance. Your Salesforce admin sets automation policies for the service that you’re accessing. If the service doesn’t allow automation for certain actions, Authenticator can’t automate request approvals for those actions. Contact your Salesforce admin to learn which types of requests are restricted from automation. #### See Also - [Optimize and Troubleshoot Automation in Salesforce Authenticator](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_authenticator_automation_troubleshoot.htm&release=264.0.0&type=5 "If Salesforce Authenticator isn’t automating your activity as expected, review our troubleshooting suggestions.") # Automate Pricing Proposals with Flow Builder Save time manually creating and filling out Pricing Proposals with templates in Flow Builder. Use Process Builder and Flow Builder to automatically add a Pricing Proposal template to an Opportunity and generate an auto-populated proposal when the Opportunity stage is set to Proposal/Quote. When the Opportunity is set to Closed/Won, export the proposal to a PDF and attach it to the Opportunity for record keeping. ### Required Editions
Available in: Lightning Experience
## Set Up the Quip Document Component Set up the Quip Document component on the Opportunity page layout. Create a Pricing Proposal custom URL field to store Pricing Proposals created from your template. ### Required Editions
Available in: Lightning Experience
1. Navigate to an Opportunity record in Lightning Experience. 2. Click the gear icon, and select **Edit Page** to go to the Lightning App Builder. 3. Create a new tab called Pricing Proposal. 4. In the left pane, select **Quip Document** and drag it to your new tab. ![Quip Document component in Lightning App Builder](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_doc_component_pricing_proposal.png) 5. Select **One template for each record**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note One template for each record lets you add a template via Flow Builder or lets your users manually add a template. To use Flow Builder only, select **Different Docs for each record**. 6. Click **![Edit icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/button_edit_pencil.png).** You can either paste your Pricing Proposal template URL or select a template from the Template Library. 7. Click **Next** and validate the template. The validation checks that you have access to the document, that link sharing is turned on, that the document is marked as a template, and that it isn’t a slide. 8. To create a custom URL field to store the new document URLs, select **Create a new field**. 9. Enter Pricing Proposal as the field label and Pricing\_Proposal field name. You can make changes later from the Object Manager. ![Create a Custom Field modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_custom_url_field_modal_228.png) 10. Save and activate the page. To add your Pricing Proposal template to the Quip Document component and to automate Pricing Proposal creation, create actions in Flow Builder and Process Builder. ## Create a Pricing Proposal Template Use Flow Builder to add your Pricing Proposal template to the Opportunity and to automatically populate Pricing Proposals created from it. ### Required Editions
Available in: Lightning Experience
1. From the Quick Find box in Setup, enter Flows. 2. Click **New Flow**. 3. Select **Autolaunched Flow** and click **Next**. Flow Builder displays the flow in the Auto-Layout flow layout. You can access Interactions, Logic, and Data via the plus icon. Process Builder later launches the flow when an Opportunity stage is changed. 4. Drag the Action element onto the canvas. 5. Select **Quip**. 6. Enter Copy Quip Document as the Quip action. 7. Name the action Create Pricing Proposal from Template. To auto-create the API name, press **Tab**. ![New Action modal with Document URL and Source Record ID highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_new_action_pricing_proposal.png) 8. Enter the Document URL for the Pricing Proposal. 9. Include the Source Record ID. Under Source Record ID, click **\+ New Resource**. 10. Select **Variable** as the Resource Type. 11. Enter the API name OpportunityRecord. ![New Resource modal with fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_new_variable_pricing_proposal.png) 12. Select **Record** as the Data Type. 13. Select **Opportunity** as the Object. 14. Select **Available for input** and click **Done**. 15. When you get the “Data type of the resource you entered isn’t compatible” error for the Source Record ID, enter .id after OpportunityRecord. Select **Opportunity ID**. ![Opportunity ID highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_flow_opportunityrecordid.png) 16. Under Advanced, select **Manually assign variables**. Under Store Output Values, click **Document Link** and select **\+ New Resource**. ![Manually assign variables checkbox](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_manually_assign_pricing_proposal.png) 17. Select **Variable** as the Resource Type. ![New Resource modal with Resource Type, API Name, and Data Type highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_new_resource.png) 18. Enter NewDocumentURL as the API Name. 19. Select **Text** as the Data Type. Click **Done**, then **Done**. 20. Drag the Update Records onto the canvas. 21. Name the action Update Opportunity Record. To auto-create the API name, press **Tab**. ![Update Records modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_new_update_record_pricing_proposal.png) 22. Select **Specify conditions to identify records, and set fields individually**. 23. Enter Opportunity as the Object. 24. Under Filter Opportunity Records, enter Id as the Field, select **Equals**, and enter {!OpportunityRecord.Id}. 25. Under Set Field Values for the Opportunity Records, enter Pricing\_Proposal\_\_c as the Field and {!NewDocumentURL} as the Value. Click **Done**. 26. Connect the elements and click **Save**. ![flow canvas with Start, Create Pricing Proposal, and Update Records](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_flow_pricing_proposal_layout.png) 27. Name the flow. For this example, we use the name Create Pricing Proposal from Template. To auto-create the API name, press **Tab**. Click **Save**. 28. Click **Activate**. ## Trigger the Process Create a process that launches the Pricing Proposal flow when an Opportunity stage is changed to Proposal/Quote. When a user updates the Opportunity stage to Proposal/Quote, a Pricing Proposal is created from the attached template and autopopulated based on the Opportunity’s data. ### Required Editions
Available in: Lightning Experience
1. From the Quick Find box in Setup, enter Process. Select **Process Builder**. 2. Click **New**. 3. Name the process Create Pricing Proposal. To auto-create the API name, press **Tab**. 4. Select **A record changes** as the process trigger. Click **Save**. 5. Click **\+ Add Object** and select **Opportunity** as the object type. ![Opportunity object type and "when a record is created or edited" highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_process_add_object.png) 6. Start the process **when a record is created or edited**. Click **Save**. 7. Click **\+ Add Criteria**. ![Define Criteria with Opportunity Stage Change highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_process_define_criteria.png) 8. Name the criteria Opportunity Stage Change. 9. To determine when to trigger the process, select **Conditions are met**. 10. Set the conditions: | Field | Operator | Type | Value | | --- | --- | --- | --- | | \[Opportunity\]Stage | Equals | Picklist | Proposal/Quote | 11. Click **\+ Add Row** and set conditions: | Field | Operator | Type | Value | | --- | --- | --- | --- | | \[Opportunity\]Stage | Is changed | Boolean | True | 12. Under Conditions, click **All of the conditions are met (AND)**. 13. Click **Save**. 14. Click **\+ Add Action**. 15. Select **Flows** as the Action Type. 16. Name the action Call Flow to Create Document from Template. 17. Select the flow **Create\_Pricing\_Proposal\_from\_Template**. 18. Set the flow variables, where \[Opportunity\] is the Opportunity record that started the process: | Flow Variable | Type | Value | | --- | --- | --- | | OpportunityRecord | Field Reference | \[Opportunity\] | 19. Click **Save** and then **Activate**. When your users update an Opportunity stage to Proposal/Quote, a Pricing Proposal is automatically created and data from the opportunity is autopopulated. The created document is then stored in the Pricing Proposal field added to the Opportunity layout. ## Create a Pricing Proposal Checkbox To let your users mark when the Pricing Proposal is completed and ready for the customer, add a checkbox field to the Opportunity layout. After your users select it, it launches the flow to export the Pricing Proposal to a PDF and attaches it to the Opportunity. ### Required Editions
Available in: Lightning Experience
1. From Salesforce Setup, go to the Object Manager, and select **Opportunity**. 2. Select **Fields & Relationships**, and then **New**. 3. Select **Checkbox**, and then **Next**. 4. Enter Pricing Proposal Complete, and then **Next**. 5. Select the profiles that can edit the field, and click **Next**. 6. Select the page layouts where you want the field to appear. Here, we deselected all layouts except the Opportunity layout. 7. Save the action. ## Export to PDF and Attach to the Opportunity After a user marks the Pricing Proposal as completed, export the document to a PDF to keep a record of it and attach it to the Opportunity. Post a message in Chatter to let the user know when the PDF was attached. ### Required Editions
Available in: Lightning Experience
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note Beginning in Summer ’26, Chatter is turned off by default in all new orgs. For any features in these orgs that require access to Chatter functionality or the Chatter APIs, turn on Chatter by going to **Setup** | **Chatter Settings** and selecting **Enable**. For details, see [Chatter Is Turned Off by Default in New Orgs Beginning in Summer ’26](https://help.salesforce.com/s/articleView?id=experience.collab_chatter_default_off.htm&type=5&language=en_US). 1. From the Quick Find box in Setup, enter Flows. 2. Click **New Flow**. 3. Select **Record-Triggered Flow** and click **Next**. Flow Builder displays the flow in the Auto-Layout flow layout. You can access Interactions, Logic, and Data via the plus icon. Process Builder later launches the flow when an Opportunity stage is changed. 4. Under Trigger, click **Edit**. Set the flow to trigger when **a record is created or updated**, and run the flow **after the record is saved**. Click **Done**. 5. Click **Choose Object**. ![Choose Object modal with conditions highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_export_to_pdf_conditions_pricing_proposal.png) 6. Select **Opportunity** as the object and set the conditions for when to launch the flow.
FieldOperatorValue
Pricing_Proposal__cIs NullFalse
Pricing_Proposal_Complete__cEqualsTrue
StageNameEqualsProposal/Quote
7. Set the flow to run **only when a record is updated to meet the condition requirements**, and click **Done**. 8. Drag the Action element onto the canvas. 9. Select **Quip**. 10. Enter Export Quip Document to PDF as the Quip action. 11. Name the action Export to PDF. 12. For the Source Document URL, enter {!$Record.Pricing\_Proposal\_\_c}. 13. Include the Salesforce Org ID. [Where do I find my org Id?](https://help.salesforce.com/articleView?id=000325251&type=1&mode=1&language=en_US) 14. Include the Target Record ID, and enter {!$Record.Id}. 15. Click **Done**. 16. Drag the Action element onto the canvas. 17. Enter Post to Chatter as the core action. ![Post to Chatter modal with fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_post_to_chatter_pricing_proposal.png) 18. Name the action Update Users in Chatter, and enter a custom message. Here, we say Pricing Proposal is complete. A PDF version is being generated and will be attached within a few minutes. 19. For the Target Name or ID, enter {!$Record.Id}. 20. Click **Done**. 21. Connect the elements, and click **Save**. Name the flow Export PDF to Opportunity, and save the action. 22. Activate the flow. ![Final Export to PDF canvas](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_canvas_export_to_pdf_pricing_proposal.png) ![Pricing Proposal Complete checkbox](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_pricing_proposal_complete.png) Your flows and process are ready to go! To see them in action, go to an Opportunity page and change the stage to Proposal/Quote. A Pricing Proposal document is automatically created from the template. After the user fills it out and confirms the details with their customer, they can mark the Pricing Proposal as complete. Flow then posts a message in Chatter to let the user a PDF is being generated, and the PDF is attached to the opportunity for recordkeeping. It can take a couple of minutes for the PDF to be added to the record. You can find it in the record’s Notes and Attachments component or in its Files component. # Automate Promotions Data Sync in Marketing Cloud Engagement for Loyalty Management Global Promotions Management relies on the Marketing Cloud Connect managed package to send data from the Global Promotions Management org to a Marketing Cloud Engagement instance. The marketing journeys that are created in the connected Engagement org for activated promotions use the Global Promotions Management data to send out promotion launch emails. So install and set up Marketing Cloud Connect in the Global Promotions Management org and in the connected Engagement instance. After setting up Marketing Cloud Connect, create Synchronized Data Sources for Global Promotions Management objects in the Engagement instance. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
When you set up Marketing Cloud Connect managed package to use Global Promotions Management, you must perform some additional steps. 1. [Install and set up Marketing Cloud Connect package](https://help.salesforce.com/s/articleView?id=mktg.global_promotions_management_setup_mc_data_sync_package.htm&language=en_US&type=5). 2. [Create a permission set to provide Marketing Cloud Connect API users access to Global Promotions Management](https://help.salesforce.com/s/articleView?id=mktg.global_promotions_management_setup_mc_data_sync_object_permission.htm&language=en_US&type=5). 3. Edit the custom permission set to provide access to these Loyalty Management objects. - Game Definition - Internal Organization Unit - Loyalty Program - Loyalty Program Currency - Loyalty Program Member - Loyalty Tier - Loyalty Tier Group 4. [Create synchronized data sources to access Global Promotions Management Data in Marketing Cloud Engagement](https://help.salesforce.com/s/articleView?id=mktg.global_promotions_management_setup_mc_data_sync_extension.htm&language=en_US&type=5). 5. In addition to the Global Promotions Management objects, create synchronized data sources for these Loyalty Management objects. - Internal Organization Unit - Loyalty Program - Loyalty Program Currency - Loyalty Program Member - Loyalty Tier - Loyalty Tier Group # Automate Rebate Payout Calculation Processes with Flows Automate the end-to-end rebate calculation lifecycle on Data Cloud using the configurable, predefined orchestration flow, Manage Rebate Payout and Accrual Calculations. You can clone this flow, customize it to meet your business needs, and schedule it to run at regular intervals. Each run handles continuous data aggregation and incremental payout updates as new transactions are ingested. When a period's Payout Calculation Date is reached, post-calculation actions finalize values, update records across Program Rebate Type Payout Source, Program Rebate Type Payout, and Rebate Program Member Payout, and set the payout and period statuses to Calculated and Closed. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
## Prerequisites Before using the orchestration flow, activate the Rebate Calculations Post Processing DPE definition: - From **Setup**, enter Data Processing Engine in the Quick Find box and select it. - Select **Rebate Calculations Post Processing** and click **Save As**. - Enter a name (retaining the default API name Rebate\_Calculations\_Post\_Processing is recommended). If you change the API name, update the BatchCalcJobDefinitionName variable in the Run Rebate Post Payout Actions flow with the new API name. - Save and activate the definition. ## Manage and Customize Flow Templates Always clone the out-of-the-box orchestration flow template (Manage Rebate Payout and Accrual Calculations) rather than running the predefined flow directly. This ensures future release updates to the template will not overwrite or disrupt active calculation runs. - Clone and Customize: Clone the provided flow template, customize actions or Data Processing Engine definitions as needed, and activate it. (Alternatively, build a flow from scratch using required flow actions and DPE definitions). - Schedule: Schedule your activated flow to run at regular intervals to process all active batch transforms continuously at scale. ## Additional Learning Resources for Flow Builder Check out these resources to learn how to best use Flow Builder. | Resource | Information Available | | --- | --- | | [Flow Builder](https://help.salesforce.com/s/articleView?id=platform.flow_builder.htm&language=en_US&type=5) | A topic that helps you get familiar with the Flow Builder’s requirements and user interface. | | [Flow Concepts](https://help.salesforce.com/s/articleView?id=sf.flow_concepts.htm&language=en_US&type=5) | Information about what a flow is made of and how it’s different from workflow rules. | | [Build a Simple Flow](https://trailhead.salesforce.com/en/content/learn/projects/build-a-simple-flow?trail_id=automate_business_processes) | A Trailhead project that helps you use the Flow Builder. | | [Run a Data Processing Engine Definition in Flows](https://help.salesforce.com/s/articleView?id=ind.dpe_run.htm&language=en_US&type=5) | A task topic on how to run data processing engine definitions with flows. | | [Flow Best Practices](https://help.salesforce.com/s/articleView?id=platform.flow_prep_bestpractices.htm&language=en_US&type=5) | Information about how to improve your experience in building and managing flows. | | [Troubleshoot Flows](https://help.salesforce.com/s/articleView?id=platform.flow_troubleshoot_email.htm&language=en_US&type=5) | Information about how to resolve issues with flows. | # Automate Rebate Payout Calculation Processes with Flows and Batch Management Automate the rebate calculation process with configurable predefined flows. Schedule the flows at regular intervals. Use predefined flow actions to customize the rebate process as required. Configure an end-to-end orchestration flow to manage the rebate lifecycle. Use Batch Management capabilities to process a large number of filtered and aggregated transaction records in manageable chunks. - **[Flow Templates with Rebate Management](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_flow_calculate_rebate_amounts_and_payouts.htm&release=264.0.0&type=5)** Rebate Management comes with Flow templates that help orchestrate rebate calculations. You can configure and use them for your end-to-end rebate calculations and extend the templates as required. The flows trigger the data processing engine definitions to update the aggregate records, and also trigger calculation processes to update the final payout amounts. Admins can schedule the flows at regular intervals. - **[Predefined Flow Actions with Rebate Management](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_flow_actions.htm&release=264.0.0&type=5)** Use flows to automate the processes of calculating rebates for members during a payout period. The members must be active and enrolled in an active rebate program. The rebate types and associated benefits must also be active. Admins can use predefined flow actions to extend the flow templates available with Rebate Management, or while creating a flow from scratch. Find the required flow actions in the Rebates category in Flow Builder. - **[Batch Management with Rebate Management](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_custom_batch_jobs.htm&release=264.0.0&type=5)** Rebate Management flows use Batch Management capabilities to process a large number of filtered and aggregated transactions in manageable batches, and calculate rebate amounts. Two predefined batch jobs, Calculate Rebate Payout and Calculate Rebate Payout for All Periods, that are available with Rebate Management and can be used in any scheduled flow. Modify the predefined batch jobs, or create your own. # Automate Resource Assignment with Bulk Tools The scheduling tools—Get Candidates, Batch Assign, and Mass Shift Update—help planners assign the right workers where and when they're needed. ## Assign in Bulk with Mass Shift Update Define criteria to select a batch of shifts and assign workers, update shift statuses, or both. 1. Open **Shifts** in the App Launcher. 2. In either the schedule or table view, click **Mass Shift Update**. 3. Select an action. You can update shift status, assign shifts, or both. 4. Define criteria that selects which shifts to modify. Specify a date range, service territories, and job profiles. If you want to change shift status, specify which status to change and the status to update it to. You can select shifts within a 90-day timespan. We recommend that you select less than 50,000 shifts at once. It can take a few hours to assign and update status on that many shifts. 5. Click the button to start the update process. We create a Shift Scheduling Operation record that tracks progress. To learn if the update process is completed, open the Shift Scheduling Operation record. The record shows information about the process and its status, together with how many shifts were considered, how many were successfully processed, and how many failed. ## Batch Assign Workers to Shifts Save time and unlock worker capacity with Batch Assign. Assign up to 200 shifts to workers who are the best match based on your scheduling rules and objectives. 1. Open **Shifts** in the App Launcher. 2. Select a listview from the listview dropdown, and select **Table View**. 3. Select up to three months of shifts to batch assign at one time. If you want to assign more than 200 shifts, use Mass Shift Update. 4. Click **Assign**, then click **Assign Shifts**. ## Assign a Worker with Get Candidates To quickly create and assign an overtime shift or swap shift assignments when a worker calls in sick, use Get Candidates. Get Candidates helps you quickly find a candidate who is best-matched to work on an individual shift. 1. Open **Shifts** in the App Launcher. 2. Select a list view from the list view dropdown. 3. Set the display to the **Schedule** view. 4. Hover over the shift you'd like to assign, and click **Get Candidates**. We sort the list of candidates according to how well they meet your service objectives. When you have multiple objectives defined, grades for each objective are weighted equally. If a candidate has a grade of None, it means that your service objectives aren't relevant. For example, the candidate's grade is None when they don't have a Service Resource Preference defined and you have a preference objective set. Or if you have an objective that balances shift assignments, None means that all candidates have the same number of shifts assigned. 5. After reviewing each candidate's score, select the worker you'd like to assign the shift to. 6. Click **Submit**. ## Resolve Scheduling Friction by Troubleshooting Logic Learn what to check when you see unexpected scheduling results—for example, if shifts remain unassigned when eligible candidates are available. First, make sure you completed the steps in Preparing for Shift Scheduling. Then consider these possibilities when a worker isn't assigned to a shift as you expect. - Verify that the worker has an associated, active service resource. Worker users require the Workforce Engagement Agent permission set. - Check the service territory associated with the shift. The Match Territory rule considers only those workers whose service territory membership matches the shift's service territory. Review Service Territory Member records in the related list on the service territory or the service resource. When you assign service resources to one or more service territories, we create these Service Territory Member records. The records represent service resources who are available to work in that territory and when. If the record doesn't reference operating hours, scheduling uses the service territory's operating hours to define when a worker is available to work. - (Workforce Management only) If you've defined a Match Queue rule, verify that the worker user for the service resource is a member of all queues mapped to the shift's job profile. When you set up scheduling, you map each job profile to one or more queues. Scheduling looks at the shift's job profile and finds worker users who are members of all queues that are mapped to the job profile. - If you've defined a Match Skill rule, check that the service resource has all the same skills as the skill requirements on the shift's job profile. Check that end dates on skills haven't yet occurred. Scheduling doesn't consider skill levels. If you want to schedule using skill levels, create a separate skill for each level. - Check if you have an Availability rule. An Availability rule eliminates candidates who have other shift assignments, who are absent, or whose operating hours in their primary or secondary territories don't cover the shift hours. If a service resource isn't a candidate as you'd expect, verify that the worker doesn't have other assigned shifts or absences at the time of the shift. Also review the operating hours, service territory, and service territory membership configurations. - Each service resource requires a primary service territory membership. Check if the service territory membership covers the entire duration of the shift. - If a worker has operating hours that differ from your location's hours, define operating hours on their service resource record. Operating hours on a service territory membership override what's defined on the service territory. - Check that the shift duration is fully within the operating hours on the service territory or service territory membership. Make sure that time zone translations align. To troubleshoot, widen the resource's operating hours temporarily. - If you've defined a Work Limit or Limit Non-Standard Shifts scheduling rule, check that all service resource or service territory records have a valid scheduling constraint. A value of zero can cause unreliable results. If a constraint doesn't apply, set the limit as null or to an unreachable number. A constraint on a service resource overrides what's defined on a service territory. #### See Also - [Create Shifts in Bulk from a Capacity Plan](https://help.salesforce.com/s/articleView?id=xcloud.shifts_create_shifts_bulk.htm&release=264.0.0&type=5 "In Workforce Management, you can add shifts that your short-term capacity plan predicts as necessary. You can schedule shifts quickly and accurately when you create them directly from your plan. No more cloning shifts one-by-one and tracking how many you still need.") # Automate Testing and DevOps Standardize and reduce the risk of human error through automated testing and by adopting DevOps practices. Everyone makes mistakes—it’s what makes us human. So it isn’t surprising that human error is the primary reason for availability incidents. Internally, Salesforce minimizes the chance of human error by using standardized and automated change processes. You can adopt similar practices using automated testing and DevOps processes, especially if you have business-critical use cases that require your org to be highly available. - Run automated tests. Automated testing is a reliable and economic way to test development and quickly find issues that could impact your users. Automated tests can run repeatedly so that developers can continuously test new builds and catch issues before they're released to production. - If possible, adopt DevOps practices, including continuous integration and continuous delivery (CI/CD) process, to standardize your deployment process and reduce the risk of human error during production deployment. - Adhere to best practices. CI/CD, when combined with automated testing and other practices such as code quality scans and code reviews, requires your developers to follow specific best practices. Adherence to best practices further reduces the chances of system-breaking bugs or inefficient code causing an availability incident. #### See Also - [_Salesforce Architects_: Application Lifecycle Management](https://architect.salesforce.com/well-architected/adaptable/resilient#Application_Lifecycle_Management) - [_Salesforce Developers_: Salesforce DevOps](https://developer.salesforce.com/developer-centers/devops) - [_Trailhead_: Package Development Model](https://trailhead.salesforce.com/content/learn/modules/sfdx_dev_model) # Automate Your Business Routines Save time by automating your business practices. Rules, Process Builder, and Flows turn your repetitive workload into automated actions that do work for you. Choosing the right tool depends on your goal. Assignment, Escalation, and Auto-Response Rules are pre-defined. These rules work with the lead or case records. Specifically: - Lead assignment rules automatically route a new lead to the right user. - Web-to-lead and case auto-response rules automate your first reply to a lead or customer. - Case escalation rules let you automatically route a case to the right user. If you want to do something outside the narrow scope of rules, check out Process Builder. A Process is a simple if/then statement: If certain criteria are met, then take an action. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-essentials-264-0-0-production-enus/e0001bec-929a-481e-9d65-d13539e5cfe8/images/icon_example.png) Example **If** the VIP field is checked on a Contact record, **then** send an email to all VIP contacts. Use Process Builder to automate record creation, record updates, emails, and more. Flow Builder is your backup plan when you want to do something Process Builder can’t. For example, you want to automate record deletion. Or you want to base your criteria on more than one kind of record. Flows help you automate such edge cases. Our Support Coaches compiled a list of recipes for common business processes you can automate. - **[Create a Round Robin Lead Assignment Rule](https://help.salesforce.com/s/articleView?id=xcloud.essentials_round_robin_lead_assignment.htm&release=264.0.0&type=5)** Keep your team's workload even by auto-assigning new leads to each user. - **[Reach Out to Customers After Winning an Opportunity](https://help.salesforce.com/s/articleView?id=xcloud.essentials_task_when_won.htm&release=264.0.0&type=5)** Our process builder recipe can automate your communication with a contact or customer from whom you won an opportunity. After winning an opportunity, you often have a reason to reach out to the contact or customer. For example, you want to thank them. Or you want to send them a survey to rate customer satisfaction. Maybe that follow-up is even an opportunity to cross-sell. - **[Remind Your Sales Team When a Renewal Comes Due](https://help.salesforce.com/s/articleView?id=xcloud.essentials_subscription_renewal_recipe.htm&release=264.0.0&type=5)** Create a Process to remind users when a customer's recurring subscription comes due. Reduce churn by nurturing your recurring revenue. - **[Allow Customers to Opt Out of Emails](https://help.salesforce.com/s/articleView?id=xcloud.Essentials_unsubscribe.htm&release=264.0.0&type=5)** Give customers the choice to opt out of marketing emails. Flow builder logs a lead or customer's unsubscribe request in Salesforce. Process Builder launches the Flow when there’s a new unsubscribe request. #### See Also - [Assignment Rules](https://help.salesforce.com/s/articleView?id=service.customize_leadrules.htm&type=5&language=en_US) - [Set Up Auto-Response Rules](https://help.salesforce.com/s/articleView?id=service.creating_auto-response_rules.htm&type=5&language=en_US) - [Set Up Escalation Rules](https://help.salesforce.com/s/articleView?id=service.rules_escalation_create.htm&type=5&language=en_US) - [Process Builder](https://help.salesforce.com/s/articleView?id=platform.process_overview.htm&type=5&language=en_US) - [Flow Builder](https://help.salesforce.com/s/articleView?id=platform.process_which_tool.htm&type=5&language=en_US) - [Choosing Which Salesforce Flow Feature to Use](https://help.salesforce.com/s/articleView?id=platform.process_which_tool.htm&type=5&language=en_US) # Automate Your Tasks with Macros A macro automates a common process so your team can help customers with fewer clicks. ## Why Do We Use Them? Macros speed up the process of getting your customers the support they need by automating repeated tasks for your team. Instead of jumping around to find the right tools, you can solve a customer issue with a single click. The Macro Builder is where you set the logic behind the magic. The left side of the page displays a canvas with a sample record for the object you selected, like a case (1). The right side of the page lets you specify the instructions and details for the macro (2). ![The macro builder with the canvas record and instructions panel highlighted.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-essentials-264-0-0-production-enus/e0001bec-929a-481e-9d65-d13539e5cfe8/essentials/images/macros_create_lex_builder.png) Set the instructions and logic that you need to get everything done in one click. You can use macros to send canned responses, escalate cases that meet certain conditions, attach a commonly-reference Knowledge article, change a case's status, and more. ![An example of a macro containing instructions for case emails.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-essentials-264-0-0-production-enus/e0001bec-929a-481e-9d65-d13539e5cfe8/essentials/images/essentials_macro_builder_email.png) ![An example of macro instructions containing logic.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-essentials-264-0-0-production-enus/e0001bec-929a-481e-9d65-d13539e5cfe8/essentials/images/macros_create_lex_builder_example_logic.png) ## Why Are They Important? By saving you and your customers time on getting support, you can focus on optimizing your service for the future. #### See Also - [Set Up and Use Macros](https://help.salesforce.com/articleView?id=macros_def.htm&language=en_US) - [Add Logic to Macros](https://help.salesforce.com/articleView?id=macros_create_lightning_add_logic.htm&language=en_US) # Automated Inventory Replenishment Process Build an inventory replenishment process that automatically replenishes product items based on their applicable inventory replenishment policies. Use a preconfigured batch job definition and create a flow to schedule and invoke the replenishment process. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
## Key Components of an Automated Replenishment Process You can build an automated inventory replenishment process by using these capabilities. - Flow: Flow Builder is a declarative tool for building complex automated workflows. Inventory Replenishment comes with a preconfigured flow called Replenish Inventory. See [Automate Tasks with Flows](https://help.salesforce.com/s/articleView?id=platform.flow.htm&language=en_US). - Batch Jobs: Batch Management helps flows process a large number of records. Inventory Replenishment comes with a preconfigured batch job definition called Replenish Inventory. [Batch Management](https://help.salesforce.com/s/articleView?id=ind.concept_batch_management.htm&language=en_US). ## Workflow of an Automated Replenishment Process An automated process periodically replenishes your inventory in batches. Here are the high-level steps in the workflow of the automated process. | stage | purpose | Implementation | | --- | --- | --- | | 1 | A schedule-triggered flow runs at regular intervals to invoke a batch job. | Create a schedule-triggered flow. | | 2 | A batch job creates batches of product items to be processed in another flow. | Use the preconfigured Replenish Inventory batch job definition or create a batch job definition. | | 3 | A flow processes one product item in a batch at a time. It identifies the product item's applicable policy, determines if the product item requires replenishment, and performs replenishment actions accordingly. | Use the preconfigured Replenish Inventory flow or create a flow. | ## Flow to Periodically Run a Replenishment Process For your automated inventory replenishment process, create a schedule-triggered flow that invokes the replenishment batch job. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note Inventory Replenishment includes a prebuilt flow named Replenish Inventory. This autolaunched flow is used internally by the batch job to process product items. Don’t modify this flow. - From Setup, go to **Flows**, and click **New Flow**. - Select **Schedule-Triggered Flow**. - Configure the **Start** element: - Set the start date and time. - Define the run frequency (for example, daily). - Add an **Action** element. - Select the **Replenish Inventory** batch job definition. - Save and activate the flow. The flow runs at scheduled intervals and invokes the batch job, which processes product items and performs replenishment based on applicable policies ## Batch Job to Process Product Items For your automated inventory replenishment process, use the preconfigured Replenish Inventory batch job definition or create a batch job definition. The preconfigured batch job processes product items in batches and invokes the Replenish Inventory autolaunched flow to perform replenishment actions. You can create a custom batch job definition to process product items based on specific criteria. When creating a batch job, configure these fields: - Process Type: Flow - Group: Inventory - Execution Process: A flow that replenishes inventory, such as Replenish Inventory - Flow Input Variable: A variable for Product Item ID - Object: Product Item Define the filter criteria for adding product items to batches. For example, you can filter product items with the Compactor D21 product to be added to batches. Track the progress and status of batch job runs by using Monitor Workflow Services in Setup. See [Monitor Your Batch Jobs](https://help.salesforce.com/s/articleView?id=ind.task_monitor_batches.htm&&language=en_US) . ## Flow to Replenish Inventory Inventory Replenishment includes a prebuilt autolaunched flow named **Replenish Inventory**. This flow is used internally by the batch job to process product items. Don't modify this flow. The **Replenish Inventory** flow evaluates each product item based on its applicable inventory replenishment policy. It uses the **Replenish Inventory Using Policy** invocable action to determine whether replenishment is required. The flow evaluates inventory based on the Replenishment Quantity Basis field in the policy, which determines whether to use Quantity On Hand or Quantity Available for replenishment decisions. When you configure a replenishment policy, the Replenishment Quantity Formula must reference the quantity field that matches your Replenishment Quantity Basis: Basis: Quantity On Hand MaximumInventoryQuantity - ProductItem.QuantityOnHand Use this basis if you want replenishment to be based on total physical stock regardless of usability. Basis: Quantity Available MaximumInventoryQuantity - ProductItem.QuantityAvailable Use this basis if you want replenishment to automatically account for unusable stock, such as damaged or expired inventory, without adjusting your formula. Quantity Available excludes both unusable and allocated quantities. If the evaluated quantity is less than or equal to the minimum inventory quantity defined in the policy, the flow performs the configured replenishment action, such as creating a product request. The flow also determines the replenishment quantity and source location based on the policy. To process a product item individually for testing or troubleshooting, you can run the **Replenish Inventory** flow. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note Ensure that existing product requests for the same product and replenishment policy are closed before running the replenishment process. Otherwise, the system updates the existing product request instead of creating a new one. # Automated Management of Vouchers Issued for Transactions Loyalty program members are issued vouchers when they complete a purchase or nonpurchase activities. For purchase-related activities, there are scenarios where members aren't eligible to redeem an already issued voucher. For example, members aren't eligible to use a voucher that was issued for an order that is canceled. Loyalty Management automatically takes care of changing the status of vouchers status based on the status of their related transaction journals. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
| Business Scenario | Action Taken | | --- | --- | | A member cancels an order for which they received a voucher | After the order's transaction journal is canceled, the vouchers issued for the transaction journal are moved to the Canceled status. | | A member received a voucher for order A and reserved the voucher for another cart, but the member canceled order A before the voucher moved from the reserved to the redeemed status | The voucher status is changed to Canceled. | # Automated Testing with UTAM for Omnistudio Omnistudio now supports automated UI testing for Omniscripts and Flexcards by using the UI Test Automation Model (UTAM) framework. Automated testing is crucial for ensuring the stability and integrity of Omnistudio deployments. UTAM is a modern, open-source framework that helps you validate the entire customer experience. It validates by simulating UI interaction to test user actions (example, clicks, input), asserting correct element values, verifying expected navigation behaviors (example, moving between steps), and confirming accurate visual states (example, error messages, visibility). This test ensures customer journeys function correctly after deployments or code changes. UTAM uses the Page Object Model (POM) pattern to abstract away underlying UI changes, creating stable, resilient tests that remain durable across Salesforce releases. This approach provides reliable, end-to-end validation of the customer experience. See [UTAM](https://utam.dev/guide/introduction) and [Salesforce Page Objects](https://www.npmjs.com/package/salesforce-pageobjects). ## Benefits of UTAM Testing UTAM testing provides several key advantages for quality and stability: - Durable and reliable UI testing: Your tests remain stable and reliable even when platform updates change the component structure. UTAM achieves this durability through Document Object Model (DOM) abstraction by separating the test logic from the UI code. - Comprehensive user-journey validation: Tests Omniscripts and Flexcards end-to-end by simulating real user actions (form entries, button clicks, data checks, and conditional steps) and navigation. - Reusable and maintainable tests: Uses the Page Object Model (POM) to organize UI test code into reusable Page Objects (POs), making tests easier to read, build, and maintain. ## Key UTAM Testing Concepts These concepts explain the underlying architecture that ensures your tests remain stable during any Salesforce UI changes: - Page Object Model (POM): POM is the main design pattern that UTAM uses. It separates the test logic (what you test) from the UI structure (where the element is present in the code). - Abstraction and resilience: UTAM achieves test stability by abstracting the underlying DOM structure. Even if Salesforce modifies the HTML or CSS of an Omniscript or a Flexcard element, your test script remains stable and functions as expected. - Page Objects (POs): POs are the central modules that represent specific UI components, such as an `OmniscriptStep` or an input field. The developer calls the stable methods defined in the POs . For example, `setValue()`, `click()`. - Test Scripting: The developer writes code that calls the PO methods in a sequence, followed by an assertion to verify the outcomes. For example, verifying field values or error messages. - **[UTAM Testing Workflow](https://help.salesforce.com/s/articleView?id=xcloud.os_utam_workflow.htm&release=264.0.0&type=5)** The UI Test Automation Model (UTAM) testing workflow focuses on preparing the testing environment, writing UTAM Page Objects (POs), and running end-to-end tests for UI components. - **[How to Write End-to-End Tests with UTAM for Flexcards](https://help.salesforce.com/s/articleView?id=xcloud.os_utam_how_to_write_tests_flexcard.htm&release=264.0.0&type=5)** To fully automate and stabilize your guided user flows, structure and build end-to-end tests for Flexcards by using UTAM's commands. - **[How to Write End-to-End Tests with UTAM for Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_utam_how_to_write_tests_omniscript.htm&release=264.0.0&type=5)** To fully automate and stabilize your guided user flows, structure and build end-to-end tests for Omniscripts by using UTAM's commands. # Automated Voucher Expiration The status of unredeemed or partially redeemed vouchers changes to Expired after the vouchers pass the expiration date. Loyalty Management automatically changes the status of up to 2 million vouchers to Expired hourly. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
During a one hour period when more than 2 million vouchers must be expired, the status of only 2 million vouchers changes to Expired. The status of the remaining vouchers isn’t changed but these vouchers can’t be redeemed because the expiration date has passed. Developers in your organization can create a custom batch Apex job to change the status of vouchers whose status hasn’t changed to Expired automatically after their expiration date. ## Use Batch Apex to Expire Vouchers The batch Apex job to expire vouchers can be run either on demand or per a custom schedule. Here’s a sample batch Apex job to change the status of Voucher records that are past their expiration date to Expired: ``` global inherited sharing class ExpireVouchersBatchScheduler implements Schedulable,Database.Batchable, Database.Stateful { String expiredVoucherRecordsQuery; public Integer vouchersToBeExpired = 0; public Boolean hasInvalidAccessError = false; String ERROR_INVALID_ACCESS = '\nERROR : The user does not have permission to update Voucher object and/or Status field of Voucher object'; global Database.QueryLocator start(Database.BatchableContext BC) { return Database.getQueryLocator(this.expiredVoucherRecordsQuery); } global void execute(Database.BatchableContext BC, List expiredVoucherRecords) { vouchersToBeExpired += expiredVoucherRecords.size(); //Set 'Expired' Status all queried expired Vouchers for (Voucher expiredVoucher : expiredVoucherRecords) { System.debug(String.valueOf(expiredVoucher)); expiredVoucher.Status = 'Expired'; } //Check for Accessibility && Also check whether object is updatetable or not DescribeSObjectResult describeVoucherObject = Voucher.sObjectType.getDescribe(); DescribeFieldResult describeVoucherStatusField = Schema.SObjectType.Voucher.fields.Status; if(describeVoucherObject.isUpdateable() && describeVoucherStatusField.isUpdateable()) { update expiredVoucherRecords; } else { this.hasInvalidAccessError = true; throw new VoucherExpirationBatchApexException(this.ERROR_INVALID_ACCESS); } } global void finish(Database.BatchableContext BC) { // Query the AsyncApexJob object to retrieve the current job's information. AsyncApexJob job = [ SELECT Id, Status, NumberOfErrors, JobItemsProcessed, TotalJobItems, CreatedBy.Email FROM AsyncApexJob WHERE Id = :BC.getJobId() WITH USER_MODE]; Messaging.SingleEmailMessage mail = new Messaging.SingleEmailMessage(); String[] toAddresses = new List{ job.CreatedBy.Email }; mail.setToAddresses(toAddresses); mail.setSenderDisplayName('Voucher Expiration Batch Processing Status'); mail.setSubject('Voucher Expiration Apex Batch Process Completed'); String mailTextBody = 'Batch Process has completed.' + '\nVouchers to be Expired : ' + vouchersToBeExpired + '\nThe batch Apex job processed ' + job.TotalJobItems + ' batches with ' + job.NumberOfErrors + ' batch failures.'; if ( hasInvalidAccessError) { mailTextBody += this.ERROR_INVALID_ACCESS; } mail.setPlainTextBody(mailTextBody); Messaging.sendEmail(new List{ mail }); } global void execute(SchedulableContext sc) { //Query for all Expired Voucher this.expiredVoucherRecordsQuery = 'SELECT Id, Status, ExpirationDate ' + 'FROM Voucher ' + 'WHERE ExpirationDate < TODAY AND Status = \'Issued\' WITH USER_MODE'; //Parameters of ExecuteBatch(context,BatchSize) Database.executeBatch(this); } //Custom Exception class to show execution errors of Apex Batch Scheduling for Voucher Expiration private class VoucherExpirationBatchApexException extends Exception {} } ``` ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip To expire a larger volume of vouchers hourly, customize the batch Apex job. # Automatic Custom Host Provisioning You can now push custom login host settings to your mobile users. This spares your mobile users from having to manually type long URLs for login hosts—typically a frustrating and error-prone activity. You can configure key-value pair assignments through your MDM to define multiple custom login hosts for your mobile users. ## MDM Settings for Automatic Custom Host Provisioning To push custom login host configurations to your mobile users, you configure key-value pair assignments through your MDM suite. Here are the supported keys:
Key Data Type Platform Description
AppServiceHosts String, String Array Android, iOS

Login hosts. The first value in the array is the default host.

Android: Requires https:// in the host URL.

iOS: Doesn't require https:// in the host URL.

AppService​HostLabels String, String Array Android, iOS

Labels for the hosts.

The number of AppServiceHostLabels entries must match the number of AppServiceHosts entries.

OnlyShow​AuthorizedHosts Boolean Android, iOS If true, prevents users from modifying the list of hosts that Salesforce can connect to.
# Automatic Generation of Voucher Codes You can configure a voucher definition to ensure that codes of the vouchers issued by using the voucher definition are automatically generated. The codes that are automatically generated contain a prefix and a suffix that you specify. The codes also consist of alphanumeric characters that make the voucher code unique and you can specify the length of the alphanumeric characters in the voucher definition. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
Before you configure voucher definitions to automatically generate codes for issued vouchers, enable [Generate Codes for Vouchers](https://help.salesforce.com/s/articleView?id=xcloud.voucher_code_generation_setting.htm&type=5&language=en_US) in Setup. In the Voucher Code Details section on the Voucher Definition record, you can specify: - Code Prefix—Used as the prefix of codes for vouchers issued by using the definition. - Code Suffix—Used as the suffix of codes for vouchers issued by using the definition. - Autogenerated Code Length—Used to decide the length of the automatically generated alphanumeric characters that are added in between the prefix and suffix of codes for vouchers issued by using the definition. The Autogenerated Code Length field isn’t available on Voucher Definition records if the setting to generate voucher codes isn’t enabled in the org. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip If you don’t find the Code Prefix, Code Suffix, and Autogenerated Code Length fields on Voucher Definition records, ask your admin to add the fields to the Voucher Definition page layout. ## What Happens If the Prefix, Suffix, or Length Isn’t Specified?
Scenario What Happens Example
The prefix, the suffix, and the length aren’t defined in a voucher definition Codes of vouchers issued by using the definition consist of eight automatically generated alphanumeric characters. Code: A4FF0NNE
The prefix and suffix are defined in a voucher definition but the length isn’t defined Codes of vouchers issued by using the definition consist of the prefix, the suffix, and eight automatically generated alphanumeric characters in between the prefix and suffix.
  • Prefix: First
  • Suffix: Last
  • Code: FirstA4FF0NNELast
The suffix and the length are defined in a voucher definition but the prefix isn’t defined Codes of vouchers issued by using the definition consist of the automatically generated alphanumeric characters equal to the specified length and the suffix.
  • Suffix: Last
  • Length: 6
  • Code: A4FF0NLast
The prefix is defined in a voucher definition but the suffix and length aren’t defined Codes of vouchers issued by using the definition consist of the prefix and eight automatically generated alphanumeric characters.
  • Prefix: First
  • Code: FirstA4FF0NNE
## Can Voucher Codes Be Changed When Issuing Vouchers? Yes. If the setting to automatically generate voucher codes is enabled and you don’t want to use automatically generated codes, specify a code when you’re issuing a voucher. The code that you specify overwrites the voucher code that’s automatically generated when issuing the voucher. # Automatically Compile Lightning Web Component Omniscript and Flexcards (Managed Package) For the managed package runtime, the Omnistudio Build Tool can automatically compile and deploy Lightning Web Component (LWC) Omniscript and Flexcards after activation through Puppeteer or Chrome installed on your local machine. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To install Puppeteer into a build machine or locally, run this command: ``` npm install puppeteer -g ``` If your system has Chrome installed, the Build Tool starts a headless Chrome session, authenticates to the deployment org, and uses a page in the managed package to compile and deploy the Omniscript or Flexcard. To disable this feature, add these lines to your job file: ``` ignoreLWCActivationOS: true ignoreLWCActivationCards: true ``` Otherwise these settings are on by default. To disable the local compilation of the Flexcards so that the npmAuthKey is used only for the local compilation of Omniscript, add these lines to your job file. The legacy method is used for the Flexcard LWC activation: ``` ignoreLocalCompilationCards: true ``` Where there’s a specific executable path for Chrome, or you don’t want to use its headless feature, use these commands: ``` puppeteerHeadless: false puppeteerExecutablePath: path/of/chrome ``` # Automatically Transfer Points to a Member Group Automate the process of transferring points from members to their associated membership groups in real-time when points are credited to them. The automation calculates and transfers points to each group based on the member’s contribution percentage for each group. This automation ensures that there is no duplication in the transfer of points. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Growth or Loyalty Management - Advanced.
![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip - When you turn on the setting, there might be unprocessed records after the last batch process of transferring points using the Transfer Member Points to Groups action. Make sure to process them manually. - When you turn off the setting, unprocessed records might remain. Use the Transfer Member Points to Groups action to manually process them. 1. From Setup, in the Quick Find box, enter Loyalty Management, and then select **Loyalty Management Settings**. 2. Turn on Transfer Points to Member Group Automatically. # Automation Quick Guide for the Omnistudio Build Tool (Managed Package) For the managed package runtime, understand how the Build Tool works with Salesforce DX, Jenkins, and compiling Lightning Web Components, Omniscripts, and Flexcards. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Build Tool with Salesforce DX (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_salesforce_dx.htm&release=264.0.0&type=5)** For the managed package runtime, build Tool fits into an automated Salesforce build. Let’s look at a sample project. - **[Run Salesforce CLI Commands in Jenkins (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_jenkins.htm&release=264.0.0&type=5)** For the managed package runtime, you can run Salesforce CLI commands in Jenkins. - **[Automatically Compile Lightning Web Component Omniscript and Flexcards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_auto_compile_lwc.htm&release=264.0.0&type=5)** For the managed package runtime, the Omnistudio Build Tool can automatically compile and deploy Lightning Web Component (LWC) Omniscript and Flexcards after activation through Puppeteer or Chrome installed on your local machine. - **[Compile Omniscripts or Flexcards Locally (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_local_compile.htm&release=264.0.0&type=5)** For the managed package runtime, local compilation is supported in package versions Spring ’22 and later. # Automation with Quip in Salesforce Use Quip features in your automated Salesforce business processes. ### Required Editions
Available in: Enterprise, Performance, Professional, Developer, and Unlimited Editions
Available in: Lightning Experience
![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_warning.png) Warning Quip is retiring slides on January 31, 2021. After this date, the Copy Content action in Process Builder and Flow Builder no longer works, and Slides isn’t a valid document type for the Edit Document and Create Document actions. [Tell Me More](https://help.salesforce.com/articleView?id=000355252&language=en_US&mode=1&type=1) - **[Considerations for Using Quip in Flow Builder](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_considerations_flow.htm&release=264.0.0&type=5)** Review some important information about requirements and limitations to get the most out of Quip actions in Process Builder and Flow Builder. - **[Quip Automation Use Cases](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_flow_use_case_overview.htm&release=264.0.0&type=5)** Learn about ways to streamline and customize business processes with Quip actions in Flow Builder. - **[Quip Actions in Process Builder](https://help.salesforce.com/s/articleView?id=xcloud.quip_actions_process.htm&release=264.0.0&type=5)** Create documents, chat rooms, and folders when important events occur. Attach a document to a record so that your users have information in context. Update your spreadsheets with the latest Salesforce data. Send a message to a chat room or document. Add new slides to a deck, copy documents, add members to a document or chat, lock document edits, and more. - **[Quip Actions in Flow Builder](https://help.salesforce.com/s/articleView?id=xcloud.quip_automation_flow.htm&release=264.0.0&type=5)** Quip provides several core actions for organizing, creating, and copying your Quip content in flows. To add one of these actions to your flow, drag an Action element onto the canvas. Then select the **Quip** category, and search for the appropriate action. # Availability at Salesforce Learn how Salesforce maintains high availability and what steps you can take to improve your org's own availability and resilience. - **[What is Availability?](https://help.salesforce.com/s/articleView?id=xcloud.availability_what_is_availability.htm&release=264.0.0&type=5)** Learn what availability means at Salesforce and why it's important. - **[How Salesforce Maintains Consistent Availability](https://help.salesforce.com/s/articleView?id=xcloud.availability_how_does_salesforce_maintain_consistent_availability.htm&release=264.0.0&type=5)** Learn what Salesforce resources help maintain a consistent availability experience. # Available add-ons Each add-on defines its valid entry points and user device permissions. Add-on reference | Add-on | Valid entry points | Permissions | | --- | --- | --- | | Agentforce | Floating action button, toolbar right | Microphone | | Notifications | Toolbar right, background | Notifications | | Calendar | Component | Calendar | | Settings | Toolbar left | None | # Available Data Templates Data templates provide simple data editing and calculations, advanced data manipulation, and rigorous analysis out of the box. To get started, see the instructions and specific details for each template by following these links. - **[Sentiment Analysis Template](https://help.salesforce.com/s/articleView?id=xcloud.sdp_template_sentiment_analysis.htm&release=264.0.0&type=5)** Use the Sentiment Analysis data template to categorize selected text into sentiments quickly. # Azure Data Lake Output Connection Create a remote connection using the Azure Data Lake output connector to write .csv data from Salesforce Data Pipelines to Microsoft Azure Data Lake Storage Gen2 when using Data Prep. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note If you want to sync data from Microsoft Azure Synapse Analytics or dedicated SQL pool to Salesforce Data Pipelines, use an [Microsoft Azure Synapse Analytics Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_microsoft_azure_sql_dw_settings.htm&release=264.0.0&type=5 "Create a remote connection using the Microsoft Azure Synapse Analytics connector to sync data from Azure Synapse Analytics or dedicated SQL pool (formerly SQL DW) to Salesforce Data Pipelines. To connect to SQL databases on Azure, add an Azure SQL Database Connection instead of this one.") instead. Or, to sync data from Microsoft Azure SQL Database to Salesforce Data Pipelines, use an [Microsoft Azure SQL Database Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_microsoft_azure_sql_db_settings.htm&release=264.0.0&type=5 "Create a remote connection using the Microsoft Azure SQL Database connector to sync data from Microsoft Azure SQL Database to Salesforce Data Pipelines. To connect to Microsoft Azure Synapse Analytics or a dedicated SQL pool (formerly SQL DW), add a Microsoft Azure Synapse Analytics connection instead of this one."). ## How Azure Data Lake Output Connection Works With Salesforce Data Pipelines connectors, you can write the outcome of a recipe to an external system for further analysis, business automation, and storage. After you configure an output connector to the data source and folder path using the steps in this guide, create a recipe using Data Prep. Add an Output node to the recipe and select to write to the output connection. Select the Azure Data Lake connection you configured, and choose which object will contain the output data. When the recipe runs, Salesforce Data Pipelines writes data to the specified object in the folder path within the directory. For example, if you specified the folder path support/servicedata and chose the object APAC we write to the folder `APAC` at the path ...support/servicedata/APAC. The folder contains these files: - The output dataset .csv file, with the naming standard `folderpath`\_0.csv. In our example, the output is `APAC_0.csv`. For larger datasets, Salesforce Data Pipelines automatically partitions the data into multiple .csv files with increasing numbers appended to the name. In our example, there could be a `APAC_1.csv`, a `APAC_2.csv`, and more until all data is written. This file doesn’t have a header row. - The metadata file schema.json, with information on each column including the name, data type, and precision. - The \_SUCCESS file, generated when the .csv is completely written. When you run the recipe again, the files previously generated are deleted and the new version of the files are written. ## Enable and Add the Azure Data Lake Output Connector 1. From Setup, in the Quick Find box, enter Analytics, select **Analytics**, and then **Settings**. 2. Select **Enable Azure Data Lake output connection** and then save your changes. 3. In the Data Manager, click the **Connections** tab. 4. Click **New Connection**. 5. Click **Output**. 6. Click the connector’s icon and enter its settings, as described in the Connection Settings section. 7. Click **Save & Test**. Save & Test validates your settings by attempting to connect to the source. If the connection fails, Salesforce Data Pipelines shows possible reasons. All settings require a value, unless otherwise indicated. | Connection Setting | Description | | --- | --- | | Connection Name | Identifies the connection. Use a convention that lets you easily distinguish between different connections. | | Developer Name | API name for the connection. The developer name can’t include spaces, and you can’t change it after you create the connection. | | Description | Description of the connection for internal use. | | Access Key | Your Azure Data Lake access key. To learn more, see Microsoft’s [Manage storage account access keys](https://learn.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage?tabs=azure-portal). | | Account | Your Azure Data Lake account name. | | Container | The name of the Azure Data Lake container that the connector will write to. | | Folder Path | Path to the folder that you want to connect. There must be a subfolder within the specified folder. For example, to write to `support/servicedata`, specify `support` for the folder path property in the connection then choose **servicedata** when configuring the recipe output node. | Keep these behaviors in mind when working with the Azure data lake output connector. - You can use an output connection more than once per recipe, but each output node must use a different object. Each output node can use up to the connector's per-run limit independently, but is still subject to the rolling 24 hour limit. - Output connections are only available for recipes built with Data Prep. - Each output connection only supports one folder path. To output to another folder path, create another output connection. - When the prior run’s files are deleted in preparation for the current run, the earlier version of an output dataset is inaccessible. Set up a process to copy or use the output after each run, and use the \_SUCCESS file as an indication that the write is complete. # B2B Referral Management Flows B2B Referral Management uses flows to automate the tracking of referrals and rewards throughout the lead and opportunity lifecycles. These flows handle event processing when leads are created or converted and when referred opportunities are won. ### Required Editions
Available in: Lightning Experience
Available in: Sales Cloud Enterprise Edition (or above) with Partner Ecosystem Management (Member or Login), Partner Community, and External Apps licenses.
B2B Referral Management includes these flows: - **Process Opportunity Won Referral Event:** Updates referral and reward records when an opportunity is closed as won. - **Process Partner Referral Code:** Processes referral codes for new or converted leads. ## Process Opportunity Won Referral Event The Process Opportunity Won Referral Event flow (API Name: `partner_b2brfrmgt__ProcOpptyWonRefEvt`) triggers when an Opportunity record is created or updated. It calls an invocable action to create and update referral and reward records when a referred Opportunity is won.
Element LabelAPI NameDescription
Process B2B Closure EventProcessB2BClosureEventAction element. Processes a B2B referral event of type Closure by calling an action and passing in the referral code, account ID, current date and time from the triggering Opportunity record.
Get Referral RecordGetReferralRecordGet Records element. Gets the referral record with an OpportunityId that matches the ID of the triggering opportunity.
   
Update Extended RewardUpdateExtendedRewardUpdate Records element. Updates the Extended Reward record with an AccountId that matches the ReferrerId of the Referral from the GetReferralRecord record variable.
   
## Process Partner Referral Code The Process Partner Referral Code flow (API Name: `partner_b2brfrmgt__ProcPartnerRefCode`) processes the referral code for lead records with a Lead Source of Partner when they are created or updated.
Element LabelAPI NameDescription
Check Lead StatusLeadStatusCheckDecision element. Evaluates whether the Lead is New or Converted and directs it to the appropriate path.
Process B2B Converted EventProcessB2BConvertedEventAction element. Uses values from earlier in the flow to set the inputs for the "Process B2B Referral Event" core action.
Process B2B Referral EventProcessB2BReferralEventAction element. Sets the inputs for the "Process B2B Referral Event" core action using values from earlier in the flow.
# Back Up and Recover Data with Salesforce Backup & Recover Next Use Salesforce Backup & Recover Next to protect your Salesforce data from loss or corruption, recover from data incidents quickly, and simplify your overall data management strategy. Protect your organization from permanent data loss and corruption by automatically generating backups. Manage what data to back up, identify changes easily, and use precise data restoration tools to recover data affected by integration issues, system errors, or user error in just a few clicks. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Backup & Recover Data and Backup & Recover Files add-on licenses
After you enable Salesforce Backup & Recover Next, a full backup of your existing data is created and stored. This backup is ready to serve as the base of a restore if there’s an unwanted or unexpected change to your data. After the initial backup completes, a daily incremental backup runs. This incremental backup records any changes made to your data, including records added, records changed, and records deleted. These changes are compared against the last backup to create a new up-to-date backup, without overwriting or affecting the previous backup. These incremental backups are faster than running a full backup every day and more likely to result in a successful backup that you can use to recover from data loss. On Sundays, a full backup runs to ensure accuracy. This backup also acts as the base for the backups that follow throughout the week. If you run more than one backup a day, all subsequent backups are incrementals, even on days with a full data backup. - **[Assign the Salesforce Backup & Recover Next Permissions](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_permissions.htm&release=264.0.0&type=5)** Use Backup & Recover Next permissions so that users can run backups, configure specific settings, and run Backup & Recover Next activities. Assign them to profiles or permission sets to give your users the specific permissions that they need in Backup & Recover Next. - **[Choosing a Backup Region](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_choose_region.htm&release=264.0.0&type=5)** When you set up Salesforce Backup & Recover Next, you select a region to store your backup data. The region determines the physical location of your backed-up data and can differ from your Salesforce org's region. After setup, you can't change your backup region. - **[Configure Salesforce Backup & Recover Next Settings](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_configure_settings.htm&release=264.0.0&type=5)** After installing the Salesforce Backup & Recover Next app and assigning permissions, configure various settings for your backups. - **[Enable Backups in Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_enable_backup.htm&release=264.0.0&type=5)** After configuring your backup settings, enable backups for your org and run your first backup. - **[View Backup Data](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_view_backup.htm&release=264.0.0&type=5)** The Backup tab provides a full overview of all your backups. View backup information at a high level, or select a backup and see the included objects and details. - **[Search for Terms in Your Backups](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_search.htm&release=264.0.0&type=5)** Find specific records across your backup data history. Search for records that contain a keyword or phrase and filter the search by object and backup date range. Add conditions to narrow the search results further. - **[Compare Your Backups](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_run_compare.htm&release=264.0.0&type=5)** Identify record changes between two Salesforce backups by comparing them. Quickly spot additions, modifications, and deletions to ensure data accuracy and integrity. - **[Restore Your Data](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_restore_data.htm&release=264.0.0&type=5)** Recover from data corruption or loss event by restoring backed-up records and their deleted child records in Salesforce Backup & Recover Next. - **[Audit Backup & Recover Next Events](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_audit.htm&release=264.0.0&type=5)** You can download the audit log for a detailed record of all events in Backup & Recover Next, including who initiated the event and when. Events are stored for up to a year. - **[Backup and Recover Next REST API](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_api.htm&release=264.0.0&type=5)** Use the Backup and Recover Next REST API to start backups, browse backup data, and review audit events from your own applications. - **[Salesforce Backup & Recover Next Considerations](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_considerations.htm&release=264.0.0&type=5)** Before using Salesforce Backup & Recover Next, review these considerations. # Back Up Data for Recovery Create a backup plan to quickly recover and restore your business data. Similar to availability, data integrity and protection is a shared responsibility between Salesforce and you. Salesforce securely hosts encrypted data across multiple data centers and upholds a comprehensive list of compliance certifications to meet regulatory and contractual requirements. Salesforce ensures that your data is safe, but Salesforce data isn’t always safe from business-level user error or integration downtime. While backups of your data are created to prepare for infrastructure-level disaster recovery, we’re unable to restore business-level data outside of this type of event. In the event of user error or data loss, create a backup plan to quickly recover and restore your business data. You have several data backup options depending on your company’s needs and requirements. - [Data Export service](https://help.salesforce.com/s/articleView?id=xcloud.admin_exportdata.htm&type=5&language=en_US)—Schedule or manually generate a backup of your org’s data into comma-separated values (CSV) files. - [Export a Report](https://help.salesforce.com/s/articleView?id=analytics.reports_export.htm&type=5&language=en_US)—Manually generate a backup of your org’s data from Salesforce Reports. - [Data Loader](https://help.salesforce.com/s/articleView?id=xcloud.data_loader_about.htm&type=5&language=en_US)—Manually generate a backup of up to 5,000,000 records into a CSV file. - [Bulk API](https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/asynch_api_intro.htm)—Create a custom backup to quickly extract and restore large data volumes. - [Backup and Restore](https://help.salesforce.com/s/articleView?id=xcloud.backup_restore.htm&type=5&language=en_US)—Restore your org’s data from an automatic backup within Salesforce. - [AppExchange](https://appexchange.salesforce.com/)—Choose from several third-party apps and solutions that backup and restore your org’s data. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-availability-264-0-0-production-enus/ae81c651-23b2-4682-9c7d-e47db9c3df21/images/icon_tip.png) Tip Along with your business data, consider backing up your metadata, such as custom fields, layouts, Reports, and Apex code. See [Back Up Metadata to Protect and Restore Your Customizations](https://help.salesforce.com/s/articleView?id=xcloud.admin_backup_metdata.htm&type=5&language=en_US) in Salesforce Help. #### See Also - [_Salesforce Architects_: Building Backup and Restore Capabilities](https://architect.salesforce.com/well-architected/adaptable/resilient#Building_Backup_and_Restore_Capabilities) - [_Knowledge Article_: Best Practices to Backup Salesforce Data](https://help.salesforce.com/s/articleView?id=000386692&type=1&language=en_US) # Back Up Data with Salesforce Backup Your Salesforce Backup policy defines what data is included in backups. You can back up object data, including related records, files, and attachments. You can rely on the daily scheduled backup, set a custom schedule, or backup manually. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Salesforce Backup & Recover add-on license.
User Permissions Needed
To back up objects: Read on each object
To edit object permissions:

Manage Profiles and Permission Sets

AND

Customize Application

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Salesforce Backup. Read about Backup & Recover in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). The file storage pricing for Salesforce Backup is calculated at 10% of the actual GB used. For example, if an org stores 100 GB of files in Salesforce Backup, the "effective storage" GB that's charged to the customer is 10 GB. - **[Add Objects and Records to Your Backup Policy](https://help.salesforce.com/s/articleView?id=xcloud.backup_restore_create_policy.htm&release=264.0.0&type=5)** Build a new Salesforce Backup policy starting with objects and their records. Because most of your Salesforce data is stored in objects and their related records, they form the foundation of your backup policy. - **[Add Files and Attachments to Your Backup Policy](https://help.salesforce.com/s/articleView?id=xcloud.backup_restore_create_policy.htm&release=264.0.0&type=5)** Back up files and attachments with the Salesforce Backup managed package. File and attachment backups are a helpful way to safeguard a broader section of data ahead of major changes to your implementation. - **[Set a Custom Backup Schedule](https://help.salesforce.com/s/articleView?id=xcloud.backup_restore_create_policy.htm&release=264.0.0&type=5)** Configure your policy to capture backups monthly, weekly, daily, or hourly. You can select a start time and preferred time zone. - **[Run Delta Backups](https://help.salesforce.com/s/articleView?id=xcloud.backup_restore_create_policy.htm&release=264.0.0&type=5)** Backups take place automatically one time every 24 hours starting at 5:00 PM Central Time (GMT-5). You can also back up new and changed data as you work. Delta backups are helpful before and after a major deployment. For example, make a delta backup before starting a large data entry project or after importing data from a legacy system of record. ## Add Objects and Records to Your Backup Policy Build a new Salesforce Backup policy starting with objects and their records. Because most of your Salesforce data is stored in objects and their related records, they form the foundation of your backup policy. In addition to object permissions, you must meet all special access rules for each object that you add to a policy. For example, some objects are only available in specific products, when features within those products are enabled, or with product-specific permission sets. Review the Special Access Rules section of the object reference documentation for all required licenses, permissions, and preferences. To be backed up, objects must meet these conditions. | Name | Value | | --- | --- | | IsCustomSetting | false | | IsDeprecatedAndHidden | false | | IsIdEnabled | true | | IsQueryable | true | 1. From the App Launcher, find and select **Backup and Restore**. 2. To create a backup policy, from the Backup tab, click **Create Policy**. 3. Select an object from the list. A list of related objects appears. 4. Optionally, enable formula field data backups. Keep in mind that while you can back up formula field values, those values can’t be restored. 5. Optionally, select any related objects that you want to add to your policy, and click **Save Related Objects**. 6. To add your selected objects to your policy, select **Enable**. Objects in your policy show as enabled and ready in the object list. 7. Continue adding objects and their related objects to your policy. 8. When your policy contains all of the data that you want to back up, click **Activate Policy**. When activated, backup policies run one time every 24 hours. Monitor your backup job on the Home or Logs pages. ## Add Files and Attachments to Your Backup Policy Back up files and attachments with the Salesforce Backup managed package. File and attachment backups are a helpful way to safeguard a broader section of data ahead of major changes to your implementation. In addition to object permissions, the integration user must have the QueryAllFiles permission. Before you get started, consider your file and storage usage strategy. Each Salesforce org has specific file and data storage usage limits. When you export file and attachment data from a backup, exported files consume storage until they’re deleted. Previous versions of files and attachments aren’t deleted. File and attachment backups are available as a global policy configuration. 1. In the Salesforce Backup app, on the Backup tab, click **Configure Policy Defaults**. 2. Turn on file and attachment backups. 3. To plan how many files and attachments that you want to back up, review your file storage usage. File and attachment backups contribute to your storage usage. 4. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip For efficient file storage usage, we recommend that you back up only files and attachments created or modified on or after a specific date. Consider starting with a relatively recent start date. You can change your start date, but only to a date further back in time. Select a backup window. - Specific date and onward (recommended) - All dates 5. Save your work. Files and attachments are included in the next backup. These objects contain information about your files and attachments and are automatically added to your policy. - Attachment - ContentAsset - ContentDistribution - ContentDistributionView - ContentDocument - ContentDocumentLink - ContentFolder - ContentVersion - ContentWorkspace - ContentWorkspaceDoc - ContentWorkspaceMember - ContentWorkspacePermission ## Set a Custom Backup Schedule Configure your policy to capture backups monthly, weekly, daily, or hourly. You can select a start time and preferred time zone. When a custom backup schedule is set, the Salesforce Backup app no longer makes automatic daily backups at the default start time. You can change your backup schedule at any time. 1. In the Salesforce Backup app, on the Backup tab, click **Configure Policy Defaults**. 2. Select values for your backup frequency, starting date and time, and your preferred time zone. 3. Save your work. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_example.png) Example Your organization holds a data cleansing exercise every Monday that finds and fixes duplicate records. You want to make sure that backups reflect your team’s work, so you set a backup schedule that runs weekly on Mondays at the close of business. ## Run Delta Backups Backups take place automatically one time every 24 hours starting at 5:00 PM Central Time (GMT-5). You can also back up new and changed data as you work. Delta backups are helpful before and after a major deployment. For example, make a delta backup before starting a large data entry project or after importing data from a legacy system of record. In the Salesforce Backup app, from the activate and deactivate policy menu, select **Run Delta Backup**. A delta backup captures only the new and changed data since your last backup. We recommend that you wait at least 10 minutes after any changes are made before you run the delta backup. This wait time makes sure that any new and changed data properly syncs with the backup. You can monitor backup jobs on the Home or Logs pages. # Back Up Data with Salesforce Backup and Recover To maintain the integrity of your org, Saleforce Backup and Recover creates daily backups of data, attached files, metadata, managed packages, and sandboxes. Backup and Recover also highlights unusual data activity so you can quickly find and fix data errors or mismanagement incidents. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions with the Salesforce Backup and Recover add-on license.
Backup and Recover has precise data restoration capabilities. After an event, Backup and Recover compares your org's data to identify any modifications. This feature ensures that you only recover the specific objects, fields, and records that were affected. This granular level of control saves time and also prevents unintended data overwrites. Through secure cloud-to-cloud backups and independent data storage, you can stay connected to your backup data from anywhere without interruption. Backup and Recover simplifies compliance with industry and government regulations such as data privacy. For rapidly changing data, Backup and Recover offers Continuous Data Protection, which minimizes data corruption or loss during recovery. This comprehensive approach to data protection ensures business continuity, minimizes downtime, and maintains data integrity. #### See Also - [**Backup & Recover for Salesforce**](https://help.salesforce.com/s/articleView?id=platform.backup_recover_o.htm&type=5&language=en_US) # Back Up Metadata to Protect and Restore Your Customizations Protect your org’s customizations, such as custom fields, custom Apex code, page layouts, reports, and permission sets, by backing up your metadata. ### Required Editions
Available in: Developer, Enterprise, Performance, Professional, and Unlimited editions.
User Permissions Needed
To create unmanaged packages: Create AppExchange Packages and Manage Users
Backing up your metadata gives you a snapshot of that metadata at a particular point in time. At a future time, you can compare the backed-up metadata with more recent metadata. You might do this to revert your metadata to a previous state or to identify what changes have been made for purposes such as debugging. To back up your metadata, create an unmanaged package. 1. In Setup, enter Package Manager in the Quick Find box, and then select **Package Manager**. 2. Select **New**, name the package, and select **Save**. 3. In the Components tab, select **Add**. 4. In the Component Type dropdown list, select the types of metadata you want to include in your backup, and click **Add To Package** for each metadata type. 5. To finish creating this unmanaged package, click **Upload**. You receive an email when your package has been uploaded to the Package Manager page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Unmanaged packages don't support all metadata types. See [Components Available in Unmanaged Packages](https://developer.salesforce.com/docs/atlas.en-us.pkg1_dev.meta/pkg1_dev/packaging_unmanaged_components.htm). For more advanced metadata backup options, API and CLI commands are available. See [Deploying and Retrieving Metadata](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/file_based.htm) in the Metadata API Developer Guide and [mdapi Commands](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_force_mdapi.htm) in the Salesforce CLI Command Reference. To review the metadata types that can be packaged using more advanced developer tools, see the [Metadata Coverage Report](https://developer.salesforce.com/docs/metadata-coverage). #### See Also - [Trailhead: _Package Development Readiness_](https://trailhead.salesforce.com/en/content/learn/modules/package-development-readiness) - [Trailhead: _Package Development Model_](https://trailhead.salesforce.com/en/content/learn/modules/sfdx_dev_model) ## Create a New Version of Your Unmanaged Package It's likely that your org's metadata is changing daily, and that new metadata types are added. To protect these changes, periodically create a new version of your unmanaged package. 1. In Setup, enter Package Manager in the Quick Find Box, and then select **Package Manager**. 2. Click the Package Name for the unmanaged package you created. 3. In the Components tab, select **Add**. 4. In the Component Type dropdown list, select any new types of metadata you want to add to your backup, and click **Add To Package** for each metadata type. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Changes to components that were added in a previous package version are captured automatically when you create a new version. 5. Click **Upload**, and in the Package Detail screen complete the Version Name field. Consider adding details in the Description field so you know when this version was created, and click **Upload**. Each time you create a new package version, you've created a new snapshot of your metadata. ## Restore Your Metadata From an Unmanaged Package We recommend restoring metadata in a sandbox org. Then use your standard method for deployment from a sandbox to your production org. 1. In Setup, enter Package Manager in the Quick Find Box, and then select **Package Manager**. 2. Click the Package Name for the unmanaged package you created. 3. From the Package Detail page, click the Versions tab, and select the package version number. 4. Copy the installation URL from the Package Version Detail page. 5. Use the installation URL to install your unmanaged package in a sandbox org. 6. Work with a developer to retrieve and redeploy the metadata to restore using either the [Metadata API](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/file_based.htm) or the [Salesforce CLI](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_force_mdapi.htm). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Third-party release management apps that automate data and metadata backup are available on AppExchange. # Back Up Your Connected Accounts in the Salesforce Authenticator Mobile App We recommend backing up your connected accounts in the Salesforce Authenticator mobile app. That way, if you change your device, your device gets lost or damaged, or you delete and reinstall the app, you can easily transfer your accounts. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note Starting with app version 4.0, Salesforce Authenticator uses your email address to back up and transfer your accounts. Older app versions use your mobile number instead. If you’re running an app version below 4.0, see [Use Your Mobile Number to Back Up and Restore Your Accounts in Salesforce Authenticator](https://help.salesforce.com/s/articleView?id=000397160&type=1&language=en_US). We recommend always running the latest version of the app. The backup feature can be enabled only if you have at least one Salesforce ecosystem account connected to the app. These accounts make up the Salesforce ecosystem. - Salesforce.com - Commerce Cloud - Heroku - Sales Cloud - Marketing Cloud - MuleSoft - Quip - Tableau ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note We use the term Salesforce ecosystem accounts to refer to accounts that support all Salesforce Authenticator features. This list doesn't include all Salesforce-related accounts. For example, this list doesn't include Slack even though it's a Salesforce company. 1. From your accounts list, start the backup process in one of two ways. - Tap the Notifications icon (![Salesforce Authenticator notification pane icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/salesforce_authenticator_notifications_icon_empty.png)), and then tap **Enable Backups**. - Tap the Settings icon (![Salesforce Authenticator settings page icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/salesforce_authenticator_settings_gear_icon.png)), and then tap **Back Up Accounts**. 2. If prompted, enter your email address and tap **Send Code**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note You get this prompt only if your email address isn't verified. If your email address is already verified, skip to step 4. Salesforce Authenticator sends you an email with a one-time, six-digit verification code. 3. Find the verification code in the email you received. In Authenticator, enter the code and tap **Verify**. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_tip.png) Tip If you’re viewing the email on the same device as the Authenticator app, instead of manually entering the code, you can tap the code in the email message to re-open the app. When you tap the link, your device asks for authorization to open the Salesforce Authenticator app. - Android: if prompted to select which app to open the link with, tap **Salesforce Authenticator** from the list. If your web browser opens, tap **Open Salesforce Authenticator**. - iOS: when asked for permission to open Salesforce Authenticator, tap **Open**. 4. Set a passcode that’s four digits or longer, and re-enter it on the next screen. This passcode is required to transfer your backed-up accounts in the future. You can update your backup info at any time. - To change your email address, from the Settings menu, tap **Change Email Address**. Enter a new email address and repeat the verification process. - To change your passcode, from the Settings menu, tap **Change backup passcode**. Enter a new passcode, then re-enter it on the next screen. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note When you transfer your connected accounts, your encrypted TOTP data is stored on Salesforce servers. Salesforce handles this data in compliance with our [privacy policy](https://www.salesforce.com/company/privacy/full_privacy/). During backup and transfer events, you use your passcode to verify that you own the backed-up accounts. # Back Up Your Tenant Secrets Your Shield Platform Encryption tenant secret is unique to your org and to the specific data to which it applies. Salesforce recommends that you export your tenant secret to ensure continued access to the related data. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
User Permissions Needed
To generate, destroy, export, import, upload, and configure tenant secrets and customer-supplied key material: Manage Encryption Keys
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Database Encryption does not support destroying, exporting, or importing keys. To learn more, see the [Shield Platform Encryption Architucture Guide](https://resources.docs.salesforce.com/latest/latest/en-us/sfdc/pdf/security_shield_platform_encryption.pdf). 1. From Setup, in the Quick Find box, enter Platform Encryption, and then select **Key Management**. 2. In the table that lists your keys, find the tenant secret that you want to back up. Click **Export**. 3. Confirm your choice in the warning box, and then save your exported file. The file name is tenant-secret-org--ver-.txt. For example, tenant-secret-org-00DD00000007eTR-ver-1.txt. 4. Note the specific version that you’re exporting, and give the exported file a meaningful name. Store the file in a safe location so that you can import it back into your org if needed. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Your exported tenant secret is itself encrypted. Remember that exported key material is a copy of the key material in your org. To import an exported tenant secret, first destroy the original in your org. See [Destroy a Tenant Secret](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_destroy_key.htm&release=264.0.0&type=5 "Only destroy Shield Platform Encryption tenant secrets and key material in extreme cases where access to related data is no longer needed. Your key material is unique to your org and to the specific data to which it applies. Once you destroy key material, related data is not accessible unless you import previously exported key material. You can't destroy key material used by Database Encryption."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This page is about Shield Platform Encryption, not Classic Encryption. [What's the difference?](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_vs_classic_encryption.htm&type=5&language=en_US) #### See Also - [API Guide: TenantSecret](https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_tenantsecret.htm) # Back-in-Stock Design Considerations Keep these design considerations in mind when you send back-in-stock notifications. ## Primary Keys Marketing Cloud Engagement - Use the Service Cloud ContactID value for the subscriber key in Engagement. - Avoid using email address, SMS number, or mobile device ID for the subscriber key. Commerce Cloud - CustomerID is the system-generated ID for a registered customer. - Customer.Profile.customerNo is the number used to identify registered customers. - Decorate the Commerce Cloud customer record with the CRM contact ID using [b2c-crm-sync](https://github.com/SalesforceCommerceCloud/b2c-crm-sync), a reference implementation for integration of Salesforce CRM and B2C Commerce. - For unregistered visitors, use the contact resolution features of [b2c-crm-sync](https://github.com/SalesforceCommerceCloud/b2c-crm-sync). - To learn more about integrating B2C Commerce with Service Cloud, review the enablement framework [b2c-crm-sync](https://github.com/SalesforceCommerceCloud/b2c-crm-sync). Sales and Service Cloud - Use or modify the B2C-CRM-Sync enablement solution helper flows to resolve to a matching contact record when it shares an email address. Configure duplicate rules to block, allow with alert, or report possible duplicates. - If the email can’t be matched to an existing customer, the receiving REST flow endpoint can create a contact record. To create a contact, Service Cloud requires the last name field. Capture the customer’s first and last names in the notification request form in Commerce Cloud. - The B2C-CRM-Sync enablement solution can send the email and ProductID. If the customer has logged in, pass the customerNo to help matching rules. - Using a CRM ContactID simplifies overall integration with Experience Cloud and Commerce Cloud. ## User Experience - Capturing back-in-stock notification requests on the product detail page requires custom development on the B2C Commerce storefront. Ensure that your existing templates allow the selection of variations that are out of stock. - If the customer is already logged in to the storefront, consider pre-populating the email address from the customer profile in the back-in-stock notification request. - To create a contact, Service Cloud requires the last name field to be populated. Capture the customer’s last name in the notification request form in Commerce Cloud. If you have UX reasons for not capturing the name, such as asking for only an email address, explore using default values for last names. - In your back-in-stock notification email template include the product image, name, and variation details, like size and color. Link to PDP. Consider advising that the item availability is correct at the time the email is sent. Remind the customer that they requested this notification and that it’s the only email they receive about it - Do you maintain products on the storefront that you already know aren’t coming back into stock after they sell out? In this case, you could use a custom product attribute to specify which products are eligible for back-in-stock notifications and putting a process in place for populating and maintaining this attribute. - You can create an alternative journey that notifies customers if a back-in-stock notification hasn’t been fulfilled after a certain time period and include product recommendations to highlight alternatives. - Determine how to handle API failures, such as reporting back to the customer if the notification request was unsuccessful. ## Reporting - Engagement provides functionality to track opens and clicks. - Google Analytics provides click tracking to revenue reporting capabilities. See [Google Analytics 360 Integration for Engagement](https://help.salesforce.com/s/articleView?id=mc_gai_google_analytics_integration_tracking.htm&language=en_US&type=5). - Ensure that the notification sign-up data is being captured in Service Cloud, for example, the master ID as well as the SKU. ## Configuring Data Feeds for Commerce and Engagement - Use and extend the [Engagement reference integration](https://github.com/SalesforceCommerceCloud/marketing-cloud-connector/blob/master/docs/4_0_AdditionalFeatures.md#data-feeds) to create an Engagement catalog feed from B2C Commerce. - [Streaming updates](https://help.salesforce.com/s/articleView?id=mc_ctc_streaming_updates.htm&language=en_US&type=5) provides an alternative to catalog feeds, but isn’t efficient for large numbers of product SKUs. ## Localization - When managing multi-country websites, include localized product information in the back-in-stock notification emails. - If you intend to have separate business units in Engagement for each language, create a localized catalog feed for each one. - If you have a single business unit covering multiple languages, include local product information and review the file size. ## Performance Catalog Import - If your catalog includes more than one million SKUs, import the catalog using delta files. - Import only the data that you plan to use in Engagement. - If the volume or frequency of your catalog update concerns you, contact your Engagement account executive or success manager. Marketing Cloud Engagement - Review [Journey Builder performance](https://help.salesforce.com/articleView?id=mktg.mc_jb_optimize_sending_in_journey_builder.htm&type=5&language=en_US) documentation to ensure optimal setup. - Take note of the [Contact Builder](https://help.salesforce.com/articleView?id=mktg.mc_cab_contact_builder_best_practices.htm&type=5&language=en_US) best practices. - Ensure that an appropriate individual record [data retention](https://help.salesforce.com/articleView?id=mktg.mc_es_manage_de_policies.htm&type=5&language=en_US) is in place on the Journey Data Extensions. Service Cloud - Each call from Commerce to Service to create a back-in-stock notification request is an individual API request and counts against daily API limits in Service Cloud. See [API Limits](https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_api.htm). - Be aware of the volume of API requests and storage requirements for the stock notification request records. See [Data and File Storage Allocations](https://help.salesforce.com/s/articleView?id=xcloud.overview_storage.htm&type=5&language=en_US). - If the data is no longer required, archive or configure a flow to automatically remove it. ## Feed and Notifications Scheduling The availability status of each SKU is a snapshot from the time the catalog feed is created in B2C Commerce. To minimize time delay, review the scheduling of your catalog feed import and back-in-stock notification. ## Fast Moving Inventory If your products tend to sell through quickly, you risk having customers click a back-in-stock notification and find the product already out of stock. You can [extend the catalog feed model](https://github.com/SalesforceCommerceCloud/marketing-cloud-connector/blob/master/docs/4_0_AdditionalFeatures.md#data-export-mapping) to include the inventory count and send notifications only when the inventory is above a specified threshold. If this threshold changes per product, consider you can add a custom product attribute where the product-specific threshold can be maintained and include this attribute in the catalog feed. Ensure there’s a process in place for populating and maintaining this attribute. ## Service Cloud Considerations Use a back-in-stock notification custom object with a relationship to the contact to store the stock notification requests and status. Configure the Lightning UI to show these requests and status where required by service agents. ## Considerations for the Engagement App - Use a [multi-org](https://help.salesforce.com/articleView?id=mktg.mc_co_multi_org_account_configuration.htm&type=5&language=en_US) or single org connecter for [MC Connect](https://trailhead.salesforce.com/content/learn/modules/marketing-cloud-connect). - Use additional [Sales and Service Cloud journey activities](https://help.salesforce.com/articleView?id=mktg.mc_jb_sales_service_cloud_activities.htm&type=5&language=en_US) in your journeys to update your contacts or other objects in Service Cloud. ## Engagement Reference Implementation for B2C Commerce The [Engagement reference implementation for B2C Commerce](https://github.com/SalesforceCommerceCloud/marketing-cloud-connector/blob/master/docs/4_0_AdditionalFeatures.md) includes steps for creating a catalog feed that you can use in this solution. No other functionality from the reference implementation is used in this solution but consider installing the [collect tracking code](https://help.salesforce.com/articleView?id=mc_ctc_install_collect_code.htm&type=5&language=en_US) in Commerce Cloud to support other use cases. Use cases include [abandoned cart](https://resources.docs.salesforce.com/latest/latest/en-us/sfdc/pdf/abandoned_cart_solution_kit.pdf) and behavior personalization using [Einstein recommendations](https://help.salesforce.com/articleView?id=mktg.mc_pb_personalization_builder.htm&type=5&language=en_US). ## Related Content
Icon of an arrow that points right.

Review earlier steps in this solution.

Icon of an arrow that points right.

Take the next steps in this implementation.

# Back-in-Stock Notification Workflow Learn how data flows through the configurations when you send back-in-stock notifications. This diagram illustrates the workflow for sending back-in stock-notifications. ![Workflow Image for Creating a Custom Preference Center](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-z_solutionkits-264-0-0-production-enus/1e49f40e-a11c-44f7-b439-8f20b6c66033/z_solutionkits/images/send_back_in_stock_notifications_workflow.png) - On the product detail page of an out-of-stock product, the customer provides their email address to request a back-in-stock notification. (1) - B2C Commerce captures the form submission. (2) - B2C Commerce makes a REST API call to Service Cloud containing the notification request. (3) - Service Cloud uses matching rules to find an existing contact or create a contact. (4) - Service Cloud creates a record in a back-in-stock custom object. The record includes the contact and the product SKU from the notification request with a Requested status. (5) - Marketing Cloud Connect synchronizes the back-in-stock object with Marketing Cloud Engagement. (6) - Engagement populates the synchronized data extensions. (7) - As part of the regular store operations processes, B2C Commerce receives updated inventory. (8) - A job runs in B2C Commerce to create a catalog feed for Engagement with current inventory availability status and upload the feed to Marketing Cloud Engagement SFTP. (9) - Engagement imports the catalog feed. (10) - Engagement checks the catalog feed for available inventory on products with back-in-stock notification requests. Matches are added to a journey. (11) - Engagement sends a notification message to the customer. (12) - The customer receives the notification message. (13) - Engagement sends a Salesforce Update Object activity to Service Cloud using MC Connect. (14) - The status of the Back in Stock record in Service Cloud updates to sent. You can send further updates for open and click. (15) ## Data Flow ![Send Back in Stock Notifications Flow of Data Image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-z_solutionkits-264-0-0-production-enus/1e49f40e-a11c-44f7-b439-8f20b6c66033/z_solutionkits/images/send_back_in_stock_notifications_flow_of_data.png) Data flows from the Commerce site to Engagement in two streams. The information from the two streams identifies the target audience and sends emails to customers when items are back in stock. - Service Cloud receives the notification request created by the customer and sends it to Engagement via MC Connect. - The stock inventory feed communicates with the Engagement SFTP and uploads to a data extension. ## Related Content
Icon of an arrow that points right.

Take the next steps in this implementation.

# Backup and Recover Next REST API Use the Backup and Recover Next REST API to start backups, browse backup data, and review audit events from your own applications. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Backup & Recover Data and Backup & Recover Files add-on licenses
For endpoints, parameters, and examples, see the [Backup & Recover Next REST API](https://developer.salesforce.com/docs/platform/barn-api/overview) reference on Salesforce Developers. # Backward Compatibility Support for Passing Page Params (Managed Package) For the managed package runtime, if you pass a page parameter to a Lightning page you must use a namespace prefix, such as params.ns\_contactId, where `ns` represents your namespace prefix. For backward compatibility on older Angular cards, both the page parameter with and without the namespace prefix are read, such as params.contactId and params.ns\_\_contactId. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Beginning with Vlocity Insurance and Health Summer '20.

**Example URL with Parameters with Namespace Prefixes** ``` https://MyDomainName.lightning.force.com/lightning/r/Account/1234567890aBcdefhgp/view?ns__contactId=0987654321kqaBPAAY&ns__primaryContactId=0987654321kqaBPAAY ``` # Balance Data Security with Business Needs Choosing to store PII, sensitive, confidential, or proprietary data with any third party often prompts customers to more closely investigate external regulatory and internal data compliance policies. Internal policies frequently rely on interpretation of external regulations. As customers look at regulations through the lens of cloud-based service adoption, they typically take a pragmatic but conservative approach to data protection in the cloud. Examples of such regulations are the Payment Card Industry Data Security Standard (PCI DSS), Health Insurance Portability and Accountability Act (HIPAA)/Health Information Technology for Economic and Clinical Health Act (HITECH), General Data Protection Regulation (GDPR), and Federal Risk and Authorization Management Program (FedRAMP). This pragmatic approach includes three requirements shared by a wide variety of customers in regulated industries such as financial services, healthcare, and life sciences, as well as manufacturing, technology, and government. 1. Encrypt sensitive data when it’s stored at rest in the Salesforce cloud. 2. Support customer-controlled encryption key life cycles. 3. Preserve application and Salesforce Platform functionality. However, there’s a tradeoff between strong security and functionality. Data encrypted at rest can make preserving Salesforce functionality difficult, if not impossible. The degree depends on where encryption and decryption occur and where the encryption keys are stored. What the business wants often differs from what security and compliance require. # Bar Charts Quip provides these types of bar charts: bar, stacked bar, and bar stacked to 100 percent. Use a bar chart to compare related values. Use a stacked bar chart to compare parts of a whole and show values across one or more categories. Use a bar chart stacked to 100 percent to compare the proportions between values in one or more categories. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
## Data Options for Bar Charts To customize data in bar charts, open the Chart Editor, and click the **Customize** tab. - Stacking: Choose whether to stack data series in the bar chart. - Style: Change the position of the chart legend, or hide it entirely. Select the colors for the chart’s background and border. - Series: Apply data labels to show values directly in the chart, and set the labels’ position and color. - Horizontal Axis: Give the axis a title, adjust its scale, set the number of tick marks shown, and change the number formatting. - Vertical Axis: Give the axis a title, change the number formatting, and reverse the axis order. ## Sample Data for Bar Charts and Stacked Bar Charts | Rep | Q1 Sales | Q2 Sales | Q3 Sales | | --- | --- | --- | --- | | Brian | $10,000 | $25,000 | $53,000 | | Cameron | $45,000 | $60,000 | $36,000 | | Sally | $37,000 | $50,000 | $78,000 | ![Quip bar chart](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_charts_bar.png) ![Quip stacked bar chart](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_charts_bar_stacked.png) ## Sample Data for Bar Charts Stacked to 100 Percent | Product Market Share | Product A | Product B | Product C | | --- | --- | --- | --- | | 2019 | 30% | 10% | 60% | | 2020 | 20% | 30% | 15% | | 2021 | 50% | 60% | 25% | ![Quip 100% stacked bar chart](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_charts_bar_stacked_100.png) # Base LWC Card and Layout Templates (Managed Package) For the managed package runtime, the following tables list the LWC card templates and LWC layout templates available in Vlocity Cards. When editing a template, it is best practice to make a copy of the existing template first and to edit the cloned version. For more information on creating and cloning LWC card templates, see Creating Custom LWC Card Templates. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model. - **[LWC Card and Layout Templates (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_lwc_card_layout_templates.htm&release=264.0.0&type=5)** For the managed package runtime, apply card and layout templates to a Vlocity LWC enabled card to control the information and actions available to a user. - **[Flyout Templates (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flyout_templates.htm&release=264.0.0&type=5)** For the managed package runtime, flyout templates enable users to view information or access additional actions for the current record or a child record. To create a flyout layout template, see Creating a Flyout. - **[Console Card and Layout Templates (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_console_card_layout_templates.htm&release=264.0.0&type=5)** For the managed package runtime, console card and layout templates enable multiple records to be accessible and actionable all from the same view. Apply console cards and layouts to service Vlocity Service Console apps. # Base Omnistudio LWC ReadMe Reference View examples, and learn about available attributes, methods, and other functions from the ReadMes of each Base Omnistudio Lightning web component. To extend components, see [Extend Omnistudio Lightning Web Components](https://help.salesforce.com/s/articleView?id=xcloud.os_extend_omnistudio_lightning_web_components_58224.htm&release=264.0.0&type=5 "Customize the behavior and styling of an application by extending Omnistudio Lightning web components. For example, override properties, add other components, or insert HTML."). All Omnistudio component HTML, CSS, and read-me files are available when you [Set Up Your Environment to Customize Omniscript Elements](https://help.salesforce.com/s/articleView?id=xcloud.os_standard_set_up_your_environment_for_customizing_omniscript_elements.htm&language=en_US&type=5). Check the folder for each component to find these files. # Base UI and Card Templates (Managed Package) For the managed package runtime, the following tables list the base templates that are available for use with Vlocity Cards. When editing a template, it’s best practice to clone the existing template first and to edit the cloned version. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning with the Vlocity Summer '19 release, Vlocity supports Salesforce's Lightning Web Components programming model with Vlocity Lightning Web Components. Vlocity Lightning Web Components include components, functionalities, and templates exclusive to LWC Cards. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You can’t modify base Vlocity Cards authored by Vlocity. If you must edit the card, such as its configuration settings, card states, or data sources, clone the card. ## Card and Card Layout Templates Apply Card and Layout templates in Vlocity Cards to control the information and actions that are available to a user. When active, the resulting Layout template becomes available in Vlocity Cards Component's Layout dropdown. The Vlocity Cards component is available in the Community Builder and the Lightning App Builder. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_cards_component.png) ## Card Layouts Layout templates act as containers for Card templates and control how the cards display. To apply a Layout Template: 1. In the **Layout** section of a Vlocity Card, ensure the **Type** is set to **Layout**. 2. Enter a Layout Template into the **Template** field.

Card Layout Template

Description

Card Layout Template Preview

Compatible Card Templates

card-canvas-1x-simple-slds

One-column container

Image unavailable

action-grid-card

action-grid-card-slds

card-active-placeholders-slds

card-active-slds

card-active-slds-VlocityTrack

card-highlight-totals

card-horiz-actions-slds

card-horiz-noActions-slds

large-card-slds

card-canvas-1x-slds

One-column container with search feature

image

action-grid-card

action-grid-card-slds

card-active-placeholders-slds

card-active-slds

card-active-slds-VlocityTrack

card-highlight-totals

card-horiz-actions-slds

card-horiz-noActions-slds

large-card-slds

card-canvas-3x-slds

Three-column container with search feature

image

action-grid-card

action-grid-cards-slds

card-active-placeholders-slds

card-active-slds

card-active-slds-VlocityTrack

card-horiz-open-slds

card-open-slds

card-simple-slds

offer-card-active-slds

card-canvas-3x-zones-slds

Three-column card container with search feature and zones

image

action-grid-card

action-grid-card-slds

card-active-placeholders-slds

card-active-slds

card-active-slds-VlocityTrack

card-horiz-open-slds

card-open-slds

card-simple-slds

offer-card-active-slds

column

Simple column of cards

Image unavailable

action-grid-card

action-grid-card-slds

card-active-placeholders-slds

card-active-slds

card-active-slds-VlocityTrack

card-highlight-totals

card-horiz-actions-slds

card-horiz-noActions-slds

large-card-slds

infinite-list

List template with infinite scrolling for records using pagination

See list-card-canvas

list-card-slds

list-card-canvas

One-column container with each card's fields and actions displayed in a row

image

list-card

list-card-canvas-slds

One-column container with each card's fields and actions displayed in a row in SLDS

image

list-card-slds

list-table

One-column container in a table. Each card's fields and actions are displayed in a row. Actions show in a vertical list.

image

list-table-card

## Cards To apply a Card Template: 1. In the **Cards** section of Vlocity Cards, ensure your Card isn’t **active**. 2. In the **States** section of Vlocity Cards, enter a Card template name into the **Template** field. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_template.png)

Card Template

Description

Template Preview

Compatible Card Layout Templates

action-grid-card

Displays actions (icon and label) in a responsive grid format

image

card-canvas-1x-slds

card-canvas-1x-simple-slds

card-canvas-3x-slds

card-canvas-3x-zones-slds

column

action-grid-card-slds

Displays actions (icon and label) in a responsive grid format using SLDS.

image

card-canvas-1x-slds

card-canvas-1x-simple-slds

card-canvas-3x-slds

card-canvas-3x-zones-slds

column

card-active-placeholders-slds

Displays a list of fields and an adjacent list of actions along with placeholder.

image

card-canvas-1x-slds

card-canvas-1x-simple-slds

card-canvas-3x-slds

card-canvas-3x-zones-slds

column

card-active-slds

Displays a list of fields and an adjacent list of actions.

image

card-canvas-1x-slds

card-canvas-1x-simple-slds

card-canvas-3x-slds

card-canvas-3x-zones-slds

column

card-active-slds-VlocityTrack

Displays a list of fields and an adjacent list of actions, using SLDS with tracking. For more information on tracking,

image

card-canvas-1x-slds

card-canvas-1x-simple-slds

card-canvas-3x-slds

card-canvas-3x-zones-slds

column

card-highlight-totals

Displays entire card in single column with pagination, with four fields per page.

image

card-canvas-1x-slds

card-canvas-1x-simple-slds

column

card-horiz-actions-slds

Displays entire card in single column with horizontal fields. Actions display horizontally under fields.

image

card-canvas-1x-slds

card-canvas-1x-simple-slds

column

card-horiz-noActions-slds

Displays entire card in single column with horizontal fields. Actions available only in dropdown.

image

card-canvas-1x-slds

card-canvas-1x-simple-slds

column

card-horiz-open-slds

Displays entire card in single column with button and label.

image

card-canvas-3x-slds

card-canvas-3x-zones-slds

card-open-slds

Displays one button and label in SLDS.

image

card-canvas-3x-slds

card-canvas-3x-zones-slds

card-simple-slds

Displays list of field labels adjacent list of fields.

image

card-canvas-3x-slds

card-canvas-3x-zones-slds

large-card-slds

Displays entire card in a single column with a list of fields and an adjacent list of actions. In SLDS, includes placeholders, tracking and icon pattern.

image

card-canvas-1x-slds

card-canvas-1x-simple-slds

column

list-card

Displays fields in one row with all action icons listed on same row.

image

list-card-canvas

list-card-slds

Displays fields in one row with all actions only available in dropdown.

image

list-card-canvas-slds

list-table-card

Displays fields in one row with all action icons and text listed in a vertical list.

image

list-table

offer-card-active-slds

Displays image-only button.

image

card-canvas-3x-slds

card-canvas-3x-zones-slds

## Flyout Templates Flyout Templates enable users to view information or access additional actions for the current record or a child record. Similar to Cards, Flyouts are created in Vlocity Cards and use a Flyout Layout template to contain Flyout Card Templates. When active, the resulting Flyout becomes available in the Flyout Template dropdown. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flyout_layout.png) ## Flyout Layout Templates Flyout Layout templates act as containers for Flyout Card Templates and control how the Flyout Card displays. To apply a Flyout Layout Template: 1. In the Layout section of a Vlocity Card, ensure the Type is set to Flyout. 2. Enter a Flyout Template into the Template field. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flyout_layout_templates.png)

Flyout Layout Template

Description

Template Preview

Compatible Flyout Card Templates

flyout-grid

Simple one-column container for flyout components.

image

flyout-grid-items

flyout-grid-slds

Three-column container for flyout components in SLDS.

Overflow actions from parent card and flyout cards.

image

flyout-grid-items-slds

flyout-grid-actions

Two-column container for overflow actions from parent card.

image

flyout-grid-items

flyout-grid-actions-slds

One-column container for overflow actions from parent card.

image

flyout-grid-items-slds

flyout-grid-noActions-slds

Three-column container for flyout components in SLDS.

No overflow actions from parent card.

image

flyout-grid-items-slds

## Flyout Card Templates To apply a Flyout Card Template: 1. In the **Cards** section of Vlocity Cards, ensure your Card isn’t **active**. 2. In the **States** section of Vlocity Cards, enter a Flyout Card template name into the **Template** field. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flyout_card_template.png)

Flyout Card Template

Description

Preview

Compatible Flyout Layout Templates

flyout-grid-items

Flyout container for card items.

See Compatible Flyout Layout Templates

flyout-grid

flyout-grid-actions

flyout-grid-items-slds

Flyout container for card items in SLDS.

See Compatible Flyout Layout Templates

flyout-grid-slds

flyout-grid-actions-slds

flyout-grid-noActions-slds

## Console Card and Layout Templates Console Card templates enable multiple records to be accessible and actionable all from the same view. In addition to Console Card and Layout Templates, there are out of the box Layouts that contain out of the box Cards. Console Cards also rely on embedded templates to display additional information all within one parent layout. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/console_template_breakdown.png) ## Out of the Box Console Layouts The Console Layouts are accessible in the Vlocity Cards landing page. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/console_layout.png)

Layout

Description

Layout Preview

Layout Template

Cards

Card Templates

Embedded Templates

console-sidebar-slds

Sidebar layout that displays left sidebar cards and the embedded story-card-canvas template.

image

console-sidebar-slds

profile-account-slds

profile-account-info-slds

left-profile-slds

left-account-info-slds

story-card-canvas

console-right-sidebar-slds

Layout for right sidebar cards.

Displays offer cards based on Vlocity Intelligence inputs and profile cards.

Cards for the left-profile-tag template are embedded in this template.

image

console-right-sidebar-slds

acuity-sidebar-offer-card

profileTags

acuity-sidebar-offer-card

left-profile-tag

story-slds

Embedded in the console-sidebar-slds template the story-slds layout presents story cards to the user and includes sorting by story type.

image

story-card-canvas

Various Story Cards

story-card

n/a

## Out of the Box Console Cards The Console Cards are accessible through the out of the box Console Layouts. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/console_cards.png)

Card

Description

Card Preview

Card Template

Layout

Layout Template

acuity-sidebar-offer-card

Card that displays offer links in the console sidebar.

image

acuity-sidebar-offer-card

console-right-sidebar-slds

console-right-sidebar-slds

profile-account-slds

Displays twitter photo, information, and actions in SLDS.

image

left-profile-slds

console-sidebar-slds

console-sidebar-slds

profile-account-info-slds

Displays information for console sidebar in SLDS.

image

left-account-info-slds

console-sidebar-slds

console-sidebar-slds

profileTags

Displays the Profile component in the right sidebar.

Profile tags are embedded in the console-right-sidebar-slds template.

image

left-profile-tag

console-right-sidebar-slds

console-right-sidebar-slds

# Base Vlocity LWC ReadMe Reference (Managed Package) For the managed package runtime, view examples, and learn about available attributes, methods, and other functions from the ReadMes of each Base Vlocity Lightning web component. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Downloadable ReadMes

Released

Download File

November 2022

baseLWCReadMes-November-2022.zip

Spring '22

baseLWCReadMes-Spring22.zip

Winter '22

baseLWCReadMes-Winter22.zip

Spring '21

baseLWCReadMes-Spring21.zip

## Links to ReadMes

Component

Description

AccordionSection

Adds the basic element inside the Accordion LWC.

Accordion

Displays content as vertically stacked sections.

Action

The base component for all action components.

Alert

Displays an SLDS or Newport styled alert.

AsyncUtils

A module that exposes a collection of utilities designed to simplify asynchronous operations

BaseLayout

All Vlocity cards extend this component.

BaseState

All Vlocity doc card layouts extend this component.

Button

Renders a button element to perform an action

CarouselItem

Displays the basic element inside a Carousel LWC.

Carousel

Displays a series of images inside a container one image at a time.

ChartDonut

Extends the Chart LWC and adds the ability to display and resize text at the center of the donut.

Chart

Displays data as a chart and enables users to perform actions from the chart.

CheckboxGroup

Enables users to select from single or multiple options.

CheckboxImageGroup

Extends the CheckboxGroup and enables users to select from single or multiple options by clicking images instead of checkboxes.

Combobox

Displays a read-only input element enabling users to select an option from a list of options.

DataTableCell

Adds the basic element inside a DataTable LWC to create individual cells.

DataTable

Creates a tabular structure of the data provided.

DatasourceApexRemote

Extends Datasource LWC with additional features for fetching data using an Apex class using a class and method.

DatasourceApexRest

Extends Datasource LWC with additional features for fetching data using an Apex class from a rest endpoint.

DatasourceDataraptor

Extends Datasource LWC with additional features for fetching data from an Omnistudio Data Mapper.

DatasourceIntegrationprocedure

Extends Datasource LWC with additional features for fetching data from an Integration Procedure.

DatasourceQuery

Extends Datasource LWC with additional features for fetching data using a Salesforce Object Query Language (SOQL) query.

DatasourceRest

Extends Datasource LWC with additional features for for data fetched from a REST web data source.

DatasourceSdk

Extends Datasource LWC with additional features for data fetched from an SDK.

DatasourceSearch

Extends Datasource LWC with additional features for etching data through a Salesforce Object Search Language (SOSL) query.

Datasource

Fetches data from Salesforce using different data source types by providing relevant input data.

DatePicker

Displays a date input element with a graphical user interface (GUI) widget that enables the user to select a date from a calendar.

DateTimePicker

Displays a set of input fields with graphical user interface (GUI) widgets that enables the user to select a date from a calendar and a time from a list.

Form

Creates a wrapper around Vlocity form elements to enable form capabilities.

Icon

Renders an SVG icon.

Img

Displays an available image.

Input

Renders an input element.

InteractionWrapper

A wrapper component for a customer interaction and the Power Launcher. The component is used inside a customer interaction records page to see all interactions with a customer and perform any actions related to the interaction.

LayoutItem

Adds the basic element inside the parent Layout LWC container, grouping content together to create sections inside the parent container.

Layout

Creates a flexible grid system arranging containers on a page or inside other containers.

ListItems

Adds the basic element for the List LWC. Creates the template for each list item.

List

Creates a searchable and sortable list from the data provided.

MaskedInput

Extends the Input LWC and controls what you can enter in the form input fields.

MenuItem

Adds the base element for building a menu with the Menu LWC.

Menu

Creates a menu from the list of menu items provided.

Modal

Displays content in a layer on top of the app, such as creating or editing a record, or various types of messaging and wizards.

MonacoEditor

Displays the code editor tool used inside Salesforce.

NavigateAction

Enables navigation to any of Salesforce PageReference type by leveraging Salesforce's navigation service.

NavigationUtils

A module that exposes a collection of utilities designed to simplify navigational functions.

Newport Loader

A utility that exposes a single load function used to ensure the Newport CSS styles load in the <head> of the page.

OutputField

Returns a read-only label, help text and value for the field name of a record.

Pill

Displays an input element that displays read-only labels, which can containing links and be removed from view on-demand.

Popover

Displays a non-modal dialog that must pair with a clickable trigger element and contain at least one focusable element.

Power Launcher Action

Displays Vlocity actions inside the PowerLauncher LWC and extends Action LWC.

Power Launcher

Gets and displays a list of vlocity actions based on the recordId.

ProgressBar

Displays progress of activity on a page.

Prompt

Displays simple content on a layer on top of an app. For example, use a prompt to confirm form submission or to direct the user to confirm a step in a process.

Pubsub

Enables data sharing between components. Multiple components can register and receive data from the same channel.

RadioGroup

Enables users to select from a list of options by selecting a radio button.

RadioColorPickGroup

Extends the RadioGroup LWC and enables users to choose from a list of options by selecting a color item instead of a radio button.

RadioImageGroup

Extends the RadioGroup LWC and enables users to choose from a list of options by selecting an image instead of a radio button.

Related List

Displays a table of data with a header that supports actions. All attributes from the DataTable LWC and SLDS Header LWC are available to this component.

RichTextEditor

Displays a text editor tool for rich content editing.

SLDS Header

Displays a page header, which contains a title, an icon, field data, and action links.

Slider

Displays a graphical control element for a user to set a value by moving an indicator horizontally or vertically.

Spinner

Displays an animated image that indicates a feature is loading

Styles

Specifies the theme of a component and gets the base CSS for that theme.

Tabset

Displays a tabbed container with multiple content areas, only one of which is visible at a time.

Tab

Adds the base element inside a Tabset LWC.

Textarea

Displays an HTML textarea element for entering multi-line text input that holds an unlimited number of characters.

TimePicker

Displays a graphical user interface (GUI) widget that allows the user to select a time from a list of options.

Toast

A feedback and confirmation tool that runs after the user takes an action.

Toggle

Enables a user to pick between two states, enable or disable an option, or select multiple options.

Tooltip

Displays an icon with a popover containing a small amount of text describing an element on the screen.

TreeItem

Adds the basic element in a Tree LWC.

Tree

Displays the visualization of a structural hierarchy, such as a sitemap for a website or a role hierarchy in an organization.

TreeListSelector

A variant of Tree Lightning Web Component that displays visualization of a structural hierarchy, that allows for browsing a tree based hierarchy as a list.

TreeListSelectorItem

Defines the individual items of a treeListSelector component.

Typeahead

Provides hints or a list of possible choices based on the text the user enters while filling out a form or performing a search.

Utility Functions

Helper functions available for all Vlocity Lightning Web Components.

Wizard Item

Creates the template for each wizard item inside the Wizard LWC.

Wizard

Displays a modal that enables navigating between steps in a process and displays a progress bar that shows where the user is in the process. Supports custom labels.

- **[Accordion Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_accordion_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the Accordion LWC ReadMe for each Vlocity release. - **[AccordionSection Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_accordionsection_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the AccordionSection LWC ReadMe for each Vlocity release. - **[Action Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_action_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the Action LWC ReadMe for each Vlocity release. - **[Alert Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_alert_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the Alert LWC ReadMe for each Vlocity release. - **[AsyncUtils ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_asyncutils_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains an AsyncUtils ReadMe for each Vlocity release. - **[BaseLayout Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_baselayout_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a BaseLayout LWC ReadMe for each Vlocity release. - **[BaseState Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_basestate_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a BaseState LWC ReadMe for each Vlocity release. - **[Button Lightning Web Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_button_lightning_web_component.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Button LWC ReadMe for each Vlocity release. - **[Carousel Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_carousel_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Carousel LWC ReadMe for each Vlocity release. - **[CarouselItem Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_carouselitem_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a CarouselItem LWC ReadMe for each Vlocity release. - **[Chart Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_chart_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Chart LWC ReadMe for each Vlocity release. - **[ChartDonut Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_chartdonut_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a ChartDonut LWC ReadMe for each Vlocity release. - **[CheckboxGroup Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_checkboxgroup_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a CheckboxGroup LWC ReadMe for each Vlocity release. - **[CheckboxImageGroup Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_checkboximagegroup_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a CheckboxImageGroup LWC ReadMe for each Vlocity release. - **[Combobox Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_combobox_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Combobox LWC ReadMe for each Vlocity release. - **[Datasource Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datasource_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Datasource LWC ReadMe for each Vlocity release. - **[DatasourceApexRemote Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datasourceapexremote_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a DatasourceApexRemote LWC ReadMe for each Vlocity release. - **[DatasourceApexRest Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datasourceapexrest_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a DatasourceApexRest LWC ReadMe for each Vlocity release. - **[DatasourceDataraptor Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datasourcedataraptor_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a DatasourceDataraptor LWC ReadMe for each Vlocity release. - **[DatasourceIntegrationProcedure Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datasourceintegrationprocedure_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a DatasourceIntegrationProcedure LWC ReadMe for each Vlocity release. - **[DatasourceQuery Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datasourcequery_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a DatasourceQuery LWC ReadMe for each Vlocity release. - **[DatasourceRest Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datasourcerest_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a DatasourceRest LWC ReadMe for each Vlocity release. - **[DatasourceSDK Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datasourcesdk_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a DatasourceSDK LWC ReadMe for each Vlocity release. - **[DatasourceSearch Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datasourcesearch_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a DatasourceSearch LWC ReadMe for each Vlocity release. - **[DataTable Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datatable_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the DataTable LWC ReadMe as of the Summer '21 release. - **[DataTableCell Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datatablecell_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a DataTableCell LWC ReadMe for each Vlocity release. - **[DatePicker Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datepicker_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a DatePicker LWC ReadMe for each Vlocity release. - **[DateTimePicker Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_datetimepicker_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a DateTimePicker LWC ReadMe for each Vlocity release. - **[Form Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_form_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Form LWC ReadMe for each Vlocity release. - **[Icon Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_icon_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains an Icon LWC ReadMe for each Vlocity release. - **[Img Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_img_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the Img LWC ReadMe for each Vlocity release. - **[Input Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_input_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains an Input LWC ReadMe for each Vlocity release. - **[InteractionWrapper Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_interactionwrapper_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the InteractionWrapper LWC ReadMe for each Vlocity release. - **[Layout Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_layout_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Layout LWC ReadMe for each Vlocity release. - **[LayoutItem Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_layoutitem_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a LayoutItem LWC ReadMe for each Vlocity release. - **[List Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_list_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a List LWC ReadMe for each Vlocity release. - **[ListItems Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_listitems_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a ListItems LWC ReadMe for each Vlocity release. - **[MaskedInput Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_maskedinput_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a MaskedInput LWC ReadMe for each Vlocity release. - **[Menu Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_menu_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Menu LWC ReadMe for each Vlocity release. - **[MenuItem Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_menuitem_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a MenuItem LWC ReadMe for each Vlocity release. - **[Modal Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_modal_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Modal LWC ReadMe for each release. - **[MonacoEditor Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_monacoeditor_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a MonacoEditor LWC ReadMe for each Vlocity release. - **[Navigate Action Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_navigate_action_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Navigate Action LWC ReadMe for each Vlocity release. - **[NavigationUtils ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_navigationutils_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a NavigationUtils ReadMe for each Vlocity release. - **[Newport Loader ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_newport_loader_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the Newport Loader ReadMe for each Vlocity release. - **[OutputField Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_outputfield_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains an OutputField LWC ReadMe for each Vlocity release. - **[Pill Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_pill_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Pill LWC ReadMe for each Vlocity release. - **[Popover Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_popover_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Popover LWC ReadMe for each Vlocity release. - **[Power Launcher Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_power_launcher_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the Power Launcher LWC ReadMe for each Vlocity release. - **[Power Launcher Action Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_power_launcher_action_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the Power Launcher Action LWC ReadMe for each Vlocity release. - **[ProgressBar Lightning Web Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_progressbar_lightning_web_component.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the ProgressBar LWC ReadMe for each Vlocity release. - **[Prompt Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_prompt_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Prompt LWC ReadMe for each Vlocity release. - **[Pubsub Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_pubsub_component.htm&release=264.0.0&type=5)** For the managed package runtime, the _Pubsub Component_ enables data sharing and passing messages between components that aren’t ancestors. Multiple components can register and receive data from the same channel. - **[RadioGroup Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_radiogroup_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a RadioGroup LWC ReadMe for each Vlocity release. - **[RadioColorPickGroup Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_radiocolorpickgroup_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the RadioColorPickGroup LWC ReadMe as of the Summer '21 release. - **[RadioImageGroup Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_radioimagegroup_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a RadioImageGroup LWC ReadMe for each Vlocity release. - **[Related List Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_related_list_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the Related List LWC ReadMe for each Vlocity release. - **[RichTextEditor Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_richtexteditor_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a RichTextEditor LWC ReadMe for each Vlocity release. - **[Slider Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_slider_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Slider LWC ReadMe for each Vlocity release. - **[SLDS Header Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_slds_header_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the SLDS Header LWC ReadMe for each Vlocity release. - **[Spinner Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_spinner_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Spinner LWC ReadMe for each Vlocity release. - **[Styles Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_styles_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Styles LWC ReadMe for each Vlocity release. - **[Tab Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_tab_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Tab LWC ReadMe for each Vlocity release. - **[Tabset Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_tabset_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Tabset LWC ReadMe for each Vlocity release. - **[Textarea Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_textarea_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Textarea LWC ReadMe for each Vlocity release. - **[TimePicker Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_timepicker_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a TimePicker LWC ReadMe for each Vlocity release. - **[Toast Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_toast_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Toast LWC ReadMe for each Vlocity release. - **[Toggle Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_toggle_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Toggle LWC ReadMe for each Vlocity release. - **[Tooltip Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_tooltip_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Tooltip LWC ReadMe for each Vlocity release. - **[Tree Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_tree_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Tree LWC ReadMe for each Vlocity release. - **[TreeItem Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_treeitem_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a TreeItem LWC ReadMe for each Vlocity release. - **[TreeListSelector Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_treelistselector_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the TreeListSelector LWC ReadMe for each Vlocity release. - **[TreeListSelectorItem Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_treelistselectoritem_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the TreeListSelectorItem LWC ReadMe for each Vlocity release. - **[Typeahead Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_typeahead_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Typeahead LWC ReadMe for each Vlocity release. - **[Utility Functions for Lightning Web Components ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_utility_functions_for_lightning_web_components_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains a Utility Functions for Lightning web components ReadMe for each Vlocity release. - **[Wizard Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_wizard_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the Wizard LWC ReadMe for each Vlocity release. - **[Wizard Item Lightning Web Component ReadMe (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_wizard_item_lightning_web_component_readme.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains the Wizard Item LWC ReadMe for each Vlocity release. # BaseLayout Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains a BaseLayout LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Spring '20 All card layouts extend _BaseLayout Lightning Web Component_ as a mixin. ## Available baseLayout Attributes

Attribute

Value

Type

Required

Description

record-id

 

string

 

Specifies params id used for the card.

theme

slds, nds (Default: slds)

string

 

Specifes the theme to use.

records

 

string or array

 

Specifies the data to pass to the cards inside the layout.

parent

 

string

 

Sets parent if the layout is a flyout.

definition

 

string

 

Specifies the complete JSON obj, which defines the data and definition for the card.

isLoaded

true, false (Default: false)

boolean

 

To load the layout, set to true.

debug

 

boolean

 

Enables the debug mode.

## Example baseLayout Component ``` export default class CardCanvas extends BaseLayout(LightningElement) { // component definition } ``` ## Available Methods reloadLayout() Fetches the updated data from the data source and reloads the layout. manipulateData() Manipulates records before passing to cards. Updates the records, passes them to the cards. fetchUserProfile() Call this method to fetch the userProfile data. By default, when the fetch User Info is checked, this fetches the value and stores it in the `userProfile` field. If the data is not present, you can call this method to fetch it again. setDefinition(val) The definition is auto-generated when a layout is created in the Card Designer, defining the layout. If it needs to be changed at runtime, you can call this method and pass `val` as the card definition. evaluateMetatags() By default, this method gets triggered when setting the definition value and sets the metatag from the definition. To set the metadata manually, use this method. loadRecords() Fetches the data again from the card data source and updates the records data. ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 All card layouts extend _BaseLayout Lightning Web Component_ as a mixin. ## Available baseLayout Attributes

Attribute

Value

Type

Required

Description

record-id

 

string

 

The params id used for the card.

theme

slds, nds (Default: slds)

string

 

Specifies the theme to use.

records

 

string or array

 

Data to pass to the cards inside the layout.

parent

 

string

 

Set parent if the layout is a flyout.

definition

 

string

 

The complete JSON obj which defines the data and definition for the card.

isLoaded

 

boolean

 

It is false until the layout is loaded.

debug

 

boolean

 

Enables the debug mode.

## Example baseLayout Component ``` export default class CardCanvas extends BaseLayout(LightningElement) { // component definition } ``` # BaseState Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains a BaseState LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Spring '20 All card states extend _BaseState Lightning Web Component_ as a mixin. ## Available baseState Attributes

Attribute

Value

Type

Required

Description

record-id

 

string

 

Specifies the params id used for the state.

theme

slds, nds (Default: slds)

string

 

Specifies the theme to use.

records

 

string or array

 

Specifies the complete data obj from a layout or card.

obj

 

string

 

Sets the state object.

state

 

string

 

Sets the state definition.

selectedState

true, false (Default: false)

boolean

 

To set as the selected state and make active, set to true.

debug

 

boolean

 

Enables the debug mode.

userProfile

 

string or object

 

Sets the user profile for the component, which is the same user profile for the org.

## Example baseState Component ``` import { BaseState } from "c/baseState"; export default class CardActiveState extends BaseState(LightningElement) { // component definition } ``` ## Available Methods enableEditMode An API method that sets edit mode to true. disableEditMode An API method that sets edit mode to false. updateObject Updates a record, and takes the record object as the parameter. toggleFlyout Shows or hides the flyout. handleSmartActions Reloads the smartActions. It can also be triggerd by pubsub, such as channel: `smartActions` , name: `reload`. ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 All card states extend _BaseState Lightning Web Component_ as a mixin. ## Available baseState Attributes

Attribute

Value

Type

Required

Description

record-id

 

string

 

This is the params id used for the state.

theme

slds, nds (Default: slds)

string

 

Specifes the theme to use.

records

 

string or array

 

The complete data obj from layout or card.

obj

 

string

 

Sets the state object.

state

 

string

 

Sets the state definition.

selectedState

 

boolean

 

Is true if this state is the selected state and is active.

debug

 

boolean

 

Enables the debug mode.

userProfile

 

string or object

 

Sets the userprofile for the component, which is the same userprofile for the org.

enableEditMode

 

method

 

Fire this method to enable the edit mode.

disableEditMode

 

method

 

Fire this method to disable the edit mode.

## Example baseState Component ``` export default class CardActiveState extends BaseState(LightningElement) { // component definition } ``` # Batch Action for Integration Procedures (Managed Package) For the managed package runtime, the Batch Action runs a Vlocity Scheduled Job with a **Data Source Type** of **Data Input**, **Query**, **List Input**, or **No Input**. A Vlocity scheduled job calls either another Integration Procedure or a VlocityOpenInterface. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The format of the input that the Scheduled Job sends to the Integration Procedure or VlocityOpenInterface it invokes differs based on the **Is Input As List** and **Batch Size** job fields. The original input to the Batch Action is passed in under a `vlcInputMap` JSON node. For example, suppose the job has a **Data Source Type** of **Query** and a query that selects Accounts. And suppose in the Batch Action's input you specify a Key of `CompanyName` and a Value of `Acme`. If **Is Input As List** is not checked in the job configuration, the input that the Scheduled Job sends looks like this: ``` {"Id": "00161000015IvYnAAK", "vlcInputMap": {"CompanyName": "Acme"}} ``` If **Is Input As List** is checked and the **Batch Size** is 1 in the job configuration, the input looks like this, with a `records` node for the list: ``` {"records": [{"Id": "00161000015IvYnAAK"}], "vlcInputMap": {"CompanyName": "Acme"}} ``` If **Is Input As List** is checked and the **Batch Size** is 2, the input looks like this, again with a `records` node for the list: ``` {"records": [{"Id": "00161000015IvYnAAK"}, {"Id": "001610000050IKQAA2"}], "vlcInputMap": {"CompanyName": "Acme"}} ``` If the **Data Source Type** is **List Input**, see the following example for an explanation of the input that the Scheduled Job sends to the Integration Procedure. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_tip.png) Tip If the **Data Source Type** is set to **List Input** or if **Is Input As List** is checked, the input must be in list format even if the list contains only one item. Omnistudio Data Mapper Extracts that return a list with one item often convert it to a single object. To convert a single object back into a list, you can use the first example in [Omnistudio Data Mapper Transform Examples (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_transform_examples.htm&release=264.0.0&type=5 "For the managed package runtime, Data Mapper Transform examples demonstrate how to convert a single item into a list with one item and how to convert a list of objects to a list of values."). The Integration Procedure doesn't wait for the job that its Batch Action calls to finish. However, the Batch Action returns the Id of the Apex batch job in the `ApexJobId` node of the Integration Procedure's output JSON. - **[Batch Action Properties for Integration Procedures (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_batch_action_properties_for_integration_procedures.htm&release=264.0.0&type=5)** For the managed package runtime, these properties are unique to or function in a unique manner in Batch Actions. The Batch Action runs a Vlocity Scheduled Job with a **Data Source Type** of **Data Input**, **Query**, **List Input**, or **No Input**. A Vlocity Scheduled Job calls either another Integration Procedure or a VlocityOpenInterface. - **[Workflow for Batch Action Example (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_batch_action_example.htm&release=264.0.0&type=5)** For the managed package runtime, one Integration Procedure uses a Batch Action to invoke a Vlocity Scheduled Job, which invokes a second Integration Procedure on a schedule. # Batch Action Properties for Integration Procedures (Managed Package) For the managed package runtime, these properties are unique to or function in a unique manner in Batch Actions. The Batch Action runs a Vlocity Scheduled Job with a **Data Source Type** of **Data Input**, **Query**, **List Input**, or **No Input**. A Vlocity Scheduled Job calls either another Integration Procedure or a VlocityOpenInterface. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Property

Description

Select Scheduled Job

Specifies the job to run. Only active jobs are listed.

Input List Key

For invoking a Vlocity Scheduled Job with a Data Source Type of List Input. Specifies the JSON node in the input that contains the list.

Available in Spring '20 and later releases.

Batch Options

(Optional) Specifies Key/Value pairs to be passed to the job as parameters, such as chainable true or parameters needed by the Integration Procedure or VlocityOpenInterface.

Is Batch Chainable?

(Optional) Specifies whether the Integration Procedure that the job calls is chainable. See Settings for Long-Running Integration Procedures (Managed Package).

# Batch Framework Initialization The Vlocity batch framework launches the jobs that are defined in the Vlocity Scheduled Job custom object. To start the Vlocity batch framework, you must execute Apex code, which creates an instance of the framework and invokes its start method. ``` VlocityBatchFramework batchFramework = new VlocityBatchFramework(); batchFramework.startBatchScheduler(''); ``` These commands create a [CronTrigger](https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_crontrigger.htm) (scheduled job) with the name VlocityScheduledJob. The Frequency parameter specifies how often the batch framework checks for jobs to launch. To ensure that jobs are executed on the desired schedule, specify a frequency greater than or equal to that of the highest-frequency job. For example, if you have a job that is scheduled to run hourly, specify `Hourly` or `15 Minutes` for the batch framework frequency. Note that the timing of job execution is controlled entirely by the batch framework, and jobs might not be executed at precise intervals. ``` VlocityBatchFramework batchFramework = new VlocityBatchFramework(); batchFramework.startBatchScheduler('15 Minutes'); ``` # Batch Framework Initialization (Managed Package) For the managed package runtime, the Vlocity batch framework launches the jobs that are defined in the Vlocity Scheduled Job custom object. To start the Vlocity batch framework, you must execute Apex code, which creates an instance of the framework and invokes its start method. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ``` VlocityBatchFramework batchFramework = new VlocityBatchFramework(); batchFramework.startBatchScheduler(''); ``` These commands create a [CronTrigger](https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_crontrigger.htm) (scheduled job) with the name VlocityScheduledJob. The Frequency parameter specifies how often the batch framework checks for jobs to launch. To ensure that jobs are executed on the desired schedule, specify a frequency greater than or equal to that of the highest-frequency job. For example, if you have a job that is scheduled to run hourly, specify `Hourly` or `15 Minutes` for the batch framework frequency. Note that the timing of job execution is controlled entirely by the batch framework, and jobs might not be executed at precise intervals. ``` VlocityBatchFramework batchFramework = new VlocityBatchFramework(); batchFramework.startBatchScheduler('15 Minutes'); ``` # Batch Jobs for Integration Procedures and Vlocity Open Interfaces The Vlocity batch framework lets you run an Integration Procedure or VlocityOpenInterface on a schedule. Typical use cases are a recurrent billing cycle or a scan for insurance policies that come up for renewal in the next 60 days. When a job is run, it sends its input to an Integration Procedure or Apex method that processes the records. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Batch Actions and Scheduled Jobs are available in Omnistudio if the Omnistudio package was installed before the Salesforce Industries package was installed. See [OmniStudio-First Side-by-Side Package Installation Results](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_first_side_by_side_package_installation_results.htm&type=5&language=en_US). The input can be one of the following: - Null: The Integration Procedure or VlocityOpenInterface finds data using its Actions or methods. - SOQL query: The result of a static query is the input. - JSON data with merge fields: The Integration Procedure is called by a business process that has contextual data, such as an Omniscript, and is queued immediately rather being scheduled. To define the jobs to be run, you add records to the Vlocity Scheduled Job custom object. To launch scheduled jobs, you can: - Run the Vlocity batch framework - Launch jobs programmatically The following sections describe these tasks in detail. - **[Batch Framework Initialization](https://help.salesforce.com/s/articleView?id=xcloud.os_batch_framework_initialization_55937.htm&release=264.0.0&type=5)** The Vlocity batch framework launches the jobs that are defined in the Vlocity Scheduled Job custom object. To start the Vlocity batch framework, you must execute Apex code, which creates an instance of the framework and invokes its start method. - **[Programmatic Job Invocation](https://help.salesforce.com/s/articleView?id=xcloud.os_programmatic_job_invocation_55948.htm&release=264.0.0&type=5)** Use VlocityBatchFramework methods to start scheduled jobs with a Data Source Type of Query. You can start all jobs, multiple jobs, or a single job. You can also invoke an Integration Procedure or VlocityOpenInterface as a job. # Batch Jobs for Integration Procedures and Vlocity Open Interfaces (Managed Package) For the managed package runtime, the Vlocity batch framework lets you run an Integration Procedure or VlocityOpenInterface on a schedule. Typical use cases are a recurrent billing cycle or a scan for insurance policies that come up for renewal in the next 60 days. When a job is run, it sends its input to an Integration Procedure or Apex method that processes the records. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The input can be one of the following: - Null: The Integration Procedure or VlocityOpenInterface finds data using its Actions or methods. - SOQL query: The result of a static query is the input. - JSON data with merge fields: The Integration Procedure is called by a business process that has contextual data, such as an Omniscript, and is queued immediately rather being scheduled. To define the jobs to be run, you add records to the Vlocity Scheduled Job custom object. To launch scheduled jobs, you can: - Run the Vlocity batch framework - Launch jobs programmatically - Use a [Batch Action](https://help.salesforce.com/s/articleView?id=xcloud.os_batch_action_for_integration_procedures.htm&release=264.0.0&type=5 "For the managed package runtime, the Batch Action runs a Vlocity Scheduled Job with a Data Source Type of Data Input, Query, List Input, or No Input. A Vlocity scheduled job calls either another Integration Procedure or a VlocityOpenInterface.") in an Integration Procedure The following sections describe these tasks in detail. - **[Batch Framework Initialization (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_batch_framework_initialization.htm&release=264.0.0&type=5)** For the managed package runtime, the Vlocity batch framework launches the jobs that are defined in the Vlocity Scheduled Job custom object. To start the Vlocity batch framework, you must execute Apex code, which creates an instance of the framework and invokes its start method. - **[Programmatic Job Invocation (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_programmatic_job_invocation.htm&release=264.0.0&type=5)** For the managed package runtime, use VlocityBatchFramework methods to start scheduled jobs with a Data Source Type of Query. You can start all jobs, multiple jobs, or a single job. You can also invoke an Integration Procedure or VlocityOpenInterface as a job. - **[Vlocity Scheduled Job Fields (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_vlocity_scheduled_job_fields.htm&release=264.0.0&type=5)** For the managed package runtime, to create batch jobs, go to the Vlocity Scheduled Jobs tab. For each job you want to schedule, add a record by clicking **New**. Then specify the settings you need in the Vlocity Scheduled Job fields. # Batch Management with Rebate Management Rebate Management flows use Batch Management capabilities to process a large number of filtered and aggregated transactions in manageable batches, and calculate rebate amounts. Two predefined batch jobs, Calculate Rebate Payout and Calculate Rebate Payout for All Periods, that are available with Rebate Management and can be used in any scheduled flow. Modify the predefined batch jobs, or create your own. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
## Use the Predefined Batch Jobs for Rebate Management In Setup, find the predefined batch jobs under Workflow Services. The Calculate Rebate Payout batch job processes Rebate Member Product Aggregate records in batches of 200 and updates the payout values in Member Payout records. This batch job is used in the Rebate Orchestration Flow. ![The predefined Batch Management job with Rebates as group, and Rebate Member Product Aggregate as object.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/channel_revenue_mgmt/images/predefined_batch_management_job_with_rebate_management.png) The Calculate Rebate Payout for All Periods predefined batch management job processes Rebate Member Product Aggregate records in batches of 2,000 and updates the payout values in Member Payout records. This batch job is used in the Rebate Orchestration Flow 2. ![The predefined Batch Management job with Rebates as group, and Rebate Member Product Aggregate as object.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/channel_revenue_mgmt/images/batch_job_calc_all_periods.png) If your org uses a different object to store aggregate records, change the Source Object in the batch job definition. You can also define filter criteria based on which records you select for processing. And you can schedule your batch jobs using scheduled flows. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note The default batch size for rebate payout processing is 2,000 records. You can adjust this value between 200 and 2,000 based on data volume and any custom logic. If Apex governor limits are exceeded, consider reducing the batch size. Make changes only after evaluating system performance and processing requirements. ## Create Custom Batch Job for Rebate Management If you want to define your own filter criteria, or change any parameters, create your own custom batch job. When creating a batch job, make sure you select the following: - Select Execution Process as an active Flow definition API name - Select Group as Rebates. - Select the Source Object as the aggregate object. - For the Calculate Rebate Payout batch job, define criteria to filter records by payout period, and last calculation date. You can add additional criteria. - For the Calculate Rebate Payout for All Periods batch job, define criteria to filter records by last calculation date. You can add additional criteria. For detailed instructions, see [Create a Batch Job](https://help.salesforce.com/s/articleView?id=ind.task_create_batch_job.htm&language=en_US). After a batch job is run, track the progress and status of the batch job and its job parts using Monitor Workflow Services. For detailed instructions, see [Monitor Your Batch Jobs](https://help.salesforce.com/s/articleView?id=ind.task_monitor_batches.htm&language=en_US). #### See Also - [Batch Management](https://help.salesforce.com/s/articleView?id=ind.concept_batch_management.htm&type=5&language=en_US) - [Apex Governor Limits](https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_apexgov.htm) - [Things to Keep in Mind While Using Batch Management](https://help.salesforce.com/s/articleView?id=ind.concept_batch_management_limits.htm&language=en_US) - [Flow Builder](https://help.salesforce.com/s/articleView?id=platform.flow.htm&type=5&language=en_US) - [Monitor Your Batch Jobs](https://help.salesforce.com/s/articleView?id=ind.task_monitor_batches.htm&type=5&language=en_US) # Batch Update New Price for Price Protection The Batch Update New Price for Price Protection flow automates the process of updating the new prices for Price Protection Execution Line Items in bulk to ensure that the latest pricing information is applied consistently across all relevant records, reducing manual effort and potential errors. This flow utilizes the Get New Price for Product invocable action to retrieve updated pricing information. The retrieved prices are then applied to the relevant price protection line items through a bulk update operation. Process Steps: - Retrieve New Prices: The flow calls the Get New Price for Product action, which fetches the updated price and price type for each product. - Validate Data: The system checks that all required parameters (such as PriceProtectionExecutionLineItemId, ProductId, and AccountId) are present and valid. - Bulk Update Execution: The updated prices are applied in batches, ensuring efficient processing while adhering to the system’s batch size limits. - Error Handling: If errors occur (e.g., missing required fields or exceeding batch limits), predefined error messages are triggered, guiding the user to correct the issue. # Before You Encrypt Before you encrypt data in Salesforce, or in any cloud service, first make sure that you’re matching the right security solution to the type of threats that you face. For example, if you’re concerned about protecting against end-user or administrative account takeover attacks, it’s possible that data encryption [isn’t an appropriate control](https://help.salesforce.com/s/articleView?id=xcloud.security_overview_trust.htm&language=en_US) against such a threat. Takeover attacks usually occur through social engineering and malware infection. Instead, consider malware detection and activity monitoring as ways to identify when users could have been compromised and a malicious outsider is attempting to gain access to data. Salesforce Shield Platform Encryption protects data at rest. Don’t confuse it with a control that encrypts data in transit, such as [Transport Layer Security (TLS)](https://en.wikipedia.org/wiki/Transport_Layer_Security), which Salesforce provides for your org by default. Shield Platform Encryption is best suited for: - Protecting against data compromise due to unauthorized database access - Bolstering compliance with regulatory requirements or internal security policies - Satisfying contractual obligations to handle sensitive and private data on behalf of customers The best approach is to adopt a defense-in-depth strategy that takes advantage of all the security features Salesforce offers. To learn about the available customer-controlled security capabilities, take the [Security Basics Trail](https://trailhead.salesforce.com/modules/security_basics). After completing a [threat modeling exercise](https://trailhead.salesforce.com/content/learn/modules/threat-modeling-fundamentals/learn-threat-modeling-fundamentals), use the outcome to inform a granular data classification. Identify data elements that are sensitive, private, or confidential. Your best strategy is to encrypt only the most sensitive of those data elements. Doing so can help balance stronger data protection controls against the need to build and preserve critical business functionality on the Salesforce Platform. # Before You Install an AppExchange Package Before you install a managed package from AppExchange, review any limits or requirements, and consider trying a Test Drive first. ## Take a Test Drive A test drive is a fully functional Developer Edition Salesforce environment that contains the managed package. Go to [AppExchange](https://appexchange.salesforce.com/), find a solution, and click **Test Drive** to try out the solution before you install it. ## Verify Requirements Every package has its own requirements. To verify that a package is compatible with your Salesforce org, review any requirements listed in the solution’s listing. ## Understand Edition and Org Limits Consider how installing a managed package impacts edition and org limits in each of these scenarios. | Scenario | Impact on Edition or Org Limit | | --- | --- | | Custom objects, custom fields, tabs, and apps from a managed package installed from AppExchange. | These components don’t count against your edition allocation, but they do count against the total limit for your Salesforce org. | | Custom objects, custom fields, tabs, and apps from a managed or unmanaged package not publicly listed on AppExchange. | Custom objects, custom fields, tabs, and apps count against the allocation for your Salesforce edition. | | Components from an expired or suspended managed package. | Custom fields in an expired or suspended package count against the custom field limit for your Salesforce edition. To fix this issue, reactivate your license or uninstall the package. | | Data stored in the records associated with custom objects in managed packages. | Record data counts against your org’s data storage limit. | # Before You Start Using the Omnistudio Build Tool (Managed Package) For the managed package runtime, before you start, understand the available and recommended authentication methods, the command syntax, and how the job file works. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Authentication Methods for the Omnistudio Build Tool (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_auth.htm&release=264.0.0&type=5)** For the managed package runtime, use one of three available authentication methods for the Build Tool: Salesforce DX CLI, org properties files, or OAuth authentication. Salesforce DX CLI is recommended. - **[Export and Deployment Tools (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_export_deploy_tools.htm&release=264.0.0&type=5)** For the managed package runtime, use the correct command syntax and specify the proper data pack type. Use a job file to define the export and deploy process settings. - **[Data Pack Types Supported in the Omnistudio Build Tool (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_data_pack_types.htm&release=264.0.0&type=5)** For the managed package runtime, when you create a query or manifest for the job, specify these data pack types in the job file. # Behind the Scenes: The Search Index Encryption Process Salesforce's search engine, powered by Apache Solr and Apache Lucene, organizes record data in a scalable, partitioned search index. Search Encryption secures org-specific search index files (.fdt, .tim, and .tip file types) using a unique AES-256 bit key. This encryption happens at the segment level, ensuring all index operations in memory are encrypted. Access to the encrypted search index and key cache is strictly via programmatic APIs. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
Admins enable "Encrypt Search Indexes" to activate this feature, prompting Shield Platform Encryption to create and store a Data Encryption Key (DEK). Once the DEK is active, search index encryption begins. When records are created or edited, the encryption service uses the DEK (retrieved from cache or the Shield KMS via TLS-encrypted channels) to encrypt data with AES-256 and a random initialization vector (IV). The key ID and IV are then saved in the search index. For searches, the relevant index segment is opened, the key ID and IV read, and data decrypted before processing. For orgs utilizing the updated search index framework, this process is streamlined: all indexes for all fields are automatically encrypted without needing a specific encryption policy. Admins can manage this by turning encryption on or off, generating new root keys, or generating new DEKs. In orgs not yet on the updated framework, a security administrator must enable Search Index Encryption from Setup. This involves creating a tenant secret of the "Search Index" type, then enabling "Encryption for Search Indexes," and finally configuring an encryption policy by selecting specific fields and files to encrypt. In this setup, an org-specific HSM-derived key is generated on demand from the tenant secret and securely passed to the search engine’s cache. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note If Salesforce admins disable encryption on a field, all index segments that were encrypted are unencrypted and the key ID is set to null. This process can take up to seven days. # Behind the Scenes: The Shield Platform Encryption Process for Tenant Secrets With field-level encryption, when users submit data, the application server looks for the org-specific data encryption key (DEK) in its cache. If it isn’t there, the application server gets the encrypted tenant secret from the database and asks the regional key management server (KMS) to derive the key. The Shield Platform Encryption service then encrypts the data on the application server. If you opt out of key derivation or use either the External Key Management Service or the Cache-Only Key Service, the encryption service applies your customer-supplied data encryption key directly to your data. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
Salesforce securely generates the primary and tenant secrets by using hardware security modules (HSMs). The unique key is derived by using PBKDF2, a key derivation function (KDF), with the primary and tenant secrets as inputs. The Shield Platform Encryption process is as follows: - When a Salesforce user saves encrypted data, the runtime engine determines from metadata whether to encrypt the field, file, or attachment before storing it in the database. - If so, the encryption service checks for the matching data encryption key in cached memory. - The encryption service determines whether the key exists. - If so, the encryption service retrieves the key. - If not, the service sends a derivation request to the regional KMS and returns it to the encryption service running on the Salesforce Platform. - After retrieving or deriving the key, the encryption service generates a random initialization vector (IV) and encrypts the data by using 256-bit AES encryption. - The ciphertext is saved in the database or file storage. The IV and corresponding ID of the tenant secret used to derive the data encryption key are saved in the database. Salesforce generates a new primary secret at the start of each release. # Benefit Actions Benefit Actions are actions that can be triggered for a benefit. Benefit Actions are executed when a benefit is assigned to a member. For example, when a member is upgraded from Silver to Gold tier, the member gets priority support as an entitlement. This benefit requires a downstream action to create a priority service entitlement record in the Service Cloud. The record is created in the Service Cloud through benefit actions. The benefit action is executed to create the Priority Support Entitlement record when the Priority Support benefit is assigned to the member. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
Examples of Benefit Actions that can be created are: - Service Entitlements to define service SLAs - Partner Fund Allocations (market development funds) for defining fund allocations for lead generation and nurturing - Voucher issuance Benefit Actions can be invoked in the following ways: - When a new benefit is assigned to a member: The Benefit Action is always invoked when a new benefit is assigned. For example, when a member changes from Silver to Gold tier and is eligible for Priority Support. - When the benefit is updated: The Benefit Action execution is optional when a new benefit is updated. The execution is based on the Benefit Action definition. For example, when a member retains Gold tier and the period for the Priority Support must be extended. - When the benefit no longer applies: The Benefit Action execution is optional and based on the Benefit Action definition. For example, when a member moves from Gold to Silver tier and the Priority Support benefit no longer applies. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The same Benefit Action is triggered for all the preceding scenarios based on the Benefit Action configuration. Depending on the status of the Member Benefit, the appropriate behavior is defined. - **[Create Benefit Action](https://help.salesforce.com/s/articleView?id=xcloud.create_benefit_action.htm&release=264.0.0&type=5)** Define the action to execute when a benefit is assigned to a member. - **[Create Benefit Actions Using the Templates Provided](https://help.salesforce.com/s/articleView?id=xcloud.benefit_type_template.htm&release=264.0.0&type=5)** Use the prebuilt templates included to create Benefit Actions for common scenarios. You can also use the templates as a reference for setting up custom Benefit Actions. - **[Use the Assign Support Entitlement Template Flow](https://help.salesforce.com/s/articleView?id=xcloud.task_ba_flow_entitlement.htm&release=264.0.0&type=5)** Use this template flow in a Benefit Action to assign support Entitlement to eligible members. - **[Use the Issue a Voucher Template Flow](https://help.salesforce.com/s/articleView?id=xcloud.issue_voucher_flow.htm&release=264.0.0&type=5)** Use this template flow to issue a voucher to eligible members. - **[Use the Issue a Free Sample Template Flow](https://help.salesforce.com/s/articleView?id=xcloud.task_ba_flow_free_sample.htm&release=264.0.0&type=5)** Use this template flow to issue a free product sample to an eligible member by creating an order. - **[Use the Allocate Market Development Fund Template Flow](https://help.salesforce.com/s/articleView?id=xcloud.task_ba_flow_mdf.htm&release=264.0.0&type=5)** Use this template flow to allocate a market development fund to a member. - **[Define Input Variables in Benefit Actions](https://help.salesforce.com/s/articleView?id=xcloud.benefit_actions_input_variables.htm&release=264.0.0&type=5)** Use input variables in Benefit Actions to influence flow behavior. # Benefits Use benefits to reward and motivate loyalty customers when they increase their engagement with the loyalty program. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled
Loyalty benefits are privileges that loyalty program members are entitled to receive. Loyalty program members are rewarded with benefits to increase their engagement in the program. As members move to higher tiers, they receive more benefits. Benefits can be used along with tiers to motivate members to reach higher tiers by enabling better benefits for higher tiers. Loyalty benefit includes: - **Benefit Type** groups the benefits that are created under the benefit type. For example, Priority Phone Support and Standard Web Support. - **Benefits** are created within the benefit type. Benefits are mapped to the members based on the tier or program rules. For example, Support Benefits. - **Benefit Action** is an action that can be automatically triggered. For example, when a support benefit is defined, a corresponding Service Entitlement can be created in Service Cloud using Benefit Action. ## Explore and Learn Watch this video to understand how to add rewards for your loyalty program. If you aren’t able to watch the video in full screen, open the video on a new tab: [![Watch video](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/resources-global/_corporate/images/play_btn.png) Add a Loyalty Program’s Rewards](https://salesforce.vidyard.com/watch/P3k3wpwapNABrQVdBnWRmq). # Benefits of Pro Suite Take advantage of Pro Suite’s advanced features, such as Agentforce, Slack integration, enhanced customizations and automation, Quick Settings, Forecasting, and more! You get all these new features at your current pricing (for as long as you continue your Salesforce subscription). ## Enhanced Customization and Automation Tailor Salesforce to your specific business needs with custom objects, fields, and advanced automation tools like Flow, which helps eliminate repetitive tasks. Access deeper automation, advanced customization, and more robust data visibility. ## Advanced Sales and Service Features Access sales forecasting, quoting, and omni-channel support routing that helps close deals faster and resolve customer cases more efficiently. ## Integrated Marketing and Commerce Apps Use email campaigns and direct payment links for a seamless buying experience. Drive sales and growth with a direct-to-consumer (D2C) online shopping experience that represents your brand, engages shoppers, and delivers tailored interactions that reinforce customer loyalty. ## AI-Powered Insights Leverage AI capabilities to gain deeper insights into your data, predict trends, and make smarter decisions. **Agentforce** is a conversational AI solution that helps you manage business tasks, surface key insights, and prep for meetings. Use plain language to describe what you're looking for and Agentforce instantly pulls up the information you need. **Generative AI** is a set of tools that use your data to automatically create brand-new content, such as personalized emails and account summaries. ## Scalability and Storage Pro Suite is built on the full Salesforce platform, allowing you to easily scale and add more advanced features or integrations as your business grows without needing to migrate again. You also get ten and a half times the file storage limit (16 GB). ## AppExchange Access Extend the power of your CRM system with access to thousands of pre-built apps and integrations available on the Salesforce AppExchange. ## Pricing Protection We are committed to honoring your current pricing. You will upgrade to the Pro Suite edition and keep your existing Essentials pricing for as long as you continue your Salesforce subscription. This ensures you get all the new value and features of Pro Suite without increased costs. For more information about Pro Suite, see [Introduction to Salesforce Suites](https://help.salesforce.com/s/articleView?id=xcloud.easy_help_understand_smb.htm&type=5&language=en_US). # Best Practice Developer Workflow (Managed Package) For the managed package runtime, when developing on a large project, exporting data packs through queries isn't an ideal process. We recommend that you use a manifest-driven workflow to track the major items that you’re working on. Then, extract those items to commit to version control. The manifest section of the job file can be used to create a collection of data packs to be exported or deployed. Manifests are based on the data pack key of each data pack. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Data Pack Key (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_vlocitydatapackkey.htm&release=264.0.0&type=5)** For the managed package runtime, each data pack has a data pack key that represents its unique name in the data pack system. After a data pack is exported, the data pack key matches the folder name of the data pack. - **[Using the Data Pack Key in the Manifest (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_using_datapack_key_manifest.htm&release=264.0.0&type=5)** For the managed package runtime, add the data pack key to the manifest of the job file to drive export of this product along with all its dependencies. - **[Creating Job Files for the Omnistudio Build Tool (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_adding_job_files.htm&release=264.0.0&type=5)** For the managed package runtime, when you define your project through a manifest, we recommend that you create two job files: one for export and one for deployment. - **[Other Job File Settings (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_other_job_file_settings.htm&release=264.0.0&type=5)** For the managed package runtime, the job file has a number of additional runtime settings that you can use to define your project and to run exports and deployments run. Modify the default settings only to account for unique issues in your org. # Best Practice for Making Remote Calls (Managed Package) For the managed package runtime, when making remote calls, start the flow with the `executeAction` method. Do not start the flow with the `invokeAction` method. To standardize the action flow and use the built-in logic of the action framework, Vlocity recommends that all action flows begin with `executeAction`. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The `invokeAction` method's purpose is to make the remote call with request parameters processed by the `preProcess` method.  The `preProcess` method, by default, supports queueable and chainable process flows. The `postProcess` method standardizes the response in a predictable format. # Best Practices and Additional Information for Anomalous Logins Understanding the nature of anomalous logins and available resources can help you manage and respond to these events effectively. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

A login is considered anomalous when its characteristics (IP address, browser agent, location, etc.) significantly deviate from the user's established baseline of typical logins over the past 90 days. Machine learning models create a profile for each user based on their login history. Incoming logins are compared against this baseline, and an alert is triggered when a significant deviation exceeds a defined threshold. If no response is received for the email notification about this event, the system will assume it was a false positive, and the user will not receive the same notification for the same endpoint (IP, Browser, UserId combination) within a 30-day window. Salesforce continuously monitors login activity for various suspicious patterns, including credential stuffing and brute-force attacks. Successful logins from suspicious clients trigger mitigating actions like identity challenges and forced password resets. Practicing good password hygiene, never sharing credentials, and enabling multi-factor authentication (MFA) are crucial steps to prevent unauthorized access. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note The anomalous login score is currently computed only for non-SSO logins. SSO logins with MFA are considered less susceptible to these types of attacks. # Best Practices and Considerations for Leveraging Event Log Object Data It’s important to understand the recommended practices and limitations for the Event Log Object framework to get the most out of your log data. Here are some tips to ensure your queries run smoothly.
Available in: Salesforce Classic (not available in all orgs), and Lightning Experience

Available in: Enterprise, Performance, and Unlimited Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

User Permissions Needed

To query and view event log object data:

View Event Log Object Data

## Querying Event Log Object Data Through SOQL As of Spring 25’, the Event Log Object framework only supports SOQL queries, with the following exceptions: - Relationship queries - `HAVING` - `OFFSET` ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Event Log Objects are designed for users with specific permissions to perform interactive analytics and diagnose security and performance incidents via SOQL. This feature is not meant to handle concurrent queries from a large number of users. ## Timestamp Field Considerations The only supported date function for the Timestamp field in a `where` clause within the Event Log Object framework is DAY\_ONLY(). See [Date Functions](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_select_date_functions.htm) for more information on querying data by date periods. You can query up to 15 days of data at a time using the Timestamp filter present on all event log objects. Consequentially, expect these behaviors when querying using the Timestamp field: - When there are 3 or more Timestamp filters in the WHERE clause, we block the execution of the query with an error. - `!=` isn’t supported - When the Timestamp filter isn’t specified in the query, we append a filter in the backend to query only the last 15 days of data. - If you are specifying Timestamp filters as part of an `AND` condition, the time range must fall within 15 days. - No more than 2 Timestamp filters can be used for `OR` and `IN` operators. - If a full range isn’t specified in the Timestamp filter (for example, if either the upper or lower bound is missing) the filter automatically retrieves 15 days of data in the direction of the missing bound. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_example.png) Example Valid Format: - `Timestamp >= userSpecifiedTimeLower AND timestamp <= userSpecifiedTimeUpper` - `Timestamp = userSpecifiedTime1 OR Timestamp = userSpecifiedTime2` - `Timestamp IN (userSpecifiedTime1, userSpecifiedTime2)` ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_example.png) Example Valid Timestamp Filter: - `Timestamp >= 2024-09-27T17:18:15.553Z AND timestamp <= 2024-10-05T17:18:15.553Z` ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_example.png) Example Invalid Timestamp Filter: - `where Timestamp > 2024-09-27T17:18:15.553Z OR Timestamp = 2024-10-27T17:18:15.553Z` - `where Timestamp = 2021-10-26T17:18:15.553Z AND Timestamp < 2024-10-27T17:18:15.553Z` # Best Practices and Considerations for Quip Engagement Metrics Looking for best practices and considerations to help you get the most out of Quip engagement metrics? You’ve come to the right place. - **[Quip Engagement Metrics Best Practices](https://help.salesforce.com/s/articleView?id=xcloud.quip_template_metrics_best_practices.htm&release=264.0.0&type=5)** Keep these best practices in mind when setting up Lightning reports with Quip engagement metrics. - **[Quip Engagement Metrics Considerations and Limits](https://help.salesforce.com/s/articleView?id=xcloud.quip_template_metric_considerations.htm&release=264.0.0&type=5)** Keep these considerations and limitations in mind when setting up and using Lightning reports with Quip engagement metrics. - **[What Time Zone Is Used for Quip Metric Reporting?](https://help.salesforce.com/s/articleView?id=xcloud.quip_metric_time_zones.htm&release=264.0.0&type=5)** Quip metrics are aggregated for a given day in Coordinated Universal Time (UTC), but Salesforce reports show metrics in your local time zone. At certain times of day, UTC differs by 1 day from your time zone. For this reason, Quip metrics from a single date sometimes appear incorrectly in your Salesforce reports. To see more accurate metric dates, report on the Metric Date Only and Last Updated Date Only fields. # Best Practices and Guidelines for App Rating and Feedback Requests Here are guidelines on how to best engage with your users to ask them to rate and provide feedback for your app. ## Frequency - Don’t ask users to rate your app too frequently, as it can cause user frustration and disinterest. - Apple and Google allow asking users for a rating up to 3 times per app version (unofficial but widely experienced). ## Don’t interrupt - Don’t prompt users for a rating and feedback as soon as the app starts up. - Find the correct location and time to ask for a rating within the user experience. ## Give enough time - Make sure users have logged in a certain number of times before asking for a rating. - Make sure users have the opportunity to thoroughly experience your app before asking for a rating. ## Select users - Ask for ratings and feedback from the most engaging users of your app. - Identify users that haven’t experienced any issues while using your app for a rating and feedback. Selecting these users has a higher chance that they leave a positive review. ## Be transparent - Use the system provided prompt to ask for a rating. - Don’t ask questions (for example, do you like the app?) before presenting the rating prompt. ## User experience - Don’t use a visible UI element (such as a button) that users must tap. - If the app rating prompt quota is reached, the UI element can appear unresponsive. ## Testing When you test a custom Lightning web component on an iOS Mobile Publisher app that uses AppReviewService API in production, you can only prompt an app review 3 times every 360 days. #### See Also - [_Apple_: Ratings and reviews](https://developer.apple.com/design/human-interface-guidelines/patterns/ratings-and-reviews/) - [_Google_: Google Play In-App Reviews API](https://developer.android.com/guide/playcore/in-app-review) # Best Practices and Troubleshooting This information helps you implement recommendations and troubleshoot when using Mobile Publisher. Setup for Mobile Publisher is available in Lightning Experience only. However, admins can switch to Lightning Experience from Salesforce Classic to manage the branded app lifecycle. Recommendations Mobile Publisher for Experience Cloud - URLs that share a domain, but have different paths are treated as internal domain URLs and open inside the Experience Cloud site as a WebView. - Experience Cloud users can be restricted from using the Experience Cloud app through external client app settings. See [Manage External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.manage_external_client_apps.htm&language=en_US) for more information. - Avoid using custom components for viewing or downloading files such as images or PDFs. Use the file reader provided by the mobile operating system (Android or iOS) to view files by tapping directly on the image or PDF. - Submit a beta app request after you know the final Experience Cloud site URL. - Use the final branded App Name in a test project since the App Name gets tied to the Experience Cloud site URL. - Use CDN for content storage and distribution that’s geographically closer to your users. CDN changes the URL for the Experience Cloud site. - Avoid using pop-up windows or new tabs in the Experience Cloud site, because they aren’t optimized for mobile apps. - To ensure no last-minute changes to Experience Cloud site URLs, work closely with your site admins. - Experience Cloud site admins should avoid making any URL changes after the Mobile Publisher for Experience Cloud app is live. - For orgs with multiple Experience Cloud sites, deep linking to other sites can cause issues. - Google Chrome blocks the download of files and content from insecure sources (HTTP). Ensure that your files or content is fully migrated to HTTPS to protect your users and to avoid any issues. - Use a sandbox or UAT environment for testing. - Use standard components for logout. - Only enable the **Manage mySalesforce App** permission for admins or specific required profiles. - When you create a site for testing in a sandbox, ensure that the underlying technology is the same as the site in production. For example, if your production site uses an LWR template, your sandbox site must use the same LWR template. And if your production site uses an Aura template, the sandbox site must use the same Aura template. - **[Testing](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_best_practices_test.htm&release=264.0.0&type=5)** This information helps you troubleshoot when testing Mobile Publisher apps. - **[Authentication](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_best_practices_auth.htm&release=264.0.0&type=5)** This information helps you troubleshoot authentication issues when using Mobile Publisher. - **[De-list or Remove Apps from App Stores](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_delist_apps.htm&release=264.0.0&type=5)** Learn how to temporarily remove apps from app stores or decommission apps that are no longer being used. - **[Suggestions to Prevent App Store and Play Store Rejections](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_app_store_reject.htm&release=264.0.0&type=5)** Keep these suggestions in mind to help prevent Apple and Google reviewers from rejecting your iOS and Google Apps. - **[Mobile Publisher for Experience Cloud Best Practices and Troubleshooting](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_commun_troubleshooting.htm&release=264.0.0&type=5)** Here’s some best practices and troubleshooting when using Mobile Publisher for Experience Cloud. - **[Known Issues and Limitations for Mobile Publisher](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_best_practices_known_issues.htm&release=264.0.0&type=5)** Learn about known issues for Mobile Publisher. # Best Practices and Troubleshooting This information helps you implement recommendations and troubleshoot when using Mobile Publisher. - Setup for Mobile Publisher is available in Lightning Experience only. However, admins can switch to Lightning Experience from Salesforce Classic to manage the branded app lifecycle. Recommendations - Use a sandbox or UAT environment for testing. - Use standard components for logout. - Only enable the Manage mySalesforce App permission for admins or specific required profiles. - **[Authentication](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_best_practices_auth.htm&release=264.0.0&type=5)** This information helps you troubleshoot authentication issues when using Mobile Publisher. - **[De-list or Remove Apps from App Stores](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_delist_apps.htm&release=264.0.0&type=5)** Learn how to temporarily remove apps from app stores or decommission apps that are no longer being used. - **[Most Common Reasons for App Store Rejections](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_app_store_reject.htm&release=264.0.0&type=5)** Here’s some suggestions to help prevent your iOS app from getting rejected by Apple reviewers. - **[Known Issues and Limitations for Mobile Publisher](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_best_practices_known_issues.htm&release=264.0.0&type=5)** Learn about known issues for Mobile Publisher. # Best Practices and Troubleshooting This information helps you implement best practices and troubleshoot when configuring mobile app security. Notes - iOS: Before entering applicationDidEnterBackground, a benign splash screen is displayed to protect sensitive data from automatic iOS snapshotting (iOS uses automatic snapshotting for transition animations). The application prevents any snapshots of customer data during backgrounding. - Security isn’t a binary (on or off), but implemented at different levels. - Salesforce provides multiple levels of security; however, there’s no application that can guarantee a completely secure system. # Best Practices for Agent Success Know the best practices that maximize the quality of the agent's product and upgrade suggestions. To get the best results from Agentforce for Product Upsell and Cross-sell in service, consider these best practices and recommendations. - **Start from the right context.** The agent requires the right context to work better. - On desktop and mobile - Whenever possible, launch the agent directly from the specific Asset record you are servicing. If you launch the agent from the Asset page, it automatically identifies the "Current Asset" context. This skips the step where the agent asks you to search for and select the asset, allowing you to get to recommendations faster. - On Account Page - If you launch the agent from the Account page, specify which asset you are targeting immediately, for example, "I want to upgrade the modem". - **Be specific to skip clarification steps.** The agent is designed to clarify vague requests, but this takes extra time. Being specific in your initial prompt creates a smoother workflow. - **Refine recommendations.** The agent returns a standard set of appropriate options, but you can refine these results using natural language if the list is too long or not quite right. - Filter by Price: "Show me only options under $500." - Filter by Feature: "Which of these includes the sports package?" - Ask for Comparisons: "Compare the top two options." When using a desktop, you can ask for a side-by-side comparison. - Ask for the 'Best Option’: "Which option is best for a customer with high data usage?" - **Proactive discounting.** Sometimes, the agent doesn't prompt you to apply a discount during the quote creation flow. If you know a discount is applicable but the agent hasn't asked, proactively instruct the agent, for example, "Apply a 10% discount to this quote", before confirming the final quote generation. - **Handling "Upgrade" vs. "Add-on".** - Use "Upgrade" when the intention is to replace the hardware or service with a better version. The Agent will highlight how the new option improves upon the old one. - Use "Add-on" when the customer keeps their existing asset, but wants to add supplementary features or services, which are configured as optional child components. The Agent will highlight how the new option enhances the existing asset. - ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note When fetching results for upgrades for high-end products, the agent can include similar or lower-tier options based on the LLM definitions and the specified requirements. The agent can display up to 100 products each for add-ons and upgrades. # Best Practices for Investigating API Request Anomalies Keep these tips and best practices in mind when you investigate unusual user behavior. Find the information you require to make a well-informed evaluation of your data’s safety. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

Best Practice Description
Identify the involved user.

Keeping customer privacy in mind, we can't access customer data or any data inside the reports. As a result, we can provide only the user ID of the user who generated the report that is marked as an anomaly. Use this user ID to locate the username and other details about the person associated with the detection event.

Field: ApiAnomalyEvent.UserId

Use the timestamp.

Our detection model already considers various features derived from the timestamp to determine report generation activity as anomalous or not. You can use this timestamp to narrow down the set of events you must review. You can also determine if the time of report generation was unusual for the user who generated the report.

Field: ApiAnomalyEvent.EventDate

Use contributing factors as a guide.

The contributing factors JSON output shows the features in descending order of contribution. As you start your investigation into the event logs, keep an eye out for the top contributing features. If these features look unusual, they can provide more evidence that confirms the anomaly or even indicate a possible data breach.

Field: ApiAnomalyEvent.SecurityEventData

Consider the anomaly in the context of the user's typical behavior.

Using the ReportAnomalyEvent field values, try to determine whether the user activity within the detection event is typical for the user. For example, consider if it's typical for a user to generate a report from the IP address provided.

Field: ApiAnomalyEvent.SourceIp

Consider the size of the report.

We consider the size of the report to determine if the report generation was anomalous. A user generating a larger report than usual can indicate an unauthorized data export attempt. For example, an attacker obtained unauthorized access to the user's account and exfiltrate as much data as possible before losing access. Or it could mean that a disgruntled employee is exfiltrating data for use beyond the needs of the employer.

Field: ApiAnomalyEvent.SecurityEventData (specifically the rowCount feature name)

Not all anomalies are malicious. While some anomalies can indicate a malicious intent, other anomalies can be legitimate but unusual. Our detection model can produce detection events that are unusual but not malicious. For example, if an employee gets promoted to a new role and starts generating larger reports, our model can flag this behavior as anomalous.
#### See Also - [_Platform Events Developer Guide_: ApiAnomalyEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_apianomalyevent.htm?q=API%20Anomaly) - [_Platform Events Developer Guide_: ApiEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_apievent.htm) # Best Practices for Investigating Guest User Anomalies Keep these tips in mind when you investigate unusual user behavior to ensure your data stays secure. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

We recommend that you review the following settings. - **Organization Wide Default (OWD) Sharing Settings:** - Guest user external org-wide defaults are set to private. - Guest users can’t have more than read access to data. - Guest users can only get access to records through guest user sharing rules, a special type of criteria-based sharing rule. - **Guest User Profiles:** - A suspicious event caused by guest user profiles likely means that guest users accessed objects via Apex and submitted SOQL queries that have returned results. Review any Create, Read, Update, Delete (CRUD) access owned by each standard or custom object within guest user profiles. To generate a report showing your current Guest User access and permissions, use the Authenticated and Guest User Access Report and Monitoring app, which can be found in the AppExchange marketplace. See these best practices to ensure that you are keeping your orgs with guest users secure: [Manage Users and Data Access.](https://help.salesforce.com/s/articleView?id=platform.users_manage_access.htm&type=5&language=en_US) # Best Practices for Investigating Report Anomalies Keep these tips and best practices in mind when you investigate unusual user behavior. They can help you find the information you require to make a well informed conclusion about your data’s safety. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

Identify the involved user. Keeping customer privacy in mind, we cannot access customer data or any data inside the reports. As a result, we can provide only the user ID of the user who generated the report that is marked as an anomaly. Use this user ID to locate the username and other details about the person associated with the detection event. Field: ReportAnomalyEvent.UserId Use the timestamp. Our detection model already considers various features derived from the timestamp to determine report generation activity as anomalous or not. You can use this timestamp to narrow down the set of events you must review. You can also determine if the time of report generation was unusual for the user who generated the report. Field: ReportAnomalyEvent.EventDate Use contributing factors as a guide. The contributing factors JSON output shows the features in descending order of contribution. As you start your investigation into the event logs, keep an eye out for the top contributing features. If these features look unusual, they can provide more evidence that confirms the anomaly or even indicate a possible data breach. Field: ReportAnomalyEvent.SecurityEventData Consider the anomaly in the context of the user's typical behavior. Using the ReportAnomalyEvent field values, try to determine whether the user activity within the detection event is typical for the user. For example, consider if it's typical for a user to generate a report from the IP address provided. Field: ReportAnomalyEvent.SourceIp Consider the size of the report. We consider the size of the report to determine if the report generation was anomalous. A user generating a larger report than usual can indicate an unauthorized data export attempt. For example, an attacker obtained unauthorized access to the user's account and exfiltrate as much data as possible before losing access. Alternatively, it could mean that a disgruntled employee is exfiltrating data for use beyond the needs of the employer. Field: ReportAnomalyEvent.SecurityEventData (specifically the rowCount feature name) Not all anomalies are malicious. While some anomalies can indicate a malicious intent, other anomalies can be legitimate but unusual. Our detection model can produce detection events that are unusual but not malicious. For example, if an employee gets promoted to a new role and starts generating larger reports, our model can flag this behavior as anomalous. #### See Also - [Training and Inference Steps](https://help.salesforce.com/s/articleView?id=xcloud.real_time_em_threat_detection_steps.htm&release=264.0.0&type=5 "Similar to other machine learning or statistical models, our detection model has a familiar two-step process: a training step and an inference or detection step. As a customer, you don't perform either of these steps—Salesforce performs them for you. You only review the detection events generated by our detection mode and take further action if necessary.") - [_Platform Events Developer Guide_: ReportAnomalyEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_reportanomalyevent.htm) - [_Platform Events Developer Guide_: ReportEvent](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/sforce_api_objects_reportevent.htm) # Best Practices for Managing Root Certificates Root certificates are the essential trust anchors for your org’s encrypted integrations. Before configuring your Certificate Trust Store, learn how to maintain the integrity of your connections. ### Required Editions
Available in:
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note The Certificate Trust Store supports Named Credentials integrations only. All other external connections rely on root certificates included in the global, Salesforce-managed trust store. Managing root certificates requires a proactive and cautious approach. A missing or expired root certificate can lead to widespread connection failures that are sometimes difficult to diagnose. To maintain secure and uninterrupted integrations, follow these best practices for monitoring and updating your Certificate Trust Store. - Before deleting a root certificate from your trust store, perform a full audit of your active integrations. Deleting a root certificate that’s currently in use immediately breaks all associated integrations. - Ensure that the right users in your org receive alerts about upcoming certificate expirations. Salesforce sends email alerts 60, 30, and 10 days before a root certificate in your trust store expires. To manage who gets notified, see [Set Expired Certificate Notification Permission](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_set_expired_certificate_notification_permission.htm&release=264.0.0&type=5 "Limit who's notified about expiring certificates by assigning the Receive Certificate Expiration Notifications permission. When you assign this permission to at least one admin, users with the System Administrator profile or the Modify All Data permission receive emails about an expiring certificate only the day before it expires and the day of expiry. Admins with the permission receive emails at 60, 30, and 10 days before a certificate expires. If you don’t assign this permission to anyone, all users with either the System Administrator profile or the Modify All Data system permission continue to receive all certificate expiration emails."). - To prevent service disruptions, update root certificates before they expire. When you receive an expiring cert notification via email, plan on uploading a new certificate. Once you’ve uploaded a new certificate and tested it with the integration services, it is safe to delete the old certificate. - Review your Trust Store periodically, and remove root certificates for services or partners you no longer use. Your org can store up to 50 non-expired certificates. # Best Practices for Marketing Teams Marketing outreach is key to attracting new leads and retaining customers. Whether you want to send a promotion to a loyal customer or reach multiple new leads with an offer, we have tools to help. ## Problem: You Spend Too Much Time Retyping the Same Emails Create an email template once to send a common communication as many times as you want. Use merge fields to personalize the message. Merge fields pull field data like contact name or opportunity value into your message. Insert an email template when you send email from a record page. ## Problem: You Want Wide and Simultaneous Marketing Communications Distribution List email lets you send separate emails to multiple leads or multiple contacts in a single action. You can send up to 200 emails from a contact or lead list view at a time. List email is great for small-scale sales campaigns or basic marketing outreach. ## Problem: You Want More Marketing Reach Than List Email Offers If your marketing efforts outgrow list email, use Campaigns instead. For example, you want to email more than 200 people at once. Or you want to email leads and customers together. And you want to track the success of your outreach. Send list email from a Campaign (instead of a list view) to accomplish these goals. Campaigns also work with Salesforce Marketing Cloud Engagement, Marketing Cloud Account Engagement, or a third-party application in the AppExchange to help you deliver more robust marketing outreach. #### See Also - [Email Templates](https://help.salesforce.com/s/articleView?id=sales.email_templates_landing_page.htm&type=5&language=en_US) - [Send List Email in Lightning Experience](https://help.salesforce.com/s/articleView?id=sales.email_list_email.htm&type=5&language=en_US) - [Get to Know Salesforce Campaigns](https://help.salesforce.com/s/articleView?id=sales.campaigns_def.htm&type=5&language=en_US) # Best Practices for Security Contacts Follow these best practices to help ensure that critical Salesforce security communications reach the correct people without delay. - Use a distribution list with at least two security contacts as a contingency. - Ensure that listed contacts are prepared to handle the associated security alerts. - Review your contact information at least every six months, and update it after every company reorganization or team change. - Monitor and update the members of your email distribution list. - Provide a direct phone number where Salesforce can reach a specific person for urgent matters. Don’t use a general support line. #### See Also - [Specify Your Security Contact Information](https://help.salesforce.com/s/articleView?id=xcloud.security_specify_contact_information.htm&release=264.0.0&type=5 "Provide security contact information for timely updates and communications related to critical security issues.") # Best Practices for Using the Omnistudio Standard Designer To troubleshoot an issue or to test new workflows, we recommend that you use a cloned Salesforce org. To directly use the standard designer in your sandbox and production environments, create a new version of your Omnistudio components and validate them in the standard designer. When you use the standard designer in your test orgs for the first time, open all Omnistudio components from the list view page. ## Create a Test Org by Cloning Your Org If you have a frequently used Salesforce org, test the standard designer in a different environment by cloning your existing org. This ensures that the test environment has the same setup and data as the original org. 1. If the standard designer is enabled by default in your existing org, enable the managed package designer by turning on the Managed Package Designer setting in Omnistudio Settings. 2. Clone your existing org. 3. To enable the standard designer in the cloned org, turn off the Managed Package Designer setting. 4. Validate your workflows in the test org. 5. If the validation is successful, enable the standard designer in your existing org. ## Create New Component Versions If you’ve activated versions of Omnistudio components, we recommend that you create a new version of the component before opening it in the standard designer. After you open a component in the standard designer, you can't edit it in the managed package designer. Create versions of Omnistudio components to track changes and maintain consistency when you switch between designers. 1. If the standard designer is enabled by default in your existing org, enable the managed package designer by turning on the Managed Package Designer setting. 2. From the list view page of the managed package designer, open the activated version of the component and create a new version. 3. Switch to the standard designer by turning off the Managed Package Designer setting. 4. From the list view page of the standard designer, open the new version of the component in the standard designer. 5. Validate the component in the standard designer. 6. Activate the component to use it in the Lightning and Experience sites. # Best Practices for Writing and Maintaining Transaction Security Policies Transaction security policy management isn’t always easy, especially when you have many policies. To make sure that your policies remain functional, write and maintain them using these best practices. Well-structured and tested policies keep your employees and customers connected, productive, and secure. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

## Writing Policies Use these general guidelines as you write your policies. | Best Practice | Description | | --- | --- | | Know your users | Do your users use features that work best with certain browsers? Do they rely on mobile devices in the field? Have features that your users regularly access changed? Think about what your users experience during their day-to-day work, and write your policies with those behaviors in mind. Remember: Policies prevent activities that are genuinely out of bounds, and they must not prevent users from completing core job tasks. | | Know what's coming | To check whether the features that your users rely on change, read the Salesforce release notes. Feature changes can sometimes cause your policies to behave unexpectedly. | | Know your environments | Use sandbox environments to your advantage. Run your policies in a sandbox under conditions similar to your production org. Let policies run for 24 hours to see how they work. Use this feedback to evaluate how your policy functions in the conditions it has to work under. | | Know your policies | To avoid confusion and lighten your maintenance load, create only one policy per event. Schedule regular policy maintenance and reviews to make sure that you don't have policies that counteract one another. Check the Salesforce release notes for feature updates that might change the way your policies behave. | Use these guidelines if you write an Apex-based policy rather than use Condition Builder. | Apex Best Practice | Description | | --- | --- | | Know your code | If you have an Apex developer in your organization, work with the developer as you write your policy. By consulting with someone who knows the ins and outs of Apex, you can team up to write robust and reliable policies and tests. If you don't have access to an Apex expert, learn about Apex by taking the Apex Basics Trailhead module or studying the Apex Developer Guide. | | Know your limits | Because Apex runs in a multi-tenant environment, the Apex runtime engine strictly enforces limits. Enforcing limits ensures that runaway Apex code or processes don't monopolize shared resources. If some Apex code exceeds a limit, the associated governor issues a runtime exception that cannot be handled. Limits vary based on the event that the policy is based on. Construct your policies with these limits in mind. Read more about Apex Governors and Limits. | ## Testing Policies Testing policies is the best way to make sure that you’re crafting the right solution for your organization and your users. - Try out your policies in a sandbox. Then deploy your security policy in a production org when you’re certain your policy works. - If you make far-reaching changes in your org, retest your policies to make sure that they are compatible with the changes you made. For example, if you create a workflow for field employees that generates a report, check all report event policies that could be affected. - If your policy is Apex-based, follow Apex testing best practices. - Run data silo tests. These tests run faster, produce easy-to-diagnose failures, and are more reliable. ## Troubleshooting
Question Answer
Something is wrong with my policy. Where do I start? Use the error message that your policy creates as a starting point. Check the Apex Developer Guide for advice on the error category.
My policy shuts down before it executes. Policies don't execute if they take too long to perform all their actions. Streamline your policy, and make sure that it's within the metering limit.
I have multiple policies for the same event. What do I do? In general, make only as many policies as you can manage and maintain. There's no limit on the number of policies you can create, but not all policies trigger. Policies are prioritized, and trigger in this order: block the operation, require multi-factor authentication, no action. If you have multiple policies for the same event, not all of those policies trigger. For example, let's say you have two policies for one event, but one policy blocks the operation and the second is set to require multi-factor authentication. The policy that blocks the user executes first and if it triggers, the other policy doesn't execute.
My policy isn't working. How do I debug it?

First, disable the policy and move it to a sandbox. You don't want a broken policy to cause problems for your colleagues or customers while you troubleshoot. Then evaluate whether the issue is with your policy settings or the Apex code if your policy is Apex-based.

  • If you think your settings are the source of the problem, evaluate the policy's conditions and actions in your sandbox. Adjust the policy's settings, and test for the behaviors you want.
  • If you suspect that the problem is with your Apex code, you can debug Apex using the Developer Console and debug logs.
I can't turn off my policy, and it's blocking my users in production. What do I do? Check for known issues documented in Knowledge Articles or Known Issues. These resources explain issues that other customers experienced, along with functional workarounds. If that doesn't work, contact Salesforce.
# Billing Considerations for Scanning Data 360 with Data Detect Use of Data Detect impacts the consumption of credits used for billing in these Data 360 usage types. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer editions.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This feature has access to Digital Wallet, a free account management tool that offers near real-time consumption data for enabled products across your active contracts. Access Digital Wallet and start tracking your org's usage. To learn more, see [About Digital Wallet](https://help.salesforce.com/s/articleView?id=xcloud.wallet_about.htm&language=en_US&type=5).
Digital Wallet Card Usage Type Usage Type Description
Data Services Data Queries

Usage is calculated based on the number of records processed.

The count of records processed depends on the structure of a query as well as other related factors such as the total number of records in the objects being queried.

For more information on how Data 360 usage is billed, refer to your contract or contact your account executive. # Billing Type Options for Partners While creating a Loyalty Program Partner record, you can specify the billing type—Prepaid or Postpaid—for your partner. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Growth or Loyalty Management - Advanced
To view the billing type of a partner, go to a loyalty program partner record's Partner Details section. ## Prepaid Billing for Partners Partners who choose prepaid billing are required to purchase point packs from the loyalty program. Partners use the purchased points to offer their products or services to members for accruing points. Whenever a member accrues points for a partner transaction, points are debited from the partner’s prepaid packs. When members redeem the points, points are credited to the partner's account. Points can be credited or debited to partners for accruals, redemption cancellations, or custom processes. Partner Balances for Prepaid Billing | Name | Description | | --- | --- | | Purchased Points | The number of points purchased by the partner from the loyalty program. | | Points Balance | Shows the points balance of the partner. The balance is determined by deducting the debited points from the purchased points. | | Credited Points | Number of points credited to partners for member redemptions, accrual cancellations, or custom processes. Credited points determine the amount that loyalty program is liable to pay the partner. | | Debited Points | Number of points debited from partners for member accruals, redemption cancellations, or custom processes. Debited points determine the partner's liability towards the loyalty program. | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The Last Processed Date Time field indicates the date and time when the partner's points balance was last calculated. You can set the alert value for prepaid billing the minimum point balance to send alerts to partners for low points pack balance. ## Postpaid Billing for Partners Partners who choose postpaid billing are required to pay the bill amount after offering their products or services to members. The amount can be credited or debited to partners for accruals, redemption cancellations, or custom processes. Whenever a member accrues points for partner transactions, the amount is added to the partner’s liability. Similarly, when members redeem points, the amount is credited to the partner’s bill amount. The sum of all credits and debits of the partner is calculated from the inception to the last processed date. This value is shown in the Postpaid Bill Amount field in the Postpaid Billing Details section of a partner record. A positive value indicates that the partner is liable to the program. A negative value indicates that the program is liable to the partner. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The Last Processed Date Time field indicates the date and time when the partner's outstanding bill amount was last calculated. You can set the alert value for postpaid billing the maximum outstanding bill to send alerts to partners. #### See Also - [_Salesforce Help_: Manage Partner Points for Prepaid Billing (Example)](https://help.salesforce.com/s/articleView?id=xcloud.manage_partner_points_for_prepaid_billing.htm&release=264.0.0&type=5 "This example shows how loyalty program managers create a loyalty program partner with prepaid billing and how admins set up a process to manage partner points.") # Bind a Component to a Field Connect a single component, such as a text component, to a field from a data source so that it shows one field value. Add a data source to the screen before you bind components on it. 1. Select a component that can show data. 2. In the properties panel, select the data binding icon for the property to populate. 3. Select the data source, such as Active opportunities. If no data source appears, add one to the screen first. 4. In the expression builder, drill into the record's fields and select the field to show, such as Description. 5. Save your change. In edit mode and in an authenticated preview session, the component shows live data from your org. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mobile_ama-264-0-0-production-enus/07b30a64-6461-4c63-9451-e94162994712/images/icon_example.png) Example When a single component is bound to a source that returns more than one record, the component shows the field from the first record in the source. To repeat content across every record, bind a dynamic component instead. # Bind a Dynamic Component to Repeat Across Records Use a dynamic component, such as a list, row, or carousel, to repeat its content across every record in a data source instead of showing only the first record. Add a data source to the screen before you bind components on it. 1. Add a dynamic component to the screen, and then select it. 2. In the data binding settings, select the data source to repeat across, such as Active opportunities, and then select **Apply**. 3. Add a single component (for example, Text) to a dynamic component to add content. Then, select the single component you want to bind to data. 4. In the expression builder, bind the component to a field. 5. Save your changes. Each row in the dynamic component shows the field from a different record in the source. For example, a source of six records produces six rows. # Bind a Flexcard Input Value to a Data Field (Managed Package) For the managed package runtime, bind the value of an Input element to a new or existing data field in your Flexcard's data source. When a user updates the input value, the data JSON updates. You can use the new data like any other piece of data from a data source. For example, update the value of an attribute sent from a parent to a child Flexcard based on user input. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

1. From the Flexcard Designer, drag an Input element from the **Inputs** section of the Build panel. 2. To bind your input value to a data source field in one of two ways, in the Properties panel, click into **Field Binding** and perform one of the following tasks: - Bind to an existing data source field: To enable a user to update a data field in the data source, click into **Field Binding** to select a data field that exists, such as **{AccountRevenue}**. When your user updates the value of the input element, the value of AcccountRevenue in the data JSON updates. - Bind to a new data source field: To add new data to the data source, enter a unique name to create a data field in the data JSON. Enter as a merge field with alphanumeric characters and no spaces. For example, {SecondaryContactEmail} or {2ndryContactEmail}. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important The **Field Binding** value takes priority over the **Default Value**. When creating a data field, the default value is null. When binding to an existing data field, the default value is the value in the data source. 3. To confirm the data JSON updates when the input value changes an existing data field, perform the following tasks: 1. Click the Preview tab, and enter or select a value from an input element on the canvas. For example, in a Currency Input element that binds the element to the `AccountRevenue` data field, enter a new amount, such as 5000000. 2. In a card object in the `cards` section of the **Data JSON** panel, find the updated data field, such as `AccountRevenue: "5000000"`. ![Before: FlexCard ­Field ­Binding update field](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_field_binding_update_field_before.png) ![After: FlexCard ­Field ­Binding update field](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_field_binding_update_field_after.png) 4. To confirm a new data field is created in the data JSON when a user enters or selects an input value, perform the following tasks: 1. Click the Preview tab. 2. In a card object in the `cards` section of the Data JSON panel, notice there’s no data field for the one you created in the **Field Binding** property. 3. On the canvas, enter or select a value from an input element on the canvas. For example, in an Email Input element that binds to a new `2ndryContactEmail` data field, enter an email address, such as janis@joplins.com. 4. In the associated card object in the `cards` section of the **Data JSON** panel, find the new data field, such as `2ndryContactEmail: "janis@joplins.com"`. ![Before: FlexCard ­Field ­Binding new field](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_field_binding_new_field_before.png) ![After: FlexCard ­Field ­Binding new field](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_field_binding_new_field_after.png) # Bind Components to Data Connect your app's components to live Salesforce data in two phases. First add a data source to a screen, then bind components to the fields in that source. Data binding has two phases. First you bring data into the Mobile App Designer by adding a data source to a screen. Then you bind individual components on that screen to the fields in the source. A component shows live data only after its screen has a data source. ## How Data Binding Works Data binding works at the screen level. Each screen has its own data icon in the data tab that shows which data sources are attached to that screen, such as an account, an opportunity, or a custom object. Click the icon to see which components on the screen are bound to each source. A data source defines the records available on a screen, including the object, filters, sort order, and how many records to retrieve. After the source is on the screen, you bind components to its fields with the expression builder. You can also describe a binding in plain language in the agent panel. ## Single and Dynamic Components When a single component, such as a text component, is bound to a source that returns more than one record, the component shows the field from the first record. To repeat content across every record in a source, use a dynamic component, such as a list, row, or carousel. ## Data Visibility Bound components respect the field-level access of the logged-in user. Users see only the fields their access level allows. For example, a Salesforce admin can see all fields, while a customer or partner user sees only the fields available to them. - **[Add a Data Source to a Screen](https://help.salesforce.com/s/articleView?id=xcloud.mobile_ama_add_data_source.htm&release=264.0.0&type=5)** Define the records you want available on a screen, including the object, filters, sort order, and how many records to retrieve. - **[Bind a Component to a Field](https://help.salesforce.com/s/articleView?id=xcloud.mobile_ama_bind_component_to_field.htm&release=264.0.0&type=5)** Connect a single component, such as a text component, to a field from a data source so that it shows one field value. - **[Bind a Dynamic Component to Repeat Across Records](https://help.salesforce.com/s/articleView?id=xcloud.mobile_ama_bind_dynamic_component.htm&release=264.0.0&type=5)** Use a dynamic component, such as a list, row, or carousel, to repeat its content across every record in a data source instead of showing only the first record. # Biometric Login Set up biometric login so that your users can log in to your Mobile Publisher for Experience Cloud app using face or fingerprint recognition. Enable User Opt-In Biometric Login (beta) to give your users the choice of logging in with biometric credentials instead of their username and password. Enable mandatory Biometric ID App Unlock to require users to log in with biometric credentials. - **[User Opt-In Biometric Login](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_opt_in_biometric_login.htm&release=264.0.0&type=5)** With User Opt-In Biometric Login, your Mobile Publisher for Experience Cloud app users can easily and securely log in to your app using face or fingerprint recognition. - **[Enable User Opt-In Biometric Login](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_opt_in_biometric_login_setup.htm&release=264.0.0&type=5)** To enable and configure User Opt-In Biometric Login, enter custom attributes to your Mobile Publisher for Experience Cloud app’s external client app. - **[Enable Mandatory Biometric ID App Unlock for iOS and Android](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_biometric_id_ios_android.htm&release=264.0.0&type=5)** When using Mobile Publisher, you can apply biometric ID credentials to make your environment more secure. To use biometric ID credentials, your device must have a device passcode or PIN enabled and FaceID (for iOS) or Android Security and Privacy | Biometrics. - **[Set Time Value for Biometric Login](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_biometric_id_ios_android_time.htm&release=264.0.0&type=5)** By default, users must reenter biometric ID credentials when the app is in the background for more than 15 minutes. You can set your own time value requirement by adding a custom attribute. The value that you set applies to both User Opt-In Biometric Login (beta) and Biometric ID App Unlock. # Block (Managed Package) For the managed package runtime, combine logical groups of elements in an Omniscript Step using a Block element. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Blocks help to group information to create nested JSON data. Blocks are contained within [Steps](https://help.salesforce.com/s/articleView?id=xcloud.os_steps.htm&release=264.0.0&type=5 "For the managed package runtime, each Step element in an Omniscript presents a page to the user that prompts for input or displays information. For navigation, all Steps except the first have a Next button, and all except the last have a Previous button.") and can repeat to capture an array of data. For example, street, city, state, and postal code elements can be combined into an address block. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You can nest Blocks within other Blocks, but Blocks don’t support the Custom LWC Element. 1. Drag a **Block** element into the Omniscript canvas and name the element. 2. In **Field Label**, enter a label that displays to users. 3. To render a collapsed Block in the Omniscript, check **Collapse**. 4. In the **Heading Level** field, enter the nesting level of the element as a number. 5. To enable users to add multiple block entries, check **Enable Repeat** in **Repeat Settings**. Repeatable blocks store data in an array format, where each block entry is indexed in an array under the Block's element name. - If you plan to access data from an element in a repeatable Block, see [Access to Data Within and Outside a Repeatable Block (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks.htm&release=264.0.0&type=5 "For the managed package runtime, suppose you place an element in a repeatable block (a Block or an Edit Block) and you want to access data that is calculated in a different element. The method that you use to access the data depends on whether the element containing the data is within or outside the same repeatable block in the Omniscript. Review guidelines and examples for the Formula element and for the Select element, which is used to add a dependent picklist to an Omniscript."). - For information about prefilling blocks, see [Prefill Repeatable Blocks (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_prefill_repeatable_blocks.htm&release=264.0.0&type=5 "For the managed package runtime, prefill repeatable blocks with data by passing data to the block in an array format."). 6. To clone values when a Block is repeated, check **Clone When Repeating**. 7. To set the number of times a Block can be repeated, enter a number in the **Limit Repeat** field. 8. Preview the Omniscript and test the functionality. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_example.png) Example Data JSON output format based on your configuration to map data JSON from blocks: - No block JSON: ![No block JSON example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/step_json_lwc_os_designer.png) - Block JSON: ![Block JSON example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/block_json_lwc_os_designer.png) - Repeatable block JSON: ![Repeatable block JSON example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/block_repeat_json_lwc_os_designer.png) #### See Also - [Access to Data Within and Outside a Repeatable Block (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks.htm&release=264.0.0&type=5 "For the managed package runtime, suppose you place an element in a repeatable block (a Block or an Edit Block) and you want to access data that is calculated in a different element. The method that you use to access the data depends on whether the element containing the data is within or outside the same repeatable block in the Omniscript. Review guidelines and examples for the Formula element and for the Select element, which is used to add a dependent picklist to an Omniscript.") # Block Authorization Flows to Improve Security The OAuth 2.0 user-agent and username-password flows are considered insecure and aren’t recommended. For better security, we strongly recommend that you block these flows in Salesforce to prevent developers from using them to build new integrations. If your org is created in Summer ‘23 or later, the username-password flow is blocked by default. You can enable the username-password flow if needed. If you have existing integrations that use the user-agent or username-password flow, update them to a more secure OAuth 2.0 flow. You can also block the Authorization Code and Credentials Flow, which is used to securely configure a headless login process. And you can block certain flows that don’t use the PKCE extension. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: All Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. Blocking a flow can break managed packages, mobile apps, and other integrations that use it. Blocking the user-agent flow also blocks the hybrid app token flow. Before implementing your changes in production, test them thoroughly in a sandbox. In place of the user-agent flow for external web apps, we recommend using the OAuth 2.0 web server flow with Proof Key for Code Exchange (PKCE.) In place of the username-password flow, we recommend using OpenID Connect dynamic client registration or the OAuth 2.0 client credentials flow. For a list of alternative OAuth flows and their use cases, see [OAuth Authorization Flows](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_flows.htm&type=5&language=en_US). 1. From Setup, in the Quick Find box, enter OAuth, and then select **OAuth and OpenID Connect Settings**. 2. To block a flow, turn off its associated setting. To enable a blocked flow, turn on its associated setting. Here’s a list of the settings. - Allow OAuth User-Agent Flows—We recommend updating your integrations and blocking this flow. - Allow OAuth Username-Password Flows—We recommend updating your integrations and blocking this flow too. - Allow Authorization Code and Credentials Flows—Block this flow only if you aren’t using it. - Require Proof Key for Code Exchange (PKCE) Extension for Supported Authorization Flows—This setting doesn’t explicitly block or enable a specific flow. Instead, when enabled, it blocks all variations of the OAuth 2.0 authorization code flow that don’t implement the PKCE extension. These variations include the web server flow, the hybrid web server flow, the Authorization Code and Credentials Flow, and all variations of the Authorization Code and Credentials Flow. This setting is a prerequisite for requiring the PKCE extension for a connected app and for using PKCE for an authentication provider. 3. At the prompt from your browser, click **OK** to confirm that you’re ready to implement this change. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note After a flow is blocked, you can’t use it to build new integrations. Existing integrations that use the blocked flow no longer work. You can allow these flows at any time, but we don’t recommend ever allowing the user-agent or username-password flows. To use the Authorization Code and Credentials Flow, you must explicitly allow it. # Block Authorization Flows to Improve Security The OAuth 2.0 user-agent and username-password flows are considered insecure and aren’t recommended. For better security, we strongly recommend that you block these flows in Salesforce to prevent developers from using them to build new integrations. If your org is created in Summer ‘23 or later, the username-password flow is blocked by default. You can enable the username-password flow if needed. If you have existing integrations that use the user-agent or username-password flow, update them to a more secure OAuth 2.0 flow. You can also block the Authorization Code and Credentials Flow, which is used to securely configure a headless login process. And you can block certain flows that don’t use the PKCE extension. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: All Editions
Blocking a flow can break managed packages, mobile apps, and other integrations that use it. Blocking the user-agent flow also blocks the hybrid app token flow. Before implementing your changes in production, test them thoroughly in a sandbox. In place of the user-agent flow for external web apps, we recommend using the OAuth 2.0 web server flow with Proof Key for Code Exchange (PKCE.) In place of the username-password flow, we recommend using OpenID Connect dynamic client registration or the OAuth 2.0 client credentials flow. For a list of alternative OAuth flows and their use cases, see [OAuth Authorization Flows](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_flows.htm&type=5&language=en_US). 1. From Setup, in the Quick Find box, enter OAuth, and then select **OAuth and OpenID Connect Settings**. 2. To block a flow, turn off its associated setting. To enable a blocked flow, turn on its associated setting. Here’s a list of the settings. - Allow OAuth User-Agent Flows—We recommend updating your integrations and blocking this flow. - Allow OAuth Username-Password Flows—We recommend updating your integrations and blocking this flow too. - Allow Authorization Code and Credentials Flows—Block this flow only if you aren’t using it. - Require Proof Key for Code Exchange (PKCE) Extension for Supported Authorization Flows—This setting doesn’t explicitly block or enable a specific flow. Instead, when enabled, it blocks all variations of the OAuth 2.0 authorization code flow that don’t implement the PKCE extension. These variations include the web server flow, the hybrid web server flow, the Authorization Code and Credentials Flow, and all variations of the Authorization Code and Credentials Flow. This setting is a prerequisite for requiring the PKCE extension for a connected app and for using PKCE for an authentication provider. For more information, see [Proof Key for Code Exchange (PKCE) Extension](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_pkce.htm&release=264.0.0&type=5 "To improve the security of your OAuth and authentication provider implementations, use the OAuth 2.0 Proof Key for Code Exchange (PKCE) extension. You can require PKCE at an org-wide level, require it for a specific connected app, and automatically enable it for supported authentication providers."). 3. At the prompt from your browser, click **OK** to confirm that you’re ready to implement this change. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note After a flow is blocked, you can’t use it to build new integrations. Existing integrations that use the blocked flow no longer work. You can allow these flows at any time, but we don’t recommend ever allowing the user-agent or username-password flows. To use the Authorization Code and Credentials Flow, you must explicitly allow it. #### See Also - [OAuth 2.0 Username-Password Flow for Special Scenarios](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_username_password_flow.htm&release=264.0.0&type=5 "You can use the username-password flow to authorize a client via a connected app that already has the user’s credentials. However, we recommend avoiding this flow because it passes credentials back and forth. Use it only if there’s a high degree of trust between the resource owner and the client, the client is a first-party app, Salesforce is hosting the data, and other grant types aren’t available. In these cases, set user permissions to minimize access and protect stored credentials from unauthorized access.") - [OpenID Connect Dynamic Client Registration for External API Gateways](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oidc_dynamic_client_reg_flow.htm&release=264.0.0&type=5 "Although not a typical authorization flow, you can use OpenID Connect dynamic client registration to enable your Salesforce instance as an independent OAuth authorization server to protect resources hosted on an external API gateway.") # Book a Service Appointment Use Book Service Appointment to efficiently schedule service appointments. This procedure guides you through launching the process from various objects and booking an appointment with the necessary details. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To use Book Service Appointment: Salesforce Field Service AND Book Service Appointment AND Field Service Scheduling
1. Start the Book Service Appointment process. You can launch the Book Service Appointment process in several ways. Depending on your setup, it can be started from a work order, an account, an asset, a quote, an order, or a work type group. For example, to book an appointment for a work order: 1. From the App Launcher, search for and select **Work Orders**. 2. Open the work order for which you want to book an appointment. 3. From the overflow menu, select Book Service Appointment. The Book Service Appointment page appears. 2. Book a service appointment. 1. Click **Book Appointment**. 2. Enter these details: Earliest permitted start date, scheduling policy, due date, and service territory. 3. Click **Choose Time Slot**. The available time slots for the selected dates are shown. 4. Select a time slot. 5. Click **Book**. A service appointment is booked. After booking an appointment, you can reschedule or cancel it. # Book Service Appointment Agents can easily view, book, reschedule, or cancel service appointments. This feature is accessible from a work order and other features. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
- **[Set Up Book Service Appointment](https://help.salesforce.com/s/articleView?id=xcloud.aslm_bookservice_set_up_book_service_appointment_parent.htm&release=264.0.0&type=5)** Set up and configure Book Service Appointment to help your users book service appointments from Work Order Estimation or other processes. - **[Book a Service Appointment](https://help.salesforce.com/s/articleView?id=xcloud.aslm_bookservice_use_book_service_appointment.htm&release=264.0.0&type=5)** Use Book Service Appointment to efficiently schedule service appointments. This procedure guides you through launching the process from various objects and booking an appointment with the necessary details. - **[Customize Book Service Appointment](https://help.salesforce.com/s/articleView?id=xcloud.aslm_customize_book_service_appointment.htm&release=264.0.0&type=5)** Book Service Appointment (BSA) is made more modular, comprehensive, and customizable by using LWC, Lighting Messaging Services (LMS) and flows. To customize or extend BSA default implementation you can modify the existing flow as well as built custom LWC to add or replace existing ones as per your requirements. - **[Lightning Web Component for Book Service Appointment](https://help.salesforce.com/s/articleView?id=xcloud.aslm_lightning_web_component_for_book_service_appointment.htm&release=264.0.0&type=5)** BSA is made more modular, comprehensive, and customizable by using LWC, Lighting Messaging Services (LMS), and flows. This sections lists the LWC along with the details such as purpose, inputs, outputs, triggers, and other relevant information # Book Sevice Appointment Licenses and Permissions Review the licenses and permission sets needed for different personas to set up and use Book Service Appointment. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
Review the licenses required to use Book Service Appointment. | License | Description | | --- | --- | | Salesforce Field Service | You must install Field Service Managed Package if you want to use Book Service Appointment. | | Book Service Appointment | Enable this to access the Book Service Appointment LWC and Connect APIs used to fetch and book slots. | | Field Service Scheduling | Enable this to schedule service appointments. | Review the permission sets that each persona needs to set up and use Book Service Appointment.
Tasks Permission Sets
Admin: Manage all Field Service objects, including the Field Service Admin app, Field Service Visualforce pages, and logic services.
  • Field Service Admin Permissions
  • Field Service Admin License*

The Field Service Admin License permission set isn’t created in the newer Salesforce org, so it doesn’t need to be assigned to users.

Agent: Access all global actions and their related objects to create, book, and schedule service appointments.

  • Field Service Agent Permissions
  • Field Service Agent License*

The Field Service Agent License permission set isn’t created in the newer Salesforce org, so it doesn’t need to be assigned to users.

Technician: Manage service appointments and their related parent objects.

  • Field Service Mobile License
  • Field Service Resource License
  • Field Service Resource Permissions
# Brand Flexcards Globally with the Newport Design System (Managed Package) For the managed package runtime, customize the appearance of Flexcards throughout your org with the Newport Design System. The Newport Design System enables you to download, edit, and override the existing Newport CSS styles with your own customizations. Newport includes Storybook.js, a browser-based preview tool that enables you to see your changes in action. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before You Begin - Create a new Flexcard, and select Newport as the **Theme**. See [Create a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."). 1. Download Newport Design System and edit the CSS with your customizations. See [Apply Global Branding to Flexcards with the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_apply_global_branding_to_flexcards_with_the_newport_design_system.htm&release=264.0.0&type=5 "For the managed package runtime, use the Newport Design System (NDS) to apply global style changes to Flexcards. The Newport Design System enables you to download, edit, and override the existing Newport CSS styles with your own customizations."). 2. Upload the changes to your Salesforce org. See [Deploy Global Style Changes to Flexcards with the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_global_style_changes_to_flexcards_with_the_newport_design_system.htm&release=264.0.0&type=5 "For the managed package runtime, add any changes to the Newport Design System theme by uploading the theme in a Salesforce org. Install your theme so that all Flexcard designer users can use it to preview their Flexcards. Apply modifications to the Newport templates by adding a Static Resource that overrides the Newport preview wherever it is available."). # Brand Your Identity Pages with Dynamic URLs With dynamic branding, you can customize the branding of your login experience depending on context, such as who the user is or where they're logging in from. For example, change which logo you display depending on whether the user is an employee or customer. Or display a particular self-registration page based on the user's country code. Your dynamic branding settings apply to the entire login experience, including the pages used to log in, verify identity, reset passwords, and self-register. You can add dynamic branding to Experience Builder, Visualforce, and custom login pages. Dynamic branding relies on a URL parameter called the experience ID, or expid value. The expid value determines what the user experiences. At run time, the expid value resolves to the current value, and the appropriate URL is created to determine what branding the user sees. Here’s a scenario. Universal Distributing wants to brand the login experience depending on whether the user is an employee or customer. You create logos for each brand, appropriately named employee\_logo.png customer\_logo.png. Then you set the logo URLs so that employees see http://.../employee\_logo.png and customers see http://.../customer\_logo.png. From the Administration Login & Registration page, you specify the logo URL with the expid value: https://universaldistributing.com/{expid}\_logo.png. When a customer logs in, the expid value is set to customer, the URL becomes https://universaldistributing.com/customer\_logo.png, and the customer logo appears on the login page. Likewise, when an employee logs in, the expid value is set to employee, the URL becomes https://universaldistributing.com/employee\_logo.png, and the employee logo appears on the login page. You define dynamic branding URLs for logos and right-frames on the Experience Workspaces Administration Login & Registration page. They apply to default and custom login pages. In addition to setting the experience ID, your login implementation must set the login URL according to the value of the experience ID. For example, by adding the logic to your login button, when `expid=EMPLOYEE`, the login button directs the user to https://universaldistributing.com/brands/expid=EMPLOYEE. You can also use Visualforce and Apex to create dynamic URLs. Use the Apex `getExperienceId` method of the `System.Site` class to retrieve the value of the experience ID. To set the experience ID, use the `setExperienceId` method, or add an experience ID dynamic parameter to one of these login endpoints. For example, use the `CommunitiesSelfReg` endpoint to pass in a different {expid} value to the self-registration page to deliver a different registration flow for each brand. - **[Extend an Endpoint with the Experience ID](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_dynamic_extend_endpoint_expid.htm&release=264.0.0&type=5)** You can set the experience ID value by extending supported endpoints. - **[Add Dynamic Branding to Custom Pages](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_dynamic_with_custom_login_page.htm&release=264.0.0&type=5)** For custom pages used to log in, verify identity, reset passwords, and self-register, you can implement dynamic URLs with a custom login Apex controller. Use the Apex methods `getExperienceId` and `setExperienceId` of the `System.Site` class to retrieve and store the expid value. - **[Dynamic Branding for Multiple Brands](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_dynamic_multiple_brands.htm&release=264.0.0&type=5)** Dynamic branding is ideal for multi-brand companies. You can create a single login page that determines which brand appears at run time. All brands are served from the same login page that serves the same site. # Brand Your Salesforce Org’s Domains Understand how to include your brand in the URLs used to access your Salesforce org and its data with My Domain, Experience Cloud sites, Salesforce Sites, and custom domains. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
Various users access your Salesforce org, each with their own needs. - Sales representatives log in to Salesforce to view and manage their sales opportunities. - Public users log in to a site to access public data from your org, such as a recruiting website, store locator, or an ideas website. - Consumers and businesses visit your storefronts to purchase products. - External systems use API calls to access your Salesforce data. - Admins maintain your org and keep everything running smoothly. Each of these interactions involves at least one URL, and those URLs are based on your Salesforce org’s domains. Salesforce offers features that affect your org’s URLs. Each option allows you to incorporate your brand into your URLs, making it easier for users and admins to remember them. You also have the option to require that users and SOAP API calls use your My Domain login URL when accessing your org. Because your My Domain login URL is unique to your org, requiring API calls to use it adds an extra layer of security. ## My Domain My Domain allows you to showcase your company’s brand with a customer-specific subdomain name within your Salesforce org login and application URLs. For example, if your org’s My Domain name is mycompany, then your org’s login URL is https://mycompany.my.salesforce.com. All orgs get a My Domain by default. If you don’t like your org’s My Domain name, you can change it. With enhanced domains, the latest version of My Domain, your org’s My Domain name is the subdomain for URLs across your org, including Experience Cloud sites and Salesforce Sites. ## Experience Cloud Sites Experience Cloud sites are a great way to share information and collaborate with customers, partners, and employees. With sites, you can make any information stored in your org public. You can also make the site’s pages match the look and feel of your company’s brand. For example, you can set up sites to publish a catalog of products or to provide a store locator tool. Whether you call it a portal, a help forum, a support site, HR central, or something else, Experience Cloud sites provide an online community. Your My Domain is used as your Experience Cloud sites subdomain. The Experience Cloud sites URL format is https://MyDomainName.my.site.com. When you create an Experience Cloud site, its path prefix is appended to your Experience Cloud sites domain to create its URL. For example, https://mycompany.my.site.com/customers. For more information, see [Experience Cloud](https://help.salesforce.com/s/articleView?id=experience.networks_overview.htm&type=5&language=en_US). ## Salesforce Sites Salesforce Sites predate Experience Cloud sites. With Salesforce Sites, you can also make information stored in Salesforce publicly available. However, Experience Cloud sites offer more robust features and options. For this reason, we recommend Experience Cloud sites over Salesforce Sites. Your My Domain is used as your Salesforce Sites subdomain. The Salesforce Sites URL format is https://MyDomainName.my.salesforce-sites.com. When you create a site with Salesforce Sites, its name is appended to your sites domain. For example, https://mycompany-sites.my.salesforce-sites.com/storelocator. For more information, see [Salesforce Sites](https://help.salesforce.com/s/articleView?id=platform.sites_overview.htm&type=5&language=en_US). ## Custom Domains: Serve Content from Your Sites on Your Domain With custom domains, a domain that you own serves external-facing content from your Experience Cloud sites and Salesforce Sites. Although the content lives in Salesforce, it’s served on your custom domain, providing a clear branded experience for your users. Salesforce highly recommends custom domains because they help your brand to shine. Instead of visiting https://mycompany.my.site.com/welcome, the user visits your branded domain, such as https://www.example.com. Admins also benefit from custom domains. Because you can serve multiple sites on one domain, custom domains simplify the management of your domains and your corresponding network allowlists. And even if your system-hosted site URL changes due to a My Domain change, your custom domain remains constant, reducing both the number of updates required and potential confusion. This feature is especially useful if you own multiple brands and want them to share content. For example, let’s say you have a parent company with two distinct brands. Each brand has its own registered domain, and you want them both to point to the parent website. With custom domains, you can point both brand domains to a single parent website with content from your Salesforce org. For more information on custom domains, see [Custom Domains](https://help.salesforce.com/s/articleView?id=platform.domain_mgmt.htm&type=5&language=en_US). #### See Also - [My Domain](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_overview.htm&release=264.0.0&type=5 "Showcase your company’s brand with a customer-specific subdomain name in your Salesforce org URLs. With My Domain, you can include your company name in your URLs, for example, https://mycompany.my.salesforce.com. With these org-specific URLs, you can set up a custom login page, set a custom login policy, offer single sign-on, and allow users to log in with a social account. My Domain also allows you to work in multiple Salesforce orgs in the same browser at the same time.") - [Salesforce Sites](https://help.salesforce.com/s/articleView?id=platform.sites_overview.htm&type=5&language=en_US) - [Experience Cloud](https://help.salesforce.com/s/articleView?id=experience.networks_overview.htm&type=5&language=en_US) - [Custom Domains](https://help.salesforce.com/s/articleView?id=platform.domain_mgmt.htm&type=5&language=en_US) # Branding and App Management Build, brand, and distribute your mobile app into app stores using the Mobile Publisher engine and automatically update them with the latest releases. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app_plus-264-0-0-production-enus/24dbd8e3-8820-4d77-ab26-f3c195bfdf66/images/icon_note.png) Note Your organization must license Mobile Publisher through the Salesforce Mobile App Plus program to use the feature. Contact your Salesforce sales rep for more information. - **[How the Process Works](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_plus_branded_how.htm&release=264.0.0&type=5)** Let’s look at the overall process so you know what to expect when creating and distributing your branded Salesforce Mobile app using the Mobile Publisher engine. - **[App Distribution](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_plus_branded_distribution.htm&release=264.0.0&type=5)** Deciding on how you want to manage the release and distribution of your app is an important step. App Distribution Methods and App Distribution Types to help your org manage the release and distribution of your app, your way. - **[Build and Distribute Your Branded App](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_plus_branded_sapp.htm&release=264.0.0&type=5)** After reviewing the app branding process and deciding how to distribute the app to your users, you’re ready to use the Mobile Publisher engine to start your branded app project. # Branding Omniscripts and Cards Using Vlocity Newport Design System (Managed Package) For the managed package runtime, customize the appearance and behavior of Omniscript elements and Card layouts using the Vlocity Newport Design System. Newport includes Storybook.js, a browser-based preview tool that enables you to see your changes in action. Before you begin: If you are unfamiliar with using command-line interfaces, see ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). [Command Line 101](https://www.git-tower.com/learn/git/ebook/en/command-line/appendix/command-line-101). System requirements: - [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) (git-scm documentation) - [nodeJS v12.0 or higher](https://nodejs.org/en/download/package-manager/) (Node documentation) - Gulp CLI: `npm install --global gulp-cli` To install Newport and brand Omniscripts and Cards: 1. Clone **vlocityinc/newport-design-system** from [https://github.com/vlocityinc/newport-design-system](https://github.com/vlocityinc/newport-design-system) using a command-line interface. To see what components are provided by Newport, look at the contents of the `UI/components` directory. 2. From the [GitHub](https://github.com/vlocityinc/newport-design-system) page, perform the latest steps to install the correct dependencies. 3. After installation is complete, launch the Storybook.js preview by issuing the command `npm start`. 4. Review the documentation in the Storybook preview. 5. Add customizations to your theme. See [Customize Omniscripts and Flexcards with the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_customize_omniscripts_and_flexcards_with_the_newport_design_system.htm&release=264.0.0&type=5 "For the managed package runtime, to customize the appearance of your Omniscripts or Flexcards, edit the CSS and HTML files in the UI subdirectory of the directory where you cloned Newport."). 6. Apply the Omniscript to individual Omniscripts or override the Newport theme for the entire org. See [Deploy and Apply Global Styling Changes using the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_and_apply_global_styling_changes_using_the_newport_design_system.htm&release=264.0.0&type=5 "For the managed package runtime, apply modifications to the Newport design system by adding a Static Resource that overrides the Newport theme wherever it is available. Once uploaded, the Newport changes are applied to any Omniscripts using Newport."). - **[Customize Omniscripts and Flexcards with the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_customize_omniscripts_and_flexcards_with_the_newport_design_system.htm&release=264.0.0&type=5)** For the managed package runtime, to customize the appearance of your Omniscripts or Flexcards, edit the CSS and HTML files in the `UI` subdirectory of the directory where you cloned Newport. - **[Deploy and Apply Global Styling Changes using the Newport Design System (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploy_and_apply_global_styling_changes_using_the_newport_design_system.htm&release=264.0.0&type=5)** For the managed package runtime, apply modifications to the Newport design system by adding a Static Resource that overrides the Newport theme wherever it is available. Once uploaded, the Newport changes are applied to any Omniscripts using Newport. - **[Apply a Theme to a Single Omniscript using Visualforce (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_apply_a_theme_to_a_single_omniscript_using_visualforce.htm&release=264.0.0&type=5)** For the managed package runtime, before Vlocity Spring '19, make your style changes available in Omniscript's Preview mode using Visualforce. # Brazil State Codes These state codes are available for all orgs. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: All Editions except Database.com
| State Code | STATE/Province | | --- | --- | | AC | Acre | | AL | Alagoas | | AM | Amazonas | | AP | Amapá | | BA | Bahia | | CE | Ceará | | DF | Distrito Federal | | ES | Espírito Santo | | GO | Goiás | | MA | Maranhão | | MG | Minas Gerais | | MS | Mato Grosso do Sul | | MT | Mato Grosso | | PA | Pará | | PB | Paraíba | | PE | Pernambuco | | PI | Piauí | | PR | Paraná | | RJ | Rio de Janeiro | | RN | Rio Grande do Norte | | RO | Rondônia | | RR | Roraima | | RS | Rio Grande do Sul | | SC | Santa Catarina | | SE | Sergipe | | SP | São Paulo | | TO | Tocantins | # Briefcase Builder Your mobile workforce can access information seamlessly while they’re offline. You can use Briefcase Builder to create a _briefcase,_ a set of rules and filters that select records to prime for offline use. Design a mobile app that connects with a briefcase to give your users access to the most relevant records, even when there’s a network outage, spotty internet coverage, or an area without Wi-Fi. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
- **[When to Use Briefcase Builder](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_availability.htm&release=264.0.0&type=5)** Learn the ways that Briefcase Builder can complement your Salesforce-connected mobile app. - **[Mobile Apps Compatible with Briefcases](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_compatible_apps.htm&release=264.0.0&type=5)** Learn the prerequisites for mobile apps that you can connect with a briefcase. - **[Briefcase Planning](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_planning.htm&release=264.0.0&type=5)** Before you create briefcases, keep in mind a few considerations to plan which records go into each briefcase. - **[Briefcase Creation](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_create.htm&release=264.0.0&type=5)** Learn how to create and customize a briefcase for your mobile workforce. - **[Advanced Ways to Select Records for a Briefcase](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_select_records_advanced.htm&release=264.0.0&type=5)** Learn advanced ways to create a briefcase that contains the most relevant records for your mobile workers. - **[Edit, Activate, Deactivate, Delete, or Clone a Briefcase](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_actions.htm&release=264.0.0&type=5)** Find briefcases that you already registered. View the actions for a previously defined briefcase. And edit, activate, deactivate, delete, or clone a briefcase. - **[Validate Briefcase Settings](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_monitor.htm&release=264.0.0&type=5)** Check the Run As User option on a briefcase to review how many records it generates so you can validate filtering criteria and briefcase assignments. - **[Briefcase Builder and Packaging](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_packages.htm&release=264.0.0&type=5)** Install and manage packages containing briefcases. - **[Limits and Considerations](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_limits_considerations.htm&release=264.0.0&type=5)** As you create and work with offline briefcases, note these considerations and limits. # Briefcase Builder and Packaging Install and manage packages containing briefcases. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
## Consuming Briefcase Builder Packages For briefcases that you install, upgrade, or uninstall from a package, keep these considerations in mind.
Feature Supported Behavior
Activate and Deactivate Briefcase Admin can activate or deactivate a briefcase installed from a managed package.
Related Record Priming (RRP)

Briefcase Builder packaging now supports RRP.

Briefcase Rules Briefcase rules can’t be modified in a briefcase installed from a managed package.
Selected Apps (also called Connected Apps) Selected apps aren’t retained when a briefcase is packaged and distributed across orgs.
Assignment Users and Groups User or group assignments aren’t retained when a briefcase is packaged and distributed across orgs.
- The only way to delete a briefcase installed from a managed package is to uninstall the entire package. - You can have no more than 5 active briefcases for a total of 10 briefcases, or the package fails to install. - Automatic renaming: Briefcase Builder doesn’t support resolving naming conflicts during an unmanaged install. - Filters: If you use specific Custom Object IDs for filtering, you can’t successfully create a package. # Briefcase Building Briefcase Builder is how you choose which records are available offline for your users. It's important to think about your users and which records they need access to while offline. ### Required Editions ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app_plus-264-0-0-production-enus/24dbd8e3-8820-4d77-ab26-f3c195bfdf66/images/icon_important.png) Important Offline capabilities are no longer available with new Salesforce Mobile App Plus contracts as of July 31, 2026. If you currently use offline capabilities, you can continue using and renewing them with your contract.
Setup for Mobile Offline available in: Lightning Experience
User Permissions Needed
To use Mobile Offline Mobile Offline for Salesforce Mobile App Plus
## Tips For Briefcase Use With Mobile Offline - Consider grouping users into specific roles and choosing records that are relevant for that user group. - Keep in mind that records that load on the Landing Page (Mobile Offline’s home page) rely on the Briefcase to populate the record details. - Ensure that all records that appear on a users Landing Page are also in their Briefcase. The [Briefcase Builder help documentation](https://help.salesforce.com/s/articleView?language=en_US&id=xcloud.briefcase_builder_overview.htm&type=5) and [Offline Briefcase](https://trailhead.salesforce.com/content/learn/modules/offline-briefcase) Trailhead module are excellent resources to help you create a briefcase, set of rules, and filters that select records for offline use for your org. #### See Also - [_Salesforce Help_: Briefcase Builder](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_overview.htm&type=5&language=en_US) - [_Trailhead_: Offline Briefcase](https://trailhead.salesforce.com/content/learn/modules/offline-briefcase) # Briefcase Creation Learn how to create and customize a briefcase for your mobile workforce. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
![Five steps to create a briefcase in Briefcase Builder](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-briefcase_builder-264-0-0-production-enus/be5c0b1c-2ff9-445c-85c4-e6337385a6af/briefcase_builder/images/briefcase_builder_workflow_232.png) - **[Create a Briefcase](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_add_new_briefcase.htm&release=264.0.0&type=5)** Create a briefcase by using Briefcase Builder in Setup. - **[Data Selection](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_select_record_data.htm&release=264.0.0&type=5)** Learn how you can use object rules and filters to select the most relevant records for your mobile workforce. - **[App Selection](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_app_select.htm&release=264.0.0&type=5)** Learn important considerations about selecting external client apps to associate with your briefcases. # Briefcase Planning Before you create briefcases, keep in mind a few considerations to plan which records go into each briefcase. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
With Briefcase Builder, you can have up to five active briefcases and up to 50,000 records per user primed for offline access across those briefcases. When you create a briefcase, you assign the users or groups that have access to the briefcase’s records, and you select which apps are connected to the briefcase. These decisions can constrain where or for whom you can use a briefcase. - Consider your use cases for accessing records offline. - Consider the roles or teams that interact with records offline to support your use cases. - Among the roles or teams that access records offline, consider the requirements for the records that the roles or teams can or can’t view. - Consider the apps that each role or team uses to view records offline. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-briefcase_builder-264-0-0-production-enus/be5c0b1c-2ff9-445c-85c4-e6337385a6af/images/icon_example.png) Example All your field technicians need offline access to information about the service appointments assigned to them. They also need access to the related asset and case information. Experienced field technicians also get customer questions about services, so they need offline access to your product information. To accommodate these needs, create two briefcases. - One briefcase for all field technicians. Add the Service Appointment, Asset, and Case objects to the briefcase as related object rules. Assign the briefcase to the group that represents all field technicians. - One briefcase for the experienced field technicians. Add the PricebookEntry object to the briefcase. Assign the briefcase to the group that represents experienced field technicians. # Bring Your Own Amazon Account FAQ Get answers to common questions about using Bring Your Own Amazon Account. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
What is Bring Your Own Amazon Account? Bring Your Own Amazon Account lets certain Salesforce industry clouds extend their functionality by integrating with an AWS account. Costs for any AWS services are based on the pricing agreements between your organization and AWS. I don’t have an existing AWS account. How do I get started? Create an AWS account. - For information about creating an AWS account if you have AWS Organizations, see [Creating an AWS account in your organization](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_accounts_create.html). - For information about creating an AWS account if you don’t have AWS Organizations, see [How do I create and activate a new AWS account?](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/). I have an existing AWS account. Can I use it for Salesforce features that require an AWS account? Bring Your Own Amazon Account requires a new, dedicated AWS account to function properly. # Bring Your Own Key (BYOK) When you supply your own key material, you take direct control over encryption keys in a way that helps you address compliance and regulatory requirements. You retain all the benefits built into Salesforce Shield Platform Encryption. You can upload your own customer-supplied keys for most data stores that Shield Platform Encryption supports. Depending on the feature, BYOK supports tenant secrets, data encryption keys (DEKs), and root keys. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
User Permissions Needed
To generate, destroy, export, import, and upload tenant secrets and customer-supplied key material: Manage Encryption Keys
To edit, upload, and download HSM-protected certificates with the Shield Platform Encryption Bring Your Own Key service:

Manage Encryption Keys

AND

Manage Certificates

AND

Customize Application

Controlling your own tenant secret, DEK, or root key entails: - Generating a BYOK-compatible certificate for the key material type - Using that BYOK-compatible certificate to encrypt and secure your self-generated key material. Keys must be PKCS#8 encrypted, Base64 encoded 4096 RSA key pair with appropriate headers and footers. We provide scripts to help with this step. - Uploading your key material to Salesforce or granting the Salesforce Shield Platform Encryption key management machinery access to your key material stored outside of Salesforce For auditing purposes, all Salesforce-generated and customer-supplied key material is visible on the Key Management page. - **[Bring Your Own Key Overview](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok.htm&release=264.0.0&type=5)** Generate and store customer-supplied key material outside of Salesforce by using your own crypto libraries, enterprise key management system, or hardware security module (HSM). You then grant the Salesforce Shield Platform Encryption access to those keys. Bring Your Own Key (BYOK) is available for most key types and data stores that Shield Platform Encryption supports. - **[Generate a BYOK-Compatible Certificate](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_generate_cert.htm&release=264.0.0&type=5)** To encrypt data in Salesforce with Bring Your Own Key (BYOK) key material for any feature, such as field-level encryption or Search Encryption, use Salesforce to generate a 4096-bit RSA certificate. You can generate a self-signed or certificate-authority (CA) signed certificate. Each BYOK-compatible certificate’s private key is encrypted with a derived, org-specific tenant secret key. - **[Generate a Certificate Fingerprint](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_tle_certificate_fingerprint_script.htm&release=264.0.0&type=5)** Use this script to fetch a certificate’s fingerprint. - **[Wrap BYOK Key Material](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_generate_secret.htm&release=264.0.0&type=5)** Generate a random number as your BYOK key material. For FLE only, you also calculate an SHA256 hash of the secret and encrypt it with the public key from the BYOK-compatible certificate you generated. - **[Upload Your BYOK Key Material](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_upload_keys.htm&release=264.0.0&type=5)** After you prepare your Bring Your Own Key (BYOK) key material, upload it to Salesforce. You can upload keys for most categories of data that Shield Platform Encryption supports. Each data category uses a different type of key material: tenant secrets for deriving data encryption keys, data encryption keys (DEKs) for direct encryption, or root keys for securing other keys. You upload the key for your category of data, such as search indexes, plus a second file that secures your key material during upload. - **[Opt Out of Key Derivation with BYOK](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_opt_out_derivation.htm&release=264.0.0&type=5)** For Field-Level Encryption (FLE), Files and Attachments, and Event Bus Data, you can opt out of key derivation and upload a final data encryption key (DEK). Opting out gives you even more control of the key material used to encrypt and decrypt your data. - **[Take Good Care of Your BYOK Keys](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_key_care.htm&release=264.0.0&type=5)** When you create and store your own key material outside of Salesforce, it’s important that you safeguard that key material. Make sure that you have a trustworthy place to archive your key material; never save a tenant secret or data encryption key on a hard drive without a backup. - **[Troubleshooting Bring Your Own Key](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_faq.htm&release=264.0.0&type=5)** Read these frequently asked questions to help you troubleshoot any problems that arise with Shield Platform Encryption’s Bring Your Own Key service. #### See Also - [Onboard BYOK](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_onboard_switch_to_byok.htm&release=264.0.0&type=5 "Switch from Salesforce-generated keys to Bring Your Own Key (BYOK) for Shield Platform Encryption.") - [Key Management and Rotation](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_setup.htm&release=264.0.0&type=5 "With Shield Platform Encryption, you control and rotate the key material used to encrypt your data. You can use Salesforce to generate a tenant secret for you, which is then combined with a primary secret for each release to derive a data encryption key. This derived data encryption key is then used in encryption and decryption functions. You can also use the Bring Your Own Key (BYOK) service to upload your own key material. Or you can store your key material outside of Salesforce. Use the External Key Management Service or the Cache-Only Key Service to fetch your key material on demand.") # Bring Your Own Key (BYOK) Option With BYOK, customers can bring key material from outside of Salesforce. They generate key material by using their own crypto libraries, enterprise key management system, or hardware security module. Customers can encrypt it with a self-signed or certificate authority (CA) certificate’s public key. They upload the keys to Shield Platform Encryption. They can revoke access on demand via the Key Management tooling in Setup or programmatically via the API. Customers can opt out of the key derivation process on a key-by-key basis. When customers opt out of derivation, they upload their own DEK, which is used to directly encrypt and decrypt data. Before they’re stored in the Salesforce database, customer-supplied DEKs are wrapped, either with a tenant wrapping key or with the external root key that created them. When needed, Shield Platform Encryption unwraps the keys on the regional Shield KMS and places them in the encrypted key cache for a limited time. Customer-supplied key material can be uploaded once every 24 hours in production and Developer Edition orgs, and every 4 hours in sandbox orgs. FLE key material can be destroyed declaratively or programmatically by the customer at any time. Database Encryption keys have a minimum 3-month lifespan. Refer to [Rotate Your Encryption Key Material](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_rotate_keys.htm&language=en_US) for all key rotation intervals. ## Field-Level Encryption BYOK For FLE, by default, when customer-supplied tenant secrets are uploaded, all subsequent data is encrypted by using the new material. They’re encrypted either with the key derived from the current primary secret and the new customer-supplied tenant secret or the new DEK alone. This org-specific derived DEK is never persisted on disk. Customers can opt out of the key derivation process on a key-by-key basis. When customers opt out of derivation, they upload their own DEK, which is used to directly encrypt and decrypt data. Before they’re stored in the Salesforce database, customer-supplied DEKs are wrapped, either with a tenant wrapping key or the external root key that created them. When needed, Shield Platform Encryption unwraps them on the regional Shield KMS and places them in the encrypted key cache for a limited time. Alternatively, Field-Level Encryption customers can create and store their DEKs outside of Salesforce and use the Cache-Only Key Service to use those DEKs for Shield Platform Encryption. Customers can use an on-premises key service, host their own cloud-based key service, or use a cloud-based key brokering vendor. DEKs are fetched on demand over a secure channel that the customer configures. These DEKs are wrapped with a cache key encryption key and placed in the encrypted key cache for encrypt and decrypt operations. Because cache-only keys bypass the key derivation process, they’re used to directly encrypt and decrypt your data.  Subsequent encryption and decryption requests go through the encrypted key cache until the cache-only key is revoked or rotated, or the cache is flushed. After the cache is flushed, the Cache-Only Key Service fetches key material from your specified key service. The cache is regularly flushed every 72 hours. Certain Salesforce operations flush the cache on average every 24 hours. Destroying a DEK invalidates the corresponding DEK that’s stored in the cache. ## Database Encryption BYOK BYOKs for Database Encryption are always Database Encryption seeds. Full DEK upload isn’t supported for Database Encryption. All Database Encryption uses derived DEKs, so customers can only upload a database tenant secret. Then, unique DEKs are derived for every database fragment within the Salesforce database, as opposed to FLE DEKs, which are derived in the KMS. Per Salesforce key backup policy, new database tenant secret material isn’t used for new DEKs for up to 24 hours. During this time a unique Salesforce provided Database Encryption seed is used. This seed becomes a permanent addition to the customer’s key archive. - **[BYOK Tenant Secret Flow](https://help.salesforce.com/s/articleView?id=xcloud.security_shield_pe_byok_secret_flow.htm&release=264.0.0&type=5)** To supply your own tenant secret, you create the secret, sign it with a BYOK-compatible certificate, and encode it with base64 encoding. # Bring Your Own Key Overview Generate and store customer-supplied key material outside of Salesforce by using your own crypto libraries, enterprise key management system, or hardware security module (HSM). You then grant the Salesforce Shield Platform Encryption access to those keys. Bring Your Own Key (BYOK) is available for most key types and data stores that Shield Platform Encryption supports. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
## Required Permissions To work with encryption keys, you need the Manage Encryption Keys permission. To generate BYOK-compatible certificates, you need the Customize Application permission. ## BYOK Generation and Upload Process Salesforce stores data in various databases and data stores that can vary in architecture. Because Shield Platform Encryption uses dedicated key material for each data store, not all customer-supplied keys have the same size, wrapping, and encoding requirements. - Depending on the certificate requirements for each key, create either a self-signed or CA certificate for wrapping your key material. - Generate your 256-bit key material. Different key material types required different generation methods. - Wrap the key material with the certificate public key. - Encode the encrypted, wrapped secret with base64 encoding. - Upload your key material. Salesforce provides scripts to help you automate this process and ensure a service-compatible key that's ready for upload. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important We provide bash scripts for Linux and MacOs. To work with these scripts on a Windows operating system, use a Linux emulator. ## BYOK for Field-Level Encryption, Files, and Event Bus Data For Field-Level Encryption (FLE), files and attachments, and event bus data, you create and upload two files: - A file containing the encrypted 256-bit key - A file containing the hash of the encrypted 256-bit key By default, Salesforce uses your uploaded secret as a tenant secret as part of a key derivation function (KDF). You can opt out of key derivation on a key-by-key basis and use your uploaded key material as the final data encryption key (DEK). In this way, you control the keys used for encrypt and decrypt operations. Customer-supplied key material and DEKs for these data categories must meet these specifications: - 256-bit size - Encrypted with a public 4096-bit RSA key that’s extracted from the downloaded BYOK certificate, then padded using the SHA1 padding algorithm with OAEP padding. To be compatible with Salesforce BYOK, use a PKCS#8 encrypted, Base64 encoded RSA key pair (2048 bits or larger) with appropriate headers and footers. - After it’s encrypted, encode it in standard base64. ## BYOK for Archive, Backup & Recover Next, Data 360, Database Encryption, and Search Indexes Salesforce secures uploaded root keys with a combination of certificates and tokens. We generate certificates for you. You then wrap your customer-supplied key with this certificate before upload. This process makes sure that your key is compatible with our encrypted storage process. Salesforce also generates tokens that contain metadata that verifies the authenticity of your uploaded key. We use two kinds of tokens: - Import tokens provide secure key handling during the upload process and are valid for 24 hours. BYOK for Data 360 uses import tokens. - Session tokens are valid during the session within which they’re created. BYOK for search indexes and Database Encryption use session tokens. You can generate a new certificate and session or import token at any time. Generate customer-supplied root keys for Archive, Backup & Recover Next, Data 360, Database Encryption, and search indexes according to these specifications: - 256-bit size - Requires a two-stage key wrapping process to prepare the BYOK payload, aligning with PKCS#11 `CKM_RSA_AES_KEY_WRAP`. Encrypt the 256-bit key with the 4096-bit RSA public key extracted from the downloaded BYOK certificate. This encryption process uses `RSA-OAEP` and `MGF1` with SHA-512. Wrap the 256-bit customer-generated AES key using the AES wrapping key via AES Key Wrap with Padding (`AES-KWP, RFC 5649`). The final payload consists of the RSA-encrypted wrapping key, followed by the AES-wrapped customer key. - Encode the encrypted key in standard base64. ## BYOK Key Rotation You can rotate BYOK keys the same as other keys managed through Shield Platform Encryption. The most recently uploaded key is the designated active key and encrypts new data. Older keys are archived and used to decrypt existing data. # Bubble Charts Bubble charts use the size and coloring of bubbles to show multiple dimensions and measures. Use a bubble chart to illustrate the relationship between two columns of numerical data in your spreadsheet. A third numerical column represents the size of each bubble in the chart. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
## Data Options for Bubble Charts To adjust the data in bubble charts, open the Chart Editor. To see and adjust how the data is treated, use the Data tab. In addition to the standard options, there are several more settings for bubble charts. - Y-Axis: Specify the cell range for the chart’s Y-axis. - Sizes: Specify the cell range for the sizes of the bubbles in the chart. To adjust the appearance of bubble charts, use the Customize tab. - Style: Change the position of the chart legend, or hide it entirely. Select the colors for the chart’s background and border. - Horizontal Axis: Give the axis a title, adjust its scale, set the number of tick marks shown, change the number formatting, and reverse the axis order. - Vertical Axis: Give the axis a title, adjust its scale, set the number of tick marks shown, and change the number formatting ## Sample Data for Bubble Charts To create a sample bubble chart, copy the sample data, and paste it into a Quip spreadsheet. Select the data range, and then from the Insert menu, select **Chart** | **Bubble**. To adjust how the data appears, double-click the chart to open the Chart Editor, and then deselect **Switch rows and columns**. | Country | Sales Reps | Sales | Region | Market Size | | --- | --- | --- | --- | --- | | USA | 5 | $5,500 | Americas | 3% | | Brazil | 14 | $12,200 | Americas | 12% | | Mexico | 20 | $60,000 | Americas | 33% | | Italy | 18 | $24,400 | Europe | 10% | | France | 22 | $32,000 | Europe | 42% | ![Quip bubble chart](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_charts_bubble.png) # Bucket Transformations: Categorize Column Values With Salesforce Data Pipelines's Data Prep, you can bucket your numbers, text, and date fields to group and organize data. - **[Categorize Date Column Values into Buckets](https://help.salesforce.com/s/articleView?id=xcloud.sdp_recipe_transformation_bucket_date.htm&release=264.0.0&type=5)** In Salesforce Data Pipelines, Data Prep provides transformations that allow you to prepare, clean, and transform your data. For example, you can use a transformation to create a calculated column based on a formula. You add transformations inside a Transform node. You can string together multiple transformations to manipulate data sequentially. - **[Categorize Dimension Column Values into Buckets](https://help.salesforce.com/s/articleView?id=xcloud.sdp_recipe_transformation_bucket_dimension.htm&release=264.0.0&type=5)** In Salesforce Data Pipelines, use a bucket column in a Data Prep recipe to categorize and organize text values. For example, you can create buckets West, Central, and East to group regions. - **[Categorize Measure Column Values into Buckets](https://help.salesforce.com/s/articleView?id=xcloud.sdp_recipe_transformation_bucket_measure.htm&release=264.0.0&type=5)** In Salesforce Data Pipelines, use a bucket column in a Data Prep recipe to categorize and organize numeric values. For example, you can create buckets High, Middle, Low to group numbers of cases per account. # Build a Data 360 Report Based on Your Custom Tags After you have your tags defined and have assigned them to resources, you’re ready to build a report. For example, if you create a tag group called Department and assign the tag Marketing to a data stream, a new calculated field called Department is created in the extended semantic data model (SDM). You can then start building reports using this field, such as to see consumption by Department. Before you begin, install the [Consumption Tagging app](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_tagging_app_install.htm&release=264.0.0&type=5 "The Consumption Tagging app contains the required metadata and objects (data lake objects and semantic data models) for consumption tags and the Tableau Next assets for the Consumption Analytics dashboard. This Tableau Next dashboard uses billing data and standard consumption tags to provide you with granular insights, interactive visualizations, and usage forecasts."), which contains the required SDM. Remember to wait at least 24 hours from the moment you tagged a resource for the automatic system to start tagging the usage events for that resource. Be sure that you have the appropriate license to create Data 360 or Tableau Next reports, and the appropriate permissions. See Salesforce Help: [Digital Wallet Permissions](https://help.salesforce.com/s/articleView?id=xcloud.wallet_permissions.htm&release=264.0.0&type=5 "To access Digital Wallet and its features, users require a combination of user permissions, permission sets, and licenses. To access Digital Wallet, you must have a Data 360 license and not a Customer Data Platform (CDP) license.") for details. As an example, this report shows consumption by Department. 1. In Data 360, select **Reports**. 2. Click **New Report**, then select **Semantic Data Models** as the category. 3. Select Consumption Insights Extended Semantic Model, then click **Start Report**. 4. Under Columns, select **Units Consumed**, which indicates the number of credits consumed. ![Units Consumed is a value listed under the Consumption Insights data model object (DMO).](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-ct-dcr-units-consumed.png) 5. For Group Rows, select a tag group, which is under Calculated Dimensions. In this example, we’re selecting the tag group, **Department**. ![Department is value listed under Calculated Dimensions.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-ct-dcr-department.png) And just like that, you created a report that shows consumption by Department. You can follow the same process for any of your tag groups. 6. Click **Add Chart** to see your department data visualized into a bar chart. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/images/icon_example.png) Example Example Reports Consumption by Cost Center – Cost Center is a custom tag, and in this report, you can see consumption for all cost centers and which resources they used. ![An example report that uses a bar graph to show units consumed per cost center.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-ct-dcr-by-cost-center.png) Consumption by Region – Region is a custom tag, and in this report, you can see consumption for each region and which usage types the region used. ![An example report that uses a bar graph to show units consumed per region.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-ct-dcr-by-region.png) # Build a Flexcard with the Flexcard Designer (Managed Package) For the managed package runtime, with the Flexcard Designer create, build, design, test, and activate a Flexcard before publishing it to a Lightning or Experience page. Use a drag interface with WYSIWYG editing to preview while you build dynamic context-specific user interfaces for customer interactions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![FlexCards Workflow](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_workflow.png) ## Create a New Flexcard - Step through a four-step configuration wizard to create a new Flexcard. See [Create a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."). - Configure basic settings such as title, name, author, description, and optionally enable the ability to embed the Flexcard inside another Flexcard. - Select and configure a data source, and where applicable, add test data to populate fields and preview the Flexcard at run time. ## Configure Setup Options Configure card-wide options, such as adding an event listener, adding session variables, disabling record looping, limiting user access, and updating data source settings, and more. See [Set Up a Flexcard in the Flexcard Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_set_up_a_flexcard_in_the_flexcard_designer.htm&release=264.0.0&type=5 "For the managed package runtime, configure optional settings for your Flexcard in the Setup panel of the Flexcard Designer. For example, update a data source, create an event listener, add session variables, and so on."). ## Add, Configure and Style Elements - Add and configure elements, such as fields, [states](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_state_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add a state to a Flexcard to present different interactions and layouts based on specified conditions. Each Flexcard has a default state that cannot be deleted. Add a State element to the canvas of a Flexcard, or clone a state already on the canvas."), [actions](https://help.salesforce.com/s/articleView?id=xcloud.os_add_an_action_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add up to six actions to a Flexcard to launch or update an Omniscript, navigate to a web page or application, display a flyout, fire an event, or update data field values. For example, add an action on an account Flexcard that when clicked, displays the contact information for the account."), and other components on a Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). - Add styles for each element such as background color and image, border, padding, and margin. Set an element's height. Update the look of supported text fields by adding custom classes. Create and apply custom classes and inline styles. And more. See [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). - Enable an element's width to change when the viewport updates. See [Create Responsive Elements on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_responsive_elements_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element's width to change when the viewport updates. For example, make the widths of the fields for First Name and Last Name of a Contact take the full width of the page on smaller devices, but shrink to 50% on larger devices such as laptops and desktops."). ## Preview Flexcard Preview your Flexcard's appearance and functionality before publishing it to a Lightning or Experience page. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). ## Activate Flexcard Activate your Flexcard to publish it to a Lightning or Experience page. See [Activate a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, activate a Flexcard to generate an LWC and publish it to a Lightning page or Experience Builder site. After you activate a Flexcard, you can’t edit it or add elements to it."). ## Configure Publish Options Define metadata values and set a custom component SVG icon for the generated Flexcard LWC. ## What's Next Deploy your generated Flexcard LWC from the Lightning App Builder to a Lightning page or from the Experience Builder to an Experience page. # Build a Flow to Move Your Data Set up the triggers and actions that move data between Salesforce Suites and your connected external app. To set up triggers and actions, configure fields, or add custom fields in flows, see [About Flows and Flow Builder](https://help.salesforce.com/s/articleView?id=platform.automate_flow_about.htm&type=5&language=en_US). # Build a Mobile Publisher for Experience Cloud App Build a Mobile Publisher for Experience Cloud app by configuring these Experience Cloud features. - **[Urge or Require Users to Update to the Latest Mobile Publisher App Version](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_app_settings.htm&release=264.0.0&type=5)** For publicly distributed Mobile Publisher for Experience Cloud apps, you can use the App Version Update settings in Experience Builder to configure a message that encourages or requires your app users to install updates. By updating their app, users can avoid any service disruptions. - **[Allow Experience Cloud App Users to Initiate Deletion of Their Data](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_account_deactivate.htm&release=264.0.0&type=5)** The App Store Review Guideline 5.1.1 (v) requires that all apps must allow users to initiate deletion of their account from within the app. Apple can remove your app from its App Store if your app doesn't meet this requirement. - **[Configure App Navigation](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_builder_app_navigation.htm&release=264.0.0&type=5)** Users can navigate your branded mobile Experience Cloud app through various methods, depending on how you configure app navigation. - **[Set Up the Navigation Tab Bar](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_mobile_tab_bar_commun.htm&release=264.0.0&type=5)** In your branded Experience Cloud mobile app, the navigation tab bar is fixed at the bottom of the screen, with two pre-configured tabs: Home and User Settings. Customize the navigation tab bar by adding more tabs, and adjust the look and feel of the tabs to match your branding. And if you don't want the navigation tab bar, you can disable it. - **[Manage How URLs Open from Your App](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_commun_url_manage.htm&release=264.0.0&type=5)** In your app’s Setup for Mobile Publisher project, use the URL Management section to configure how URLs open from your Mobile Publisher for Experience Cloud app. - **[Custom Login Flow Considerations](https://help.salesforce.com/s/articleView?id=xcloud.custom_login_flow.htm&release=264.0.0&type=5)** A login flow directs users through a login process before they access your Mobile Publisher for Experience Cloud app. After Salesforce authenticates a user, the login flow directs the user through a process, such as enforcing strong authentication or collecting user information. When users complete the login flow successfully, they’re redirected to their Mobile Publisher for Experience Cloud site. If unsuccessful, the flow can log out users immediately. - **[Privacy Policy](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_privacy_policy.htm&release=264.0.0&type=5)** Learn the processes and requirements for your Experience Cloud app’s privacy policy. - **[Configure Your App's Orientation](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_commun_ipad.htm&release=264.0.0&type=5)** Choose which orientations to support in your Mobile Publisher for Experience Cloud app. You can also opt in to support users who want to experience your branded Experience Cloud app on an iPad. # Build a Report for Generative AI Prompts Usage Build a Data 360 report for Generative AI (GenAI) prompts for Flex Credits from scratch that uses the Calculated Insights data model object (DMO). Using this DMO to build a report from scratch allows you to create a completely custom report structure. Before you begin, [install the Consumption Tagging app](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_tagging_app_install.htm&release=264.0.0&type=5 "The Consumption Tagging app contains the required metadata and objects (data lake objects and semantic data models) for consumption tags and the Tableau Next assets for the Consumption Analytics dashboard. This Tableau Next dashboard uses billing data and standard consumption tags to provide you with granular insights, interactive visualizations, and usage forecasts."), which contains the Consumption Insights DMO on which you build this report. See Salesforce Help: [Digital Wallet Permissions](https://help.salesforce.com/s/articleView?id=xcloud.wallet_permissions.htm&release=264.0.0&type=5 "To access Digital Wallet and its features, users require a combination of user permissions, permission sets, and licenses. To access Digital Wallet, you must have a Data 360 license and not a Customer Data Platform (CDP) license.") to make sure you have the permissions to access Digital Wallet objects, install the Consumption Tagging app, and create Data 360 reports. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/images/icon_note.png) Note The Custom Tagging app also contains assets for building Tableau Next reports and for other Digital Wallet advanced features. However, if you don’t want to install the Custom Tagging app or don’t have the privileges to do so, you can also build this report using the TenantEnrichedUsageEvent data lake object (DLO). 1. From the App Launcher, select Data 360, then go to Reports. 2. Click **New Report**. 1. For the Category, select **Data Cloud**, find and select **Consumption Insights DMO**. 2. Click **Start Report**. 3. For Outline, in Group Rows, find and select **Resource ID Or API Name**. 4. Add these columns: - Units Consumed - Usage Type Developer Name - Event Time - Card Name 5. For Filters, add **Resource Type equals GenAiPromptTemplate**, then click **Apply**. 6. Save and run the report. The reports lists the prompts using the prompt ID (1) or API name (2). ![The GenAI by prompt report in Edit mode.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-genai-prompt-report-dmo.png) The API name usually mirrors the actual prompt name; however, the internal prompt ID isn’t descriptive enough to identify which prompt. But we’ll show you how to [map the prompt ID with the prompt name](https://help.salesforce.com/s/articleView?id=xcloud.wallet_genai_prompts_match_ids.htm&release=264.0.0&type=5 "After you build a report for tracking Generative AI (GenAI) consumption by prompt, the reports lists the prompts using the prompt ID or API name. The API name usually mirrors the actual prompt name; however, the internal prompt ID isn’t descriptive enough to identify which prompt. But we’ll show you how to map the prompt ID with the prompt name."). #### See Also - [Consumption Insights Dashboard (Data 360 Reports)](https://help.salesforce.com/s/articleView?id=xcloud.wallet_ootb_reports_prepare.htm&release=264.0.0&type=5 "As part of Data Cloud provisioning, the Consumption Insights dashboard is installed. This Data 360 dashboard contains several predefined (out-of-the-box) reports that were built using standard consumption tags. How you complete the configuration to view the reports depends on if you're a new or existing Data 360 customer.") - [TenantEnrichedUsageEvent Data Lake Object](https://help.salesforce.com/s/articleView?id=xcloud.wallet_teue_reference.htm&release=264.0.0&type=5 "The TenantEnrichedUsageEvent Data Lake Object (DLO) is an enriched version of the TenantBillingUsageEvent DLO, specifically created and optimzed for consumption reporting. In addition to capturing raw usage data, it contains standard consumption tags that provide metadata alongside billing usage to enable further slicing and dicing for more advanced insights. This DLO fuels the data provided in the Digital Wallet out-the-box-reports and dashboards, and enables you to build your own custom reports. And best of all, you can create reports directly from it, and you don’t incur any costs when building a report based on it.") # Build a Transaction Security Policy with Condition Builder Create a transaction security policy without writing a line of code. Condition Builder, available in Real-Time Event Monitoring, gives you a declarative way to create customized security policies to protect your data. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

User Permissions Needed
To view events: View Real-Time Event Monitoring Data
To view transaction security policies: View All Data
To create, edit, and manage transaction security policies: Customize Application and Modify Transaction Security Policy
You can create multiple policies for the same type of event, but we recommend that your policies and their actions don't overlap. If multiple policies with the same action for a given event execute when the event occurs, their order of execution is indeterminate. 1. From Setup, in the Quick Find box, enter Transaction Security, and then select **Transaction Security Policies**. 2. Click **New**, and then select **Condition Builder**. ![Condition Builder chooser](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/condition_builder.png) 3. Click **Next**. 4. Select an event that your policy is built on. For example, if you want to track API calls in your org, select **API Event**. If you want to monitor when users view or export reports, select **Report Event**. See [Transaction Security](https://help.salesforce.com/s/articleView?id=xcloud.enhanced_transaction_security_policy_types.htm&release=264.0.0&type=5 "Transaction Security is a framework that intercepts real-time events and applies appropriate actions to monitor and control user activity. Each transaction security policy has conditions that evaluate events and the real-time actions that are triggered after those conditions are met. The actions are Block, Multi-Factor Authentication, and Notifications. Before you build your policies, understand the available event types, policy conditions, and common use cases. Transaction Security is included in Real-Time Event Monitoring.") for the full list of available events. 5. Select your condition logic. The logic applies to the conditions that you create in the next step. You can specify whether all conditions must be met for the policy to trigger an action, or any condition. Select **Custom Condition Logic Is Met** if you want to specify more complex logic. Use parentheses and logical operators (AND, OR, and NOT) to build the logical statements. Use numbers to represent each condition, such as 1 for the first condition and 2 for the second condition. For example, if you want the policy to trigger if the first condition and either the second or third conditions are met, enter 1 AND (2 OR 3). 6. Select your conditions. Each condition has three parts: - The event condition you want to monitor. The available conditions depend on the event you selected earlier. For example, you can monitor the number of rows that a user viewed in a report using the **Rows Processed** condition of Report Event. To monitor Salesforce entities that API calls query, use the **Queried Entities** condition of API Event. To monitor the IP addresses from which a user logged in, use the **Source IP** condition of Login Event. - An operator, such as Greater Than or Starts With or Contains. - A value that determines whether the condition is true or false. For example, if you specified the **Rows Processed** condition to monitor when users viewed more than 2,000 rows in a report, enter 2000. If you specified the **Queried Entities** condition to monitor API calls against leads, enter Lead. If you specified the **Source IP** condition to monitor user logins from a specific IP address, enter the actual IP address, such as 192.0.2.255. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip Conditions map to fields of the event storage objects, such as ApiEvent.RowsProcessesd or LoginEvent.SourceIP. See the [API documentation](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_objects_monitoring.htm) for possible values and examples for each field that shows up as a condition in Condition Builder. This example shows a policy that monitors API calls. The actions trigger if an API call queries the Lead object and either the number of rows processed is greater than 2000 or the request took longer than 1000 milliseconds to complete. See [Condition Builder Examples](https://help.salesforce.com/s/articleView?id=xcloud.enhanced_transaction_security_cb_examples.htm&release=264.0.0&type=5 "Use these examples to help you convert your own real-world use cases into Condition Builder conditions.") for more examples. ![Condition Builder conditions for API Event](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/enh_txn_sec_condition_builder.png) 7. Click **Next**. 8. Select what the policy does when triggered. The actions available vary depending on the event type. For more information, see [Enhanced Transaction Security Actions and Notifications](https://help.salesforce.com/s/articleView?id=xcloud.enhanced_transaction_security_actions_notifs.htm&type=5&language=en_US) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note The multi-factor authentication action isn’t available in the Salesforce mobile app, Lightning Experience, or via API for any events. Instead, the block action is used. For example, if a multi-factor authentication policy is triggered on a list view performed via the API, Salesforce blocks the API user. 9. Select who is notified and how. 10. Enter a name and description for your policy. Your policy name can contain only underscores and alphanumeric characters and must be unique in your org. It must begin with a letter, not include spaces, not end with an underscore, and not contain two consecutive underscores. 11. Optionally, enable the policy. 12. Click **Finish**. Your policy is added to the list of available policies. When you enable Transaction Security policies for an event, some transaction run times related to that event can increase. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important If you customize a Condition Builder policy with the API, you must include the Flow ID (for flow API), EventName, and Type of CustomConditionBuilderPolicy to save your policy. - **[Condition Builder Examples](https://help.salesforce.com/s/articleView?id=xcloud.enhanced_transaction_security_cb_examples.htm&release=264.0.0&type=5)** Use these examples to help you convert your own real-world use cases into Condition Builder conditions. # Build an "All Open Tasks" Report Create an All Open Tasks report to see how many open tasks your team must complete by a certain date, week, or month. You can compare these numbers weeks over week to see improvements or declines in productivity. 1. Navigate to the **Reports** tab. 2. Click **New Report**. 3. Select **Tasks & Event** for the report type. 4. Click **Filters**. 5. Apply the following filters: 1. Change the Show Me filter to All Activities to see all the activities created. 2. Change the Date filter to **All Time**. If you want to filter your report to see tasks based on a certain due date, change the Date filter. For example, switch to **This Week** to only see tasks that are due for the week. 3. Change the Show filter to **Tasks** to see only open tasks. 6. Save your changes. 7. Give your report a name and choose whether to make it public or private. 1. If you select **Private Reports**, only you can see the report. If you select **Public Reports**, then everyone with access to reports in Salesforce can see the report. 8. Save your changes. You can subscribe to a report to receive it by email. #### See Also - [Schedule and Subscribe to Reports](https://help.salesforce.com/s/articleView?id=analytics.reports_subscribe_overview.htm&type=5&language=en_US) # Build an "All Overdue Tasks" Report Create an All Overdue Tasks report to see the volume of past due tasks. You can compare these numbers week over week to see improvements or declines in productivity. 1. Navigate to the **Reports** tab. 2. Click **New Report**. 3. Select **Tasks & Event**for the report type. 4. Click **Filters**. 5. Apply these filters: 1. Change the Show Me filter to **All Activities** to see all the activities created. 2. Change the Date filter to **Last 30 Days** to see the open tasks that were due within the last 30 days. You can filter the report to see tasks that were due yesterday, today, or within the last 30, 60, 90, 120 days. 3. Change the Show filter to **Tasks** to see only the open tasks. 6. Save your changes. 7. Give your report a name and choose whether to make it public or private. If you select **Private Reports**, only you can see the report. If you select **Public Reports**, everyone with access to reports in Salesforce can see the report. 8. Save your changes. You can subscribe to a report to receive it by email. #### See Also - [Schedule and Subscribe to Reports](https://help.salesforce.com/s/articleView?id=analytics.reports_subscribe_overview.htm&type=5&language=en_US) # Build an Effective Self-Service Help Center Customer-friendly support doesn’t have to be complicated or burdensome for your team. Offer a self-service help center as an effective and cost-efficient way to grow your business. Follow these tips to get the most value out of self-service. When you build a customer-friendly self-service help center, you set up your customers and team members for success. Your customers are happy to get the answers they’re looking for. Your team is happy to focus on trickier issues, making sales, and checking off other to-dos. ## Make Sure That Customers Can Find Your Content Your self-service site isn’t useful if your customers don’t know where to go for help, so make it easy for customers to find. - Include a link to your help center on your website’s most highly trafficked pages. Consider including links in other places, too, like in email communications, member pages, and product pages. - Help customers find answers by adding a search bar on your help center. - Use labels, categories, or tags to guide customers to the right place. - Consider optimizing your content for search engines, as your customers could turn to a web search before they find your resources. Include keywords that your customers might search for in your titles and content. ## Write Clear, Relevant Articles Helpful articles are clearly written, informative, and useful. Use simple and clear language to describe what customers need to know. Cut details that don’t help them succeed. For a relevant and useful help center, gather your customers’ most common questions and turn them into articles. We recommend that you start with a variety of content such as common support requests, troubleshooting steps, FAQs, and detailed product information. You can include images and videos for a more hands-on approach that your customers will love. You don’t have to start from scratch—look to your team’s past interactions with customers. You or someone on your team likely answered basic questions about your company, helped a customer fix an issue, or wrote out a step-by-step tutorial for your products. Start with what you have to be able to quickly write and publish your initial set of articles. You can make adjustments later. ## Open the Lines for Feedback Listen to feedback to build trust with your customers. Start by anticipating what your customers want and offer a few articles to them. But if you let your them provide feedback, you can gather useful data that takes the guesswork out of your customer support. Our recommendations: - Offer readers the opportunity to vote on or rate articles to show you if they think the information is useful. - Include a contact form in your help center so customers can reach out if they can’t find the answer to a question. - Offer more support such as email, phone, live chat, or messaging apps, and show those links prominently on the page. ## Include Article Maintenance in Your Team’s Processes Your help center isn’t a one-time task. Your team should always listen to customer feedback and find new questions and solutions to document. We recommend hosting regular reviews to go over feedback data and re-read articles to make sure that you’re truly helping your customers. ## Add Branding for a Seamless Experience Give your customers a consistent experience between your help center and your corporate site. Use the same colors, icons, header, and footer across all your web properties, and use the same domain or subdomain. Branding doesn’t stop at visuals. Create a style guide for your team to keep your articles consistent in voice, tone, and formatting regardless of who writes them. Look for similar examples online to consolidate and adapt as you write your first articles. ## Keep Mobile in Mind Smartphone users increasingly turn to their phones instead of a desktop when they want answers. Your help center should be responsive and reformat to fit on the viewer’s screen. If you omit mobile, you lose opportunities to help and maintain customer relationships. A self-service help center is the first place your customers go for help, so make it relevant and easy-to-use. When you nail self-service, your customers are happy to avoid a lengthy phone call or a game of email ping-pong. Your team is freed up to focus on complicated support issues, sales, and everything else they need to get done. #### See Also - [_Salesforce Blog:_ 4 Steps to Write Amazing Support Content for Your Small Business Help Center](https://www.salesforce.com/blog/2019/08/support-content-for-smb-help-center.html) # Build an Integration Procedure To build an Integration Procedure, define its steps and logic by using a combination of Blocks and Actions. Actions perform specific tasks such as sending email, reading and writing Salesforce data, and running batch jobs. Blocks allow you to group and control multiple Actions. For example, use Blocks to cache the output, or provide error handling, for the Actions in the Block. You can nest blocks within other blocks. For example, you can nest a Loop Block within a Try-Catch Block or a Cache Block. You can control a lot about the Integration Procedure as a whole in the Procedure Configuration under the Properties tab. For example: - Define which data is returned in the response JSON. - Set the required permissions to run the procedure. - Track custom data about the performance of the procedure. - Split the Integration Procedure across multiple transactions to avoid hitting Salesforce governor limits. - Improve performance by caching data. - Configure the procedure as a Test Procedure to validate components such as OmniStudio Data Mappers, Apex classes, and other Integration Procedures. Like the Integration Procedure itself, Actions and Blocks can be configured by using fields under the Properties tab. Actions and Blocks access objects, lists, and other data by name. For example, to use a Loop Block to process items in a list, you enter the name of the list in the Loop List parameter. All Actions and Blocks include a field called Execution Conditional Formula, which you can use to execute the Action or Block only in specific circumstances. One type of Block, the Conditional Block, provides more sophisticated conditional control over a group of Actions. In the Required Permission field, define roles, profiles, permission sets, or custom permissions. To write the results of each action to the root level of the Data JSON, you can select Include All Actions in Response. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note When you enable the Include All Actions in Response setting, any Loop Block in the Integration Procedure can’t process an array of records. This occurs because the `stepResultFinal` array exceeds a size of 1 and results in an error: `Cannot Write Array to Root`. At the end of an Integration Procedure, you can use a [Response Action for Integration Procedures](https://help.salesforce.com/s/articleView?id=xcloud.os_response_action_for_integration_procedures_54655.htm&release=264.0.0&type=5 "The Response Action ends an Integration Procedure and returns data to the entity that called it. It can also add data to the data JSON or end conditionally. Response Actions are useful for debugging Integration Procedures.") to trim the data and only return what is needed. For specific trimming strategies, see [Manipulate JSON with the Send/Response Transformations Properties](https://help.salesforce.com/s/articleView?id=xcloud.os_manipulate_json_with_the_send_response_transformations_properties_22367.htm&language=en_US). To allow an Integration Procedure to exit early under appropriate conditions, use multiple Response Actions with different Execution Conditional Formulas. By default, all the actions in an Integration Procedure run in a single transaction. If the transaction exceeds a Salesforce governor limit, Salesforce ends the transaction and the Integration Procedure fails. You can’t set a limit that exceeds the maximum imposed by Salesforce. For details about governor limits, see the relevant Salesforce topic. - **[Access Integration Procedure Data JSON with Merge Fields](https://help.salesforce.com/s/articleView?id=xcloud.os_access_integration_procedure_data_json_with_merge_fields_48435.htm&release=264.0.0&type=5)** Enable Integration Procedure elements and element properties to access data JSON using merge fields. A merge field is a variable that references the value of a JSON node. For example, if a JSON node is `"FirstName": "John"`, then the merge field `%FirstName%` returns `John`. - **[Environment Variables in Omnistudio Data Mappers and Integration Procedures](https://help.salesforce.com/s/articleView?id=xcloud.os_environment_variables_in_dataraptors_and_integration_procedures_47878.htm&release=264.0.0&type=5)** You can use environment variables to define Default Values and Filter Values, and in Formulas. - **[External Objects in Integration Procedures](https://help.salesforce.com/s/articleView?id=xcloud.os_external_objects_in_integration_procedures_55322.htm&release=264.0.0&type=5)** Integration Procedures support Salesforce External Objects. The external data can come from any source that can be accessed using a REST endpoint. The returned data can be rendered as JSON or XML. - **[Work with Data and Lists](https://help.salesforce.com/s/articleView?id=xcloud.os_ips_work_with_data_and_lists.htm&release=264.0.0&type=5)** Use Integration Procedures to read, write, and transform complex, hierarchical data from Salesforce objects and other sources. Use actions to work with data, and blocks to process it. - **[Define Execution Logic](https://help.salesforce.com/s/articleView?id=xcloud.os_define_execution_logic_using_conditional_blocks_48515.htm&release=264.0.0&type=5)** Define conditional flow in Integration Procedures by using the Execution Conditional Formula field on an action or block, or by using a Conditional Block to compose a series of mutually exclusive conditions. - **[Send Email from an Integration Procedure](https://help.salesforce.com/s/articleView?id=xcloud.os_send_email_from_integration_procedure.htm&release=264.0.0&type=5)** To send email from an Integration Procedure, use an Email Action. You can either specify all the email field values or use a Salesforce email template. - **[Make an HTTP Call from an Integration Procedure](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_http_action_example_53100.htm&release=264.0.0&type=5)** This Integration Procedure example retrieves the astronomy picture of the day from NASA using NASA's publicly available REST API. - **[Call an Apex Class or an Invocable Action from an Integration Procedure](https://help.salesforce.com/s/articleView?id=xcloud.os_call_invocable_action_or_apex_from_integration_procedure.htm&release=264.0.0&type=5)** To call an Apex class and method, or an invocable action, use a Remote Action and pass in invocation options and data. - **[Improve Performance by Using Caching](https://help.salesforce.com/s/articleView?id=xcloud.os_cache_for_dataraptors_and_integration_procedures_54751.htm&release=264.0.0&type=5)** Omnistudio offers multiple caching options to improve performance and minimize unnecessary data processing in Integration Procedures. The two primary user-configurable caching types are Org Cache and Session Cache, which are available in Integration Procedure designer. These caching mechanisms are part of the Salesforce Platform Cache and are implemented through Scale Cache in Omnistudio with standard runtime. Each serves a distinct purpose and comes with specific configuration considerations. - **[Handle Errors in Integration Procedures](https://help.salesforce.com/s/articleView?id=xcloud.os_error_handling_in_integration_procedures_55179.htm&release=264.0.0&type=5)** You can configure the conditions for success or failure of an Integration Procedure action or group of actions. - **[Integration Procedure Best Practices](https://help.salesforce.com/s/articleView?id=xcloud.os_integration_procedure_best_practices_54721.htm&release=264.0.0&type=5)** To maximize the benefits of Integration Procedures, follow the best practices whenever possible. #### See Also - [Integration Procedure Event Tracking](https://help.salesforce.com/s/articleView?id=xcloud.os_integration_procedure_event_tracking_57801.htm&release=264.0.0&type=5 "For Integration Procedures, the following events are tracked. When one Integration Procedure calls another, and you enable tracking only in the calling Integration Procedure, events in the called Integration Procedure are also tracked.") - [Syntax of the Required Permission Property](https://help.salesforce.com/s/articleView?id=xcloud.os_syntax_of_the_required_permission_property_56644.htm&release=264.0.0&type=5 "Omnistudio Data Mappers and Integration Procedures have a Required Permission property, which determines who has runtime access. You can specify roles, profiles, permission sets, custom permissions, or any combination. If Required Permission is blank, any user can run the Data Mapper or Integration Procedure unless the DefaultRequiredPermission property is set.") - [Settings for Long-Running Integration Procedures](https://help.salesforce.com/s/articleView?id=xcloud.os_settings_for_long_running_integration_procedures_56206.htm&release=264.0.0&type=5 "You can use chainable and queueable chainable settings to avoid hitting Salesforce governor limits when invoking long-running Integration Procedures. You can also chain on one or more specific long-running steps.") - [Improve Performance by Using Caching](https://help.salesforce.com/s/articleView?id=xcloud.os_cache_for_dataraptors_and_integration_procedures_54751.htm&release=264.0.0&type=5 "Omnistudio offers multiple caching options to improve performance and minimize unnecessary data processing in Integration Procedures. The two primary user-configurable caching types are Org Cache and Session Cache, which are available in Integration Procedure designer. These caching mechanisms are part of the Salesforce Platform Cache and are implemented through Scale Cache in Omnistudio with standard runtime. Each serves a distinct purpose and comes with specific configuration considerations.") - [Integration Procedure Actions](https://help.salesforce.com/s/articleView?id=xcloud.os_integration_procedure_actions_50165.htm&release=264.0.0&type=5 "To compose an Integration Procedure, you add actions that run sequentially. These actions can set data values, perform functions, call Omnistudio Data Mappers, invoke Apex classes, send emails, invoke REST endpoints, run other Integration Procedures, and more.") - [Integration Procedure Blocks](https://help.salesforce.com/s/articleView?id=xcloud.os_group_integration_procedure_steps_using_blocks_48498.htm&release=264.0.0&type=5 "In an Omnistudio Integration Procedure, you can run a group of related steps as a unit inside a block to execute them conditionally, cache them, repeat them for each item in a list, or return an error if they fail.") # Build an LWC Omniscript with Elements in the LWC Omniscript Designer (Managed Package) For the managed package runtime, drag elements and entire Omniscripts from the Build panel onto the canvas to build your scripts in the Omniscript Designer. Before you begin: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - Create an Omniscript. - Set up your Omniscript with optional settings. Follow the hierarchical structure of Actions and Steps to build your script. Actions outside steps perform actions for the entire script, such as getting, posting, evaluating, and transforming data. Steps typically include Block, Input, and Display elements, but can also include Actions as buttons and Functions specific to the step. **Script Structure** ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/omniscript_structure_diagram_may_2020_final.png) 1. From Omniscript, click **Build** to open the Build panel. 2. (Optional) Populate data fields in your Omniscript. To populate the script's data fields, click **Actions**, and drag the Omnistudio **Data Mapper Extract Action** onto the canvas. - Enter a name in the **Name** field. - From the **Data Mapper Extract Action** dropdown, select a Data Mapper that retrieves data from one or more related Salesforce objects. - (Optional) Configure other Data Mapper Extract Action properties. To execute more than one server call to fetch data, use an Integration Procedure or an Action Block. 3. (Optional) Enable canceling out of an Omniscript and navigating to a different Salesforce experience, add a Cancel action. 4. To create a page for your form, click **Groups**, and drag **Step** on to the canvas. To populate your form with data fields and other elements, click the down arrow on the step, and drag elements from the Build panel into the step. Actions placed inside a step render as buttons. 5. To post changes made to data fields, enter a name in the **Name** field. 6. From the **Data Mapper Post Action** dropdown, select a Data Mapper that posts data back to Salesforce. To execute more than one server call to fetch data, use an Integration Procedure or an Action Block. 7. To end the Omniscript and return the user either to where the script was launched or a custom URL, click **Actions**, and drag a **Navigate Action** onto the canvas. 8. To configure the Navigate Action, click the help icon (?) next to the Navigate Action Properties title in the Properties panel. What’s next: Configure your elements. # Build an Omniscript with Elements For guided workflows, Omniscripts use basic tasks: Get, save, modify, and display data from Salesforce objects and other data sources. They can also allow users to add, change, or remove data and can take actions, such as getting a DocuSign signature, sending an email, or opening a web page. You can add some elements to the Omniscript canvas, as shown in this diagram. Action, Step, Omniscript, and Action Block elements can go directly into an Omniscript. To add any other element, you must first add a Step or Action Block element. For an Action Block, you can add only four action elements. Some actions can’t be added to action blocks: DocuSign Signature, Navigate, PDF, Set Errors, and Set Values. With a Step, you can add any element except an Omniscript. ![Diagram of an Omniscript's structure with actions, action blocks, steps, and other Omniscripts](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/omniscript_basic_structure.png) This Omniscript example guides users to update the primary contact for an account. It uses elements for all the basic tasks and shows where the elements are added. First, an Integration Procedure element pulls the data from an Integration Procedure that uses a Data Mapper Extract to retrieve data from the Account object. ![Diagram of an example Omniscript to update the Account object with elements to call Integration Procedures to get and write data and to get user input](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/omniscript_acct_update_example.png) In the first step, read-only text elements show the name, email, and phone number of the current main contact. This information comes from the Integration Procedure element. Then, users select from a radio list to add or update the primary contact. In the second step, users enter or change the contact information. After a user clicks next, an action element sets the values from the user input to JSON. Then, an Integration Procedure element with a Data Mapper Post saves the updated contact data to the Account object. Finally, a Navigate element opens the Account record page so the user can see the applied changes. - **[Load Data into Omniscript Elements](https://help.salesforce.com/s/articleView?id=xcloud.os_load_data_into_omniscript_elements_21907.htm&release=264.0.0&type=5)** You’ll likely need to pull data into an Omniscript to prefill elements, create selectable options, dynamically display elements, or test your Omniscript. You can use data from Salesforce objects or external and internal sources. Omniscripts use several ways to get this data: Omnistudio Data Mappers, Integration Procedures, REST APIs, or Apex. Users can also add or change data in an Omniscript. - **[Use and Modify Data in Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscripts_modify_data.htm&release=264.0.0&type=5)** After an Omniscript retrieves data, it can then work with and transform, rename, or convert the data. You can use a Data Mapper Transform element, an Integration Procedure element, or a formula element. For example, if you have user input and data from an external source, you might need to combine data, remove duplicates, and put the data into a consistent format. - **[Create and Update Data from Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_create_and_update_data_from_omniscripts_23157.htm&release=264.0.0&type=5)** After you’ve gotten new or changed data from other sources or users, you’ll likely need to update records in Salesforce or other data sources. As with getting data, Omniscripts can create or update records with various methods: Omnistudio Data Mappers, REST APIs, or Apex. You can also write data to a fillable PDF. - **[Take Actions with Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_take_actions_with_omniscripts.htm&release=264.0.0&type=5)** Besides getting, modifying, and writing data, Omniscripts can take other types of actions. Omniscripts can send messages to users or systems. Users can also provide input to the Omniscript or go to another page or site from an Omniscript. Users can also use DocuSign to sign documents electronically. You can automate decisions in Omniscripts with the Business Rules Engine. You can also extend Omniscript elements for custom behaviors. - **[Omniscript Best Practices](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_best_practices_8368.htm&release=264.0.0&type=5)** Enhance the performance and usability of Omniscripts by following the recommended Omniscript best practices. # Build an Omnistudio Data Mapper To get, save, and modify Salesforce data, build Data Mappers with the basic configurations: Input source, queries, formulas, mappings of input and output data, and output destination. The available configurations depend on the type of Data Mapper that you’re building. - For input and output, select the format, or type, of the data, such as JSON, XML, or sObject. For custom data, you can use an Apex class to parse that data. - Use queries to define what objects and fields you’re extracting data from. In the Data Mapper Designer, use the Extract interface to select the data. - With formulas, you can modify the input data when needed. You can reuse formula results in other formulas or mappings within the Data Mapper. Each result is stored as a key-value pair: The formula result path defines the key and the formula defines the value. - With mapping, you connect the data you’ve extracted and modified with formulas to a structure for your output data. A Data Mapper Extract has all configurations available. The Data Mapper Transform and Load types don’t include queries because they’re not retrieving data from Salesforce objects. Instead, these types use data provided in a previous step, such as a Data Mapper Extract, an HTTP action in an Integration Procedure, or an Omniscript. Because a Data Mapper Turbo Extract is a simpler type, it doesn’t have formulas or mappings. ![A diagram shows each type of Data Mapper and its available configurations: Input, Query, Formulas, Mapping, and Output.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/os-build-data-mapper.png) - **[Omnistudio Data Mapper Best Practices](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_best_practices_47412.htm&release=264.0.0&type=5)** To maximize the benefits of Data Mappers, follow the best practices whenever possible. - **[Configure Date and Time Settings in Data Mappers](https://help.salesforce.com/s/articleView?id=xcloud.os_omni_interaction_config.htm&release=264.0.0&type=5)** Configure the default date format within Omnistudio Data Mappers. - **[Environment Variables in Omnistudio Data Mappers and Integration Procedures](https://help.salesforce.com/s/articleView?id=xcloud.os_environment_variables_in_dataraptors_and_integration_procedures_47878.htm&release=264.0.0&type=5)** You can use environment variables to define Default Values and Filter Values, and in Formulas. - **[Inputs and Outputs for Omnistudio Data Mappers](https://help.salesforce.com/s/articleView?id=xcloud.os_inputs_outputs_for_data_mappers.htm&release=264.0.0&type=5)** The configuration of inputs and outputs in Salesforce Omnistudio Data Mappers is highly flexible. The primary data formats are JSON and XML with other options available. - **[Use Formulas in Omnistudio Data Mappers](https://help.salesforce.com/s/articleView?id=xcloud.os_use_formulas_in_dataraptors_47540.htm&release=264.0.0&type=5)** To add data to the output of a Data Mapper, define _formulas_. Several types of Data Mappers (Extract, Transform, and Load) support formulas. When you define a formula, you map its output to the output JSON (for extracts and transforms) or Salesforce object field (for loads). - **[Configure an Omnistudio Data Mapper Extract](https://help.salesforce.com/s/articleView?id=xcloud.os_define_the_initial_extraction_45906.htm&release=264.0.0&type=5)** Configure a Data Mapper Extract by specifying the object and filters. To enhance the performance of the Data Mapper Extract, you can define formulas, add fields to write data to, create mappings, and configure additional properties. - **[Configure a Data Mapper Turbo Extract](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_a_dataraptor_turbo_extract_45667.htm&release=264.0.0&type=5)** To configure a Data Mapper Turbo Extract, specify the object type, filters, fields to extract, and options. - **[Configure an Omnistudio Data Mapper Load](https://help.salesforce.com/s/articleView?id=xcloud.os_object_field_mapping_47137.htm&release=264.0.0&type=5)** Configure a Data Mapper Load by specifying the object type and filters. To enhance the performance of the Data Mapper Load, you can define formulas, add fields to write data to, and configure additional properties. - **[Map Inputs and Outputs for Transformations](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_transform_data_mappings_46630.htm&release=264.0.0&type=5)** To map data from the input to the output, go to the Transform tab. If you're using the designer on a managed package, go to the Output tab. You can also handle null values, data types, caching, and list transforms. - **[Improving Data Mapper Performance with Caching](https://help.salesforce.com/s/articleView?id=xcloud.os_cache_for_dataraptors_and_integration_procedures_48057.htm&release=264.0.0&type=5)** Omnistudio offers multiple caching options to improve performance and minimize unnecessary data processing in Data Mappers. The two primary user-configurable caching types are Org Cache and Session Cache, which are available in the Data Mapper designer. These caching mechanisms are part of the Salesforce Platform Cache and are implemented through Scale Cache in Omnistudio with standard runtime. Each serves a distinct purpose and comes with specific configuration considerations. # Build and Distribute Your Branded App After reviewing the app branding process and deciding how to distribute the app to your users, you’re ready to use the Mobile Publisher engine to start your branded app project. The [Mobile Publisher for Salesforce App](https://help.salesforce.com/s/articleView?id=xcloud.s1_branded_apps.htm&type=5&language=en_US) help documentation is an excellent resource to help you add your branded assets, request a beta version of your app to test, and distribute your app to your users. # Build Custom Claim Validation and Calculation Processes with Flow and Expression Sets Customize the Validate and Calculate Rebate Claim and Claim Aggregate expression set template and invoke it in a flow to validate ship and debit claims. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Ship and Debit Process Management enabled
User Permissions Needed
To create a flow: Manage Flow
To invoke an expression set: Rules Engine Runtime
1. Create an expression set to define rules to validate a ship and debit claim by using the Validate and Calculate Rebate Claim and Claim Aggregate expression set template. 1. Save the Validate and Calculate Rebate Claim and Claim Aggregate expression set template as an expression set to directly use it or to customize it. See [Build Your Expression Set Using Template](https://help.salesforce.com/s/articleView?id=ind.build_your_expression_set_using_templates.htm&type=5&language=en_US). 2. Open the expression set version in the expression set builder. 3. Modify the expression set version to validate a ship and debit claim based on your business needs and add the appropriate resources and step elements. See [Step Elements in Expression Sets](https://help.salesforce.com/s/articleView?id=ind.step_elements_in_expression_sets.htm&type=5&language=en_US). If you created explainability message templates, add the templates to your expression set steps. See [Decision Explainer for Expression Sets](https://help.salesforce.com/s/articleView?id=ind.decision_explainer.htm&type=5&language=en_US). 4. Simulate your expression set with test values to ensure it’s working as expected. The expression set returns a processing status message but doesn't update the rebate claim status. The flow that calls the expression set updates the rebate claim status based on this message. 5. Save your work and activate the expression set version. 2. Create a flow that invokes the expression set template. 1. Create a flow in Flow Builder. For example, create a record-triggered flow that triggers after a Rebate Claim record is created or updated with the In Review processing status and the Ship and Debit claim type. 2. To pass the details of a specific rebate claim in the flow, add an action element that calls the Fetch Rebate Claim Details invocable action, and specify its resources. 3. Add an action element that invokes the expression set that you created, and specify its resources. See [Invoke an Expression Set in a Flow](https://help.salesforce.com/s/articleView?id=ind.invoke_an_expression_set_in_a_flow.htm&type=5&language=en_US). The expression set returns the processing status message, which the flow uses to update the rebate claim status. 4. Add elements in the flow to process the claim further or to determine how the output from the expression set version is returned or processed. 5. Save and activate your flow. # Build Custom Reports for Consumption Insights Beyond the predefined reports, the underlying tagged data in Data 360 provides more tailored insights through the TenantEnrichedUsageEvent data lake object (DLO). You can create your own custom reports and dashboards based on your unique business needs. ## Use Case 1: Build a Report Based on a Provided Data 360 Report Required permissions: - Data Cloud Architect permission set - Create and Customize Reports or Report Builder (Lightning Experience) The easiest way to build a custom report using our consumption tagging framework is to base it on one of the provided Digital Wallet reports. After you modify it, you save it as your own custom report. To ensure that you know which reports you and your team created, save them using a unique name in a separate folder. We don't recommend directly modifying the out-of-the-box reports. This way, when we update any of the provided reports, you receive the updated reports, and your changes remain independent from ours. If you directly modify a report, we skip updating that report in future releases. See [Consumption Insights Dashboard (Data 360 Reports)](https://help.salesforce.com/s/articleView?id=xcloud.wallet_ootb_reports_prepare.htm&release=264.0.0&type=5 "As part of Data Cloud provisioning, the Consumption Insights dashboard is installed. This Data 360 dashboard contains several predefined (out-of-the-box) reports that were built using standard consumption tags. How you complete the configuration to view the reports depends on if you're a new or existing Data 360 customer.") to get started. ## Use Case 2: Build a Custom Report on Usage by Feature You can quickly create a reports for just the features you want to monitor by basing your report on the out-of-the-box Consumption by Feature report found in the Consumption Insights dashboard. Or you can build a report from scratch. See [Create a Report from the Consumption by Feature Report](https://help.salesforce.com/s/articleView?id=xcloud.wallet_report_usage_by_feature_create.htm&release=264.0.0&type=5 "Leverage the existing Consumption by Feature report in the Consumption Insights dashboard to quickly build a custom report to track and monitor specific features of interest. This method is the quickest and easiest way to build a consumption report by feature.") for examples and instructions. ## Use Case 3: Build Your Own Viz Based on a Provided Tableau Next Visualization Required permissions: - Tableau Next Creator license - Tableau Next Admin or Tableau Next Platform Analyst permission set - Data Cloud Architect permission set You can’t modify the provided Consumption Analytics dashboard visualizations. Therefore, if you want to build a custom report based on a viz, clone the visualization. From the App Launcher, find and select **Tableau Next**. Go to the Digital Wallet Consumption Analytics workspace. From the Assets list, click to open the visualization you want to clone. From the More Actions dropdown menu, select **Clone**. Make your modifications and save the visualization. ## Use Case 4: Build a Report from Scratch from the TenantEnrichedUsageEvent DLO The TenantEnrichedUsageEvent DLO is designed to provide direct access to consumption tags from which you can build custom dashboards and reports that offer deeper insights into consumption patterns. When you build custom reports and dashboards directly from the TenantEnrichedUsageEvent DLO, including any underlying queries, you don't incur any costs. That is, you don’t consume Data 360 service credits. It's important to understand that only the TenantEnrichedUsageEvent DLO can be used to build Data 360 or Tableau Next reports/ visualizations, and dashboards. For now, other DLOs aren't supported. See [TenantEnrichedUsageEvent Data Lake Object Fields Reference](https://help.salesforce.com/s/articleView?id=xcloud.wallet_teue_reference.htm&release=264.0.0&type=5 "The TenantEnrichedUsageEvent Data Lake Object (DLO) is an enriched version of the TenantBillingUsageEvent DLO, specifically created and optimzed for consumption reporting. In addition to capturing raw usage data, it contains standard consumption tags that provide metadata alongside billing usage to enable further slicing and dicing for more advanced insights. This DLO fuels the data provided in the Digital Wallet out-the-box-reports and dashboards, and enables you to build your own custom reports. And best of all, you can create reports directly from it, and you don’t incur any costs when building a report based on it.") for a description of all fields in this DLO. Fields are organized into categories (recommended, optional, and internal use only) so you can determine which fields to use to provide meaningful data. ## Use Case 5: Build a Custom Report for a Specific Data Space The Additional Info field in the Consumption Insights Extended Semantic Model contains data about in which data space a billable event occurred. To create a report that filters billable events by data space, create a calculated field for Additional Info. Then build a Data 360 report or Tableau Next visualization that uses the newly created calculated field. After you build the report, you can see usage for future billable events by data space. See Salesforce Help: [Create a Report or Visualization on Usage by Data Space](https://help.salesforce.com/s/articleView?id=xcloud.wallet_custom_report_dataspace.htm&release=264.0.0&type=5 "If you use multiple data spaces, you can build a Data 360 report or Tableau Next visualization that breaks down consumption by data space. Data is often partitioned by region, business unit, geography, or security requirements. Select a method based on the reporting tool that you want to use and the underlying data objects available to you.") for to select which method to use to build the report. ## Recommended Report Filters Here are some recommendations for general report filters. See [Access and View the Consumption Insights Dashboard](https://help.salesforce.com/s/articleView?id=xcloud.wallet_ootb_reports_view.htm&release=264.0.0&type=5 "The Digital Wallet Consumption Insights dashboard gives you an easy entry point to the out-of-the-box (predefined) reports that leverage standard consumption tags. These reports give you a granular view of your consumption by agent, action, and other consumption sources. Each dashboard widget shows a bar chart so you can quickly visualize consumption information, and has a link to its corresponding report.") for examples of how to use Resource Type or Root Resource Type to filter on specific features, agents, or sources that you want to see in your report.
Filter Purpose
Dataspace

The data space associated with the proper DLO, usually, the TenantEnrichedUsageEvent DLO. The purpose of this filter is to ensure that you have associated the DLO with a data space but isn't used for reporting consumption data for the data space.

If you have multiple data spaces, the first one is listed based on alphabetical order. Click to select a different data space from the drop-down list.

To create a report that filters consumption by data space, see Create a Report on Usage by Data Space Using Our DMO and Create a Tableau Next Viz on Usage by Data Space.

Entitlement Org ID The 18-digit ID of the org that holds the entitlements from which the reported usage is drawn.
FeatureDeveloperName not equal to "" If creating a report based on features, it excludes rows without data.
ResourceIdOrApiName not equal to "" If creating a report for agents or agent actions, it excludes rows without data.
RootResourceIdOrApiName not equal to "" If creating a report for agents or agent actions, it excludes rows without data.
- **[Create a Report on Usage by User ID](https://help.salesforce.com/s/articleView?id=xcloud.wallet_custom_report_userid.htm&release=264.0.0&type=5)** Build a Data 360 report that uses the User ID field to see which individual users are driving Agentforce credit consumption in your org. Because you build this report directly on the TenantEnrichedUsageEvent data lake object (DLO), you don't incur costs. - **[Report On Usage by Feature With Digital Wallet](https://help.salesforce.com/s/articleView?id=xcloud.wallet_report_usage_by_feature.htm&release=264.0.0&type=5)** To gain deeper insights into your consumption for specific features, you can build a custom report to monitor and analyze usage patterns. For a streamlined setup, you can base your new report on the out-of-the-box Consumption by Feature report found in the Consumption Insights dashboard. Optionally, to boost the readability of your report, you can swap the cryptic developer (API) feature name for the customer-facing feature name by creating a batch data transform. - **[View Consumption Insights for a Data Cloud One Companion Org](https://help.salesforce.com/s/articleView?id=xcloud.wallet_ootb_reports_dc1.htm&release=264.0.0&type=5)** By default, the predefined (out-of-the-box) Consumption Insights reports provide you with granular insights for consumption billed to your home org. To view reporting for consumption billed to a companion org, you simply save a copy of a relevant report and add a filter to narrow consumption details to just the companion org. - **[Query Digital Wallet Data in Tableau](https://help.salesforce.com/s/articleView?id=xcloud.wallet_query_tableau_data.htm&release=264.0.0&type=5)** To analyze and visualize Digital Wallet data in Tableau, you can link to Data Cloud with Tableau’s Data Cloud Connector and query directly from Digital Wallet’s Data Lake Objects (DLOs). Learn how on this page. #### See Also - [Consumption Analytics Dashboard (Tableau Next)](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_analytics_dash.htm&release=264.0.0&type=5 "The Consumption Analytics dashboard, powered by Tableau Next, provides deeper and actionable usage insights. It enables you to drill down to granular analysis for standard consumption tags, for example, flex credits usage per agent or action, and Data 360 consumption by resource.") - [Access and View the Consumption Insights Dashboard](https://help.salesforce.com/s/articleView?id=xcloud.wallet_ootb_reports_view.htm&release=264.0.0&type=5 "The Digital Wallet Consumption Insights dashboard gives you an easy entry point to the out-of-the-box (predefined) reports that leverage standard consumption tags. These reports give you a granular view of your consumption by agent, action, and other consumption sources. Each dashboard widget shows a bar chart so you can quickly visualize consumption information, and has a link to its corresponding report.") # Build Tool Commands for Deploying Omnistudio Data Between Orgs (Managed Package) For the managed package runtime, use two Build Tool commands to deploy Omnistudio data from a source org to a target org. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ``` # Source Org vlocity -sfdx.username source_org@vlocity.com -job EPC.yaml packExport vlocity -sfdx.username source_org@vlocity.com -job EPC.yaml packRetry # If any errors ``` ``` # Target Org vlocity -sfdx.username target_org@vlocity.com -job EPC.yaml packDeploy vlocity -sfdx.username target_org@vlocity.com -job EPC.yaml packRetry # If any errors ``` The Build Tool adds the Build Tool path within sfdx-project.json. If the Build Tool is executed within an SFDX project, it’s possible to have multiple package directories. However, if paths within those directories refer to non-Omnistudio components, conflicts can result. When you run the Build Tool, remove all paths to packageDirectories within sfdx-project.json except the path for Omnistudio components, and set the default key to true. For example: ```html "packageDirectories": [ { "path": "vlocity-temp/tempDeployLWC/salesforce_sfdx", "default": true } ], ``` # Build Tool with Salesforce DX (Managed Package) For the managed package runtime, build Tool fits into an automated Salesforce build. Let’s look at a sample project. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). This project includes data packs in the vlocity\_components folder and a Salesforce DX project in the salesforce\_sfdx folder. ![Simple example project](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/os_build_simple_project.png) Here’s an example shell script with Salesforce CLI commands and Build Tool: ``` # Use JWT Authorization flow for Jenkins / Automation Server - Additional info below sf org login jwt --username "$DP_BT_HUB" --jwt-key-file "$DP_BT_JWT" --client-id "$DP_DT_CONNECTED" --set-default-dev-hub # Change how long the Scratch Org will last. Max: 30 DURATION_DAYS=1 # Create Scratch Org if no Username provided as first argument to script. # Get Created Username using jq bash tool. # Can also just set "--alias ${JOB_NAME}_${JOB_NUMBER}" and use Alias as username in subsequent calls if [ -z "$1" ]; then SCRATCH_ORG=`sf org create scratch --definition-file config/scratch.json --duration-days $DURATION_DAYS --json` SF_USERNAME=`echo $SCRATCH_ORG | jq -r '. | .result.username'` else SF_USERNAME=$1 fi # Install or Update Managed Package sf project deploy start --metadata-dir managed_packages/vlocity_package --wait -1 --target-org $SF_USERNAME # Push Salesforce part of Project sf project deploy start --target-org $SF_USERNAME # Refresh Vlocity Base - Installs all the Vlocity Authored Vlocity Cards and Vlocity UI Templates vlocity -sfdx.username $SF_USERNAME -job VlocityComponents.yaml refreshVlocityBase # Deploy Vlocity folder vlocity -sfdx.username $SF_USERNAME -job VlocityComponents.yaml packDeploy ``` The Vlocity managed package in the example is installed through the Metadata API with Salesforce DX. It’s stored at this path: managed\_packages/vlocity\_package/installedPackages/vlocity\_cmt.installedPackage The version of the package installed can be updated in this file: ``` 900.208.0 ``` # Build with Agentforce Use plain language to ask Agentforce to change your app. 1. Open the agent panel. 2. Describe the change you want. For example, enter Add two screens to the home screen, one for accounts and one for opportunities. Add navigation tabs to the new screens. 3. Review the change on the canvas. 4. Adjust the generated result manually if necessary. You can undo Agentforce changes in the same way as manual changes. # Build Your App's Skeleton Describe an app in plain language and Agentforce creates the first version. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Foundations, or Agentforce 1 or Einstein 1 Editions
User Permissions Needed
To build agentic mobile apps: Manage mySalesforce Apps
The Create & Manage Apps screen is home for every agentic mobile app in your org. Start a new app or reopen an existing app from this screen. ![The Agentic Mobile Apps Setup page with the Create and Manage Apps button.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mobile_ama-264-0-0-production-enus/07b30a64-6461-4c63-9451-e94162994712/mobile_ama/images/create-manage-apps.png) 1. On the Agentic Mobile Apps page, click **Create & Manage Apps** to access the Agentforce interface and describe the app you want. For example, enter Build an app so partners can see their opportunities and accounts. 2. Answer the clarifying questions that Agentforce asks. You can ask Agentforce to add theming from Figma files. To do that, share a file with mobile screens designed as individual frames and attach the Figma access token. Share the Figma URL (until "?node"). 3. Select a customer-facing app based on an Experience Cloud site or an employee app based on your Salesforce org. 4. Agentforce builds the first version. The app opens in the Mobile App Designer. You can change anything until you activate and publish the app. # Build Your Branded App Create a Mobile Publisher project, enter details about your app, and upload your custom branded assets to Salesforce. - **[Build a Mobile Publisher for Experience Cloud App](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_build_project_commun.htm&release=264.0.0&type=5)** Build a Mobile Publisher for Experience Cloud app by configuring these Experience Cloud features. - **[Sign in with Apple for Third-Party Login Services](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_apple_sign_in.htm&release=264.0.0&type=5)** If you plan to offer third-party login services to authenticate a user’s primary account, you must also offer Sign in with Apple as a login option. - **[Biometric Login](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_biometric_login.htm&release=264.0.0&type=5)** Set up biometric login so that your users can log in to your Mobile Publisher for Experience Cloud app using face or fingerprint recognition. Enable User Opt-In Biometric Login (beta) to give your users the choice of logging in with biometric credentials instead of their username and password. Enable mandatory Biometric ID App Unlock to require users to log in with biometric credentials. - **[Enhanced Mobile App Security for Mobile Publisher](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_enhanced_mobile_security.htm&release=264.0.0&type=5)** With Enhanced Mobile App Security, you can customize how your Mobile Publisher for Experience Cloud app responds to security threats. Specify which security threats your app detects, and configure the severity level for how your app automatically responds when threats are detected. - **[Conceal Your App’s Snapshot While in a Device’s Background](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_conceal_app_snapshot.htm&release=264.0.0&type=5)** Use Snapshot Prevention to conceal your Mobile Publisher for Experience Cloud app’s information behind a splash screen when in the background. - **[Set Policy Configurations for External Client Apps in Mobile Publisher](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_policy_config.htm&release=264.0.0&type=5)** Policy configurations for your external client apps include lock screen policies, OAuth policies, and any custom attributes you want to add to your app. Policy configurations apply to the deployed version of the ECA. You can change policy configurations without creating a new ECA version. - **[Push Notifications](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_push_notifications.htm&release=264.0.0&type=5)** Keep your users in the know with timely notifications sent to their mobile devices. Create custom push notifications using Notification Builder or use Marketing Cloud Engagement tools like Automation Studio or Journey Builder. - **[Develop and Implement Mobile Device Features Into Your Mobile Apps](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_native.htm&release=264.0.0&type=5)** A Lightning web component can use a mobile device’s built-in features to enhance the functionality of your branded mobile apps. - **[Deep Linking](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_deep_links_par.htm&release=264.0.0&type=5)** Deep linking directs users to open a specific page in a mobile app from a different app, such as a browser app, mail app, or any other app. - **[Enable Cross-Website Tracking (iOS)](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_cross_site_tracking.htm&release=264.0.0&type=5)** With iOS 14, Apple placed additional tracking restrictions on third-party applications. These tracking restrictions can prevent your custom web content from appearing in your branded app. - **[App Tracking Transparency (iOS)](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_app_tracking_transparency.htm&release=264.0.0&type=5)** Learn about Apple's new policy on app tracking transparency. - **[Add a Smart App Banner](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_ios_smart_banner.htm&release=264.0.0&type=5)** Create a smart app banner that shows your branded Experience Cloud app when users visit your Experience Cloud site in a mobile browser. - **[Create an Experience Cloud App Pass for Apple Wallet or Google Wallet](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_commun_apple_wallet.htm&release=264.0.0&type=5)** With an Apple Wallet or Google Wallet pass, you can create easily accessible digital tickets or cards for certain features of your Experience Cloud app. - **[Supported Download Types in Mobile Publisher for Experience Cloud](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_download_supported.htm&release=264.0.0&type=5)** Give your app users the ability to download and save files to their personal devices. Mobile Publisher apps support several types of downloads. # Build Your Branded App Create a Mobile Publisher project, enter details about your app, and upload your custom branded assets to Salesforce. - **[Create a Mobile Publisher Project for Salesforce App](https://help.salesforce.com/s/articleView?id=xcloud.s1_branded_apps_create_project.htm&release=264.0.0&type=5)** Start a Mobile Publisher project for Salesforce app and manage both Android and iOS branded apps. - **[Enable Biometric ID App Unlock for iOS and Android](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_biometric_id_ios_android.htm&release=264.0.0&type=5)** When using Mobile Publisher, you can apply biometric ID credentials to make your environment more secure. To use biometric ID credentials, your device must have a device passcode or PIN enabled and FaceID (for iOS) or Android Security and Privacy | Biometrics. - **[Pre-Authorize User App Access Through External Client App Policies](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_allow_deny_con_app.htm&release=264.0.0&type=5)** Configure who can use your app by defining which users are pre-authorized. Users who are pre-authorized can bypass the Allow or Deny permission pop-up when accessing the app. - **[Push Notifications](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_push_notifications.htm&release=264.0.0&type=5)** Keep your users in the know with timely notifications sent to their mobile devices. Create custom push notifications using Notification Builder or use Marketing Cloud Engagement tools like Automation Studio or Journey Builder. - **[Enable Cross-Website Tracking (iOS)](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_cross_site_tracking.htm&release=264.0.0&type=5)** With iOS 14, Apple placed additional tracking restrictions on third-party applications. These tracking restrictions can prevent your custom web content from appearing in your branded app. # Building Blocks of a CMS Workflow CMS workflows are built on Flow Orchestrations that use common flow and orchestration elements in addition to process and step types that are unique to CMS. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
## CMS-Specific Orchestration Elements [Stages](https://help.salesforce.com/s/articleView?id=platform.orchestrator_concepts_stages.htm&type=5&language=en_US), [steps](https://help.salesforce.com/s/articleView?id=platform.orchestrator_concepts_steps.htm&type=5&language=en_US), and [flows](https://help.salesforce.com/s/articleView?id=platform.orchestrator_concepts_flow.htm&type=5&language=en_US) are the building blocks of any orchestration, but CMS workflows contain special, CMS-specific items. - Flow Orchestration for CMS: a custom process type that includes all the CMS-specific step types and makes them available in the Workflows component. For a workflow to appear in your CMS workspace and to use the CMS step types, you must use the Flow Orchestration for CMS process type. - CMS Role-Based Interactive: an interactive step type similar to standard interactive steps, but specialized to include CMS roles. - CMS Modification Status: a background step that locks or unlocks content edits for CMS content items. When unlocked, content can be edited. - CMS Publication Readiness: a background step that sets a publication readiness flag for CMS content items. When the flag is set to ready, the content is publishable. - CMS Publish Variant: a background step that automatically publishes a content variant. - CMS Unpublish Variant: a background step that automatically unpublishes a published content variant. ## Common Orchestration Elements Using CMS-specific building blocks is necessary for your workflows, but you can enhance them using common building blocks made for any flow. - Invocable actions - Screen flows - Standard steps #### See Also - [Flow Orchestration](https://help.salesforce.com/s/articleView?id=platform.orchestrator_flow_orchestrator.htm&type=5&language=en_US) - [Building Blocks of Orchestrations](https://help.salesforce.com/s/articleView?id=platform.orchestrator_concepts_building_blocks.htm&type=5&language=en_US) # Bulk Move Reports or Dashboards with Metadata API You can move reports or dashboards between folders and subfolders in Lightning Experience. If you want to move reports or dashboards in bulk, use Metadata API. For example, the Some Old Deprecated Folder folder contains two reports: My Accounts Report and My Opty Report. You want to move My Accounts Report to a new folder called Accounts and My Opty Report to the new Opportunities folder. ![reportlist1](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/move01.png) This example uses Reports and Dashboards REST API to get the details of the reports that you want to move and Metadata API to move the reports. (The same process works for dashboards.) You can use Postman or cURL to call Reports and Dashboards REST API. You can use Salesforce Extensions for Visual Studio Code or Salesforce CLI to execute Metadata API. You can follow a similar process using the force.com ANT migration tool. 1. Get a list of your reports using the Reports and Dashboards REST API [report resource PATCH method](https://developer.salesforce.com/docs/atlas.en-us.api_analytics.meta/api_analytics/analytics_api_report_list_resource.htm). 2. Search the list to get the developer names of the reports you want to move and the ID of the folder they are in. 3. Use the folder ID to obtain the folder’s developer name with the [folder operation GET method](https://developer.salesforce.com/docs/atlas.en-us.api_analytics.meta/api_analytics/analytics_api_folders_ops.htm). 4. Create a `package.xml` manifest using the folder and file developer names as members. ``` Report Some_Old_Deprecated_Folder/My_Accounts_Report_eQ Some_Old_Deprecated_Folder/My_Opty_Report_CO 43.0 ``` 5. Retrieve a package that contains the reports using the Metadata API `retrieve()` call. 6. Unzip the package. ![reportlst2](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/move03.png) 7. In the unzipped package, create the new folder and file structure. ![reportlist4](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/move04.png) 8. In the `package.xml` file manifest, change the folder structure to match the changes that you made in the unzipped package. ``` Accounts/My_Accounts_Report_eQ Opportunities/My_Opty_Report_CO Report 43.0 ``` 9. Create the new folders in Lightning Experience. ![reportlist5](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/move05.png) 10. Create the package for deployment. This command creates a ZIP file from the contents of the unzipped package directory called unpackaged. ``` zip -r move_reports.zip unpackaged/ ``` 11. Deploy the package that contains the moved reports using the Metadata API `deploy()` call. The move is complete. Some Old Deprecated Folder is empty, and you can delete it in the UI. #### See Also - [_Deploying and Retrieving Metadata (Metadata API Developer Guide)_](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/file_based.htm) # BulkApiResultEventStore Policies Bulk API Result Event policies detect when a user downloads the results of a Bulk API request. ## Policy at a Glance | Object | Conditions Available in Condition Builder | Actions | | --- | --- | --- | | BulkApiResultEventStore | Query, SessionLevel, SourceIp, UserId, Username | Block, Notifications | ## What You Can Do With It Create a policy that can: - Send you an email when Salesforce detects that a user has attempted to download the results of a Bulk API request # Business APIs for Automating Loyalty Processes Use Business APIs to integrate external systems with Loyalty Management for performing everyday processes of your loyalty program, such as updating member details, crediting points, or issuing vouchers. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
Loyalty Management comes with these types of Business APIs: Configurable APIs Use this API type to create processes from loyalty program process templates and to extend the processes based on your requirements. Static APIs Use this API type to process simple tasks, such as to view member details, to redeem vouchers, and to enroll members. These APIs are used out of the box. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_important.png) Important You can execute 500,000 Post requests and 500,000 Get requests per hour for the Loyalty Management Business APIs. # Business APIs to Manage Clubs You can use business APIs to manage your clubs effectively. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Advanced
To manage the enrollment of new members, use the [Club Member Enrollment](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/connect_resources_club_member_enrollment.htm) business API. To renew the membership of existing members of the club, use the [Club Membership Renewal](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/connect_resources_club_membership_renewal.htm) business API. # Business Insights Dashboard Analyze your rebate programs and learn how they’re affecting your business revenue. Get insights based on factors such as payouts, product sales, product pricing, and overall revenue. ### Required Editions
Available in Developer, Enterprise, and Unlimited editions that have Manufacturing Cloud enabled
Filter the charts on the dashboard based on rebate program, member payout status, parent account, account, account type, industry, and country. The dashboard includes these key metrics. - Orders: The number of orders registered. - Revenue: The revenue from rebate-induced sales, including all member transactions that were part of the rebate calculations. - Payout: Rebates calculated from the business to be paid out and settled to members. - Unadjusted Payout: Rebate payout amounts in the process of being settled. - Members: The number of members enrolled in the rebate programs. - Products: The number of products in the rebate programs. You can also see percentage changes in the metrics value compared to the previous year. The dashboard includes: - Revenue and Payout charts: Shows the revenue and payouts of each rebate program in the business and analyze each program’s relative standing. - Overview tab: Compares the performance of rebate programs in terms of revenue, quantity, and payout throughout the selected fiscal year, based on the global filter. - Members tab: Shows an overview of how members across all rebate programs have contributed to the business in terms of revenue, rebates, quantity, revenue per quantity, and payout ratio. - Products tab: Shows how each product contributes to the revenue of the business and analyzes rebate program activity during a specific period based on effective price, quoted price, and unit price. # Business Rules Engine Simplify the process of determining eligibility or qualification and automate complex decision-making to find solutions faster using Business Rules Engine. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Developer, and Unlimited editions.
To learn how to set up Business Rules Engine and use Business Rules Engine components, see [Business Rules Engine](https://help.salesforce.com/s/articleView?id=ind.business_rules_engine.htm&type=5&language=en_US). # Button Lightning Web Component (Managed Package) For the managed package runtime, this page contains a Button LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Summer '20 The _Button Lightning Web Component_ renders a button element to perform an action. ## Available c-button Attributes

Attribute

Value

Type

Required

Description

bg-color

Accepts name, rgb and hex

string

 

Adds a background color to the button element.

disable-tab

true, false (Default: false)

boolean

 

To remove the button element from tab focus.

disabled

true, false (Default: false)

boolean

 

To disable button, set to false.

extraclass

 

string

 

Adds a class to the button element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

icon-bg-color

Accepts name, rgb and hex values.

string

 

Adds a background color to the icon.

icon-fill

Accepts name, rgb and hex values.

string

 

Adds color inside the icon.

icon-name

(Format: utility:close)

string

 

Adds an icon to the button. See SLDS icons.

icon-position

left, right (Default: left, if label is specified)

string

 

Sets the position of the button icon.

icon-size

xx-small, x-small, small, medium, large (Default: xx-small)

string

 

Sets the icon size for the button element.

icon-url

URL

string

 

Overrides the defined url for the icon svg resource.

icon-variant

inverse, warning, error , success, light, default (Default: default)

string

 

Changes the appearance of the icon. The inverse variant adds a white fill on a dark background.

label

 

string

 

Adds a visible label for the button element.

styles

 

string

 

To set inline styles of label. it should be in this formt style = { "label": ""}

theme

slds, nds (Default: slds)

string

 

Sets the theme for the button.

type

reset, button, submit (Default: button)

   

Sets the type of button element.

variant

 

string

 

Sets the style of the button based on the typesupported by the chosen theme. For example, success, brand, and so on.

## Example c-button Component ``` ``` ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _Button Lightning Web Component_ renders a button element to perform an action. ## Available c-button Attributes

Attribute

Value

Type

Required

Description

bg-color

Accepts name, rgb and hex

string

 

Adds a background color to the button element.

disable-tab

true, false (Default: false)

boolean

 

To remove the button element from tab focus.

disabled

true, false (Default: false)

boolean

 

To disable button, set to false.

extraclass

 

string

 

Adds a class to the button element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

icon-bg-color

Accepts name, rgb and hex values.

string

 

Adds a background color to the icon.

icon-fill

Accepts name, rgb and hex values.

string

 

Adds color inside the icon.

icon-name

(Format: utility:close)

string

 

Adds an icon to the button. See SLDS icons.

icon-position

left, right (Default: left)

string

 

Sets the position of the button icon.

icon-size

xx-small, x-small, small, medium, large (Default: xx-small)

string

 

Sets the icon size for the button element.

icon-url

URL

string

 

Overrides the defined url for the icon svg resource.

icon-variant

inverse, warning, error , success, light, default (Default: default)

string

 

Changes the appearance of the icon. The inverse variant adds a white fill on a dark background.

label

 

string

 

Adds a visible label for the button element.

theme

slds, nds (Default: slds)

string

 

Sets the theme for the button.

type

reset, button, submit (Default: button)

   

Sets the type of button element.

variant

 

string

 

Sets the style of the button based on the typesupported by the chosen theme. For example, success, brand, and so on.

## Example c-button Component ``` ``` ## Button Lightning Web Component The _Button Lightning Web Component_ renders a button element to perform an action. ## Available c-button Attributes

Attribute

Value

Type

Required

Description

bg-color

Accepts name, rgb and hex

string

 

Adds a background color to the button element.

disable-tab

true, false (Default: false)

boolean

 

To remove the button element from tab focus.

disabled

true, false (Default: false)

boolean

 

To disable button, set to false.

extraclass

 

string

 

Adds a class to the button element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

icon-bg-color

Accepts name, rgb and hex values.

string

 

Adds a background color to the icon.

icon-fill

Accepts name, rgb and hex values.

string

 

Adds color inside the icon.

icon-name

(Format: utility:close)

string

 

Adds an icon to the button. See SLDS icons.

icon-position

left, right (Default: left)

string

 

Sets the position of the button icon.

icon-size

xx-small, x-small, small, medium, large (Default: xx-small)

string

 

Sets the icon size for the button element.

icon-url

URL

string

 

Overrides the defined url for the icon svg resource.

icon-variant

inverse, warning, error , success, light, default (Default: default)

string

 

Changes the appearance of the icon. The inverse variant adds a white fill on a dark background.

label

 

string

 

Adds a visible label for the button element.

theme

slds, nds (Default: slds)

string

 

Sets the theme for the button.

type

reset, button, submit (Default: button)

   

Sets the type of button element.

variant

 

string

 

Sets the style of the button based on the typesupported by the chosen theme. For example, success, brand, and so on.

## Example c-button Component ``` ``` ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _Button Lightning Web Component_ renders a button element to perform an action. ## Available c-button Attributes

Attribute

Value

Type

Required

Description

bg-color

Accepts name, rgb and hex

string

 

Adds a background color to the button element.

disable-tab

true, false (Default: false)

boolean

 

To remove the button element from tab focus.

disabled

true, false (Default: false)

boolean

 

To disable button, set to false.

extraclass

 

string

 

Adds a class to the button element. To add multiple classes, use a space to separate each class, such as `classone classtwo'.

icon-bg-color

Accepts name, rgb and hex values.

string

 

Adds a background color to the icon.

icon-fill

Accepts name, rgb and hex values.

string

 

Adds color inside the icon.

icon-name

(Format: utility:close)

string

 

Adds an icon to the button. See SLDS icons.

icon-position

left, right (Default: left)

string

 

Sets the position of the button icon.

icon-size

xx-small, x-small, small, medium, large (Default: xx-small)

string

 

Sets the icon size for the button element.

icon-url

URL

string

 

Overrides the defined url for the icon svg resource.

icon-variant

inverse, warning, error , success, light, default (Default: default)

string

 

Changes the appearance of the icon. The inverse variant adds a white fill on a dark background.

label

 

string

 

Adds a visible label for the button element.

theme

slds, nds (Default: slds)

string

 

Sets the theme for the button.

type

reset, button, submit (Default: button)

   

Sets the type of button element.

variant

 

string

 

Sets the style of the button based on the typesupported by the chosen theme. For example, success, brand, and so on.

## Example c-button Component ``` ``` # Buying Models for Consumption-Based Products Salesforce consumption-based products, such as Agentforce and Data 360, have multiple buying models: pre-purchased, pre-committed, pay-as-you-go, and unlimited. Digital Wallet supports the usage tracking and analysis for all of these buying models. You have access to the same consumption insights and analytics experience in Digital Wallet regardless of the buying model. You can use the pre-built Data 360 and Tableau Next dashboards to understand what's driving your consumption, view usage forecasts, and drill down to usage per agent, action, Data 360 resources, and so on. Or you can build your own custom reports to dive deeper into the data. For details, see [Get Actionable Insights with Standard Consumption Tags](https://help.salesforce.com/s/articleView?id=xcloud.wallet_usage_tags_overview.htm&release=264.0.0&type=5 "Consumption tags are a framework that provides enhanced transparency into your consumption-based products. Digital Wallet provides a set of standard consumption tags, which are additional metadata alongside the standard billing metrics. These tags provide more granular data that enables you to uncover deeper insights into usage patterns. Reports built with standard consumption tags provide visual representations of what agents, usage types, features, and sources (to name a few) are driving consumption and help you determine where you want to further invest."). The only Digital Wallet experience that varies is the information shown on the consumption card view. See the buying model descriptions for the specific differences. Your buying model determines how your consumption is tracked and billed, and what information Digital Wallet shows on each consumption card. ## Pre-Purchased With the pre-purchased buying model, you paid upfront for credits or capacity over your contract term. If you use more than you purchased, you typically receive an invoice for the additional consumption used. Any unused pre-purchased entitlements are forfeited at the end of the contract term. Your consumption card shows credits or capacity consumed, remaining consumption, and total allocated consumption. You can see how your usage draws down from your prepaid amount throughout the contract term. We show you a progress bar so it’s easy for you to track the usage against your total purchase at a glance. ![An example consumption card for the pre-purchased buying model is for Data Storage Allocation. It shows a progress bar with 248 GB consumed out of 6,144 GB total, with start and end dates and a contract number.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-model-pre-purchased.png) ## Pre-Committed With the pre-committed buying model, you committed to use a specific amount over your contract term, and you're billed as you use the services. Instead of paying for everything upfront, you're typically invoiced monthly based on your actual usage. If you don't use your full pre-committed quantity, you can receive a shortfall invoice. Your consumption card tracks usage against your total committed amount, with start and end dates for your contract term. This view helps you monitor whether you're on track to meet your commitment so you can avoid shortfall charges at contract end. ![An example consumption card for the pre-committed buying model is for Mule Credits. It shows a progress bar for credits consumed versus total committed credits, along with start and end dates and a contract number.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-model-pre-committed.png) ## Pay-as-You-Go With the pay-as-you-go buying model, you're billed for what you use each billing cycle with no long-term commitment. Your usage fees are typically invoiced each month after you've used the services. Your consumption card shows usage for the current billing cycle. There's no volume cap, so the card shows how much you've consumed without showing the remaining capacity. The card resets at the start of each billing cycle. ![An example consumption card for the pay-as-you-go buying model is for Data Services Credits. It shows the credits consumed for the current billing cycle and the contract agreement name.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-model-paygo.png) ## Unlimited With the unlimited buying model, you have uncapped usage over your contract term with no volume limits. Consumption products sold with the unlimited buying model, such as Agentforce (via Agentic Enterprise License Agreements) provide you with access to Salesforce products for a fixed upfront price. This model delivers complete cost predictability without the fear of overages or shortfalls. By removing these traditional roadblocks, this model empowers you to rapidly experiment, deploy, and scale your AI initiatives confidently across the enterprise. Your consumption card shows usage for the contractual cycle. It clearly lists the total credits consumed during your agreement, and shows your exact contract start and end dates. ![An example consumption card for the unlimited buying model is for Flex Credits. It shows the total credits consumed, contract start and end dates, and the contract agreement name.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-model-unlimited.png) ## Usage Is Tracked for Only One Buying Model at a Time Digital Wallet supports only one active buying model per entitlement per org. If you see a consumption card with a Dormant badge, it means that consumption for the entitlement is being tracked on a different consumption card. Data on a dormant card is for historical reference only. All usage is tracked and drawn down against only the active buying model. # BYOK Tenant Secret Flow To supply your own tenant secret, you create the secret, sign it with a BYOK-compatible certificate, and encode it with base64 encoding. ![BYOK secret flow diagram](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security_encryption_architecture-264-0-0-production-enus/b044d943-4a4b-42dd-8502-b93f7bd5cfeb/resources-product/images/pe_customer_supplied_tenant_secret.png) 1. Users prepare their tenant secret for upload. 1. The user generates a BYOK-compatible certificate declaratively or programmatically, where the certificate’s private key is encrypted with an org-specific derived data encryption key. The user issues or creates a self-signed or certificate authority (CA)-signed certificate. The user then downloads this certificate. 2. The user generates a 256-bit tenant secret by using the method of their choice, encrypts it with the public key from their BYOK-compatible certificate, and then encodes the encrypted tenant secret to base64. 3. The user calculates an SHA-256 hash of the plaintext tenant secret and then encodes this hash to base64. 4. The user uploads the encrypted tenant secret and hashed plaintext tenant secret files to Salesforce. 5. The application server then passes the encrypted tenant secret and hashed plaintext tenant secret files to the regional Shield KMS. 6. If customers don’t opt out of derivation, the regional Shield KMS creates the BYOK-derived encryption key to unwrap the certificate’s private key. 7. The customer’s uploaded tenant secret is decrypted by using the BYOK certificate’s private key. 8. The tenant secret is then hashed by using SHA-256 and compared to the SHA-256 hash provided by the customer. 2. If the hashes match, the regional Shield KMS encrypts the tenant secret with the per-release tenant wrapping key. 3. The regional Shield KMS sends the encrypted tenant secret back to the encryption service running on the Lightning Platform. 4. The encryption service stores the encrypted tenant secret securely in the database. The encrypted tenant secret is used to derive the org’s specific data encryption keys on demand. This encrypted tenant secret can only be decrypted in the regional Shield KMS. # Bypass All Triggers and Validations at the Object or Policy Level Apply an automation bypass setting to an entire policy or to selected objects on a policy. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Privacy Center license.
User Permissions Needed
To create, edit, and schedule privacy policies: Manage Privacy Center Policies
Before you begin: In Setup, on the Privacy Policy Settings page, enable **Allow policy configurations that ignore job errors and bypass automations**. To bypass all automations with a particular policy, click **Edit** on the policy details page, and then select **Bypass triggers and validation rules during policy execution**. To bypass automations for selected policy objects: 1. Add or edit an object. 2. On the Add an Object page, select **Bypass triggers and validation rules for this object**. 3. Complete the remaining object configuration steps and save your changes. # Bypass Automations During Policy Execution Allow a privacy policy to bypass automations, such as triggers and validation rules. If certain targeted records are subject to value restrictions or used to trigger flows, errors can occur during policy execution. Bypassing automations reduces these job errors and avoids further changes caused by record-triggered flows. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions with the Privacy Center license.
There are two ways to bypass automations when you run privacy policies. You can bypass a specific trigger or validation rule by modifying it to include a bypass condition, and then assigning a custom permission set to your policy. This approach gives you more control and reduces the risk of unintended effects in your org. Alternatively, you can select a bypass setting at the object or policy level. This option bypasses all triggers and validations for the selected objects on a policy, or for the entire policy. To avoid skipping critical record actions or allowing unwanted field values, make sure that you understand the full scope of your policy and the affected automations before using this approach. - **[Bypass Specific Triggers or Validations](https://help.salesforce.com/s/articleView?id=xcloud.bypass_triggers_validations.htm&release=264.0.0&type=5)** Configure a policy to bypass only the specific triggers or validations that you select. - **[Bypass All Triggers and Validations at the Object or Policy Level](https://help.salesforce.com/s/articleView?id=xcloud.bypass_automations_object_policy.htm&release=264.0.0&type=5)** Apply an automation bypass setting to an entire policy or to selected objects on a policy. # Bypass Specific Triggers or Validations Configure a policy to bypass only the specific triggers or validations that you select. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Privacy Center license.
User Permissions Needed
To create, edit, and schedule privacy policies: Manage Privacy Center Policies
Task overview: To complete this setup, you add a custom permission to the trigger or validation rule that you want to bypass. Make sure that the trigger or rule is bypassed when the running user has the specified permission. You then grant the permission to the system user that runs the privacy policy. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note The Automated Process User runs privacy policies by default. When you assign a permission set to a policy, the Platform Integration User runs the policy instead. Only the Platform Integration User has the necessary bypass privileges. ## Step 1: Modify the Trigger or Validation Rule with a Custom Permission Add a custom permission as a bypass condition to the triggers and validation rules that you want to bypass. 1. Create a [custom permission](https://help.salesforce.com/s/articleView?id=platform.custom_perms_create.htm&language=en_US). 2. Optional: To bypass a record-triggered flow, you can use a Decision element with the Running User’s Permission resource as a condition. For example, {!$Permission.custom\_permission\_name} Equals {!$GlobalConstant._True/False_}. Related topics: - [Flow Element: Decision](https://help.salesforce.com/s/articleView?id=platform.flow_ref_elements_decision.htm&language=en_US) - [Define Conditions in a Flow](https://help.salesforce.com/s/articleView?id=platform.flow_build_logic_conditions.htm&language=en_US) - [Flow Resource: Global Variables](https://help.salesforce.com/s/articleView?id=platform.flow_ref_resources_global_variables.htm&language=en_US) 3. Optional: To bypass a validation rule, you can add the custom permission to the error condition formula as a NOT condition. As a result, the formula evaluates to true only when the user lacks the custom permission. Related topics: - [_Trailhead_: Bypass Your Validation Rules](https://trailhead.salesforce.com/content/learn/modules/validation-rules/bypass-your-validation-rules) - [Validation Rules](https://help.salesforce.com/s/articleView?id=platform.fields_about_field_validation.htm&language=en_US) 4. Optional: Add the custom permission to any Apex triggers that you want to bypass. ## Step 2: Assign the Custom Permission via a Permission Set Turn on the custom permission that you created on a permission set, and assign the permission set to your privacy policies. 1. Add the custom permission to a new permission set. Make sure that the permission set is session-based by enabling the **Session Activation Required** setting. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note The permission set must include only the custom permission that you created for bypassing triggers and validation rules. If other user permissions are present, errors can occur with your configuration. Related topics: - [Create Permission Sets](https://help.salesforce.com/s/articleView?id=platform.perm_sets_create.htm&language=en_US) - [Enable Custom Permissions in Permission Sets](https://help.salesforce.com/s/articleView?id=platform.perm_sets_custom_perms.htm&language=en_US) 2. From Setup, in the Quick Find Box, enter Privacy Policy, and then select **Privacy Policy Settings**. 3. Under Automation Settings, turn on **Designate a permission set for policy execution users**. 4. In the Select a Permission Set field, start typing the name of the permission set, and then select it. 5. Save your changes. 6. Go to the Privacy Center app and select a policy. 7. Click **Edit**. 8. Under Permission Set Assignment, turn on **Assign permission set to policy execution user: **. 9. Save your changes and republish your policy. # Cache Block Using a cache to store frequently accessed, infrequently updated data saves round trips to the database and improves performance. Use Cache Blocks if some parts of the Integration Procedure update data and therefore shouldn't be cached, or if different cached data should expire at different times.

Property

Description

Salesforce Platform Cache Type

Specifies the cache type:

  • Session Cache — For data related to users and their login sessions

  • Org Cache — For all other types of data

Time To Live In Minutes

Determines how long data remains in the cache. The minimum value is 5. Default and maximum values depend on the cache type:

  • Session Cache — The default value is 5. The maximum value is 480, equivalent to 8 hours. However, the cache is cleared when the user's session expires.

  • Org Cache — The default value is 5. The maximum value is 2880, equivalent to 48 hours.

Top-level caching overrides Cache Block caching for the duration of the top-level Time To Live In Minutes value.

Cache Keys

Configurable Key/Value pairs to be stored in the cache. Enter a Key and set the Value to the response of an Action within the Cache Block. The value can use merge field syntax, percentage signs on either side of the node name, to access that response. Cache keys are available, or scoped, only within the Cache Block.

Cache Block Output

Configurable Key/Value pairs to be available to subsequent Integration Procedure steps. Enter a Key and set the Value to the response of an Action within the Cache Block. The value can use merge field syntax, percentage signs on either side of the node name, to access that response.

Refresh Cache Conditional Formula

If the formula evaluates to true, forces data to be saved to the cache.

Ignore Cache Conditional Formula

If the formula evaluates to true, neither clears nor saves data to the cache.

Add to Cache Conditional Formula

If the formula evaluates to true, saves data to the cache. If false, does not cache data.

Fail On Step Error

If this box is checked in a step within the Cache Block and that step fails, no data is cached.

# Cache Block Properties (Managed Package) For the managed package runtime, these properties are unique to or function in a unique manner in Cache Blocks. Use Cache Blocks if some parts of the Integration Procedure update data and therefore shouldn't be cached, or if different cached data should expire at different times. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Property

Description

Salesforce Platform Cache Type

Specifies the cache type:

  • Session Cache — For data related to users and their login sessions

  • Org Cache — For all other types of data

Time To Live In Minutes

Determines how long data remains in the cache. The minimum value is 5. Default and maximum values depend on the cache type:

  • Session Cache — The default value is 5. The maximum value is 480, equivalent to 8 hours. However, the cache is cleared when the user's session expires.

  • Org Cache — The default value is 5. The maximum value is 2880, equivalent to 48 hours.

Top-level caching overrides Cache Block caching for the duration of the top-level Time To Live In Minutes value.

Cache Keys

Configurable Key/Value pairs to be stored in the cache. Enter a Key and set the Value to the response of an Action within the Cache Block. The value can use merge field syntax, percentage signs on either side of the node name, to access that response. Cache keys are available, or scoped, only within the Cache Block.

Cache Block Output

Configurable Key/Value pairs to be available to subsequent Integration Procedure steps. Enter a Key and set the Value to the response of an Action within the Cache Block. The value can use merge field syntax, percentage signs on either side of the node name, to access that response.

Refresh Cache Conditional Formula

If the formula evaluates to true, forces data to be saved to the cache.

Ignore Cache Conditional Formula

If the formula evaluates to true, neither clears nor saves data to the cache.

Add to Cache Conditional Formula

If the formula evaluates to true, saves data to the cache. If false, does not cache data.

Fail On Step Error

If this box is checked in a step within the Cache Block and that step fails, no data is cached.

# Cache for Omnistudio Data Mappers (Managed Package) For the managed package runtime, Omnistudio offers multiple caching options to improve performance and minimize unnecessary data processing in Data Mappers. The two primary user-configurable caching types are Org Cache and Session Cache, which are available in the Data Mapper designer. These caching mechanisms are part of the Salesforce Platform Cache and are implemented through Vlocity Cache in Omnistudio with managed package runtime. Each serves a distinct purpose and comes with specific configuration considerations. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Caching of Data Mapper metadata is available in Summer '19 and later releases. Caching of Data Mapper data is available in Spring '20 and later releases. Omnistudio also offers Metadata Cache, which is for internal use only. It’s not configurable by users. It stores Omnistudio component metadata or definitions, and not the actual data. You can configure the data to remain in the cache (time to live) for a maximum of 48 to 72 hours. Omnistudio caches two different types of content: - Metadata: The definition that includes the structure and configuration of Integration Procedures and Data Mappers, such as steps, mappings, and formulas. This is stored in Metadata Cache and is used to improve load times. - Data: The response of a Data Mapper or an Integration Procedure that is cached in the Session Cache or Org Cache. Every time, when the same request input is entered or provided, the cached data is returned. Types of data cache in Data Mappers include: - Org Cache: The cached data is shared among all users in the same org. The org cache is recommended only if the data is non-sensitive or not user-specific. For example, picklists, configurations, or object data without any access restrictions. You can configure the data to remain in the cache (time to live) for a maximum of 48 hours. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Use org cache only for non-sensitive data. - Session Cache: It stores user-specific data and is limited to active user sessions. It is safer for personalized data and helps reduce redundant processing for data that varies by user profile or permissions. You can configure the data to remain in the cache (time to live) for a maximum of 8 hours. You can use caching with Data Mappers in three ways: - Data Mapper metadata is automatically cached. If you use the Scale Cache, this automatic caching occurs unless you turn off the Scale Cache. If you use the Platform Cache, you must allocate space in the VlocityMetadata cache partition to enable this automatic caching. - You can configure data caching on the Options tab of Data Mapper Extracts, Turbo Extracts, and Transforms. - If you call a Data Mapper from an Integration Procedure that uses caching, the Data Mapper data is cached along with the Integration Procedure data. You can also perform a record-level security check for cached data. ## Metadata Cache for Data Mappers Before you can cache Data Mapper metadata in the Platform Cache, you must allocate space in the VlocityMetadata cache partition. See Allocate Space in the Platform Cache Partitions. Data Mapper metadata is automatically cached. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If the Data Mapper cache isn't refreshed, make sure that Setup > Custom Settings > Trigger Setup > AllTriggers is on. ## Methods to Clear Metadata from Data Mapper Cache If you must clear Data Mapper metadata from the cache, follow the instructions in [this topic](https://help.salesforce.com/s/articleView?id=xcloud.os_fix_the_datapack_import_export_error_no_configuration_found.htm&release=264.0.0&type=5 "For the managed package runtime, if you see the error message No Configuration Found while trying to import or export a DataPack, the issue is most likely with the configuration of the Salesforce org. This error often occurs in developer sandboxes that are missing some of the configuration files owing to a recent refresh or an install or upgrade that has missed a post-install or post-upgrade step. You can fix this error with code in Anonymous Apex."), but execute one of these lines of code instead: ``` namespace.DRGlobal.clearCacheForDataRaptor('DataRaptorName'); vlocity.cmt.DRGlobal.clearCacheForAllDataRaptor(); ``` ## Methods to Clear Data from the Scale Cache Data Mappers use the Scale Cache and not the Platform Cache. To clear the Scale Cache, you can use either the preceding methods or the following ScaleCacheService method. ``` namespace.ScaleCacheService.invalidateCacheValue(new Map{'DataRaptorId' => DataRaptor_Name}); ``` For example, to clear data from a Data Mapper named `ExtractContactName`, use this line of code: ``` omnistudio.ScaleCacheService.invalidateCacheValue(new Map{'DataRaptorId' => 'ExtractContactName'}); ``` `namespace.ScaleCacheService.invalidateCacheValue(new Map{'VIPId' => Type_SubType});` # Cache for Omnistudio Integration Procedures (Managed Package) For the managed package runtime, Omnistudio offers multiple caching options to improve performance and minimize unnecessary data processing in Integration Procedures. The two primary user-configurable caching types are Org Cache and Session Cache, which are available in Integration Procedure designer. These caching mechanisms are part of the Salesforce Platform Cache and are implemented through Vlocity Cache in Omnistudio with managed package runtime. Each serves a distinct purpose and comes with specific configuration considerations. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Caching of Integration Procedure metadata and Integration Procedure data is available in Summer '19 and later releases. Omnistudio also offers Metadata Cache, which is for internal use only. It’s not configurable by users. It stores Omnistudio component metadata or definitions, and not the actual data. You can configure the data to remain in the cache (time to live) for a maximum of 48 to 72 hours. Omnistudio caches two different types of content: - Metadata: The definition that includes the structure and configuration of Integration Procedures and Data Mappers, such as steps, mappings, and formulas. This is stored in Metadata Cache and is used to improve load times. - Data: The response of a Data Mapper or an Integration Procedure that is cached in the Session Cache or Org Cache. Every time, when the same request input is entered or provided, the cached data is returned. Types of data cache in Integration Procedures include: - Org Cache: The cached data is shared among all users in the same org. The org cache is recommended only if the data is non-sensitive or not user-specific. For example, picklists, configurations, or object data without any access restrictions. You can configure the data to remain in the cache (time to live) for a maximum of 48 hours. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Use org cache only for non-sensitive data. - Session Cache: It stores user-specific data and is limited to active user sessions. It is safer for personalized data and helps reduce redundant processing for data that varies by user profile or permissions. You can configure the data to remain in the cache (time to live) for a maximum of 8 hours. You can use caching with Integration Procedures in three ways: - You can cache metadata for the entire Integration Procedure. - You can cache the response of the entire Integration Procedure, called top-level data. - You can cache the result of a specific set of steps by placing the steps inside a Cache Block. Use Cache Blocks if some parts of the Integration Procedure update data, or if you need different cached data to expire at different times. For example, current weather data changes more frequently than user session data. You can also perform a record-level security check for cached data. ## Metadata Cache for Integration Procedures Before you can cache Integration Procedure metadata in the Platform Cache, you must allocate space in the VlocityMetadata cache partition. See Allocate Space in the Platform Cache Partitions. Integration Procedure metadata is cached by default and Data Mapper metadata is automatically cached. To disable metadata caching for an Integration Procedure, go to the Procedure Configuration and check the **Disable Definition Cache** checkbox. ![Under Cache Configuration, Disable Definition Cache is checked.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/disabledefinitioncache.png) ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_tip.png) Tip To test the performance benefit of metadata caching, execute the Integration Procedure in the Preview tab with **Disable Definition Cache** checked and then unchecked. Compare the Browser, Server, and Apex CPU values. Behind this checkbox is the DisableDefinitionCache\_\_c boolean field, which defaults to false. ## Methods to Clear Metadata from Integration Procedure Cache You can clear Integration Procedure metadata from the cache. [this topic](https://help.salesforce.com/s/articleView?id=xcloud.os_fix_the_datapack_import_export_error_no_configuration_found.htm&release=264.0.0&type=5 "For the managed package runtime, if you see the error message No Configuration Found while trying to import or export a DataPack, the issue is most likely with the configuration of the Salesforce org. This error often occurs in developer sandboxes that are missing some of the configuration files owing to a recent refresh or an install or upgrade that has missed a post-install or post-upgrade step. You can fix this error with code in Anonymous Apex."), but execute this line of code instead, specifying the Integration Procedure's Type and Subtype: `namespace.IntegrationProcedureService.clearMetadataCache('Type_Subtype');` You can clear all cached data for an Integration Procedure, including session cache data, org cache data, and metadata. Follow the instructions in [this topic](https://help.salesforce.com/s/articleView?id=xcloud.os_fix_the_datapack_import_export_error_no_configuration_found.htm&release=264.0.0&type=5 "For the managed package runtime, if you see the error message No Configuration Found while trying to import or export a DataPack, the issue is most likely with the configuration of the Salesforce org. This error often occurs in developer sandboxes that are missing some of the configuration files owing to a recent refresh or an install or upgrade that has missed a post-install or post-upgrade step. You can fix this error with code in Anonymous Apex."), but execute this line of code instead, specifying the Integration Procedure's Type and Subtype: `namespace.IntegrationProcedureService.clearAllCache('Type_Subtype');` ## Methods to Clear Data from the Scale Cache Integration Procedures use the Scale Cache and not the Platform Cache. To clear the Scale Cache, you can use either the preceding methods or the following ScaleCacheService method. If you must clear Integration Procedure data from the Scale Cache, follow the instructions in [this topic](https://help.salesforce.com/s/articleView?id=xcloud.os_fix_the_datapack_import_export_error_no_configuration_found.htm&release=264.0.0&type=5 "For the managed package runtime, if you see the error message No Configuration Found while trying to import or export a DataPack, the issue is most likely with the configuration of the Salesforce org. This error often occurs in developer sandboxes that are missing some of the configuration files owing to a recent refresh or an install or upgrade that has missed a post-install or post-upgrade step. You can fix this error with code in Anonymous Apex."), but execute a line of code in this form instead: `namespace.ScaleCacheService.invalidateCacheValue(new Map{'VIPId' => Type_SubType});` For example, to clear data from an Integration Procedure with a Type\_SubType of `LoopList_ContactNames`, use this line of code: ``` omnistudio.ScaleCacheService.invalidateCacheValue(new Map{'VIPId' => 'LoopList_ContactNames'}); ``` - **[Cache for Top-Level Integration Procedure Data (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cache_for_top_level_integration_procedure_data.htm&release=264.0.0&type=5)** For the managed package runtime, using a cache to store frequently accessed, infrequently updated Integration Procedure data saves round trips to the database and improves performance. You can cache all the data for an Integration Procedure, as described here, or you can use a Cache Block to cache only part of it. - **[Configure Top-Level Caching for an Integration Procedure (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_top_level_caching_for_an_integration_procedure.htm&release=264.0.0&type=5)** For the managed package runtime, to configure top-level caching for an Integration Procedure, go to the Procedure Configuration and set the **Salesforce Platform Cache Type** and **Time To Live In Minutes** properties. - **[Create a Top-Level Caching Example (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_top_level_caching_example.htm&release=264.0.0&type=5)** For the managed package runtime, an Integration Procedure accepts a list of first or last names and retrieves Contacts having those names. Top-level caching to the VlocityAPIResponse partition improves Contact retrieval performance. # Cache for Top-Level Integration Procedure Data Using a cache to store frequently accessed, infrequently updated Integration Procedure data saves round trips to the database and improves performance. You can cache all the data for an Integration Procedure, as described here, or you can use a Cache Block to cache only part of it. To configure top-level caching for an Integration Procedure, go to the Procedure Configuration and set the **Salesforce Platform Cache Type** and **Time To Live In Minutes** properties. See [Configure Top-Level Caching for an Integration Procedure](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_top_level_caching_for_an_integration_procedure_54929.htm&release=264.0.0&type=5 "To configure top-level caching for an Integration Procedure, go to the Procedure Configuration and set the Salesforce Platform Cache Type and Time To Live In Minutes properties."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note If an Integration Procedure that has top-level caching enabled fails, its data isn’t cached. ## Options in Preview for Top-Level Caching When you test an Integration Procedure that uses top-level caching in the Preview tab, you can use two caching settings in the Options JSON section. These settings control top-level data and have no effect on the metadata cache. - `ignoreCache` — Doesn't clear or save data to the cache. The default value is `true`. Use this setting to test Integration Procedure steps without the possible interference of caching effects. - `resetCache` — Forces data to be saved to the cache. The default value is `false`. Use this setting as part of testing caching itself. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note To test caching, be sure to set `ignoreCache` to `false`. See [Create a Top-Level Caching Example](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_top_level_caching_example_54974.htm&release=264.0.0&type=5 "An Integration Procedure accepts a list of first or last names and retrieves Contacts having those names. Top-level caching to the VlocityAPIResponse partition improves Contact retrieval performance."). You can pass ignoreCache and resetCache as parameters when you invoke an Integration Procedure that uses caching using a REST API. For example, you can include `?resetCache=true` in the URL to force caching. See [Integration Procedure Invocation from REST APIs](https://help.salesforce.com/s/articleView?id=xcloud.os_integration_procedure_invocation_from_rest_apis_55792.htm&release=264.0.0&type=5 "With a REST API, you can use either a GET or a POST call to invoke an Integration Procedure and retrieve the result. The difference between the two is that a GET call can't pass data with a JSON request body."). ## Top-Level Caching JSON Nodes and REST Headers If top-level caching is configured and the Integration Procedure is active, the Integration Procedure JSON can include the following nodes under the root node: - `vlcCacheKey` — Key for any data stored in the cache - `vlcCacheResult` — Included and set to true if data is retrieved from the cache - `vlcCacheEnabled` — Included and set to false if the `ignoreCache` setting disables caching - `vlcCacheException` — Any caching errors These nodes are returned as headers if you invoke an Integration Procedure that uses top-level caching using a REST API. See [Integration Procedure Invocation from REST APIs](https://help.salesforce.com/s/articleView?id=xcloud.os_integration_procedure_invocation_from_rest_apis_55792.htm&release=264.0.0&type=5 "With a REST API, you can use either a GET or a POST call to invoke an Integration Procedure and retrieve the result. The difference between the two is that a GET call can't pass data with a JSON request body."). ## Methods for Clearing Top-Level Data To clear top-level Integration Procedure data from the cache, execute these Connect APIs in the Developer Console. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Starting with Summer ‘25, replace the `clearSessionCache`, `clearOrgCache`, and `clearAllCache` methods with the Connect APIs to clear top-level Integration Procedure data from the cache. - Clear session cache: Starting with Summer ‘25, replace the `IntegrationProcedureService.clearSessionCache('Type_Subtype', new Map{'key' => 'value'})` method with this API: ``` ConnectApi.IntegrationProcedureCacheInputRepresentation finalInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation(); ConnectApi.IntegrationProcedureCacheInputData apexInput = new ConnectApi.IntegrationProcedureCacheInputData(); apexInput.ipKey = ipKey; apexInput.inputData = JSON.serialize(inputData); List l = new List(); l.add(apexInput); finalInput.ipInput = l; finalInput.cacheStorageType = ConnectApi.CacheStorageType.Session; ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(finalInput); ``` ipKey: Specifies the Integration Procedure to invoke in Type\_Subtype format. inputData: Specifies the input in the Map format. - Clear session cache with `vlcCacheKey`: Starting with Summer ‘25, replace the `IntegrationProcedureService.clearSessionCache('vlcCacheKey')` method with this API: ``` ConnectApi.IntegrationProcedureCacheInputRepresentation apexInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation(); List cacheKeyList = new List(); cacheKeyList.add(vlcCacheKey); apexInput.cacheKeys= cacheKeyList; apexInput.cacheStorageType = ConnectApi.CacheStorageType.Session; ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(apexInput); ``` - Clear org cache: Starting with Summer ‘25, replace the `IntegrationProcedureService.clearOrgCache('Type_Subtype', new Map{'key' => 'value'})` method with this API: ``` ConnectApi.IntegrationProcedureCacheInputRepresentation finalInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation(); ConnectApi.IntegrationProcedureCacheInputData apexInput = new ConnectApi.IntegrationProcedureCacheInputData(); apexInput.ipKey = ipKey; apexInput.inputData = JSON.serialize(inputData); List l = new List(); l.add(apexInput); finalInput.ipInput = l; finalInput.cacheStorageType = ConnectApi.CacheStorageType.Org; ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(finalInput); ``` - Clear org cache with `vlcCacheKey`: Starting with Summer ‘25, replace the `IntegrationProcedureService.clearOrgCache('vlcCacheKey')` method with this API: ``` ConnectApi.IntegrationProcedureCacheInputRepresentation apexInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation(); List cacheKeyList = new List(); cacheKeyList.add(vlcCacheKey); apexInput.cacheKeys= cacheKeyList; apexInput.cacheStorageType = ConnectApi.CacheStorageType.Org; ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(apexInput); ``` - Clear all cached data for an Integration Procedure, including session cache data, org cache data, and metadata: Starting with Summer ‘25, replace the `IntegrationProcedureService.clearAllCache('Type_Subtype')` method with this API: ``` ConnectApi.IntegrationProcedureCacheInputRepresentation finalInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation(); ConnectApi.IntegrationProcedureCacheInputData apexInput = new ConnectApi.IntegrationProcedureCacheInputData(); apexInput.ipKey = ipKey; List l = new List(); l.add(apexInput); finalInput.ipInput = l; finalInput.cacheStorageType = ConnectApi.CacheStorageType.All; ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(finalInput); ``` # Cache for Top-Level Integration Procedure Data (Managed Package) For the managed package runtime, using a cache to store frequently accessed, infrequently updated Integration Procedure data saves round trips to the database and improves performance. You can cache all the data for an Integration Procedure, as described here, or you can use a Cache Block to cache only part of it. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Caching of top-level Integration Procedure data is available in Summer '19 and later releases. It's important to allocate space in the VlocityAPIResponse cache partition and to understand how top-level Integration Procedure caching interacts with Cache Blocks. See [Cache for Omnistudio Data Mappers (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cache_for_dataraptors_and_integration_procedures.htm&release=264.0.0&type=5 "For the managed package runtime, Omnistudio offers multiple caching options to improve performance and minimize unnecessary data processing in Data Mappers. The two primary user-configurable caching types are Org Cache and Session Cache, which are available in the Data Mapper designer. These caching mechanisms are part of the Salesforce Platform Cache and are implemented through Vlocity Cache in Omnistudio with managed package runtime. Each serves a distinct purpose and comes with specific configuration considerations."). To configure top-level caching for an Integration Procedure, go to the Procedure Configuration and set the **Salesforce Platform Cache Type** and **Time To Live In Minutes** properties. See [Configure Top-Level Caching for an Integration Procedure (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_top_level_caching_for_an_integration_procedure.htm&release=264.0.0&type=5 "For the managed package runtime, to configure top-level caching for an Integration Procedure, go to the Procedure Configuration and set the Salesforce Platform Cache Type and Time To Live In Minutes properties."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If an Integration Procedure that has top-level caching enabled fails, its data isn’t cached. ## Options in Preview for Top-Level Caching When you test an Integration Procedure that uses top-level caching in the Preview tab, you can use two caching settings in the Options JSON section. These settings control top-level data and have no effect on the metadata cache. - `ignoreCache` — Doesn't clear or save data to the cache. The default value is `true`. Use this setting to test Integration Procedure steps without the possible interference of caching effects. - `resetCache` — Forces data to be saved to the cache. The default value is `false`. Use this setting as part of testing caching itself. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note To test caching, be sure to set `ignoreCache` to `false`. See [Create a Top-Level Caching Example (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_top_level_caching_example.htm&release=264.0.0&type=5 "For the managed package runtime, an Integration Procedure accepts a list of first or last names and retrieves Contacts having those names. Top-level caching to the VlocityAPIResponse partition improves Contact retrieval performance."). The Options pane on the Preview tab looks like this: ![Under Errors/Debug Output are the Debug Log, errors, and Options panes. The Options pane is expanded to reveal resetCache, ignoreCache, and other options.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cachingpreviewoptions.png) You can pass ignoreCache and resetCache as parameters when you invoke an Integration Procedure that uses caching using a REST API. For example, you can include `?resetCache=true` in the URL to force caching. See [Integration Procedure Invocation Using POST (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_integration_procedure_invocation_using_post.htm&release=264.0.0&type=5 "For the managed package runtime, to send JSON data to an Integration Procedure, issue a POST call. With a POST call, you can specify inline values in the URL path, append query parameters to the URL, and include a JSON request body."). ## Top-Level Caching JSON Nodes and REST Headers If top-level caching is configured and the Integration Procedure is active, the Integration Procedure JSON can include the following nodes under the root node: - `vlcCacheKey` — Key for any data stored in the cache - `vlcCacheResult` — Included and set to true if data is retrieved from the cache - `vlcCacheEnabled` — Included and set to false if the `ignoreCache` setting disables caching - `vlcCacheException` — Any caching errors These nodes are returned as headers if you invoke an Integration Procedure that uses top-level caching using a REST API. See [Integration Procedure Invocation Using POST (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_integration_procedure_invocation_using_post.htm&release=264.0.0&type=5 "For the managed package runtime, to send JSON data to an Integration Procedure, issue a POST call. With a POST call, you can specify inline values in the URL path, append query parameters to the URL, and include a JSON request body."). ## Methods for Clearing Top-Level Data If you must clear top-level Integration Procedure data from the cache, follow the instructions in [this topic](https://help.salesforce.com/s/articleView?id=xcloud.os_fix_the_datapack_import_export_error_no_configuration_found.htm&release=264.0.0&type=5 "For the managed package runtime, if you see the error message No Configuration Found while trying to import or export a DataPack, the issue is most likely with the configuration of the Salesforce org. This error often occurs in developer sandboxes that are missing some of the configuration files owing to a recent refresh or an install or upgrade that has missed a post-install or post-upgrade step. You can fix this error with code in Anonymous Apex."), but execute one of these lines of code instead: ``` IntegrationProcedureService.clearSessionCache('Type_Subtype', new Map{'key' => 'value'}); IntegrationProcedureService.clearOrgCache('Type_Subtype', new Map{'key' => 'value'}); IntegrationProcedureService.clearSessionCache('vlcCacheKey'); IntegrationProcedureService.clearOrgCache('vlcCacheKey'); ``` You can clear all cached data for an Integration Procedure, including session cache data, org cache data, and metadata. Follow the instructions in [this topic](https://help.salesforce.com/s/articleView?id=xcloud.os_fix_the_datapack_import_export_error_no_configuration_found.htm&release=264.0.0&type=5 "For the managed package runtime, if you see the error message No Configuration Found while trying to import or export a DataPack, the issue is most likely with the configuration of the Salesforce org. This error often occurs in developer sandboxes that are missing some of the configuration files owing to a recent refresh or an install or upgrade that has missed a post-install or post-upgrade step. You can fix this error with code in Anonymous Apex."), but execute this line of code instead, specifying the Integration Procedure's Type and Subtype: `IntegrationProcedureService.clearAllCache('Type_Subtype');` For example, execute the following code if: - You want to clear data in the Org Cache - The Type\_Subtype parameter for the Integration Procedure is LastNames\_Cached - The key you want to clear is ContactLastName - The key's value is Smith ``` IntegrationProcedureService.clearOrgCache('LastNames_Cached', new Map{'ContactLastName' => 'Smith'}); ``` The following example clears the session cache using a vlcCacheKey value: ``` IntegrationProcedureService.clearSessionCache('2032076016a1745801061oc'); ``` # Cache Lightning Platform Data Using the Platform Cache can enable applications to run faster because they can store reusable data in memory. Applications can quickly access this data, removing the need to duplicate calculations and requests to the database on subsequent transactions. To use Platform Cache, first set up partitions using the Platform Cache Partition tool in Setup. Once you’ve set up partitions, you can add, access, and remove data from them using the Platform Cache Apex API. Use Platform Cache partitions to improve the performance of your applications. Partitions allow you to distribute cache space in the way that works best for your applications. Caching data to designated partitions ensures that it’s not overwritten by other applications or less-critical data. To access the Partition tool in Setup, enter Platform Cache in the Quick Find box, then select **Platform Cache**. Use the Platform Cache Partition tool to: - Setup a Platform Cache partition with Provider Free capacity. - Request trial cache. - Create, edit, or delete cache partitions. - Allocate the session cache and org cache capacities of each partition to balance performance across apps. - View a snapshot of the org’s current cache capacity, breakdown, and partition allocations (in KB or MB). - View details about each partition. - Make any partition the default partition. To use Platform Cache, create at least one partition. Each partition has one session cache and one org cache segment and you can allocate separate capacity to each segment. Session cache can be used to store data for individual user sessions, and org cache is for data that any users in an org can access. You can distribute your org’s cache space across any number of partitions. Session and org cache allocations can be zero, or five or greater, and they must be whole numbers. The sum of all partition allocations, including the default partition, equals the Platform Cache total allocation. The total allocated capacity of all cache segments must be less than or equal to the org’s overall capacity. You can define any partition as the default partition, but you can have only one default partition. When a partition has no allocation, cache operations (such as get and put) are not invoked, and no error is returned. Capacity calculations occur every 5 minutes by default. To make sure you’re seeing the latest capacity and allocation, click **Recalculate**. - **[Request a Platform Cache Trial](https://help.salesforce.com/s/articleView?id=xcloud.data_platform_cache_trial.htm&release=264.0.0&type=5)** To test performance improvements by using Platform Cache in your own org, you can request trial cache for your production org. Enterprise, Unlimited, and Performance editions come with some cache, but adding more cache often provides greater performance. When your trial request is approved, you can allocate capacity to partitions and experiment with using the cache for different scenarios. Testing the cache on a trial basis lets you make an informed decision about whether to purchase cache. - **[Request Additional Platform Cache](https://help.salesforce.com/s/articleView?id=xcloud.data_platform_cache_additional.htm&release=264.0.0&type=5)** You can request additional Platform Cache space to improve the performance of your application. - **[Set Up a Platform Cache Partition with Provider Free Capacity](https://help.salesforce.com/s/articleView?id=xcloud.data_platform_cache_setup_provider_capacity.htm&release=264.0.0&type=5)** Salesforce provides 3 MB of free Platform Cache capacity for security-reviewed managed packages. This is made available through a capacity type called Provider Free capacity and is automatically enabled in all Developer edition orgs. #### See Also - [_Apex Developer Guide_](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_cache_namespace_overview.htm) # Cache-Only Key Flow With Field-Level Encryption (FLE), you can insert a final data encryption key into the encrypted key cache. You supply a cache-only key as an encrypted JWE JSON file, wrapped with your content encryption key. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security_encryption_architecture-264-0-0-production-enus/b044d943-4a4b-42dd-8502-b93f7bd5cfeb/images/icon_note.png) Note Customer-supplied cache-only keys are available for application tier applications, such as FLE, Event bus, and so on. They’re not supported for Database Encryption, nor are they supported for Search Index encryption on Hyperforce. ![Cache-only key flow diagram](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security_encryption_architecture-264-0-0-production-enus/b044d943-4a4b-42dd-8502-b93f7bd5cfeb/resources-product/images/pe_cache_key_flow.png) 1. Users prepare their key material. Cache-only key material is wrapped in a JSON format. 1. The user generates a 256-bit AES data encryption key by using a cryptographically secure method. 2. The user generates and downloads a BYOK-compatible certificate. 3. The user creates a JWE protected header. The JWE protected header is a JSON object with three claims: the algorithm used to encrypt the content encryption key, the algorithm used to encrypt the DEK, and the unique ID of the cache-only key. 4. The user encodes the JWE protected header as BASE64URL(UTF8(JWE Protected Header)). 5. The user encrypts the content encryption key with the public key from the BYOK certificate by using the RSAES-OAEP algorithm. The user then encodes this encrypted content encryption key as BASE64URL(Encrypted CEK). 6. The user generates an initialization vector for use as input to the DEK’s AES wrapping and then encodes it in base64url. 7. The user wraps the DEK with the content encryption key. 1. Encode the JWE header as ASCII(BASE64URL(UTF8(JWE Protected Header))). 2. Reform authenticated encryption on the DEK with the AES GCM algorithm. Use the content encryption key as the encryption key, the initialization vector (the bytes, not the base64URL encoded version), and the Additional Authenticated Data value, requesting a 128-bit Authentication Tag output. 3. Encode the resulting ciphertext as BASE64URL(Ciphertext). 4. Encode the Authentication Tag as BASE64URL(Authentication Tag). 8. The user assembles the JWE as a compact serialization of all the preceding values, concatenating values separated by a period. 2. Users prepare a Salesforce named credential to serve as a secure callout connection, specifying their external key service as the endpoint. (Named principals are also supported.) 3. The user accesses or writes encrypted data. 4. The encryption service requests key material from the encrypted key cache for a DEK. 5. If no DEK is returned, the encryption service initiates a request to the endpoint specified in the customer-created named credential. 6. The customer’s key service returns a content encryption key wrapped in a key encryption key, formatted as a JSON Web Encryption structure (JWE). 7. The encrypted key cache validates the response and sends the content encryption key to the regional Shield KMS to be unwrapped. 8. The regional Shield KMS unwraps the content encryption key with the HSM-generated certificate’s key encryption key. 9. The regional Shield KMS returns the unwrapped content encryption key to the encrypted key cache over a TLS-secured channel. 10. The DEK is unwrapped with the content encryption key. 11. The DEK is wrapped with a cache key-encrypting key and placed in the encrypted key cache for encrypt and decrypt operations. # Cache-Only Key Service Shield Platform Encryption’s Cache-Only Key Service addresses a unique need for non-persisted key material. You can store your key material outside of Salesforce in any key repository or service that you control and have the Cache-Only Key Service fetch your key on demand from that key service. Your key service transmits your key over a secure channel that you configure, and the Cache-Only Key Service uses your key for immediate encrypt and decrypt operations. Salesforce doesn’t retain or persist your cache-only keys in any system of record or backups. You can revoke key material at any time. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires purchasing Salesforce Shield or Shield Platform Encryption, and the External Key Management Service.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Both BYOK and the Cache-Only Key service give you full control over which key service you use for your external keys. EKM supports only AWS KMS. - **[How Cache-Only Keys Works](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_cache_how.htm&release=264.0.0&type=5)** The Shield Platform Encryption Cache-Only Key Service provides access to various key services to generate, secure, and store your key material. Because a cache-only key bypasses the key derivation process, it’s used to directly encrypt and decrypt your data. You can use an on-premises key service, host your own cloud-based key service, or use a cloud-based key brokering vendor. Services that incorporate named principals for credentials are recommended, although key services that use legacy named credentials without named principals are supported. - **[Prerequisites and Terminology for Cache-Only Keys](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_cache_prereqisites.htm&release=264.0.0&type=5)** Shield Platform Encryption’s Cache-Only Key Service offers you more control over your key material. When you use cache-only keys, you control more of the key-management tasks. Before you start using the service, review how to create and host your key material in a way that’s compatible with Salesforce’s BYOK service. Also review several important terms relevant to the Cache-Only Key Service - **[Optimize Security Using Named Credentials and Cache-Only Keys](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_use_an_aws_kms_key_for_cok.htm&release=264.0.0&type=5)** You can use an externally managed key as your cache-only key. External credentials create a secure connection between Salesforce and your external-key repository. For optimal security, set up an external credential that uses a named principal to authenticate into your external service on behalf of all users authorized to manage key material. Salesforce recommends you use this method instead of a legacy named credential if you use an external key management service along with cache-only keys. - **[Create and Assemble Your Key Material](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_cache_create.htm&release=264.0.0&type=5)** The Shield Platform Encryption Cache-Only Key Service is compatible with 256-bit AES keys returned in a JSON response, and then wrapped using JSON Web Encryption (JWE). - **[Add Replay Detection for Cache-Only Keys](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_cache_replay.htm&release=264.0.0&type=5)** Replay detection protects your cache-only keys if a callout is fraudulently intercepted. When enabled, replay detection inserts an autogenerated, unique marker called a RequestIdentifier into every callout. The RequestIdentifier includes the key identifier, a nonce generated for that callout instance, and the nonce required from the endpoint. The RequestIdentifier serves as a random, one-time identifier for each valid callout request. After you set up your key service to accept and return the RequestIdentifier, any callout with missing or mismatched RequestIdentifiers is aborted. - **[Check Your Cache-Only Key Connection](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_cache_check.htm&release=264.0.0&type=5)** Because your cache-only key material is stored outside of Salesforce, it’s important to maintain a functional callout connection. Use the Callout Check page to monitor your connection and quickly respond to key service interruptions that could prevent the service from fetching your keys. - **[Destroy a Cache-Only Key](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_cache_destroy.htm&release=264.0.0&type=5)** When you destroy a cache-only key, you’re destroying two things: the key in the cache and the callout connection to the key service. - **[Reactivate a Cache-Only Key](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_cache_activate.htm&release=264.0.0&type=5)** If you still have your named credential associated with a key that was destroyed in Salesforce, you can reactivate a destroyed cache-only key from Setup or programmatically through the API. Reactivating a destroyed key makes it the active key. Before you reactivate a destroyed key, make sure that the corresponding key service connection is recovered. - **[Considerations for Cache-Only Keys](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_cache_considerations.htm&release=264.0.0&type=5)** These considerations apply to all data that you encrypt using the Shield Platform Encryption Cache-Only Key Service. - **[Troubleshoot Cache-Only Keys](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_cache_troubleshoot.htm&release=264.0.0&type=5)** One or more of these frequently asked questions can help you troubleshoot any problems that arise with Shield Platform Encryption’s Cache-Only Key Service. #### See Also - [How Key Material Is Stored](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_how_key_material_is_stored.htm&release=264.0.0&type=5 "The critical components of the Security Platform Encryption architecture—the KDF secrets, KDF salt, wrapping keys, and DEKs—are secured using a tiered structure that incorporates wrapped keys, signing, and key derivation.") - [External Key Management](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_ekm_overview.htm&release=264.0.0&type=5 "Shield External Key Management (EKM) connects your Salesforce implementation to your key material in an external key management service (KMS). Shield Platform Encryption then uses that key material to encrypt and decrypt your Salesforce data. EKM fetches your keys on demand from the external KMS over a secure channel.") - [Key Management and Rotation](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_setup.htm&release=264.0.0&type=5 "With Shield Platform Encryption, you control and rotate the key material used to encrypt your data. You can use Salesforce to generate a tenant secret for you, which is then combined with a primary secret for each release to derive a data encryption key. This derived data encryption key is then used in encryption and decryption functions. You can also use the Bring Your Own Key (BYOK) service to upload your own key material. Or you can store your key material outside of Salesforce. Use the External Key Management Service or the Cache-Only Key Service to fetch your key material on demand.") # Cache-Only Keys Option Customers can create and store a DEK outside of Salesforce and use Cache-Only Keys to apply that DEK to data in Salesforce. Customers can use an on-premises key service, host their own cloud-based key service, or use a cloud-based key brokering vendor. Root keys and named principals are supported. DEKs are fetched on demand over a secure channel that the customer configures. Salesforce-generated DEKs are wrapped with a cache key encryption key and placed directly in the encrypted key cache for encrypt and decrypt operations. DEKs generated by an external KMS are wrapped by the generating root key, and they’re unwrapped by that same root key when needed. Because cache-only keys bypass the key derivation process, they’re used to directly encrypt and decrypt your data. Subsequent encryption and decryption requests go through the encrypted key cache until the cache-only key is revoked or rotated, or the cache is flushed. After the cache is flushed, cache-only keys fetches key material from your specified key service. The cache is regularly flushed every 72 hours. Certain Salesforce operations flush the cache on average every 24 hours. Destroying a data encryption key invalidates the corresponding data encryption key that’s stored in the cache. - **[Cache-Only Key Flow](https://help.salesforce.com/s/articleView?id=xcloud.security_shield_pe_cache_key_flow.htm&release=264.0.0&type=5)** With Field-Level Encryption (FLE), you can insert a final data encryption key into the encrypted key cache. You supply a cache-only key as an encrypted JWE JSON file, wrapped with your content encryption key. # Caching Settings Control This configuration optimizes platform performance and user convenience by using a global Content Delivery Network (CDN) and secure browser caching to accelerate the delivery of static Lightning resources. ## Recommended Configuration - Enable secure and persistent browser caching to improve performance - Enable Content Delivery Network (CDN) for Lightning Component framework - Enable Remember me until logout On the Session Settings Setup page, in the Caching section, select **Enable Content Delivery Network (CDN) for Lightning Component framework** and **Remember me until logout** ## Control Name Caching Settings ## Control Overview This configuration optimizes platform performance and user convenience by using a global Content Delivery Network (CDN) and secure browser caching to accelerate the delivery of static Lightning resources. To further streamline the daily workflow, the "Remember me" feature persists the user’s identity across sessions, reducing login friction until an explicit logout is performed. ## Security Risk If Not Configured Failure to enable these performance and session optimizations risks a significant decrease in platform responsiveness and user productivity due to increased latency and redundant server requests. Furthermore, the absence of persistent caching and streamlined authentication creates a high-friction environment that can lead to user fatigue and potential adoption hurdles across distributed teams. ## Threat Scenarios By neglecting these security controls, you risk a "session leakage" scenario where sensitive Lightning component data is stored insecurely in the browser, potentially allowing unauthorized users on shared devices to harvest information from the cache. Furthermore, without the CDN's origin shielding and the "Remember me until logout" guardrail, the org becomes more susceptible to performance-driven outages and unauthorized access via abandoned workstations, as sessions may not invalidate as strictly as required for high-security environments. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations User working environment, user profiles, and data access. ## Higher Risk When Without these enabled, sensitive UI component data is cached in an unencrypted state on the user's local disk, while the absence of a hardened CDN and strict "Remember me" logic prevents the org from effectively isolating resource delivery and ensuring sessions are invalidated upon browser closure. This combination elevates the risk of unauthorized data harvesting from shared hardware and successful session hijacking attempts. ## Low or No Risk When To minimize the risks of performance degradation and user friction, companies can implement Single Sign-On (SSO) to streamline the frequent re-authentication process and enforce rigorous code optimization to reduce the initial payload size of custom components. Also, maintaining a high-bandwidth, low-latency network infrastructure can partially offset the lack of CDN-driven delivery and persistent local caching. ## Business and Integration Considerations Location of users, including integration users, user endpoints. ## Recommended Remediation Enable secure caching settings. ## Security Health Review Guidance Security Health Review inspects the caching controls based on the best practice ensure secure caching of sensitive data while maintaining caching capability to improve performance. #### See Also - [Modify Session Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.admin_sessions.htm&release=264.0.0&type=5 "Use the Session Settings screen to configure session security. You can configure settings such as the session connection type, timeout restrictions, and IP address ranges to protect against malicious attacks.") # Calculate Accrual Amounts Across Multiple Accrual Periods (Example) This example shows how accruals are calculated for a member across multiple accrual periods. Accruals help finance teams project future liabilities and reserve funds before final settlement. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Advanced Rebate and Accruals Management enabled.
## Rebate Program A company is running a rebate program for their partners in the APAC region. Acme is a member enrolled in the program. The finance team wants to track liabilities monthly using accrual periods. ## Rebate Type The program manager creates a volume-based rebate type and specifies these details. - Measure Type: Amount Per Unit - Measure Field: Total Transaction Quantity - Calculation Method: Retrospective - Calculation Basis: Accrual The engine calculates accruals using the benefit tier values defined in the Program Rebate Type Benefit records. In this example, a $5 per unit accrual rate is applied based on the benefit configuration. ## Transaction Data The following Transaction Journal records are ingested into Data Cloud for accrual processing. Each record falls within the start and end dates of the corresponding accrual period. | Accrual Period | Member | Transaction Activity Date | Total Transaction Quantity | | --- | --- | --- | --- | | Jan 2026 | Acme | Jan 12, 2026 | 2000 | | Feb 2026 | Acme | Feb 18, 2026 | 6500 | | March 2026 | Acme | Mar 09, 2026 | 8000 | | April 2026 | Acme | April 25, 2026 | 11000 | ## Member Accruals The admin runs the required Data Processing Engine definitions in sequence to calculate accruals. Each DPE must be executed in order. The accrual amounts are updated based on the aggregate data in Data Cloud at the time of execution. | Accrual Period | Total Transaction Quantity | Last Calculation Date | Accrual Rate | Accrued Amount | Accrual Sources Created | | --- | --- | --- | --- | --- | --- | | Jan 2026 | 2000 | Jan 31 | $5 per unit | $10,000 | 1 | | Feb 2026 | 6500 | Feb 28 | $5 per unit | $32,500 | 1 | | March 2026 | 8000 | March 31 | $5 per unit | $40,000 | 1 | | April 2026 | 11,000 | April 30 | $5 per unit | $55,000 | 1 | The Delta Calculation DPE identifies only NEW transactions each month to prevent double-counting when syncing data back to Salesforce Core. In the first month, the Finance team reserved $10,000 in accrual liability based on 2,000 units transacted. This ensures adequate funds are reserved as the member accumulates more transactions throughout the year. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note This example uses the Retrospective calculation method, which creates one Program Rebate Type Accrual Source record per accrual period. For example, the February accrual period generates a single source record with $32,500. If you configure the rebate type with the Stepped calculation method instead, the engine may create multiple accrual source records per accrual period when transactions cross benefit tier boundaries during Data Cloud processing. For instance, if the February transactions crossed from one tier threshold to another, the engine would create separate source records for each tier portion (e.g., Source 1 for units in Tier 1, Source 2 for units in Tier 2). The total accrued amount remains the same, but the Stepped method provides more granular tracking for audit purposes. # Calculate Accrual and Payout Amounts for a Single Payout Period (Example) This example shows how you can calculate payouts and accruals for a member. Accruals help you project an amount, whereas payouts help you track actual rewards. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
## Rebate Program A company is running a rebate program for their partners in the APAC region. Acme is a member enrolled in the program. The program has a quarterly payout structure in which partners receive payouts every four months. The finance team wants to plan better for all upcoming expenditures during the next quarter by saving funds for these rebate payouts. ## Rebate Type The program manager creates a volume-based rebate type and specifies these details. - Measure Type: **Amount Per Unit** - Measure Field: **Total Transaction Quantity** - Calculation Basis: **Payout and Accrual** - Accrual Rate: 5 When Rebate Management calculates the payout amount for a member based on the aggregate data, the accrual amount is calculated simultaneously. Rebate Management calculates payouts based on benefit tiers, but the accrual amount is calculated at a flat rate of $5 rebate per unit of Total Transaction Quantity. ## Benefit Tiers Here’s the benefit structure. | Benefit Tier | Minimum Value | Maximum Value | Applied Benefit Value | | --- | --- | --- | --- | | Tier 1 | 0 | 5000 | 0 | | Tier 2 | 5001 | 10,000 | 2 | | Tier 3 | 10,001 | Leave it blank | 5 | ## Member Payout and Accruals The admin has scheduled the Rebate Orchestration flow to run on the last day of each month. The scheduled flow run updates the accrual and payout amounts for a member based on the aggregate data at that point in time. Here’s how Rebate Management calculates the accrual and payout amounts every 30 days for Acme during the first quarter. The first quarter starts from Jan 01, 2021 and ends on April 30, 2021. | Transaction Activity Date | Total Transaction Quantity | Last Calculation Date | Applied Benefit Tier | Payout Amount | Accrued Amount | | --- | --- | --- | --- | --- | --- | | Jan 12 | 2000 | Jan 31 | Tier 1 | $0 | $10,000 | | Feb 18 | 6500 | Feb 28 | Tier 2 | $13,000 | $32,500 | | Mar 09 | 8000 | March 31 | Tier 2 | $16,000 | $40,000 | | April 25 | 11,000 | April 30 | Tier 3 | $55,000 | $55,000 | In the first half of the quarter, the member didn’t attain a certain quantity threshold. As a result, payout calculations can provide an inaccurate view. But with accrual calculations running simultaneously, you can continue to project attainment values. Eventually, when the member begins to attain benefits at higher tiers during the end of the quarter, you have adequate funds for payout settlement. #### See Also - [How Do the Fields Work Together in a Rebate Type?](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_create_program_rebate_type.htm&release=264.0.0&type=5 "Review the fields in a Program Rebate Type record and understand how they work together to create an incentive structure. You can create a rebate type from the Related tab of a Rebate Program record.") - [Accruals and Payouts](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_accruals_vs_payouts.htm&release=264.0.0&type=5 "Accrual is the potential financial commitment based on data projections, whereas payout is the amount that you actually pay based on the recorded transaction.") - [How Are Accruals Calculated?](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_how_are_accruals_calculated.htm&release=264.0.0&type=5 "Define the calculation basis of a rebate type and add an accrual rate to specify how to calculate accruals for members. Be better prepared with your finances for an ongoing period by accruing on a regular basis, even though the actual payout is settled at the end of a period. You can view the accrual and payout amounts of a member for each payout period.") # Calculate Accruals and Payouts with Data Processing Engine (DPE) Definitions (Example) This example shows how the six DPE definitions on Data Cloud process transaction data to generate calculation outputs. While this example illustrates accrual calculations for members enrolled in two rebate programs with different aggregation criteria, payouts follow the exact same processing sequence and rules. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
## Transaction Journal Records NovaTech, GlobalMed, Rayler, and SunriseRetail are distributors enrolled as members in two rebate programs active from April 1 through September 30, 2026. The programs use monthly accrual periods. Here are the Transaction Journal records for April 2026. | Member | Program | Product | Quantity | Activity Date | | --- | --- | --- | --- | --- | | NovaTech | AMER Program | Radius | 70 | Apr 1, 2026 | | NovaTech | AMER Program | Spectra | 100 | Apr 9, 2026 | | GlobalMed | AMER Program | Radius | 70 | Apr 1, 2026 | | GlobalMed | AMER Program | Spectra | 100 | Apr 9, 2026 | | Rayler | APAC Program | Radius | 70 | Apr 1, 2026 | | Rayler | APAC Program | Spectra | 100 | Apr 9, 2026 | | SunriseRetail | APAC Program | Radius | 70 | Apr 1, 2026 | | SunriseRetail | APAC Program | Spectra | 100 | Apr 9, 2026 | ## Rebate Program Rules All four distributors are enrolled as members in two active rebate programs. - AMER Program: Offers Volume-Based and Revenue-Based to NovaTech and GlobalMed. The program has 6 monthly accrual periods. - APAC Program: Offers Volume-Based and Revenue-Based to Rayler and SunriseRetail. The program has 6 monthly accrual periods. The program manager sets up the aggregation criteria for the rebate types. It sets how transactions are grouped by adding Program Rebate Type Aggregation Field records to each rebate type. Aggregating by any dimension beyond Member also requires a matching customization in the Pre-Processing DPE so the corresponding anchor is set. | Rebate Type | Program | Aggregation Criteria | How It's Configured | | --- | --- | --- | --- | | Volume-Based | AMER Program | All products combined per member | One Aggregation Field record: aggregate field = Member | | Revenue-Based | AMER Program | All products combined per member | One Aggregation Field record: aggregate field = Member | | Volume-Based | APAC Program | Per product per member | Two Aggregation Field records (Member and Product), and Pre-Processing DPE customized to set the Product anchor | | Revenue-Based | APAC Program | Per product per member | Two Aggregation Field records (Member and Product), and Pre-Processing DPE customized to set the Product anchor | The AMER Program has these benefit tiers for both rebate types: - Tier 1: Offers $2 per unit (Volume-Based) or a 2% accrual (Revenue-Based) when the combined product quantity for a member is between 0 and 100 units. - Tier 2: Offers $3 per unit (Volume-Based) or a 3% accrual (Revenue-Based) when the combined product quantity for a member exceeds 100 units. The APAC Program has these benefit tiers, applied separately for each product: - Tier 1: Offers $2 per unit (Volume-Based) or a 2% accrual (Revenue-Based) when the quantity for a product is between 0 and 100 units. - Tier 2: Offers $3 per unit (Volume-Based) or a 3% accrual (Revenue-Based) when the quantity for a product exceeds 100 units. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note For all rebate types, the program manager selects Advanced as the Execution Type. The admin configures the six DPE definitions on Data Cloud to run sequentially when accrual calculation is triggered. - **[Advanced Rebate and Accrual Pre-Processing - Rule Configuration](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_adv_dpe_rule_configuration.htm&release=264.0.0&type=5)** The Rule Configuration DPE reads the rebate type and benefit configuration and creates the reference records that the subsequent DPEs use. No accrual amounts are calculated at this stage. - **[Advanced Rebate and Accrual Pre-Processing - Data Preparation](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_adv_dpe_data_preparation.htm&release=264.0.0&type=5)** The Data Preparation DPE combines the Rule Meta records from Rule Configuration DPE with the active member list and the April 2026 accrual period. For each member–rebate type–period combination, it creates a Rule Ingest record that defines the applicable date range and a Tier Ingest record for each benefit tier within that range. - **[Accrual and Payout Engine - Delta Calculation](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_adv_dpe_delta_calculation.htm&release=264.0.0&type=5)** The Delta Calculation DPE compares the current run's Rule Ingest and Tier Ingest records against records stored from the previous run. Records unchanged since the last run are marked Unmodified and not reprocessed. This prevents double-counting when the engine runs multiple times in the same period. - **[Accrual and Payout Engine - Rule Processing](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_adv_dpe_rule_processing.htm&release=264.0.0&type=5)** The Rule Processing DPE reads the Tier Stage records from Delta Calculation DPE and calculates the accrual value for each transaction against each applicable tier. - **[Advanced Rebate and Accrual Post-Processing - Source Generation](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_adv_dpe_source_generation.htm&release=264.0.0&type=5)** The Source Generation DPE reads the calculated amounts from Rule Processing DPE and writes them into three Salesforce objects. Program Rebate Type Accrual Sources provide the most granular view — the accrued amount per benefit tier per member per period. For stepped rebate types, a separate record is created for each tier the member crossed. - **[Advanced Rebate and Accrual Post-Processing - Status Update](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_adv_dpe_status_update.htm&release=264.0.0&type=5)** The Status Update DPE sets the Status field on each Rebate Program Member Accrual from Calculation In Progress to Calculated after all amounts are confirmed. The records are now available for review and approval in the Rebate Program Member Accruals list view. # Calculate API Calls Consumed by Salesforce Output Connector When you use the Salesforce Output connector to push data from Salesforce Data Pipelines to another Salesforce org, you’re using part of that Salesforce org’s allotted Bulk API batch limit to receive the data. The batch size used by the Salesforce Output Connector is 100 MB. The number of batches submitted for a data manipulation operation (insert, update, or upsert) depends on the size of the dataset divided by the batch size. Each batch consumes one API call. However, an additional batch may be used depending on data batching procedures. For example, to push a 500 MB dataset to a Salesforce org, you would consume 5 API calls, because 500 / 100 = 5. See [Bulk API and Bulk API 2.0 Limits and Allocations](https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_bulkapi.htm) for information about your limits. # Calculate Fill Rates for Salesforce Fields Field fill rates help identify which fields are filled on object records and how actively and consistently they're filled. Use fill rates to prioritize high-use fields to classify and identify fields that aren't used.
Available in: Lightning Experience
Available in: Enterprise and Unlimited Editions with the Security Center add-on license.
Available for free in: Developer Edition
| User Permissions Needed |   | | --- | --- | | To view Security Center Tools tab: | View Security Center Pages | | To view and manage classification: | Manage Security Center | 1. On the Fields list, select the objects and fields whose fill rates you want to calculate. 2. Click **Calculate Fill Rates**. A message confirms that the calculation is running in the background. Refresh the page after a few minutes to see results in the Fill Rate column. An objects without any records will show "No Records" for the fill rate value for all fields on that object. # Calculate Flat Rebates Per Transaction (Example) This example shows how flat, per-transaction rebates are calculated independently for each transaction record as it is ingested into Data Cloud without period volume aggregation. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
## Rebate Program A medical device manufacturer offers a fixed promotional rebate on high-value equipment purchases for partner clinics. Metro Health is a member enrolled in the program. ## Rebate Type The program manager creates a flat rebate type and specifies these details: - **Calculation Type:** Per Transaction - **Measure Type:** Fixed Amount - **Calculation Basis:** Payout and Accrual ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note When Measure Type is set to Fixed Amount, no Measure Field is configured because the payout is a flat value rather than a rate per unit. The program manager specifies a **fixed benefit value of $500** for qualifying purchases of the product Diagnostic Scanner X1. ## Transaction Data The following Transaction Journal records are ingested into Data Cloud for processing: | Transaction ID | Member | Product | Quantity | Activity Date | | --- | --- | --- | --- | --- | | TXN-101 | Metro Health | Diagnostic Scanner X1 | 2 | May 5, 2026 | | TXN-102 | Metro Health | Diagnostic Scanner X1 | 1 | May 18, 2026 | ## Member Payouts Because the rebate type is configured as **Per Transaction** with a **Fixed Amount**, the engine evaluates each qualifying transaction independently and awards the fixed $500 benefit directly, regardless of the line-item quantity: | Transaction ID | Member | Product | Quantity | Applied Rate | Calculated Amount | Payout Sources Created | | --- | --- | --- | --- | --- | --- | --- | | TXN-101 | Metro Health | Diagnostic Scanner X1 | 2 | $500 (Fixed) | $500 | 1 | | TXN-102 | Metro Health | Diagnostic Scanner X1 | 1 | $500 (Fixed) | $500 | 1 | Each transaction generates its own Program Rebate Type Payout Source (and Accrual Source) record. Both line items aggregate to a final period payout amount of **$1,000** on the Rebate Program Member Payout record. # Calculate On Hold Quantity Calculate the quantity of inventory that must be kept in reserve based on the transaction journal records created for a partner. The partner uploads their point of sale document for your perusal. Here, they mention the units that have been sold to the end-customer. However, instead of directly adjusting the remaining quantity of unsold inventory you have on record for that partner, you can place the mentioned quantity on hold, that is, keep it on reserve till you can assess and approve the transaction record. ### Required Editions
Available in: Enterprise, Professional, and Unlimited Editions with the Channel Revenue Management add on
User Permissions Needed
To calculate onhold quantity ​​Channel Partner Inventory for Experience Cloud User
On hold quantity is the inventory quantity that's on hold for being credited, based on the point of sale documents. After approval, the remaining quantity is adjusted based on the onhold quantity. 1. From the App Launcher, find and select **Partner Unsold Inventory Ledgers**. 2. Click **New**. 3. For the Source Type field, select **Point of Sale**. 4. For the transaction type field, select **Debit**. 5. Select the inventory quantity you want to adjust against the PUI. 6. Select the status as **On Hold**. 7. In the Transaction reference field, add the corresponding transaction journal. 8. Save the information. In the PUI record, the On Hold Quantity and the Remaining Quantity are adjusted based on the onhold debit ledgers. If the on hold ledgers are approved, the remaining quantity remains unchanged, and the onhold quantity is released. If the onhold ledgers are rejected, the remaining quantity and the onhold quantity are released. # Calculate Payouts for Ship and Debit Programs (Example) This example shows how you can use the Ship & Debit Program Aggregate using Member template to calculate, process, and validate payouts for ship and debit programs. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_important.png) Important This example describes how you can use Rebate Management to process payouts for ship and debit programs. You can use a newer solution, Ship and Debit Process Management, to manage your end-to-end ship and debit processes. Use Ship and Debit Process Management to create robust, scalable ship and debit processes to protect your partners’ margins and react to market conditions. To learn more about Ship and Debit Process Management, see [Get Started with Ship and Debit Process Management](https://help.salesforce.com/s/articleView?id=xcloud.shipdebit_learn_parent.htm&release=264.0.0&type=5 "Use Ship and Debit Process Management to create effective ship and debit incentives to compensate partners who price products competitively for end-customers. Explore a trial org and then learn about what’s included, what setup we recommend, and how to get ready for your implementation."). To learn about how Rebate Management and Ship and Debit Process Management are different, review this [comparison](https://help.salesforce.com/s/articleView?id=xcloud.rebates_shipdebit_differences.htm&release=264.0.0&type=5 "Rebate Management helps manufacturers proactively incentivize partners to achieve predefined sales targets and drive specific purchasing behaviors. Ship and Debit Process Management helps manufacturers reactively compensate partners for price reductions they offer to win competitive deals and protect partners' margins."). ## Ship-and-Debit Rebate Model A ship-and-debit rebate program is a specific incentive model where the enrolled members, typically distributor accounts, receive special benefits when they sell products to a preferred ship-to customer. You can also create a rebate program that allows special rebate pricing when the member sells products to the specified ship-to customer. ## Rebate Program Rules Acme is a member of a ship-and-debit rebate program. The program offers a standard volume-based rebate and another special rebate based on certain criteria. As per an agreement, Acme receives a higher payout if it sells products to a company, Heavy Motor Operators. Acme must submit the claims for such transactions to validate the claims against the special pricing agreement. A transaction record is eligible for this rebate when the ship-to account and the program reference number on the submitted claim match the rebate program information. The program manager: - Adds a value in the Program Reference Number field of the rebate program record. - Selects Heavy Motor Operators as the value in the Ship-To Account field of the program member record for Acme. The program manager then defines the rebate types. - Tier 1: Offers no rebate when the transaction quantity is less than 1000 units. - Tier 2: Offers a $4 rebate per unit when the transaction quantity exceeds 1001 units. Per the special pricing rebate, Acme gets a $6 rebate per unit when the transaction quantity exceeds 1001 units. The ship-to account and the program reference number are validated. ## Transaction Journal Records Here are sample Transaction Journal records for January 2021. | Record | Transaction Quantity | Transaction Amount | Program Reference Number | Claim Amount | Ship-To Account | | --- | --- | --- | --- | --- | --- | | 1 | 800 | $9000 | N/A | $3500 | Heavy Motor Operators | | 2 | 1500 | $10,000 | A0123ZYH | $8000 | Heavy Motor Operators | | 3 | 600 | $10,000 | A0123ZYH | $4000 | Radical Operators | | 4 | 1200 | $22,000 | A0123ZYH | $10,000 | Heavy Motor Operators | | 5 | 1100 | $12,500 | V2123Z2L | $5000 | Heavy Motor Operators | ## Data Processing Engine The data processing engine validates the transaction journal records. The Program Reference Number and Ship-To Account values in the journals are compared with the rebate program rules. Possible outcomes are: - If the fields match for a record, data is aggregated for transaction quantity, transaction amount, and claim amount. - If the fields don’t match for a record, an error description is written back to the corresponding Transaction Journal record. The records aren’t considered for rebate payout calculations. Records 2 and 4 are used for further processing because the Program Reference Number and Ship-To Account details match with the program setup. The data is aggregated for these records in the Rebate Member Product Aggregate object. Records 1, 3, and 5 aren’t considered for aggregation and payout calculation. These error descriptions are written back to the Transaction Journals: - Record 1: Missing Program Reference Number - Record 3: Incorrect Ship-To Account - Record 5: Incorrect Program Reference Number ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note Admins can customize error descriptions in the data processing engine definition. Acme receives an error file for the failed transactions. The transactions can be corrected and resubmitted for processing. ## Aggregated Data Here are sample aggregated records for January 2021. | Rebate Type | Total Transaction Quantity | Total Transaction Amount | Total Claim Amount | | --- | --- | --- | --- | | Volume-Based | 3800 | $44,500 | Not applicable | | Special Rebate | 2700 | $32,000 | $18,000 | These values update whenever the scheduled flow runs. The flow triggers the data processing engine definition. The aggregate values on the payout calculation date for Jan FY21 are used to update the final payout amounts in the Member Payout object. ## Final Payout Acme receives these payouts for January: - For the volume-based rebate, a payout of $15,200 ($4 per unit for 3800 units). - For the special rebate, a payout of $16,200 ($6 per unit for 2700 units). # Calculate Payouts for Ship and Debit Rebate Claim and Claim Aggregate The Calculate Rebate Claim and Claim Aggregate for Ship and Debit flow validates a ship and debit claim based on business rules and calculates its claim amount based on the applicable special pricing term or benefit. It updates the claim and its related rebate member claim aggregate. ### Required Editions
Available in: Enterprise, Professional, and Unlimited Editions with the Channel Revenue Management add on
Here are the high-level steps in the flow template. 1. Get details of the created or updated rebate claim that triggered the flow. 2. Get details of the rebate program record associated with the rebate claim. 3. Get details of the rebate program member record associated with the rebate claim record. 4. Determine whether the rebate program and rebate program member are both active. 5. Determine whether the claim date of the rebate claim is within the start and end dates of the rebate program. 6. Determine whether the rebate partner special pricing term has an associated rebate partner special pricing term benefit. - If a special pricing term benefit exists, the flow uses the Reference Price Per Unit, Discount, and Discount By Percent values from the special pricing term benefit. - If a special pricing term benefit doesn’t exist, the expression set takes the Reference Price Per Unit, Discount, and Discount By Percent values from the special pricing term. 7. Determine whether the rebate partner special pricing term associated with the rebate claim has a sale price per unit. 8. Determine whether the rebate claim has an associated rebate member claim aggregate. - If an associated rebate member claim aggregate exists, the flow fetches the details of the rebate member claim aggregate. - If an associated rebate member claim aggregate doesn’t exist, the flow creates a rebate member claim aggregate and associates it with the rebate claim. 9. Determine whether the quantity of the record claim is less than or equal to the remaining product quantity. 10. Determine whether the rebate claim has an associated transaction journal. - If an associated transaction journal exists, the flow determines whether the product in the rebate claim and the product associated with the transaction journal are different. 11. Calculate and update the calculated amount for the rebate claim and updates processing status of the rebate claim, processing status message, and rebate member claim aggregate. The flow stops when the rebate claim is successfully processed or when the rebate claim doesn’t meet an eligibility criterion. In case the rebate claim is ineligible, you can view its details in the Processing Status Message field on the rebate claim record. Considerations for Using the Preconfigured Flow: - If your organization uses advanced currency management, you must edit the preconfigured flow to support multiple currencies. - To build a claims validation process using the preconfigured flow and the Validate and Calculate Rebate Claim and Claim Aggregate expression set template, you must edit the preconfigured flow. See [Build Custom Claim Validation and Calculation Processes with Flow and Expression Sets](https://help.salesforce.com/s/articleView?id=xcloud.shipdebit_bre_use.htm&release=264.0.0&type=5 "Customize the Validate and Calculate Rebate Claim and Claim Aggregate expression set template and invoke it in a flow to validate ship and debit claims."). - If you extend the Ship and Debit Process Management data model, like by adding custom picklist values to the Processing Status field on the Rebate Claim object, you must edit the preconfigured flow to work with your data model. - If you move to an inventory-based calculation model, you must deactivate this flow or modify its entry conditions to prevent it from running alongside the **Process Ship and Debit Claims with Partner Inventory** flow. Running both simultaneously leads to erroneous results. # Calculate Payouts for the Parent Account (Example) This example shows how you can use the Account Hierarchy Member Aggregate using Member template to aggregate values for all accounts within a hierarchy. If you have multiple accounts within a hierarchy added as members to a single rebate program, you can offer payouts only to the parent account. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
## Account Hierarchy Acme is a large account with a global presence whose franchises are grouped by territory. The admin defines the account hierarchy by adding the accounts to different levels of the hierarchy. | Account Name | Hierarchy Level | Parent Account Name | | --- | --- | --- | | Acme Global | 1 | Not applicable | | Acme APAC Group | 2 | Acme Global | | Acme AMER Group | 2 | Acme Global | | Acme Franchise 1 | 3 | Acme APAC Group | | Acme Franchise 2 | 3 | Acme AMER Group | | Acme Franchise 3 | 3 | Acme AMER Group | ## Transaction Journal Records Here are sample Transaction Journal records for January 2021. | Member | Transaction Quantity | Transaction Amount | | --- | --- | --- | | Acme Franchise 1 | 40 | $3500 | | Acme Franchise 2 | 50 | $2000 | | Acme Franchise 3 | 70 | $6000 | | Acme Franchise 1 | 20 | $4000 | | Acme Franchise 2 | 40 | $5500 | ## Rebate Program Rules The program manager creates an annual rebate program and generates 12 monthly payout periods. The Acme accounts are enrolled as members to the program. The program manager selects **Skip Payout Calculation** for the Rebate Program Member records except Acme Global. Transactions for the sub accounts contribute toward the payout calculation and the final payout is rewarded to Acme Global. The program has a revenue-based rebate type. The benefit tiers are: - Tier 1: Offers a 7% rebate on the total transaction amount when the total transaction amount is less than $20,000. - Tier 2: Offers a 10% rebate on the total transaction amount when the total transaction amount exceeds $20,001. ## Data Processing Engine An organization’s account hierarchy setup is used to determine the parent account and sub accounts. Transactions are recorded at the sub account level in the currency of the transaction. Payouts for accounts are calculated by rolling up transactions for sub accounts. The total values for each account are updated in the Rebate Member Product Aggregate object. For each member, one aggregate record is created for each rebate type. ## Aggregate Data These sample records are created in the Rebate Member Product Aggregate object for January. | Program Member | Rollup Program Member | Total Quantity | Total Transaction Amount | Rebate Type | Payout Period | | --- | --- | --- | --- | --- | --- | | Acme Global | Not applicable | 250 | $21,000 | Revenue-Based | Jan FY21 | | Acme APAC Group | Acme Global | 60 | $7,500 | Revenue-Based | Jan FY21 | | Acme AMER Group | Acme Global | 160 | $13,500 | Revenue-Based | Jan FY21 | | Acme Franchise 1 | Acme APAC Group | 60 | $7,500 | Revenue-Based | Jan FY21 | | Acme Franchise 2 | Acme AMER Group | 90 | $7,500 | Revenue-Based | Jan FY21 | | Acme Franchise 3 | Acme AMER Group | 70 | $6,000 | Revenue-Based | Jan FY21 | These values update whenever the scheduled flow runs. The flow triggers the data processing engine definition. The aggregate values on the payout calculation date for Jan FY21 are used to update the final payout amounts in the Member Payout object. Only the aggregate values for Acme Global are considered on the payout calculation date because payouts are skipped for the sub accounts. ## Final Payouts Acme Global receives a payout based on Tier 2 benefit because the total transaction amount exceeds $20,000. The rebate is $1,470 (7% of $21,00). # Calculate Payouts for Year-Over-Year Growth (Example) This example shows how payouts are calculated for a growth-based rebate type by comparing a member's current period revenue against baseline revenue from the same period in the prior year. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
## Rebate Program A company is running a growth incentive program for their industrial supply partners. Industrial Supply Co. is a member enrolled in the program. The finance team wants to evaluate and pay out growth-based incentives annually. ## Rebate Type The program manager creates a growth-based rebate type and specifies these details: - **Calculation Type:** Growth Based - **Growth Qualifier Dimension:** Revenue - **Growth Measure Dimension:** Revenue - **Growth Frequency:** Annual - **Calculation Method:** Retrospective - **Calculation Basis:** Payout ## Benefit Tiers The engine evaluates the growth rate achieved in the current period compared to the baseline period and applies the corresponding tier benefit: | Tier Name | Minimum Growth % | Maximum Growth % | Applied Benefit | | --- | --- | --- | --- | | Tier 1 | 10.00% | 20.00% | 3% of Revenue | | Tier 2 | 20.01% | Leave blank | 5% of Revenue | ## Transaction Data The following revenue totals are ingested into Data Cloud for baseline and current period processing: | Member | Baseline Period (April 2025) Revenue | Current Period (April 2026) Revenue | Calculated Growth Rate | | --- | --- | --- | --- | | Industrial Supply Co. | $100,000 | $125,000 | 25% | ## Member Payouts The admin runs the required Data Processing Engine definitions in sequence to calculate payouts. | Member | Payout Period | Current Revenue | Growth Rate | Qualified Tier | Applied Benefit Rate | Payout Amount | Payout Sources Created | | --- | --- | --- | --- | --- | --- | --- | --- | | Industrial Supply Co. | April 2026 | $125,000 | 25% | Tier 2 | 5% | $6,250 | 1 | Growth Rate = ($125,000 - $100,000) / $100,000 \* 100 = 25% Payout Amount = $125,000 \* 5% = $6,250 # Calculate Rebate Payouts with Data Processing Engine Use Data Processing Engine (DPE) definitions to transform data stored in various standard or custom objects in your org and to write back the results to a target object. Query, filter, and aggregate Transaction Journal records for rebate calculation. Choose the correct DPE definition for your use case. Clone and customize predefined definitions or create a definition, and then activate the definitions. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
- **[Data Processing Engine Templates with Rebate Management](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_dpe_templates.htm&release=264.0.0&type=5)** Rebate Management has Data Processing Engine (DPE) templates to help you aggregate transactions by different criteria and manage other rebate processes. Examples of processes are: converting order records into transaction journal records, validating ship-and-debit transactions, and calculating payouts at the parent-account level. - **[Manage Data Processing Engine Definitions for Rebate Management](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_clone_dpe_templates.htm&release=264.0.0&type=5)** Clone and use the data processing engine definitions for Rebate Management as-is, extend them to meet your business needs, or create definitions from scratch. To use a definition for a rebate type, activate the definition. - **[Customize Data Processing Engine Definitions to Support a Large Number of Rebate Eligibility Conditions](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_dpe_custom_node.htm&release=264.0.0&type=5)** Data Processing Engine (DPE) definition runs can fail if there are multiple eligibility criteria conditions to filter transactions that qualify for member payouts. Having a large number of filter conditions in a DPE definition increases the recipe size that’s not supported by the calculation engine framework. To reduce the chances of DPE failure, use the Compute Valid Transaction Journals Per Rebate Type custom node. - **[Group Rebate Payouts by Region and Aggregate by Member (Example)](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_group_payouts_by_region_and_aggregate_by_member.htm&release=264.0.0&type=5)** A company wants to group and aggregate transaction data of rebate program members by region of sale. Program managers and sales managers want to track and reward members based on region-specific sales. Also, the benefits rolled out to the members vary by region. Region-based numbers give insight into the regions where the company can promote their products and increase their footprint. This example shows how you can achieve the aggregation. # Calculate Remaining Inventory Quantity Compute the remaining quantity of products available with the partners using the partner unsold inventory ledger records. This quantity is based on the point of sale documents debited to the transaction record. ### Required Editions
Available in: Enterprise, Professional, and Unlimited Editions with the Channel Revenue Management add on
User Permissions Needed
To calculate remaining quantity  
From the time the partner uploads the point of sale document, till the transaction is approved, the inventory quantity mentioned in the point of sale document is placed on hold. This means that the quantity of inventory is kept on reserve till the transaction is approved. Upon approval, this onhold quantity is deducted from the remaining quantity. To see how to calculate the remaining quantity of unsold inventory, see [Create Adjustments Manually](https://help.salesforce.com/s/articleView?id=xcloud.chrm_cpit_create_adjustments_manually.htm&release=264.0.0&type=5 "Manually adjust inventory levels to ensure accuracy and currency of information and calculate the remaining quantity of unsold inventory."). ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_example.png) Example Remaining Quantity = PoS Original Quantity - Credit Quantity For example, if there is a point of sale with 1,000 units of a product. After the DPE is run, the PoS is linked to a PUI by creating a debit ledger entry containing a 1000 units. If the original quantity of the sales document was a 10,000 units. 9,000 units were debited. Final remaining quantity is 1,000 units. # Calculate Year Over Year Growth Aggregates by Member (Example) This example shows how you can use the Year over Year Growth Aggregate using Member template to compare aggregate values for the same payout periods for the current and previous years. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
## Transaction Journal Records Acme is a member of a rebate program. Here are the sample Transaction Journal records for Acme for January 2021 and January 2020.
Member Activity Date Transaction Quantity Transaction Amount

Acme

05 Jan 2021 150 $50,000
14 Jan 2020 60 $15,000
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note A member usually has multiple transaction records for a month, but here only one record is shown. ## Benefit Tiers The rebate program offers a growth-based rebate type. The program has 12 monthly payout periods. Members are rewarded if they record an increase in sale quantity compared to the same payout period for the previous year. The program manager defines these benefit tiers for the growth-based rebate type: - Tier 1: Offers a 5% rebate on the total transaction amount when the growth quantity is less than 50 units. - Tier 2: Offers an 8% rebate on the total transaction amount when the growth quantity exceeds 51 units. ## Data Processing Engine The Transaction Journal records for a payout period are filtered and aggregated for the current year and the previous year. The definition then adds the member’s previous transaction amount, current transaction amount, previous transaction quantity, and current transaction quantity. Total values are updated in the Rebate Member Product Aggregate object. One aggregate record is created per rebate type per member. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note If you've customized the Year over Year Growth Aggregate using Member Data Processing Engine definition or based it on an earlier template, update your aggregation logic to correctly handle leap year scenarios. Replace the function `ADDMONTHS({EndDate}, -12)` with the following expression: `IF((SUBSTR(TEXT({EndDate}),6,2) != SUBSTR(TEXT(ADDDAYS({EndDate},1)),6,2)),ADDDAYS(DATEVALUE(CONCAT(SUBSTR(TEXT(ADDMONTHS(ADDMONTHS({EndDate},-12),1)),0,8), "01"), "yyyy-MM-dd"),-1),ADDMONTHS({EndDate} ,-12))`. Replace ‘{EndDate}’ with the actual date field used in your DPE definition. This update ensures accurate year-over-year calculations regardless of leap years. ## Aggregate Data This sample record is created in the Rebate Member Product Aggregate object for January. | Record | Member | Prior Total Quantity | Total Quantity | Growth Quantity | Growth Quantity Percent | Prior Total Amount | Total Transaction Amount | Growth Amount | Growth Amount Percent | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | Record 1 | Acme | 60 | 150 | 90 | 60% | $15,000 | $50,000 | $35,000 | 70% | These values update whenever the scheduled flow runs. The flow triggers the data processing engine definition. The aggregate values on the payout calculation date for Jan FY21 are used to update the final payout amount in the Member Payout object. ## Final Payout Acme’s payout is based on the Tier 2 benefit because the growth quantity exceeds 50 units. So, for January 2021, Acme receives $4,000 (8% of $50,000). # Calculation Action (Managed Package) For the managed package runtime, call a Vlocity Calculation Procedure directly from an Omniscript using the Calculation Action. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). When the action executes, inputs from the form are sent to the Procedure—either directly or through an Omnistudio Data Mapper pretransform service—and the output is returned to the Omniscript—either directly or through a Data Mapper post-transform service. Before you Begin Create a Calculation Procedure. See [Calculation Procedures and Matrices (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_calculation_procedures_and_matrices.htm&release=264.0.0&type=5 "For the managed package runtime, a calculation procedure is a series of calculations performed on matrix lookups and user-defined variables and constants. A calculation matrix is a table that looks up information using multiple input dimensions and returns the corresponding output value."). 1. Add a **Calculation Action** to the Omniscript canvas, and add a **Name**. 2. In Remote Properties, in the **Remote Class** field, enter NS.PricingMatrixCalculationService, and replace NS with the namespace of your Vlocity package. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/lwc_designer_calculation_action.png) 3. In the **Remote Method** field, enter calculate. 4. In the **Configuration Name** field, enter the name of a Calculation Procedure. 5. (Optional) In the **Pre-Transform Data Mapper Interface** field, enter a Data Mapper that transforms the jSON node names being sent to the Calculation procedure. This step is not necessary if the existing JSON matches the Calculation Procedure's Variable Ids. 6. (Optional) In the **Post-Transform Data Mapper Interface** field, enter a Data Mapper that transforms the response from the Calculation Procedure to match elements in the Omniscript. This step is not necessary if the response JSON matches elements in the Omniscript. For more information on prefiling, see [Populate Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_populate_elements.htm&release=264.0.0&type=5 "For the managed package runtime, populate subsequent input elements with values from data JSON, formula operators, functions, concatenations, and static values. Prefill an element directly from an Omnistudio Data Mapper or Action response whenever possible. When a previous element assigns a value to a subsequent input element's Name, the subsequent input element is populated with the assigned value."). 7. (Optional) Check **Include Inputs** if the Omniscript elements sent to the calculation procedure are at the Step level of the Omniscript. 8. (Optional) Check **Match Input Variables** to debug and ensure the input data being sent to the Calculation Procedure matches the input variables in the procedure. If an input variable is missing an exception is thrown. 9. To test this Calculation: 1. Run the script in Preview mode or launch it from a Contact record. 2. Answer the questions as follows: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/publicsector_screening_regionofpeel.png) 3. Fill out the Eligibility step as follows: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/publicsector_eligibility_income.png) ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_example.png) Example The example Omniscript below uses a Calculation Action (Call Calculation Procedure) to calculate the discounted Base and Adjusted monthly rental charges that the applicant is eligible to receive. The name of the Calculation Procedure is entered in the configurationName property. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/lwc_designer_calculation_action.png) Eligibility data from the form, such as income, program type, and number of family members is passed into the HEPreTransform Data Mapper transform interface, where it is transformed into the Input JSON that the Calculation procedure is expecting. Click the link icon next to HEPreTransform to view the Data Mapper interface: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_datamappings.png) When the Calculation Action executes, the Procedure (Calculate Housing Benefit) runs and returns a JSON that fills the results into the script. Any variable in the Procedure that is included in the Calculation Output will be sent back to the Omniscript. Here are the Calculation Steps in the Calculate Housing Benefit Procedure: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_calculationsteps_housingbenefit.png) ...and the returned JSON (this can be found by clicking **Simulate** on the Procedure. See the Matrices for correct inputs): ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_calculationresults_simulateresults.png) If the elements on the Omniscript that are being sent to the Calculation Procedure exactly match the Variable Ids in the procedure and are at the Step level of the Omniscript (not in a block), you don't need to create a Pre-Transform interface. Otherwise, implement a Pre-Transform interface to format the JSON for the calculation procedure. If the elements that will be filled by the output of the script are located in a step or block called "output" with a nested block called "calculationResults" with Variable Id's that match the Omniscript elements, you don't need to create a Post-Transform interface. Otherwise, implement a Post-Transform interface to format the JSON coming from the Calculation Procedure to match the JSON structure of the Omniscript. - **[Calculation Action Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_calculation_action_properties.htm&release=264.0.0&type=5)** For the managed package runtime, this page contains information on Calculation Action Properties. # Calculation Action for Integration Procedures (Managed Package) For the managed package runtime, a Calculation Action invokes the specified calculation procedure and returns the results to the Integration Procedure. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Calculation Action Properties for Integration Procedures (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_calculation_action_properties_for_integration_procedures.htm&release=264.0.0&type=5)** For the managed package runtime, these properties are unique to or function in a unique manner in Calculation Actions. A Calculation Action invokes the specified calculation procedure and returns the results to the Integration Procedure. - **[Workflow for Calculation Action Example (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_calculation_action_example.htm&release=264.0.0&type=5)** For the managed package runtime, an Integration Procedure invokes a calculation procedure, which invokes a calculation matrix. The calculation procedure applies a 15% discount to a quoted amount for an age between 16 and 24 and a GPA of 3.0 or greater. # Calculation Action Properties (Managed Package) For the managed package runtime, this page contains information on Calculation Action Properties. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Property

Description

Remote Class

Specify the namespace.PricingMatrixCalculationService class, where namespace is vlocity_cmt, vlocity_ins, or vlocity_ps.

Remote Method

Specify the calculate method.

Remote Timeout (ms)

Optional timeout in milliseconds. The default is 30000, equivalent to five minutes.

Send Only Extra Payload

Enables the action to send Extra Payload's Key/Value pairs without including the Omniscript's data JSON.

Configuration Name

Name of the calculation procedure.

Include Inputs

Check if the Omniscript elements sent to the calculation procedure are at the Step level of the Omniscript (not in a block).

Pre-Transform Data Mapper Interface

An optional Omnistudio Data Mapper Transform that prepares input data for the calculation procedure. Beginning with Vlocity Insurance and Health Spring '20, this property appears in the Remote Properties section.

Post-Transform Data Mapper Interface

An optional Data Mapper Transform that reformats output data from the calculation procedure. Beginning with Vlocity Insurance and Health Spring '20, this property appears in the Remote Properties section.

Match Input Variables

Check if the Omniscript elements sent to the calculation procedure exactly match the Variable Ids in the procedure.

Extra Payload

Sends additional Key/Value pairs. Supports merge field syntax.

Remote Options

Key/value pairs that specify additional class invocation options.

# Calculation Action Properties for Integration Procedures (Managed Package) For the managed package runtime, these properties are unique to or function in a unique manner in Calculation Actions. A Calculation Action invokes the specified calculation procedure and returns the results to the Integration Procedure. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Property

Description

Remote Class

Set to namespace.PricingMatrixCalculationService, where namespace is vlocity_cmt, vlocity_ins, or vlocity_ps.

Remote Method

Set to calculate.

Configuration Name

Set to the calculation procedure name.

Remote Options: includeInputs

(Optional) Set to true to include the calculation procedure input in the calculation procedure output, which is useful for building pricing data.

# Calculation Engine and Data Output When a rebate type's Calculation Basis is set to Payout or Payout and Accrual, the advanced engine executes a coordinated sequence of six DPE definitions on Data Cloud. The engine automatically runs delta calculations to evaluate new or modified transactions since the last run, aggregating high-volume data without affecting core org performance. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
Executing the DPE sequence evaluates finalized transactions (up to the defined Transaction Grace Days) and generates records across three core Salesforce objects: - Program Rebate Type Payout Source: Detailed line-item payout records per tier, member, product, and anchor. - Program Rebate Type Payout: Summary payout total per rebate type. - Rebate Program Member Payout: Final payable amount per member for the perio ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note Because accrual and payout frequencies are independent, a weekly accrual period can cross a monthly payout period boundary. The engine automatically splits and attributes transactions to the correct period. For detailed information on configuring and customizing each DPE definition, see [Data Processing Engine for Rebate and Accrual Management Advanced](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_adv_dpe_example.htm&language=en_US&type=5). # Calculation Example for Life Insurance Quote (Managed Package) For the managed package runtime, to provide an accurate quote, an agent must know a person’s age, home ZIP code, and whether they smoke. First, a form prompts for the needed data, from an agent or web self-service. When the form is submitted, a calculation procedure defined for that form runs. The first procedure step is a Matrix Lookup, which looks across the matrix input fields—Smoker, ZIP, and Age—to find the corresponding output (Rate). ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![In this matrix, if the inputs are Zip Code 94105, Age 18, and Smoker true, the output Rate is $280. Other input combinations in other matrix rows have different output Rates.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/pricing_calc_steps.png) ![This Matrix Lookup step calls the matrix in the previous figure and lists its inputs and outputs.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/pricing_calc_matrix_lookup.png) After the first procedural step, the second procedural step runs. This step takes the Rate that is the output of the first procedural step, divides it by a constant, and outputs the Monthly Rate. Subsequent steps can perform additional math on the data submitted—Smoker, ZIP, Age—or use inputs from other data sources, such as policies currently held, or current health status, to perform additional calculations and return a variety of quotes. ![After the Matrix Lookup step, the next three Calculation Procedure steps perform calculations. The first calculation extracts the Rate from the Matrix Lookup step and passes its value to the Annual Premium variable. The second calculation divides the Annual Premium variable to get a Monthly Premium. The third calculation divides the Annual Premium variable to get a Quarterly Premium.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/pricing_calc_matrix_lookup_calc.png) # Calculation Matrices (Managed Package) For the managed package runtime, calculation matrices are one of the key elements of a Vlocity rating engine. Vlocity uses calculation matrices to look up inputs, match them to outputs, and provide the outputs to calculation procedures. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Another component calls the matrix with input data. The matrix matches the input data to one of its rows. The output data in the matching row is returned to the calling component.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/calcmatrix_contextdiagram.png) Vlocity offers three styles of calculation matrices you can use based on your business needs: - [Standard Calculation Matrices (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_standard_calculation_matrices.htm&release=264.0.0&type=5 "For the managed package runtime, all calculation matrices have the characteristics that standard calculation matrices have. Other types have characteristics that standard calculation matrices lack. All calculation matrices have input columns, output columns, and versions.") — Has characteristics common to all calculation matrices, including input columns, output columns, and versions. - [Grouped Calculation Matrices (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_grouped_calculation_matrices.htm&release=264.0.0&type=5 "For the managed package runtime, you can create groups of calculation matrices, and subgroups within each group.") — Allows grouping of matrix rows by a key such as geographic region or age. - [Row-Versioned Calculation Matrices (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_row_versioned_calculation_matrices.htm&release=264.0.0&type=5 "For the managed package runtime, if you're wrangling large calculation matrices that can't be sectioned cleanly into groups and subgroups, you can create calculation matrices that are versioned by row.") — Allows versions to apply to specific rows rather than the entire matrix. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important You can't create calculation matrices that are both grouped and row-versioned. It's more important than ever that you plan out your calculation matrix structure before you start creating your matrices in Vlocity. Once you choose the type of a calculation matrix, you can't change it. ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_warning.png) Warning You can let people modify calculation matrices based on user profiles. In your Vlocity sandbox and development orgs, it may be useful to let several user profile groups modify calculation matrices. But modifying calculation matrices in a production environment can have severe consequences on the rates you get for insurance products. We recommend that you limit the number of people who can modify production calculation matrices to only essential administrators. - **[Standard Calculation Matrices (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_standard_calculation_matrices.htm&release=264.0.0&type=5)** For the managed package runtime, all calculation matrices have the characteristics that standard calculation matrices have. Other types have characteristics that standard calculation matrices lack. All calculation matrices have input columns, output columns, and versions. - **[Grouped Calculation Matrices (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_grouped_calculation_matrices.htm&release=264.0.0&type=5)** For the managed package runtime, you can create groups of calculation matrices, and subgroups within each group. - **[Row-Versioned Calculation Matrices (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_row_versioned_calculation_matrices.htm&release=264.0.0&type=5)** For the managed package runtime, if you're wrangling large calculation matrices that can't be sectioned cleanly into groups and subgroups, you can create calculation matrices that are versioned by row. - **[Ways to Create a Standard Calculation Matrix (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_ways_to_create_a_standard_calculation_matrix.htm&release=264.0.0&type=5)** For the managed package runtime, a standard calculation matrix isn't part of a group, and doesn't have row versioning. You can create a standard calculation matrix in three different ways. - **[Workflow for Creating a Grouped Calculation Matrix (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_creating_a_grouped_calculation_matrix.htm&release=264.0.0&type=5)** For the managed package runtime, you can create a calculation matrix that's part of a group of matrices. You create grouped calculation matrices so that a calculation procedure (or another calling process) can search all the matrices using only one SOQL query. This speeds up Vlocity processing and frees up SOQL queries for other purposes. - **[Workflow for Creating a Row Versioned Calculation Matrix (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_creating_a_row_versioned_calculation_matrix.htm&release=264.0.0&type=5)** For the managed package runtime, creating the first version of a row-versioned calculation matrix follows most of the same steps as creating a standard calculation matrix. Then, as you need to make changes to these matrices, you can upload new individual rows. This creates new versions of the replaced rows with new start dates and end dates. - **[Wildcards in Calculation Matrices (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_wildcards_in_calculation_matrices.htm&release=264.0.0&type=5)** For the managed package runtime, starting in Winter '20, you can make it possible for calculation procedures and other Vlocity features that call calculation matrices to use a wildcard in place of a value for one column. - **[Search in a Calculation Matrix (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_search_in_a_calculation_matrix.htm&release=264.0.0&type=5)** For the managed package runtime, you can search for specific values in a calculation matrix that has many rows. - **[Download Calculation Matrix Data to a CSV File (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_download_calculation_matrix_data_to_a_csv_file.htm&release=264.0.0&type=5)** For the managed package runtime, you can download all or part of the data in a calculation matrix. - **[Edit and Delete Matrix Data (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_edit_and_delete_matrix_data.htm&release=264.0.0&type=5)** For the managed package runtime, you can edit and delete the data in a calculation matrix if you haven't enabled it yet. - **[Edit Matrix Headers (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_edit_matrix_headers.htm&release=264.0.0&type=5)** For the managed package runtime, you can change the names and data types of the column headers in a calculation matrix. - **[Disable a Calculation Matrix (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_disable_a_calculation_matrix.htm&release=264.0.0&type=5)** For the managed package runtime, to disable a calculation matrix, edit its **End Date/Time**. - **[Ranges in Calculation Matrices (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_ranges_in_calculation_matrices.htm&release=264.0.0&type=5)** For the managed package runtime, a range takes a number or text value and assigns it to groups that you've defined. You can use data numeric ranges in calculation matrices and by collating by alphabetic ranges For example, if age is a component of your pricing, you can use a numeric range to map the applicant's age to the correct age group. # Calculation Procedures and Matrices (Managed Package) For the managed package runtime, a calculation procedure is a series of calculations performed on matrix lookups and user-defined variables and constants. A calculation matrix is a table that looks up information using multiple input dimensions and returns the corresponding output value. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). **Calculation Procedures and Matrices** ![An Expression Set calls a Decision Matrix to get a quote.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/diagram_calculationsmatrices.png) Calculation procedures and matrices can automate the creation of complex quotes. Together these can guide a customer or agent through a series of questions, pull data from various sources, and present one or more customized quotes or eligibility determinations. These can be quotes or eligibility determinations for: - An individual health insurance plan via a website to a customer - A term life quote via an agent - A volume discount on an order - A permit or application fee - A person applying for benefits or services Calculation procedures and matrices accept input from a Salesforce form, REST API, Omniscript, or Integration Procedure (in the data JSON). Inputs can come from more than one source. The output can be a proposal or PDF, or data for populating an Omniscript, Integration Procedure, form, list, JSON structure, or REST API request. - **[Calculation Example for Life Insurance Quote (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_calculation_example_for_life_insurance_quote.htm&release=264.0.0&type=5)** For the managed package runtime, to provide an accurate quote, an agent must know a person’s age, home ZIP code, and whether they smoke. First, a form prompts for the needed data, from an agent or web self-service. When the form is submitted, a calculation procedure defined for that form runs. The first procedure step is a Matrix Lookup, which looks across the matrix input fields—Smoker, ZIP, and Age—to find the corresponding output (Rate). - **[Calculation Matrices (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_calculation_matrices.htm&release=264.0.0&type=5)** For the managed package runtime, calculation matrices are one of the key elements of a Vlocity rating engine. Vlocity uses calculation matrices to look up inputs, match them to outputs, and provide the outputs to calculation procedures. - **[Calculation Procedures Overview (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_calculation_procedures_overview.htm&release=264.0.0&type=5)** For the managed package runtime, a Calculation Procedure is a series of calculations performed using matrix lookups and user-defined variables and constants. A calculation procedure can call Apex classes for pre- and post-calculation custom logic. Calculation procedures are part of pricing rules. - **[Declarative Calculation Procedures (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_declarative_calculation_procedures.htm&release=264.0.0&type=5)** For the managed package runtime, declarative calculation procedures are a key component of the ratings engine. Along with calculation matrices, calculation procedures are the key components of any or ratings engine. Calculation procedures take an input JSON and run through a series of matrix lookups (calling values from calculation matrices) and calculations to calculate ratings for policy products. # Calculation Procedures Overview (Managed Package) For the managed package runtime, a Calculation Procedure is a series of calculations performed using matrix lookups and user-defined variables and constants. A calculation procedure can call Apex classes for pre- and post-calculation custom logic. Calculation procedures are part of pricing rules. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). There are two types of calculation procedures: - [Class-based](https://help.salesforce.com/s/articleView?id=xcloud.os_use_apex_to_define_pricing_logic.htm&release=264.0.0&type=5 "For the managed package runtime, to use Apex to define pricing logic, create a class-based Calculation Procedure. The Calculation Procedure name and action class name must be the same as the name of the Apex class. (To define pricing logic without using an Apex class, create a declarative Calculation Procedure.)"): Pricing logic is written in an Apex class. - [Declarative](https://help.salesforce.com/s/articleView?id=xcloud.os_declarative_calculation_procedures.htm&release=264.0.0&type=5 "For the managed package runtime, declarative calculation procedures are a key component of the ratings engine. Along with calculation matrices, calculation procedures are the key components of any or ratings engine. Calculation procedures take an input JSON and run through a series of matrix lookups (calling values from calculation matrices) and calculations to calculate ratings for policy products."): Pricing logic is implemented using matrix lookups, variables, constants, and basic math operations. Declarative calculation procedures are associated with Omnistudio Data Mapper mappings. Declarative calculation procedures use Data Mappers to read and save data from Salesforce objects. You can add variables from the Data Mapper extract, such as Original Price (Currency) and Quantity (Number). For example, you can add a currency variable named UnitPrice as a calculation output that can be used in a Data Mapper load to update a field in a Salesforce object. A calculation procedure can use two types of steps. - Matrix: If you have enabled Calculation Matrices, a calculation procedure can include a Calculation Matrix in the calculation steps. For more information about Calculation Matrices, see [Calculation Matrices](https://help.salesforce.com/s/articleView?id=xcloud.os_calculation_matrices.htm&release=264.0.0&type=5 "For the managed package runtime, calculation matrices are one of the key elements of a Vlocity rating engine. Vlocity uses calculation matrices to look up inputs, match them to outputs, and provide the outputs to calculation procedures."). - Formula: For example, you can specify the UnitPrice variable as output. If you are using Data Mapper mappings, the calculation procedure output variable name must match the Data Mapper Load input variable name Each step in a Calculation Procedure can have a condition that must be met in order for the step to be executed. See [Conditional Steps For Calculation Procedures](https://help.salesforce.com/s/articleView?id=xcloud.os_conditional_steps_for_calculation_procedures.htm&release=264.0.0&type=5 "For the managed package runtime, for each step in the Calculation Procedure, you can define a condition that must be met in order for the step to be executed. The step is only executed when the condition is met."). In the Preprocessor Class Name section of the calculation procedure, you must specify the class that implements a nameSpace.VlocityOpenInterface calculation method. To include the output from a calculation step in the final output, select **Include in output**. - **[Use Cases for Calculation Procedures (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_use_cases_for_calculation_procedures.htm&release=264.0.0&type=5)** For the managed package runtime, here are ways to set up the possible use cases for calculation procedures that use or don't use attribute-based pricing or volume-based pricing. - **[Use Apex to Define Pricing Logic (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_use_apex_to_define_pricing_logic.htm&release=264.0.0&type=5)** For the managed package runtime, to use Apex to define pricing logic, create a class-based Calculation Procedure. The Calculation Procedure name and action class name must be the same as the name of the Apex class. (To define pricing logic without using an Apex class, create a declarative Calculation Procedure.) - **[Clone a Calculation Procedure (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_clone_a_calculation_procedure.htm&release=264.0.0&type=5)** For the managed package runtime, the Clone action button isn't present for calculation procedures by default, but you can add it. When you clone a calculation procedure, you're cloning all of its versions, steps, variables, and constants. - **[Variables and Constants in Calculation Procedures (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_variables_and_constants_in_calculation_procedures.htm&release=264.0.0&type=5)** For the managed package runtime, you must create variables, constants, and matrices before you can use them in a Calculation Procedure. After you create them, they will be available to use in Calculation Procedures. - **[Conditional Steps For Calculation Procedures (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_conditional_steps_for_calculation_procedures.htm&release=264.0.0&type=5)** For the managed package runtime, for each step in the Calculation Procedure, you can define a condition that must be met in order for the step to be executed. The step is only executed when the condition is met. - **[Functions for Calculation Procedures (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_functions_for_calculation_procedures.htm&release=264.0.0&type=5)** For the managed package runtime, the following functions are supported in calculation procedures. # Calendar Scheduler for Partners Use external calendars to show partner availability when customers schedule appointments through an Experience Cloud site. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions with Partner Ecosystem Management - Members or Partner Ecosystem Management - Login
Calendar sync connects a partner user's Google or Microsoft calendar to Salesforce through Einstein Activity Capture (EAC). Salesforce Scheduler uses the connected calendar to calculate appointment availability. When customers book appointments on an Experience Cloud site, the available time slots account for the partner user's external calendar commitments. Calendar sync reduces scheduling conflicts without showing customers the details of external events. The calendar sync process involves three participants. A Salesforce admin configures EAC and Salesforce Scheduler. A partner user connects an external account from the Experience Cloud site. A customer then chooses an available appointment time. Each partner user connects their own account and grants EAC the access required by the email provider. - **[Set Up Calendar Scheduler for Partners](https://help.salesforce.com/s/articleView?id=xcloud.pc_set_up_calendar_sync_partners.htm&release=264.0.0&type=5)** Connect partner users' external calendars so that Salesforce Scheduler returns appointment times when partners are available. - **[Add Connected Accounts to Your Partner Experience Cloud Site](https://help.salesforce.com/s/articleView?id=xcloud.pc_add_connected_accounts_partner_site.htm&release=264.0.0&type=5)** Add the Connected Accounts component so that partner users can authorize Google or Microsoft accounts for Einstein Activity Capture calendar sync. - **[Configure Einstein Activity Capture for Partner Calendar Sync](https://help.salesforce.com/s/articleView?id=xcloud.pc_configure_eac_partner_calendar_sync.htm&release=264.0.0&type=5)** Create a dedicated configuration so that external partner users can connect their calendars for appointment scheduling. - **[Configure Salesforce Scheduler for External Calendar Sync](https://help.salesforce.com/s/articleView?id=xcloud.pc_configure_scheduler_external_calendar_sync.htm&release=264.0.0&type=5)** Include your partner users' connected external calendars when Salesforce Scheduler calculates available appointment times. - **[Connect Your External Calendar from Your Partner Site](https://help.salesforce.com/s/articleView?id=xcloud.pc_connect_external_calendar_partner_site.htm&release=264.0.0&type=5)** Connect your Google or Microsoft account so that customers see appointment times that reflect your current availability. # Call a Data Source from an Action on a Flexcard (Managed Package) For the managed package runtime, trigger a data source from an action to get data from a server or post data to a server. When data is fetched from the server, the incoming data is appended to the data JSON in the card's record object or to a data node you name. If you choose to send the request without getting a response from the server, the data JSON does not update. To confirm your request is sent successfully, in Preview, view the requested data in the Action Debugger's **response**. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Winter '22.

Possible Use Cases: - Use a Data action that populates a child Flexcard with the returned data. For example, create a Data action that gets a list of Account Cases and whose response data node is caseList. Populate a child Flexcard with the response data by entering {record.caseList} in its **Data Node** property field. See [Embed Flexcard Inside Another Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_embed_flexcard_inside_another_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, embed a reusable Flexcard as a child inside another Flexcard. The child Flexcard can have its own data source. Or, the parent can override the child's data source with its own data source. The parent can also pass specific data to the child, such as its recordId to use as the child's contextId."). - Use a Data action to conditionally display messages from an API response. For example, display the error message returned from a response in a Text element, such as {caseList.error}. Then add a condition on the element so that the element displays only when an error message exists. See [Add Conditions to a Flexcard Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element.htm&release=264.0.0&type=5 "For the managed package runtime, display or hide data based on the value of a data field. For example, display an alert icon or supplemental text for escalated Cases. Apply conditions to any element listed in the Build panel of the Flexcard Designer."). 1. In the Flexcard Designer, drag an Action element from the Build panel to a state on the canvas. 2. Select **Data** as the **Action Type**. 3. From the **Data Source Type** dropdown, select a data source and configure its properties. See [Flexcards Data Source Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_reference.htm&release=264.0.0&type=5 "For the managed package runtime, select from multiple data source types to retrieve data from a Salesforce object or an external database. Select a data source from the Setup panel in the Flexcard Designer, or when creating a Flexcard."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For a Data action, the datasource's Input Map values can't be objects or arrays. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning Winter ‘23, SOSL Search and SOQL Query data sources are supported. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For Omnistudio Data Mapper, select an **Interface Type** to filter the list of Data Mappers available in the **Interface Name** list. For a description of each **Interface Type**, see [Omnistudio Data Mappers](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptors.htm&release=264.0.0&type=5 "For the managed package runtime, a Data Mapper is a mapping tool that enables you to read, transform, and write Salesforce data. There are four types of Data Mapper: Turbo Extract, Extract, Transform, and Load."). 4. If you don't need a response from the server, such as in a simple notification, enable **Ignore Response**. When enabled, data is not appended to the data JSON, but you can view the response in Preview from the Acton Debugger's **response** section. 5. In **Response Node**, to specify where in the data JSON you want to save the returned data, enter one of the following: - If the request returns one object, enter record. The data is put into the root of the card object. ``` //One record returned { "Type": "Mechanical", "Subject": "The watchamacallit is too high", "Status": "Escalated", "Priority": "High", "CaseId": "5003g000007WQHRAA4", } ``` ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_data_action_data_json_response_node_record1.png) ``` //One array object returned { "contacts": [ { "AccountId": "0013g00000AeI9fAAF", "Name": "Rose Gonzalez", "Birthdate": "1968-09-26", "CreatedDate": "2020-10-15T21:28:48.000+0000", "Phone": "(512) 757-6000", "Id": "0033g00000EXVKbAAP" }, { "AccountId": "0013g00000AeI9fAAF", "Name": "Sean Forbes", "Birthdate": "1947-06-25", "CreatedDate": "2020-10-15T21:28:48.000+0000", "Phone": "(512) 757-6000", "Id": "0033g00000EXVKcAAP", } ] } ``` ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_data_action_data_json_response_node_record2.png) - If the returned data is more than one record or you want to add the data to a new data node, enter an alphanumeric name with no spaces or special characters, such as caseList or caseList1. ``` //multiple records returned [ { "Type": "Mechanical", "Subject": "The watchamacallit is too high", "Status": "Escalated", "Priority": "High", "CaseId": "5003g000007WQHRAA4" }, { "Type": "Structural", "Subject": "The doodat wasn't properly set up", "Status": "New", "Priority": "Medium", "CaseId": "5003g000007WQHQAA4" } ] ``` ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_data_action_data_json_response_node_name.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning Spring '22, to use the returned response in a sequential action, you must first save it in **Response Node**. See [Flexcards Sequential Actions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_sequential_actions.htm&release=264.0.0&type=5 "For the managed package runtime, enable an element or an event listener to execute sequential actions on a Flexcard. When there are multiple actions, the first action fires, completes, and then triggers the next action. You can use the response from the previous action to perform subsequent actions."). 6. To access the data, use the following syntax: `{dataResponseNodeName.dataNode}`. For example, if the **Response Node** name is contactList, and you want to return an error message from an error data node, use {contactList.error}. 7. To confirm your request response, click the Preview tab, click the Action Debugger tab, and perform the following tasks: 1. Click a Data action on the canvas. 2. Click the name of the action in the Action Debugger to reveal the following sections: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_data_action_action_debugger.png) - **response**: Displays the requested data from the Data action. - **records**: Displays records fetched from the Flexcard's data source and all executed data actions that append records to the data JSON. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If you enable **Ignore Response**, **records** is not visible. - **node**: Displays the name of the node that holds the Data action records and defined in **Response Node**. - **ignoreResponse**: Visible and set to true when you enable **Ignore Response**. 8. To confirm that your data JSON updates, click Preview and perform the following tasks: 1. Select a Data action on the canvas. 2. In the Data JSON panel, click the **cards** node to reveal record data and select an **Object**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_data_action_data_json_cards_node.png) 3. Look for the name of the node you entered in the **Response Node** field in Design view. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If you don't see the response node, go back to Design view to confirm that **Ignore Response** is not checked. # Call an Apex Class or an Invocable Action from an Integration Procedure To call an Apex class and method, or an invocable action, use a Remote Action and pass in invocation options and data. If the data that a remote action returns isn't in `Map` format, sometimes an Integration Procedure or Omnistudio Data Mapper can’t process it. Because the returned data isn’t an sObject, you can't use it to update Product2 objects without reserializing. You can convert the data in one of these ways: - In the remote action, under **Remote Options**, add a **Key** named `reserialize` with a Value of `true`. - In a subsequent Set Values step, use the RESERIALIZE function on the remote action's output. For information about related functions such as DESERIALIZE and SERIALIZE, see the [Supported Data Mapper and Integration Procedure Functions](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_data_mapper_and_integration_procedure_functions.htm&release=264.0.0&type=5 "Use functions to evaluate and manipulate data in formulas for Omnistudio Data Mappers and Integration Procedures. For example, functions can perform conditional operations that take different actions depending on the values you pass them. They can invoke queries and other functions, and they can operate on numbers, dates and times, strings, lists and arrays, and JSON objects."). For information about reserializing map objects as inputs, see [Create a Remote Action Apex Class Example](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_remote_action_apex_class_example_54383.htm&release=264.0.0&type=5 "This example Integration Procedure uses a Remote Action to call an Apex class and demonstrate how to reserialize data."). An error message that begins with `Invalid conversion from runtime type String` often indicates a need to reserialize data. Make sure that you include the ID in the SOQL query. That field is required because the Apex class retains the queries and serializes data according to what’s executed. If you receive an error that says the Apex class can’t be loaded, add the Apex class namespace in the Remote Class field in the remote action like this: {yournamespace}.ApexClassName. For example, omnistudio.PrefillOrders where omnistudio is the namespace and PrefillOrders is the Apex class. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Users who use Remote Actions in Integration Procedures must have access to the object and record they're invoking through the action. If they receive an access error, they must be granted object and record access at the profile, permission set, or permission set group level. To ensure that a Remote Action error causes a rollback if **Rollback on Error** is checked in the Procedure Configuration, set the `errorCode` in the class output map. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Community Plus users must log in before they can use an Integration Procedure Remote Action that sends emails. - **[Create a Remote Action Example for an Invocable Action](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_remote_action_for_an_invocable_action_54126.htm&release=264.0.0&type=5)** This example Integration Procedure uses a Remote Action to call the emailSimple Invocable Action, which is present in every Salesforce org. Inputs to the Invocable Action are specified in the Integration Procedure as Additional Input. - **[Create a Remote Action Example for an Invocable Action with an Input Key](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_remote_action_for_an_invocable_action_with_an_input_key_54225.htm&release=264.0.0&type=5)** An Integration Procedure uses a Remote Action to call the emailSimple Invocable Action, which is present in every Salesforce org. Inputs to the Invocable Action are specified in the Integration Procedure in a Remote Option named InvocableInputKey. - **[Create a Remote Action Apex Class Example](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_remote_action_apex_class_example_54383.htm&release=264.0.0&type=5)** This example Integration Procedure uses a Remote Action to call an Apex class and demonstrate how to reserialize data. # Callable Implementations Vlocity Apex classes and the Remote Actions of Omniscripts and Integration Procedures support the Callable interface. Although the VlocityOpenInterface and VlocityOpenInterface2 interfaces enable flexible implementations with a uniform signature, they reside in the Vlocity managed package and aren't truly Salesforce standards. However, classes that implement VlocityOpenInterface or VlocityOpenInterface2 also implement the [Callable Interface](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_interface_System_Callable.htm), which is a Salesforce standard. In addition, Remote Actions of Omniscripts and Integration Procedures can invoke any class that implements Callable, regardless of whether it implements VlocityOpenInterface or VlocityOpenInterface2. You specify the Remote Class, Remote Method, and Additional Input properties in the same way for classes that implement any of these interfaces. To change custom classes that implement VlocityOpenInterface or VlocityOpenInterface2 to Callable implementations, convert the signature with a few lines of code: ``` global with sharing class ClassName implements Callable { public Object call(String action, Map args) { Map input = (Map)args.get('input'); Map output = (Map)args.get('output'); Map options = (Map)args.get('options'); return invokeMethod(action, input, output, options); } private Object invokeMethod(String methodName, Map inputMap, Map outMap, Map options) { ... } ... } ``` For a full example, see [Make a Long-Running Remote Call Using Omnistudio.OmniContinuation](https://help.salesforce.com/s/articleView?id=xcloud.os_make_a_long_running_remote_call_using_omnistudio_omnicontinuation_56479.htm&release=264.0.0&type=5 "To support long-running remote calls, Vlocity supports the use of the Salesforce Continuation object."). # Calling a Decision Matrix from an Omniscript Call a decision matrix with specified inputs and return the matching results to an Omniscript. If you have a decision matrix in the Business Rules Engine, you can call it from an Omniscript with the Decision Matrix element. See [Call a Decision Matrix from an OmniScript](https://help.salesforce.com/s/articleView?id=ind.invoke_decision_matrix_omniscripts.htm&type=5&language=en_US) .

Property

Description

Matrix Input Parameters: Data Source Name of a JSON node in the Omniscript that contains a value to pass to the Decision Matrix.
Matrix Input Parameters: Filter Value Name of the Decision Matrix input parameter that accepts the data source value.
Default Matrix Result Define key/value pairs that specify the default result if the Decision Matrix doesn't return a result.
Execution Date Time Control the timing of Decision Matrix execution. If this property is blank, the Decision Matrix is executed immediately. Merge field syntax is supported.
Remote Properties: Matrix Name Name of the Decision Matrix to call.
Remote Properties: Post-Transform Data Mapper Interface Specify an optional Data Mapper transform to reformat output data from the Decision Matrix.
Remote Options Define key/value pairs that specify additional options for the Decision Matrix.
Send/Response Transformations: Response JSON Path Name of the response node in which you want to capture the results of the Decision Matrix. For example, matrixResult.
Send/Response Transformations: Response JSON Node Name of the Omniscript step where you added the input fields for the Decision Matrix and the Decision Matrix action.
#### See Also - [Calling Expression Sets from an Omniscript](https://help.salesforce.com/s/articleView?id=xcloud.os_expression_set_action_properties_for_omniscripts_8353.htm&release=264.0.0&type=5 "From an Omniscript, call an expression set created in the Business Rules Engine, and return its results to the Omniscript. Expression sets evaluate conditions, perform mathematical operations, look up decision tables and matrices, and perform multiple transformations simultaneously.") # Calling Apex from Omniscripts with the Remote Action Call Apex classes from Omniscript using the Remote element, and use the Omniscript's JSON as input. Before you begin, create an Apex class in Salesforce to call from Omniscript. Include the ID in the SOQL query. That field is required because the Apex class retains the queries and serializes data according to what’s actually executed. 1. Add a **Remote** element before a Step, in a Step, or after a Step to load data or send data in the Omniscript. The Omniscript's data JSON is sent as the input. 2. In the **Remote Class** field, enter the name of the Apex class that the action calls. 3. In the **Remote Method** field, enter a method of the class that the action calls. For example—`validateAddress`. 4. If required, enable the subordinate Integration Procedure that calls long-running actions to use Apex continuations. 5. In the **Pre-** and **Post-Transform Omnistudio Data Mapper Interface**—optionally select a Data Mapper Transform interface to run before or after the Remote Action. See [Omnistudio Data Mappers](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_dataraptors_45587.htm&release=264.0.0&type=5 "Use Omnistudio Data Mappers to declaratively retrieve, write, and modify data between Salesforce and other Omnistudio components. While you can process data with custom code (such as Apex classes), Omnistudio Data Mappers are faster to build, easier to update, and simpler to manage. They’re also reusable, helping you to move solutions quickly from development to production."). 6. Change the amount of time before the action times out using the Remote Timeout property. In the element, click **Edit Properties as JSON**, and in the `remoteTimeout` property, set a time in milliseconds. The default timeout is `30,000`, or 30 seconds. The maximum is `120,000`, or 120 seconds. 7. Configure additional properties in the Remote Action. 8. Select the response behavior of the action by selecting an **Invoke Mode**. - Default — Blocks the UI with a loading spinner. - Non-Blocking — Runs asynchronously, and the response is applied to the UI. Pre and Post Omnistudio Data Mapper transforms and large attachments aren’t supported. When Invoke Mode is set to non-blocking, elements using default values won’t receive the response because the element loads before the response returns. To map the response to an element, you must set Response JSON Node to VlocityNoRootNode and Response JSON Path to the name of the element. - Fire and Forget — Runs asynchronously with no callback to the UI. Pre and Post Data Mapper transforms and large attachments aren’t supported. A response will still appear in the debug console but won’t be applied to the Data JSON. 9. When Invoke Mode is set to non-blocking, elements using default values will not receive the response because the element loads before the response returns. You must configure these properties to map the response to an element: - **Response JSON Node**: VlocityNoRootNode - **Response JSON Path**: The name of the Omniscript Element receiving the value. ![Troubleshooting Omniscript](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_example.png) Troubleshooting Omniscript In the Troubleshooting Omniscript, the callOut1 Remote Action element calls an external system to check if the asset is still under warranty. This example references the Troubleshooting Omniscript and the `OmniCallout` and `DataObjectService` Apex classes. It implements the Remote `OmniCallout` class and the remote `checkWarrantyStatus` method. Since this is a sample Omniscript, the method contains a hard-coded response: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/salesforce_apexclassdetail_omnicallout.png) The callOut2 Remote Action calls the `returnItemOrder` method, which in turn calls the `DataObjectService` class that calls out to a Heroku instance to return an order number: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/salesforce_apexclass_dataobjectservice.png) The following class structure can be used to call out to an external system: `global with sharing class CustomClassName implements NS.VlocityOpenInterface { global CustomClassName() {} global Boolean invokeMethod(String methodName, Map inputMap, Map outMap, Map options) { Boolean result = true; try{ if(methodName.equals('customMethodName')){ // your implementation, use outMap to send response back to OmniScript } } else if(methodName.equals('customMethodName2')){ // your implementation, use outMap to send response back to OmniScript } } catch(Exception e){ result = false; } return result; } }` # Calling Expression Sets from an Omniscript From an Omniscript, call an expression set created in the Business Rules Engine, and return its results to the Omniscript. Expression sets evaluate conditions, perform mathematical operations, look up decision tables and matrices, and perform multiple transformations simultaneously.

Property

Description

Remote Properties: Expression Set Name

Remote Properties: Configuration Name (in the designer for a managed package)

Name of the Expression Set.
Remote Properties: Include inputs Check whether the Omniscript elements sent to the Expression Set are at the Step level of the Omniscript and not in a block.
Remote Properties: Match input variables Check whether the Omniscript elements sent to the Expression Set exactly match the Variable IDs in the procedure.
Remote Properties: Pre-Transform Data Mapper Interface Specify a Data Mapper transform to reformat input data for the Expression Set.
Remote Properties: Post-Transform Data Mapper Interface Specify an optional Data Mapper transform to reformat output data from the Expression Set.
Remote Properties: Remote Options Define key/value pairs that specify additional class invocation options.
Remote Properties: Extra Payload Send additional key/value pairs. Merge field syntax is supported.
Remote Properties: Send only extra payload Send the key/value pairs for Extra Payload without the Omniscript’s JSON.
#### See Also - [Calling a Decision Matrix from an Omniscript](https://help.salesforce.com/s/articleView?id=xcloud.os_decision_matrix_action_properties_for_omniscripts_8353.htm&release=264.0.0&type=5 "Call a decision matrix with specified inputs and return the matching results to an Omniscript.") # Calling Web Services with the Omniscripts HTTP Action With the HTTP Action, call internal and external web services from an Omniscript without coding or making Salesforce API calls. You can call an HTTP API that allows Apex, Named Credentials, SOAP/XML, or Web, and use the Omniscript's JSON as input. To make sure that the HTTP Action functions correctly without errors related to Content Security Policy (CSP) restrictions, you must add a trusted URL in the Setup, and specify CSP directives and Permissions-Policy directives. When adding this URL, it's important to select all checkboxes under CSP Directives to fully configure the directives. See [Add or Edit a Trusted URL](https://developer.salesforce.com/docs/atlas.en-us.lightning.meta/lightning/security_trusted_urls_manage.htm). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note You must add the Salesforce org's domain into a Remote Site's **Remote Site URL** field. For more information, see [Adding Remote Site Settings](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_callouts_remote_site_settings.htm). Use the HTTP Action to: - Send GET, POST, PUT, or DELETE requests to standard REST Endpoints. - Call Apex REST. - Access Salesforce Named Credential (OAuth) identity services. Configure the HTTP settings to call web services.

Property

Description

HTTP Path

The request URL of the API. For example, /NS/v1/application. NS = namespace of the Apex REST API. The path can contain merge fields. For example, to pass a UserId node from the data JSON, add the node name with percentage signs on either side, i.e., %UserId%.

HTTP Method

The method name, which has two parameters. For example, doPost(String fullJSON, String filesMap).

GET, POST, PUT, PATCH, or DELETE.

Endpoint Type

Specifies the endpoint type:

  • Apex — Invokes Apex REST. You must add the Salesforce org's domain to a Remote Site's Remote Site URL field.

  • Named Credential — Access Salesforce Named Credential (OAuth) identity services.

  • SOAP/XML — Send requests to standard REST endpoints using XML format for the request and response bodies.

  • Web — Send requests to standard REST endpoints (unauthenticated or credentials in HTTP headers).

Named Credential

Salesforce named credential. For Named Credential and optionally SOAP/XML endpoint types.

HTTP Headers

HTTP headers specified as key-value pairs. Supports merge field syntax.

Parameters

URL parameters specified as Key/Value pairs. Supports merge field syntax.

Encode URI

Uses HTML escape codes in the URI.

Cache response

Caches the response.

Require credentials

Requires security credentials such as a username and password.

Extra Payload

Sends additional Key/Value pairs. Supports merge field syntax.

Send body

Sends the Extra Payload as the request body for a POST action.

Send only extra payload

Enables the action to send Extra Payload's key-value pairs without including the Omniscript's data JSON.

# Campaign Marketplace for Partners Offer approved campaigns, campaign resources and signup capability in an Experience Cloud site so that eligible partners can reuse marketing assets and generate demand. ### Required Editions
Available in: Enterprise, Unlimited, Performance, and Agentforce 1 Sales Editions with Partner Ecosystem Management and Marketing Cloud Next or Marketing Cloud Advanced.
## How Campaign Marketplace Connects Vendors and Partners? Campaign Marketplace gives your partners a central place to discover campaigns and campaign resources that your company approves for partner use. A channel marketing manager creates a standard campaign, shares the campaign with partner using Sharing rules, and chooses whether partners can sign up. Partners browse campaigns in the Campaign Marketplace component on an Experience Cloud site. Salesforce checks eligibility when a partner selects the sign-up action, rather than when the marketplace loads. Marketing Cloud handles the execution of marketing messages and journeys through Distributed Marketing. ## Partner Eligibility and Campaign Sign-Up The eligible partners can use: - Partner loyalty tier - Attributes on the partner user or account - Available market development funds When an eligible partner signs up, Salesforce creates a child campaign under the vendor campaign. The child campaign inherits the marketing assets from the parent campaign, and the partner becomes its owner. Records remain isolated between partner accounts unless they’re explicitly shared. ## Parent and Child Campaigns The vendor campaign remains the parent campaign and source for approved marketing assets. Each partner sign-up creates a separate child campaign. Partners can edit inherited assets as part of sending a campaign. Saved reusable drafts and default asset customizations aren’t supported. - **[Turn On Channel Marketing and Campaign Marketplace for Partners](https://help.salesforce.com/s/articleView?id=xcloud.pem_turn_on_channel_marketing_campaign_marketplace.htm&release=264.0.0&type=5)** Prepare Distributed Marketing, user access, email sharing, and CMS content before partners use vendor-approved campaigns. - **[Add Campaign Marketplace to a Partner Experience Cloud Site](https://help.salesforce.com/s/articleView?id=xcloud.pc_add_campaign_marketplace_partner_site.htm&release=264.0.0&type=5)** Give partner users a site page where they can browse approved campaigns and start the campaign sign-up process. - **[Create a Partner-Facing Campaign with Eligibility Criteria](https://help.salesforce.com/s/articleView?id=xcloud.pem_create_partner_facing_campaign.htm&release=264.0.0&type=5)** Publish an approved campaign to Campaign Marketplace and control which partners qualify when they request to sign up. - **[Sign Up for a Campaign from a Partner Experience Cloud Site](https://help.salesforce.com/s/articleView?id=xcloud.pc_sign_up_campaign_partner_site.htm&release=264.0.0&type=5)** Join an eligible vendor campaign, get approved marketing assets in a child campaign, and add leads and contacts. # Can Customer Support help me import my data? Customer Support is available to assist Group, Contact Manager, Professional, Enterprise, Unlimited, and Performance Edition orgs throughout the import process. # Can I bulk-assign records to a record type? Yes, you can bulk-assign records to a record type using the Data Import Wizard. You choose to which record type to assign the records during the import process. This process applies to standard and custom objects. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important Salesforce has replaced the individual import wizards for accounts, contacts, and other objects with the Data Import Wizard. Individual import wizards open in small windows, while the Data Import Wizard opens in a full browser with dataimporter.app at the end of the URL. From Setup, enter Data Import Wizard in the Quick Find box, then select **Data Import Wizard**. The options you see depend on your permissions. # Can I Change or Delete the List of Entries That Appears When I Edit a Text Field in Salesforce Classic? No. These auto-complete entries that appear when you are editing certain text fields are a feature of Internet Explorer. The browser remembers text that you entered previously and provides a list of those entries for you to automatically complete the field. If you would like to turn off this feature, click **Tools** on your browser’s menu bar. Select **Internet Options**, click the **Content** tab, and then choose the **AutoComplete** button to change your browser’s settings. # Can I delete my imported data if I make a mistake? From Setup, your administrator can enter Mass Delete Records in the Quick Find box, then select **Mass Delete Records** to perform a mass delete of accounts, contacts, leads, or solutions that you mistakenly imported. You cannot mass delete mistakenly imported custom objects. # Can I do simultaneous imports? The Data Import Wizard doesn’t support simultaneous—or concurrent—data import jobs, even from separate browser windows. Finish one data import before beginning the next. # Can I import amounts in different currencies? If your Group, Professional, Enterprise, Unlimited, Performance, or Developer Edition org has set up the ability to use multiple currencies, you can import amounts in different currencies using the Currency ISO Code column in your import file. # Can I import data in more than one language? The import wizard imports one language at a time, the language of the user doing the import. If you have the same data in different languages, run an import for each additional language. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important Salesforce has replaced the individual import wizards for accounts, contacts, and other objects with the Data Import Wizard. Individual import wizards open in small windows, while the Data Import Wizard opens in a full browser with dataimporter.app at the end of the URL. From Setup, enter Data Import Wizard in the Quick Find box, then select **Data Import Wizard**. The options you see depend on your permissions. # Can I import data into a picklist field if the values don’t match? We recommend that you import your data into an existing picklist when that picklist accurately represents your data, even if the exact values don’t match. The import wizards warn you before importing any new picklist values. However, the wizards accept any value for a picklist field, even if the value isn’t predefined. Your administrator can later edit the picklist to include the needed values. Note that import wizards don’t allow you to import more than 100 new picklist or multi-select picklist values for any field during a single import. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important Salesforce has replaced the individual import wizards for accounts, contacts, and other objects with the Data Import Wizard. Individual import wizards open in small windows, while the Data Import Wizard opens in a full browser with dataimporter.app at the end of the URL. From Setup, enter Data Import Wizard in the Quick Find box, then select **Data Import Wizard**. The options you see depend on your permissions. # Can I import into custom fields? Yes. Your administrator must create the custom fields before import. For checkbox fields, records with a value of _1_ in the field are imported as checked, while a value of _0_ is not checked. #### See Also - [Salesforce Data Import](https://help.salesforce.com/s/articleView?id=xcloud.importing.htm&release=264.0.0&type=5 "Salesforce offers several ways to import your data. You can import up to 50,000 records into Salesforce.") # Can I import into fields that are not on my page layout? No, except for contacts. You can import values into a field only if you have read and edit access. User permissions, page layout assignments, and field-level security settings determine field access. The page layout used is based on the running user's selected record type. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important Salesforce has replaced the individual import wizards for accounts, contacts, and other objects with the Data Import Wizard. Individual import wizards open in small windows, while the Data Import Wizard opens in a full browser with dataimporter.app at the end of the URL. From Setup, enter Data Import Wizard in the Quick Find box, then select **Data Import Wizard**. The options you see depend on your permissions. # Can I import using external IDs? When importing custom objects, solutions, or person accounts, you can use external IDs to prevent the import from creating duplicate records. An external ID is a custom field that has the External ID attribute, meaning that it contains unique record identifiers from a system outside of Salesforce. When you select this option, the Data Import Wizard detects existing records in Salesforce with external IDs that match those values in the import file. # Can I mass upload data into Salesforce? Group, Professional, Performance, Unlimited, Enterprise, and Developer editions allow you to mass upload data using the Data Import Wizard. From Setup, enter Data Import Wizard in the Quick Find box, then select **Data Import Wizard**. In addition, Performance, Unlimited, Enterprise, and Developer editions have API access to use database mass upload tools like Data Loader. # Can I match lookups and master-detail records using external IDs? Yes, using the Data Import Wizard, you can choose from multiple external IDs to match to lookups and master-detail records. # Canada State Codes The state codes and state/province names your standard country/territory picklist uses for Canada depend on when the standard country/territory picklist was configured. Refer to this table for state/province names with special considerations. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: All Editions except Database.com
| State Code | STATE/Province | Special Considerations | | --- | --- | --- | | AB | Alberta |   | | BC | British Columbia |   | | MB | Manitoba |   | | NB | New Brunswick |   | | NL | Newfoundland and Labrador |   | | NT | Northwest Territories |   | | NS | Nova Scotia |   | | NU | Nunavut |   | | ON | Ontario |   | | PE | Prince Edward Island |   | | QC | Quebec |   | | SK | Saskatchewan |   | | YT | Yukon | The state/province name Yukon Territories is available in orgs where standard country/territory picklists were configured in Winter ‘26 and earlier. The state/province name Yukon is available in orgs where standard country/territory picklists were configured in Spring ‘26 and later. | # Cancel a Redemption Transaction You can reverse a redemption transaction for various reasons, such as a product return, a canceled order, and when a member wants to cancel a redemption. After you reverse a redemption transaction, the points redeemed by the member are credited back to the member. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_important.png) Important Before admins set up automated processes to cancel transactions or service reps start managing customer queries related to transaction cancellation, make sure these prerequisites are available in the org. See [Prerequisites for Managing Member Transactions](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_journal_prerequisities.htm&language=en_US). You can only cancel the transaction journals whose status is Processed and that have Loyalty Ledger records associated with it. If you either delete or archive Loyalty Ledger records, you can't reverse the associated transaction journals. 1. From the Loyalty Management App navigation menu, click **Transaction Journals**. 2. Select a transaction journal with the redeemed points that you want to cancel, and click **Reverse Transaction**. 3. Select the expiration date on which the points credited back to the member must expire. If you have the Loyalty Management setting to automatically add the points expiration date for canceled redemptions turned on, you don’t need to specify an expiration date. The expiration date of the points credited back to the member is automatically set as the date on which the points were supposed to expire before the points were redeemed. If there are trace ledgers associated with the transaction journal, the system prioritizes the expiration date from the trace ledgers. 4. Select the category for reversing the transactions. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The default category is Product Returned, Order Canceled, and Accrual Cancellation Requested by Member. However, you can add new values to the category for canceling the transactions. 5. Enter any specific comments for reversing this particular transaction. 6. Click **Reverse Journal**. After the transaction is reversed, a Redemption Reversal type transaction journal is created. The Redemption Reversal type transaction journal credits the points that were debited from the member by the reversed transaction. The member’s points balance is automatically updated if the settings to update member’s points balance in real time are turned on. If the settings aren’t turned on, the member’s points balances are updated by the Credit Non-Qualifying Points to Members and the Credit Qualifying Points to Members Data Processing Engine definitions. #### See Also - [Salesforce Help: Enable Consolidation of Fixed-Type, Non-Qualifying Points of Members in Batches](https://help.salesforce.com/s/articleView?id=xcloud.enable_points_consolidation.htm&release=264.0.0&type=5 "You can choose to consolidate member points in batches. After points are credited to members, you can run a Data Processing Engine definition to consolidate members’ fixed-type, non-qualifying points. You can run another Data Processing Engine definition to expire members’ fixed-type, non-qualifying points. When you enable this setting, the system adds two template Data Processing Engine definitions to your org.") - [_Salesforce Help_: Enable Real-Time Update of Non-Qualifying Points Balance](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_real_time_setting.htm&release=264.0.0&type=5 "To update non-qualifying points balance of members in real time, turn on real-time balance update setting in your Salesforce org.") - [_Salesforce Help_: Enable Real-Time Update of Non-Qualifying Points Balance](https://help.salesforce.com/s/articleView?id=xcloud.expiration_date_calculation_setting.htm&release=264.0.0&type=5 "Enable a setting that automatically calculates the expiration date of fixed-type non-qualifying points that are credited back to members for canceled redemptions.") # Cancel a Redemption Transaction in Flows Use the Cancel Redemption Transaction action in flows to revert a redemption transaction and credit points back to a member’s point balance. When you specify the transaction journal ID and cancellation reason, the action picks up the ledgers from the transaction journal and adds another transaction journal entry of the Redemption Cancellation journal type. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
User Permissions Needed
To create a flow: Manage Flows
To access Loyalty Management actions in Flows: Loyalty Management
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_important.png) Important Before admins set up automated processes to cancel transactions or service reps start managing customer queries related to transaction cancellation, make sure these prerequisites are available in the org. See [Prerequisites for Managing Member Transactions](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_journal_prerequisities.htm&language=en_US). 1. From Setup, in the Quick Find box, search for Flows, and then select **Flows**. 2. Click **New Flow**. 3. Select a flow type, and then click **Next**. 4. Select a layout, and then click **Next**. 5. Click +. 6. Select **Action**. 7. In the Category section, select **Loyalty**. 8. Search for and select the **Cancel Redemption Transaction** action. 9. Enter a name and API name for the action. 10. Specify values for the input fields: - Transaction Journal ID - Reversal Category - Cancellation Reason 11. Click **Done**. 12. Save your changes, and then activate the flow. If you process a high volume of records in batches, use Batch Management jobs to ensure that records are processed in manageable chunks. # Cancel a Running Backup Stop a running backup in Salesforce to fix an error in production data or modify default backup options. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Backup & Recover Data and Backup & Recover Files add-on licenses
User Permissions Needed
To cancel a backup: Cancel Backup
1. Click the **Backup** tab. 2. In the running backup's row, click !["Action Icon"](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/action_menu.png), and then **Cancel Backup**. 3. Select a reason for canceling the backup. 4. Click **Cancel Backup**. # Cancel a User’s Lightning Login Enrollment Cancel a user’s Lightning Login enrollment if the user is no longer eligible to use Lightning Login. ### Required Editions
Available in: Both Salesforce Classic and Lightning Experience
Available in: Essentials, Group, Professional, Enterprise, Performance, Unlimited, Developer, and Contact Manager Editions
User Permissions Needed
To cancel a user’s Lightning Login enrollment: Manage Users
1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Users**. 2. Click the user’s name. 3. On the user’s detail page, click **Cancel** next to the Lightning Login field. Your users can cancel their own enrollment. In personal settings, they go to the Advanced User Details page and click **Cancel** next to the Lightning Login field. # Cancel an Accrual Transaction You can cancel an accrual transaction for various reasons such as a product return, an order cancellation, and when a member requests to cancel an accrual. After you reverse an accrual transaction, the points that were credited to the member for the transaction are debited from the member’s points balance. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_important.png) Important Before admins set up automated processes to cancel transactions or service reps start managing customer queries related to transaction cancellation, make sure these prerequisites are available in the org. See [Prerequisites for Managing Member Transactions](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_journal_prerequisities.htm&language=en_US). You can only cancel the transaction journals whose status is Processed and that have Loyalty Ledger records associated with it. If you either delete or archive Loyalty Ledger records, you can't reverse the associated transaction journals. 1. Select a Loyalty Program. 2. On the Setup tab, click **Transaction Journals**. 3. Select a transaction journal with accrued points that you want to cancel, and then click **Reverse Transaction**. 4. Select the category to reverse the transactions. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The default category is Product Returned, Order Canceled, and Accrual Cancellation Requested by Member. However, you can add new values to the category to cancel the transactions. 5. Enter any comments for this accrual cancellation. 6. Click **Reverse Journal**. After the transaction is reversed, an Accrual Reversal type transaction journal is created. The Accrual Reversal type transaction journal debits the points that were credited to the member by the reversed transaction. After the points are debited, the member’s points balance is automatically updated. # Cancel an Accrual Transaction in Flows Use the Cancel Accrual Transaction action in flows to revert an accrual transaction and deduct points from a member’s point balance. When you specify the transaction journal ID and cancellation reason, the action picks up the ledgers from the transaction journal and adds another transaction journal entry of the Accrual Cancellation journal type. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
User Permissions Needed
To create a flow: Manage Flows
To access Loyalty Management actions in Flows: Loyalty Management
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_important.png) Important Before admins set up automated processes to cancel transactions or service reps start managing customer queries related to transaction cancellation, make sure these prerequisites are available in the org. See [Prerequisites for Managing Member Transactions](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_journal_prerequisities.htm&language=en_US). 1. From Setup, in the Quick Find box, search for Flows, and then select **Flows**. 2. Click **New Flow**. 3. Select a flow type, and then click **Next**. 4. Select a layout, and then click **Next**. 5. Click +. 6. Select **Action**. 7. In the Category section, select **Loyalty**. 8. Search for and select the **Cancel Accrual Transaction** action. 9. Enter a name and API name for the action. 10. Specify values for the input fields: - Transaction Journal ID - Reversal Category - Cancellation Reason 11. Click **Done**. 12. Save your changes, and then activate the flow. If you process a high volume of records in batches, use Batch Management jobs to ensure that records are processed in manageable chunks. # Cancel Voucher Process Template To discard the unused vouchers or to withdraw the issued vouchers, you can cancel the vouchers especially from an external system. You can use the Cancel Voucher process template to create processes for canceling vouchers. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
- **[Overview of the Cancel Voucher Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_overview_of_the_cancel_voucher_process_template.htm&release=264.0.0&type=5)** Learn about the Cancel Voucher process template and the template’s components. how you can use the template to create a loyalty program process and execute the process. - **[Create a Process Using Cancel Voucher Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_task_cancel_voucher_process_template.htm&release=264.0.0&type=5)** Learn about the Cancel Voucher process template and its components. Also, understand how you can use the template to create a loyalty program process and execute the process. # Canvas App Settings: Canvas SAML Initiation Control This security setting determines how the authentication handshake is triggered. ## Control Name Connected Apps: Canvas App Settings: SAML Initiation Method - IdP Initiated | SP Initiated ## Recommended Configuration SAML Initiation Method - IdP Initiated | SP Initiated. ## Control Overview This security setting determines whether the authentication handshake is triggered by the application requesting an identity assertion from the provider (SP-Initiated) or by the provider pushing an unsolicited assertion to the application (IdP-Initiated). ## Security Risk If Not Configured Weak SAML initiation methods, specifically the widespread use of IdP-initiated flows without additional safeguards, lead to a risk of unauthorized session initiation and a bypass of primary identity challenges due to the lack of a locally tracked request state. ## Threat Scenarios An attacker performs a login CSRF (Cross-Site Request Forgery) attack by tricking a user's browser into submitting a forged or replayed SAML assertion to the service provider, effectively hijacking the target application session. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to prioritize SP-initiated flows prevents the application from validating that an incoming SAML response corresponds to a specific, unique authentication request it recently generated, facilitating unsolicited login attempts. ## Higher Risk When When using IdP-initiated flows for administrative Canvas apps, as this method is vulnerable to "Interception" attacks where an assertion can be captured and submitted to the ACS URL without the user's direct interaction with the app. ## Low Risk When When SP-Initiated flows are enforced, as the application uses a unique "InResponseTo" attribute to cryptographically bind the SAML response to the original request, nullifying unsolicited assertion attacks. ## Business and Integration Considerations SP-Initiated is the secure choice for deep-linking directly into application records, whereas IdP-Initiated is only appropriate for broad "App Launcher" use cases where ease of access from a central portal outweighs the risk of unsolicited assertions. ## Recommended Remediation Go to the Canvas App Settings for the Connected App and select Service Provider Initiated for high-assurance internal integrations to ensure that every session is tracked from the point of access. ## Security Health Review Guidance Security Health Review identifies Service Provider-initiated SAML as the strongly recommended standard for secure Canvas integrations, while acknowledging that Identity Provider-initiated flows are a valid secondary option for centralized portal access when session hijacking risks are mitigated by other compensating controls. #### See Also - [Expose Your Connected App as a Canvas App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_canvas.htm&type=5&language=en_US) # Canvas App Settings: Canvas Signed Request Security Control This security setting determines the authorization protocol for Canvas integrations. ## Control Name Connected Apps: Canvas App Settings: Canvas Signed Request Security ## Recommended Configuration Access Method - Signed Request (POST) | OAuth Webflow (GET). ## Control Overview This security setting determines the authorization protocol for Canvas integrations, where Signed Request (POST) provides a verifiable payload for pre-authorized users, and OAuth Webflow (GET) uses a redirection-based sequence for on-demand user authorization. ## Security Risk If Not Configured Insecure implementation of Canvas access methods, specifically the unnecessary use of the GET-based OAuth webflow, leads to a session token theft risk due to the exposure of sensitive authentication parameters in plaintext URL strings and browser logs. ## Threat Scenarios An attacker intercepts an unencrypted GET request or accesses browser history to harvest an active session identifier, later using the stolen token to impersonate the user within the Salesforce instance. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to implement cryptographically signed POST requests facilitates the exposure of sensitive session metadata in browser history or server logs, significantly increasing the probability of persistent account hijacking. ## Higher Risk When When using the GET method for applications with administrative permissions, as it relies on user-level consent which can be bypassed or manipulated through social engineering. ## Low Risk When When the GET method is restricted to low-sensitivity third-party tools that require explicit user approval, or when the organization enforces strict IP-range restrictions for the framed application. ## Business and Integration Considerations While Signed Request (POST) is the secure standard for internal apps, the OAuth Webflow (GET) is appropriate for external "off-the-shelf" integrations where users must self-authorize or for client-side apps that lack a backend to verify cryptographic signatures. ## Recommended Remediation Go to the Canvas App Settings for the Connected App and select Signed Request (POST) for all custom internal integrations to ensure sensitive data is transmitted within the request body rather than the URL. ## Security Health Review Guidance Security Health Review identifies the use of Signed Request (POST) as a strongly recommended standard for high-assurance integrations to prevent the interception of authentication tokens while acknowledging the GET method for specific third-party self-authorization use cases. #### See Also - [Expose Your Connected App as a Canvas App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_canvas.htm&type=5&language=en_US) # Capabilities of Data Cloud in Channel Revenue Management Use Data Cloud with Channel Revenue Management to process high-volume incentive data, power analytics dashboards, and run scalable calculations. Connect your rebate, channel inventory, stock rotation, and accrual data to Data Cloud to offload complex processing from your Salesforce org and give finance and operations teams visibility into financial commitments. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions
## Stream Rebate Data for Tableau Next Analytics by Using Data Kits Use the Channel Revenue Management data kit to stream rebate program data from your Salesforce Core org to Data Cloud. By mapping rebate program definitions to standard data model objects (DMOs), you get a unified data foundation that powers Tableau Next dashboards for multi-dimensional analytics and real-time business intelligence. ## Scale Incentive Processing with Data Cloud Engine Manufacturers handling high-volume operations such as rebates, stock rotation, and channel inventory require a robust processing engine capable of large-scale data transformation. By executing Data Processing Engine (DPE) definitions within Data Cloud, you can: - Process at scale: Support complex incentive processing with significantly higher speed and efficiency. - Offload execution payloads: Shift processing workloads entirely to Salesforce's big data cluster infrastructure. - Prevent time-outs: Transform millions of transaction rows simultaneously without triggering standard transaction limits or time-outs. For a complete list of DPE definitions available in Channel Revenue Management, see [Data Processing Engine Definitions in Channel Revenue Management](https://help.salesforce.com/s/articleView?id=xcloud.chrm_data_cloud_dpe_definitions.htm&release=264.0.0&type=5 "Data Processing Engine (DPE) definitions power the calculations that drive rebate, channel inventory, stock rotation, and accrual processing in Channel Revenue Management. Some definitions were originally built for CRM Analytics and can be migrated to run on Data Cloud for improved performance and scale. Others are purpose-built for Data Cloud and require no migration."). ## Run Advanced Accrual Calculations on Data Cloud To run advanced accrual calculations on Data Cloud, deploy the Accrual and Payout Engine data kit. This data kit is separate from the Channel Revenue Management data kit: - The Channel Revenue Management data kit creates the data streams and DMOs for ingesting rebate program data into Data Cloud. - The Accrual and Payout Engine data kit creates the Data Lake Objects (DLOs) that the calculation engine reads from and writes to during accrual processing. When a rebate program's Execution Type is set to Advanced, the six DPE definitions run entirely within Data Cloud's batch transform infrastructure, improving performance and eliminating org-level processing limits. For setup and configuration, see [Manage Accrual Calculations in Rebate and Accrual Management Advanced](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_adv_manage_accrual_calculations.htm&type=5&language=en_US). # Capabilities of Price Protection Use Price Protection to create a robust, scalable price protection process to protect your partners’ margins against price fluctuations. Review the capabilities of Price Protection and see how you can achieve various business outcomes with it. | Capability | Business outcome | | --- | --- | | Define and configure Price Protection rules and eligibility for partners/distributors. | Ensures partner loyalty by protecting margins and maintaining trust. | | Support for price changes, including list price and contracted price adjustments. | Stabilizes market conditions by mitigating partner hesitation in purchasing inventory. | | Execution of Price Protection through simulation and payout calculations. | Improves transparency and efficiency in managing partner relationships. | | Support for Reverse Price Protection to handle price increases and debit adjustments. | Enhances flexibility to adapt to market trends and pricing adjustments. | | Ability to update price changes in the inventory ledger automatically or manually. | Improves inventory accuracy and reduces disputes related to pricing discrepancies. | # Capabilities of Rebate and Accrual Management Advanced Use Rebate and Accrual Management Advanced to automate the tracking of financial liabilities and the calculation of rebate payouts with a scalable and transparent accounting process. By processing high-volume transaction data and sales-related data leveraging DPE with Data 360, you can maintain an accurate view of your financial commitments. Set up and configure data processing engines to maintain an accurate, up-to-date view of your current rebate obligations. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
Capability Business Outcome
High-Frequency Accruals Recognize accounting liabilities on a weekly, or monthly cadence to ensure constant profit and loss accuracy.
Specialized Accrual Logic Apply specific accrual rates for financial forecasting, independent of final settlement rules.
Decoupled Accrual and Payout Define accrual frequency and logic independently from payout frequency and logic. Recognize liabilities more frequently (for example, weekly) than the payouts you settle (for example, monthly or quarterly), using different benefit tiers for each if needed.
Payout Calculation Calculate the actual payout amount owed to a member based on finalized transactions and tier attainment, using the same DPE-on-Data-Cloud engine that calculates accruals. Supports retrospective and stepped tier methods across volume-based, revenue-based, growth, and per-transaction rebate types.
Accrual Calculation
  • Retrospective: The rebate is applied to all units once a higher tier is reached. The new rate applies to all units, not just the additional ones.
  • Stepped: The rebate is calculated for each tier separately. For example, if the first 50 units have a rebate of $500 and the next 25 units have a rebate of $500, the total accrual is calculated by summing these amounts.
Aggregate Based Calculation Accruals and payouts are calculated by aggregating transaction data across various parameters such as volume, revenue, member, product, or custom dimensions like region and territory.
Data Processing Engine (DPE) with Data 360 Integration Run Data Processing Engine definitions on Data 360 to process millions of records through high-performance Batch Transforms without impacting your core Salesforce org's performance.
Accrual Adjustments Empower finance teams to manually adjust accrued amounts.
Rate Changes & Automated Adjustments Apply rate changes and automatically generate adjustment entries so prior calculations stay accurate.
Late Transactions Automatically adjust results when transactions arrive after a period is calculated.
Separate Benefits for Accruals and Payouts Define different benefit tiers for accrual and payout calculations.
Orchestration Flow Trigger the full DPE sequence through a single orchestration flow.
Growth Period Flexibility Choose which prior period growth is calculated against.
# Capabilities of Rebate Management Use Rebate Management to manage incentives for your partners and distributors. Create rebate programs and specify the type of rebate, eligibility rules, and benefit structure. Set up and configure flow actions, batch jobs, and data processing engines. Engage with your partners by using Experience Cloud. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
## Learn and Explore Watch this video to understand the capabilities of Rebate Management. If you aren’t able to watch the view in full screen, open the video on a new tab: [![Watch video](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/resources-global/_corporate/images/play_btn.png) Get Started with Rebate Management](https://play.vidyard.com/t9w47bheFrXqT3bV6jH9pZ). ## Key Features You can manage these business operations with Rebate Management: - Get your transactions, such as invoices and claims from external systems, or Salesforce orders, into the configurable rebate calculation engine. - Create rebate programs and specify the type of rebate, eligibility rules, and benefit structure, including thresholds. - Define the rebate calculation criteria for volume, growth, and revenue rebates based on an amount per unit, a percent of revenue, or a fixed amount. - Get insights into the purchase behaviors of partners by aggregating the transactions by member, product, or custom criteria. - Craft the correct incentive within your sales or quote processes by accessing the applicable or eligible rebates for an account. - Calculate payouts as and when transactions are received to get up-to-date accrual information in real time and at the end of a period to get the final payout details. - Involve stakeholders in the review of payout amounts by running internal approval processes. - Audit and adjust payout amounts to rectify errors and eliminate incentive overpayments. - Extend and customize the logic of predefined processing templates for flow actions, batch jobs, and data processing engines. If your org uses Experience Cloud and CRM Analytics, you can perform these tasks also: - Set up an Experience Cloud portal for your partners so that they can submit claims and invoices and review program and payout information. - Analyze program performance with predefined CRM Analytics dashboards and identify the most profitable rebate programs. #### See Also - [Trailhead: Rebate Management Basics](https://trailhead.salesforce.com/content/learn/modules/rebate-management-basics) - [Trailhead: Data Processing Engine in Rebate Management](https://trailhead.salesforce.com/content/learn/modules/data-processing-engine-in-rebate-management) - [Trailhead: Unified Sales and Rebate Management Processes](https://trailhead.salesforce.com/content/learn/modules/unified-sales-and-rebate-management-processes) - [Rebate Management Workflow](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_workflow.htm&release=264.0.0&type=5 "Before you implement or use Rebate Management, understand the end-to-end workflow and the key decisions involved in each step.") # Capabilities of Ship and Debit Process Management Use Ship and Debit Process Management to create a robust, scalable ship and debit process to protect your partners’ margins and react to market conditions. Review the capabilities of Ship and Debit Process Management and see how you can achieve various business outcomes with it. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Ship and Debit Process Management enabled
Capability Business Outcome
Create flexible, extensible ship and debit programs
  • Streamline the ship and debit incentives you offer
  • Process claims on demand
Define special pricing terms and benefits
  • Create a nuanced incentive structure with tiered benefits
  • Define different qualification criteria for different benefit tiers based on the quantity of products sold, period sold in, or both
  • Frame the incentive as per your business needs, based on reference price, discount amount, or discount percent
  • Craft the right mix of incentives customized to your unique relationship with a partner
Enroll members to ship and debit programs Track partners, dealers, and distributors who receive the incentive and the end-customer or ship-to partner who the partner sells products to
Capture detailed ship and debit claims and proofs of sale documents
  • Reduce subjectivity in processing claims
  • Minimize the follow-ups for additional information
Use and extend predefined process automation templates to process claims
  • Quickly set up a robust automated process that meets your company’s needs
  • Accurately validate claims against company-specific business rules
  • Swiftly identify claims that qualify for special pricing terms and benefits and calculate payouts accordingly
  • Reduce turnaround times for processing claims
Review and adjust ship and debit claims
  • Rectify errors in claim amount calculations
  • Minimize revenue leakage and prevent overpayment of incentives
Use Approval Process for ship and debit rebates
  • Cultivate transparency by involving stakeholders in the review of claim amounts
  • Exercise tighter control over incentives that are financially significant
Use Experience Cloud Site for Ship and Debit Rebates
  • Allow partners to easily submit claims and invoices from the site
  • Give partners visibility into program and payout information
# Capabilities of Stock Rotation Incentive Use Stock Rotation to create a robust, scalable process that enables your partners to manage inventory levels by returning or scrapping unsold products for credit. Review the capabilities of Stock Rotation and see how you can achieve various business outcomes with it. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Stock Rotation enabled
| Capability | business outcome | | --- | --- | | Define and configure Stock Rotation rules, including Return and Scrap methods. | Optimizes partner inventory health by providing clear exit paths for unsold stock. | | Configure eligibility based on specific timeframes, products, and partner unsold inventory (PUI). | Ensures financial control by only allowing rotations for eligible inventory. | | Manage execution through simulation of payout amounts and eligible quantity calculations. | Improves operational efficiency and transparency before finalizing claims. | | Automatic generation of rebate claims and debit ledgers for processed items for scrap methods. | Reduces manual errors and speeds up the credit issuance process for partners. | | Integrated budget management to track and allocate funds at the program or member level. | Provides real-time visibility into incentive spend and prevents budget overruns. | | Real-time notifications and a consolidated execution console for partners and OEMs. | Enhances collaboration by allowing partners to submit quantities and track claim progress in one place. | # Capture Orders Using Advanced Orders for Telesales Advanced Orders for Telesales guides telesales reps through creating, configuring, pricing, and releasing high-volume customer orders. It bridges account-level commercial relationships with guided, compliant order execution. ### Required Editions

View supported editions

Instead of manually searching through general product lists and keying in quantities line by line, telesales reps build orders from pre-configured Order Specifications. Order capture brings together context from the Customer Account, Internal Organization Unit (IOU), Product Catalog Qualifications, Store and Location Assortments, and Penny Perfect Pricing into a single guided screen: - **Order Specifications (OrderSpec):** High-level rules that govern order behavior, valid order dates, allowed orderer types (Direct vs. Indirect), required wholesaler fulfillment accounts, delivery date/lead-time rules, and whether assortment-based product listings apply. - **Order Product Specifications (OrderItemSpec):** Item-level rules that control inventory movement types (such as standard sale vs. return), item pricing groups, and quantity suggestion algorithms. - **Assortments (StoreAssortment / LocationAssortment):** Pre-qualified product lists that enable reps to quickly select valid products based on customer account listings or physical warehouse stock points. - **Flexible Units of Measure (ProductUnitOfMeasure):** Enables reps to capture quantities in cases, pallets, or individual scan units while automatically tracking conversion factors. To capture an order: 1. Open the customer account in your ordering app, such as the Service Console for Telesales. 2. In the Action Launcher on the account record page, select **New Order**. This initiates the guided order-creation flow and automatically prefills the details such as Account Name and Order Owner. 3. In the New Order window, select the Order Specification. The Order Specification (OrderSpec) acts as the primary order template. Choosing a specification enforces business logic such as valid ordering date windows, whether the customer orders directly or indirectly, and whether a wholesaler account is required. 4. Set the **Order Type**, **Order Start Date**, and optional **Order Delivery Date**. Setting the Order Type classifies the business transaction (such as a standard sale or return). Entering an Order Delivery Date triggers automated lead-time validations (MinLeadTime, MaxLeadTime, ShouldChkDeliveryDate) set on the order specification to ensure the requested delivery window can be fulfilled. If prompted, select a Wholesaler or Broker Account (Fulfillment Account). For indirect ordering scenarios where Fulfillment Account Required is active on the order specification, selecting a wholesaler (FulfillmentAccountId) ensures the order is routed to the correct partner assigned in the account relationship table (AccountAccountRelation). 5. Select **Save**. The order is created in Draft status, and the lifecycle bar updates to show the order's progression from Draft to Activated. On the Products tab, select the Assortments list view to review pre-qualified products. If assortment filtering is enabled on the selected order specification, the Assortments list view displays pre-authorized product listings based on the customer's account hierarchy (StoreAssortment) or assigned warehouse stock point (LocationAssortment) to speed up product entry. 6. Switch to the All Products list view or view Product Information in the side panel. To search the full catalog beyond pre-qualified listings, select the All Products list view on the Products tab. 7. To auto-fill item quantities, turn on **Apply Suggested Quantity** and confirm the prompt. Enabling suggested quantities evaluates historical lookback rules (LookbackPeriodInDays) across past orders in Activated status, automatically prefilling recommended item quantities to accelerate order entry. 8. Set the Order Quantity and Unit of Measure for each product to include. Entering quantities in specific units of measure such as cases or individual scan units (ProductUnitOfMeasure) ensures correct inventory tracking, aligns with market-specific packaging strategies, and drives bulk volume pricing conditions. 9. Select **Add to Cart** to add the selected products to the order. 10. To price the order, turn on **Instant Pricing** or select **Calculate**. This invokes Penny Perfect Pricing engines to calculate net unit prices, tier/volume discounts, tax, and order summary totals based on the order's transaction context. The net unit prices and the order summary update with the calculated results. 11. Open the Cart tab and review the selected products, quantities, units of measure, and totals. 12. Review the order details and release the order. Releasing the order shifts its lifecycle status from Draft to Activated, locking the record against unauthorized edits and queuing the order for ERP replication, fulfillment, and billing. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-advanced_orders-264-0-0-production-enus/3f520262-6313-4d80-b68f-bf760562aa0b/images/icon_note.png) Note The order specification controls how delivery dates are validated through its lead-time settings. If you enter a delivery date outside the permitted window, an inline validation error message appears in the New Order window preventing order save until corrected. # Capture Partner Reported Inventory Capture inventory reported by partners using Partner Staged Data records. Partners can create these records through the Experience Cloud site, while a Channel Inventory Manager can create them directly in the core system. This allows for efficient tracking and management of partner inventory. ### Required Editions
Available in: Enterprise, Professional, and Unlimited Editions with the Channel Revenue Management add on
User Permissions Needed
To capture partner inventory record Channel Partner Inventory User
To create partner staged data records in Experience Cloud site Use Channel Partner Inventory in Experience Cloud
1. From the App Launcher, find and select **Accounts**. 2. Select a partner account and ensure that it’s enabled as a partner using the dropdown on the top right. 3. In the partner account page, create and save a contact. You can also use an existing contact. 4. Click the contact name and from the dropdown on the top right, select **Enable Partner User**. 5. In the new user window, enter the user details and select profile as **Channel Account User**. 6. Save your changes. 7. In the contact page within the account, click the dropdown on the right and log in to Experience Cloud as User. Partners can create Partner Staged Data records manually one by one, by uploading a CSV file through the Experience Cloud site, or programmatically via API. # Capture Post-Meeting Insights with Voice Notes Capture critical context on the go. Use Post-Meeting Voice Notes to record your thoughts immediately after any meeting that wasn't transcribed. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Agentforce 1 Sales Editions.
Because this is a single-user feature, there’s no need for verbal consent workflows. The app automatically attributes the audio to the logged-in user and handles transcription entirely on-device, syncing the text directly to Einstein Conversation Insights. Transcription happens locally, meaning zero cloud audio storage and no raw audio data residency concerns. ## Requirements for Post-Meeting Voice Notes - This feature requires Einstein Conversation Insights (ECI) and the Seller-Focused Mobile Experience. - This feature requires NPU-capable iPhones, iPads, or Android devices. ## Capture Post-Meeting Voice Notes ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note This feature is automatically enabled if you have In-Person Meeting Assistant enabled. - Make sure that you have the In-Person Meeting Assistant enabled: - Select **Salesforce Go** from the Setup dropdown and go to the Einstein Conversation Insights feature. - Turn on the **In-Person Meetings** toggle. - Make sure that your mobile app configuration has the new Seller Experience (Sales Cloud Mobile) enabled. - From the meeting details page for the meeting you want to capture notes for, select **Enter Post-Meeting Voice Notes**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note In-Person Meeting Assistant is for live meetings where transcription is running. Post-Meeting Voice Notes for everything else. The two features are designed to complement each other, not compete. ## Considerations for Post-Meeting Voice Notes - You can add voice notes to meetings that aren’t transcribed beginning from one hour before the meeting start time to 24 hours after the meeting ends. - The "Recent" section of the homepage pulls past 5 meetings that you own from the last 24 hours that aren't already transcribed, ordered from most recent to least recent. - This feature is only supported on iPads on M4 chip or newer. - The locale of the device determines the language of the transcription. Post-Meeting Voice Notes supports these languages: Arabic, Chinese (Simplified and Traditional), Dutch, English (Australia), English (England), English (India), English (Ireland), English (New Zealand), English (Scotland), English (US), French (Canada), French (France), German, Italian, Japanese, Korean, Polish, Portuguese (Brazil), Portuguese (Portugal), Russian, Spanish (Spain), Spanish (US) - To make sure that an Android device can reliably transcribe, make sure that it meets these hardware requirements: | Requirement | Minimum | | --- | --- | | **Android Version** | 13 or later | | **Total RAM** | 8 GB | | **CPU Cores** | 6 | For more information on device requirements, see [Requirements for the Salesforce Mobile App](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_requirements.htm&type=5&language=en_US). # Capture Rebate Claims and Proof-of-Sale Documents in Experience Cloud Partners can upload rebate claims and invoices through the Experience Cloud site. Admins convert these documents into Transaction Journal records to use for rebate payout processing and calculation. Partners can also view rebate information such as the programs they’re enrolled in. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
- **[Upload Proof-of-Sale Documents and Resolve Errors](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_proof_of_sale_and_resolve_errors.htm&release=264.0.0&type=5)** Partners can upload proof-of-sale documents such as invoices and claims in .csv files from the Experience Cloud site to claim rebate payouts. These documents are validated against standard business rules, and the partner can edit and resubmit the documents if there are errors. The admin then converts the records in the .csv file into Transaction Journal records for payout processing. Each uploaded file is stored as a Received Document record, which tracks the processing status, number of records processed, and any errors. - **[View Rebate Program and Claim Information in Experience Cloud Sites](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_view_program_and_payout_information.htm&release=264.0.0&type=5)** Partners can view rebate information such as rebate program and claim details in Experience Cloud sites. - **[Submit Rebate Claims](https://help.salesforce.com/s/articleView?id=xcloud.users_rebates_submit_claims.htm&release=264.0.0&type=5)** Customers and partners can input rebate claims either directly or from the Experience Cloud site. These documents can be validated against standard business rules, and partners and customers can edit and resubmit the claims if there are any errors. # Capture Responses from Partially Completed Surveys Participants sometimes exit before they complete the survey. Let participants pick up right where they left off by saving their in-progress work. The response status changes from Started to Partially Completed after the partial save window period, and the partial responses are stored in survey objects. Responses are saved when the participant clicks the Next button on a page. For surveys with auto-progress enabled, responses are saved up to the second-to-last page visited. Partial save isn't available for surveys with all questions on a single page. ### Required Editions
Available in: Available in: Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available in: Feedback Management - Starter and Feedback Management - Growth licenses
User Permissions Needed
To capture responses from partially completed surveys Permissions to create surveys
1. From the App Launcher, find and select **Surveys**. 2. Start a new survey. 3. Enter a name for the survey and then select a survey type. 4. Select **Save partially completed survey responses** after a specified time window and set a time window between 1 and 999 days. 5. Edit the welcome page, add questions, and include a thank-you message. 6. Save your work. 7. To see how the survey looks, click **Preview**. 8. To finish the survey so that you can send it to participants, click **Activate**. 9. To view responses for partially completed surveys, from the Related tab, click the dropdown next to a survey invitation, and select **View Responses**. ![Partial Survey Settings while creating a new survey.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/surveys_partial_survey_settings_999_days.png) Partially completed survey responses aren't saved for survey invitations created before you enabled the setting. You can select or deselect the option to save partially completed surveys even after the survey has been activated. After you create the survey, you can update the partial survey settings from Default Settings in the Survey Builder. ![Partial Survey Settings in the Default Settings for a survey.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/surveys_default_setting_with_partial_survey_settings.png) Partially completed survey responses are automatically saved for unauthenticated guest users. Guest users can’t resume a survey. Previously, responses were saved only for authenticated users. Partial survey responses aren't the same as paused responses. Unlike partial responses, paused responses aren't stored in survey objects. # Capture Ship and Debit Claims in Experience Cloud Partners can upload ship and debit claims by using Experience Cloud sites. Partners can also view the ship and debit program they're enrolled in and related special pricing term by using the sites. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Ship and Debit Process Management enabled.
- **[View Ship and Debit Program and Claim Information on Experience Site](https://help.salesforce.com/s/articleView?id=xcloud.shipdebit_view_information_experience_cloud.htm&release=264.0.0&type=5)** Partners can view ship and debit information such as ship and debit program and claim details in Experience Cloud sites. - **[Submit Ship and Debit Claims](https://help.salesforce.com/s/articleView?id=xcloud.submit_ship_and_debit_claims.htm&release=264.0.0&type=5)** Partners, dealers, and distributors can submit ship and debit rebate claims either directly or from the Experience Cloud site. You can validate these claims against proof-of-sale documents and verify whether these claims qualify for special pricing terms and benefits. Partners can edit and resubmit claims if there are any errors. # Capture Stock Rotation Incentive Claims in Experience Cloud Partners can now manage the entire lifecycle of stock rotation from viewing program eligibility to submitting and tracking claims directly through their Experience Cloud site. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Stock Rotation enabled.
Assign the Stock Rotation for Experience Cloud Users permission set to partner users. Set up a sharing model so that partners can view the stock rotation incentive programs they’re enrolled in. Also, give partners the ability to submit and track stock rotation claims. Based on your business needs, you can add these Salesforce objects as navigation items in Experience Cloud sites. | Object | Information Shown | | --- | --- | | Rebate Program | The stock rotation incentive rebate programs. | | Rebate Claim | The claims submitted by the partner for stock rotation rebate programs. | | Rebate Member Claim Aggregate | The aggregated claim quantities and amounts for rebate members per product. | - **[Identify Products for Stock Rotation Incentive](https://help.salesforce.com/s/articleView?id=xcloud.chrm_stock_rotation_identify_products.htm&release=264.0.0&type=5)** Use the Stock Rotation Execution (SRE) records to identify which products and invoices are eligible for rotation based on the manufacturer’s program rules. The Stock Rotation Execution record displays Partner Unsold Inventory (PUI) records that the system has automatically stamped as eligible based on validity duration, price type, and account matching. - **[Review Products for Stock Rotation Incentive](https://help.salesforce.com/s/articleView?id=xcloud.chrm_stock_rotation_review_products.htm&release=264.0.0&type=5)** Use the Stock Rotation Execution Item (SREI) record to evaluate the stock and prepare submissions. The Stock Rotation Execution Item record shows the total quantity remaining on an invoice and the eligible quantity. - **[Submit Stock Rotation Incentive Claims](https://help.salesforce.com/s/articleView?id=xcloud.chrm_stock_rotation_submit_claims.htm&release=264.0.0&type=5)** Partners can submit stock rotation incentive claims either directly or from the Experience Cloud site. Validate, edit and resubmit claims if there are any errors. # Card and Card Layout Naming Conventions (Managed Package) For the managed package runtime, follow Vlocity's requirements and best practices when naming cards and card layouts. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Beginning with Vlocity Insurance and Health Spring '20 ## Layout and Card Naming Conventions

Requirements

Examples

The combination of the card Name and Author must be unique in your Org. If the Name is the same and Author is different, the card or layout is versioned. See Cards Framework Versioning (Managed Package).

Name: account_layout

Author: CustomerSales

Name: account_closed_layout

Author: CustomerSales

Beginning with Vlocity Insurance and Health Spring '20, when creating a card or layout, the name and author must only contain underscores and alphanumeric characters. It must be unique, begin with a letter, not include spaces, not end with an underscore, and not contain two consecutive underscores. Existing layout names and card names are automatically updated to make them compliant. New cards and layouts can not be saved without following these naming requirements.

Not acceptable: account$card!, 1account__card, $account__card_, account card

Only one version of a card or layout can be active at the same time.

N/A

Card and layout names cannot be changed.

N/A

## Layout Naming Conventions

Best Practices

Examples

  • Use lowercase separated by an underscore (_) for feature or sub feature.

  • myapp_home_product

  • trng_account_console

## Card Naming Conventions

Best Practices

Examples

  • Use descriptive name in Title Case and an optional prefix.

  • vpl_Product_Details

  • rep_Account_Cases

## Prior to Vlocity Insurance and Health Spring '20 ## Layout and Card Naming Conventions

Requirements

Examples

The combination of the card Name and Author must be unique in your Org. If the Name is the same and Author is different, the card or layout is versioned. See Cards Framework Versioning (Managed Package).

Name: account-layout

Author: CustomerSales

Name: account-closed-layout

Author: CustomerSales

Use ASCII characters.

See ascii.cl.

Only one version of a card or layout can be active at the same time.

N/A

Card and layout names cannot be changed.

N/A

## Layout Naming Conventions

Best Practices

Examples

  • Use lowercase separated by a dash (-) for feature or sub feature.

  • myapp-home-product

  • trng-account-console

## Card Naming Conventions

Best Practices

Examples

  • Use descriptive name in Title Case and an optional prefix.

  • vpl Product Details

  • rep Account Cases

# Card States (Managed Package) For the managed package runtime, cards have states. Each state displays a list of fields from either the layout or the individual card data source, plus a list of Vlocity Actions. You can also associate each state with a flyout, an extended version of a card with supplemental data displayed in a larger area. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Cards states enable presentation of different CRM interactions per state. For example, when a customer adds an auto insurance policy, the policy becomes active, but when a customer misses a payment the policy state becomes past due. Cards with different states present different data. You can customize each card via its state to display various clickable actions, information, and optional visual cues. For example: - If an Automobile policy remains unpurchased, the policy card (via its state) likely offers a single action, specifically, "Add \[a New Policy\]". - A card for an active Automobile policy could display information such as the policy holder's name plus relevant actions, such as "File a Claim". - If an Automobile policy falls past due, a card can include a red border, a balance due amount, and Actions such as, "Pay \[the\] Premium", "\[Request a\] Billing Extension", and so on. ![Card state examples](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/screenshot___card___preview_states.png) You can enable a Blank Card State to display information when no data is returned from the configured data source. In the Cards Framework, an object returns only one state and creates one card, by default. However, if you apply multiple state filters to the parent field, there’s a possibility of getting a card for each filter state, as the filter is applied to all objects. # CardActiveState LWC Card Template (Managed Package) For the managed package runtime, this page contains the CardActiveState ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _CardActiveState LWC Card Template_ displays a card state template for a card active state. The layout includes a header with image and title, has flyout functionality, and field tracking capability. The body is a two-column section, where data fields display as block elements in the first column and actions display as block elements in the second column. ## Available CardActiveState Features

Feature

Description

theme

Specifies which theme to use, slds or nds.

header icon

Displays an icon in the header. By default, displays the sObject type icon.

header title

Displays the title of the card. By default, the title of the card is the first field configured.

fields

Lists the data fields configured. Data fields display in the first column.

actions

Lists the actions configured. Actions display in the second column.

tracking

On focus, each field displays an eye icon that triggers tracking when clicked.

flyout

By default, this template has a flyout. When a user clicks the expand icon, the configured flyout displays in a modal.

# CardCanvas1x LWC Layout Template (Managed Package) For the managed package runtime, this page contains the CardCanvas1x LWC Layout Template ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _CardCanvas1x LWC Layout Template_ displays a one column LWC card layout template. ## Available CardCanvas1x Features

Feature

Description

cards

The layout displays cards with one card in each row.

# CardCanvasLayout LWC Layout Template (Managed Package) For the managed package runtime, this page contains the CardCanvasLayout LWC Layout Template ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _CardCanvasLayout LWC Layout Template_ displays a one column LWC card layout template with a header that includes a title and a search box. ## Available CardCanvasLayout Features

Feature

Description

title

Sets the layout title.

search bar

When a user enters text into the search box, only cards containing that text displays.

cards

The layout displays cards with one card in each row.

# CardMiniActive LWC Card Template (Managed Package) For the managed package runtime, this page contains the CardMiniActive LWC Card Template ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Spring '20 The _CardMiniActive LWC Card Template_ displays a card state template with two columns. An icon or image displays in one column, while the data fields and actions display in the other column. The component has a max-height of 132px and truncates descriptive text to two lines. The user can configure multiple images with session variables. However, one image is recommended. ## Available CardMiniActive Features

Feature

Description

fields

By default, the title of the card is the first data field configured. The remaining data fields display as blocks.

actions, smartActions

By default, actions display below fields. Only two actions are visible at anypoint based on the order added.

session

Specifies session variables to add to the card. See Available session Variables on this page.

## Available session Variables

Variable

Description

leftImage

Sets the left image URL. For example, /image-url.jpg. URL can be relative or absolute.

leftIcon

Sets the left icon. For example, standard:icon

rightImage

Sets the left image URL. For example, /image-url.jpg. URL can be relative or absolute.

rightIcon

Sets the right icon. For example, standard:icon

imageStyle

Sets the css style for both left and right images. For example, height: 100px; border: 1px;

## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _CardMiniActive LWC Card Template_ displays a card state template with two columns. An icon or image displays in one column, while the data fields and actions display in the other column. The user can configure multiple images with session variables. However, one image is recommended. ## Available CardMiniActive Features

Feature

Description

fields

By default, the title of the card is the first data field configured. The remaining data fields display as blocks.

actions, smartActions

By default, all actions display below the fields.

session

Specifies session variables to add to the card. See Available session Variables on this page.

## Available session Variables

Variable

Description

leftImage

Sets the left image URL. For example, /image-url.jpg. URL can be relative or absolute.

leftIcon

Sets the left icon. For example, standard:icon

rightImage

Sets the left image URL. For example, /image-url.jpg. URL can be relative or absolute.

rightIcon

Sets the right icon. For example, standard:icon

imageStyle

Sets the css style for both left and right images. For example, height: 100px; border: 1px;

# CardOpenState LWC Card Template (Managed Package) For the managed package runtime, this page contains the CardOpenState LWC Card Template ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _CardOpenState LWC Card Template_ displays a card state template that displays actions only. The layout includes a centered image and text block linked to the first action, and has flyout functionality. Remaining actions display in an inline grid beneath the image and text block. ## Available CardOpenState Features

Feature

Description

theme

Specifies which theme to use, slds or nds.

icon

By default, if the state has an action, the document icon displays at the center of the card. Icon links to the target URL of the first action.

state name

By default, if the state has an action, the state name displays at the center of the card, below the document icon. State name links to the target URL of the first action.

actions

By default, the state name at the center of the card gets the target link of the first action. The rest of the actions, display inline at the bottom.

flyout

By default, this template has a flyout. When a user clicks the expand icon, the configured flyout displays in a modal.

# Cards Caching (Managed Package) For the managed package runtime, cards, card layouts, templates, custom labels, and profile data load from the **VlocityMetadata** partition of the Platform Cache when the card is active and viewed from a record page or a community page. You can clear, enable, or disable the user session cache and specific types of data from the Platform Cache. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To confirm your org has enough space allocated to the **VlocityMetadata** partition or to allocate more space, see [Allocating Space in the Platform Cache Partitions](https://help.salesforce.com/s/articleView?id=service.vaccine_packages_allocate_org_cache_hv.htm&type=5&language=en_US). ## Clearing Caches Remove stored data by clearing specific types of data from the platform and user session caches to get the latest available data from the database. See [Clear Platform and User Session Caches (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_clear_platform_and_user_session_caches.htm&release=264.0.0&type=5 "For the managed package runtime, remove temporarily stored data by clearing the platform and user session caches to get the latest available data. Cards, card layouts, templates, custom labels, and profile data load from the VlocityMetadata partition of the Platform Cache when the card is active and viewed from a record page or a community page."). ## Enabling and Disabling Caches Enable and disable specific caches.

Cache Type

Description

User Session Cache

Disable user information caching in the session cache. See Disable User Information Caching (Managed Package).

Future Method Calls on the Platform Cache

Enable async calls on the Vlocity platform cache. See Enable Async Caching on the Vlocity Card Framework (Managed Package).

Platform Cache

Disable caching across the Vlocity Cards Framework to get the latest available data directly from the database. See Disable Platform Cache (Managed Package).

- **[Clear Platform and User Session Caches (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_clear_platform_and_user_session_caches.htm&release=264.0.0&type=5)** For the managed package runtime, remove temporarily stored data by clearing the platform and user session caches to get the latest available data. Cards, card layouts, templates, custom labels, and profile data load from the **VlocityMetadata** partition of the Platform Cache when the card is active and viewed from a record page or a community page. - **[Disable Platform Cache (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_disable_platform_cache.htm&release=264.0.0&type=5)** For the managed package runtime, disable caching across the Vlocity Cards Framework to get the latest available data directly from the database. Cards, card layouts, templates,custom labels, and profile data load from the **VlocityMetadata** partition of the Platform Cache when the card is active and viewed from a record page or a community page by the end-user. - **[Disable User Information Caching (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_disable_user_information_caching.htm&release=264.0.0&type=5)** For the managed package runtime, disable user information caching in the session cache. The Vlocity Cards Framework keeps stored user profile data on the **VlocityMetadata** partition of the Platform Cache. The `Cards.UserTrigger` caches the user after user information updates, and removes the cached user after the user is disabled or deleted. - **[Enable Async Caching on the Vlocity Card Framework (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_enable_async_caching_on_the_vlocity_card_framework.htm&release=264.0.0&type=5)** For the managed package runtime, use the Future Method to enable card caching to run in sync with the Vlocity Card Framework. Future method calls are async calls made by an Apex class. # Cards Context Variables (Managed Package) For the managed package runtime, several variables are available across the framework to provide contexts to cards, data sources, flyouts, templates, and other components. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note All variables are case sensitive.

Name

Variable

Access

Example

Page Parameters

Represents the page parameters passed to the URL.

{{params}}

Global

/apex/consolecards?id=123

represents {{params.Id}} ,equaling 123.

Object

The object represented in the card, which holds all the fields and information for the record.

{{obj}}

Card

If the object for the card has an Account such that Name = 'Test', obj.Name = 'Test'.

Parent (for flyouts only)

The parent object of the flyout.

{{parent}}

Global (Flyout)

SELECT Id, Name FROM Contact WHERE AccountId = {parent.obj.Id}

where {parent.obj.Id} equals the ID of the object in the card that contains the flyout.

Parent Layout

Gives access to the parent layout scope.

{{parentLayout}}

Card

 

Attributes

Allows access to the attributes passed to the vloc-card, vloc-layout, and vloc-cmp directives

{{attrs}}

Global

<vloc-card name="community-account" customtemplate="community-sidebar-ads"> </vloc-card>

Access the name and custom template by calling {{attrs.name}} and {{attrs.customtemplate}}.

Session Variables

Variables that are set in the designer for runtime use, they can access any property in the scope plus the {{payload}} variable.

{{session}}

Layout or Card

You can set a session variable to be named: Title and set it to obj.Name in the designer.

Payload

A temporary variable used by the session variables to access the entire result of a data source.

{{payload}}

Layout or Card

The variable holds the entire result of the data source so you can access other properties like payload.totalSize while using a result variable of result.records in the Datasource.

Imported Scope

The framework allows for external modules and controllers to be imported into the cards, layouts, and components. Importing the scope can then extend the functionality of the framework, for example, the {ctrl} attribute.

{{importedScope}}

Global to the inserted component.

If imported into a layout, the cards also have access.

Excerpt from the community templates:

Component with imported ctrl; see ctrl attribute inserted the infoCtrl:


                <vloc-cmp name="frame" customtemplate="community-content-frame" loaded="true" 
ctrl="infoCtrl" ng-show="!$root.showContent"> 
</vloc-cmp>
              

Template using imported logic:

<div class="info">
<h2 ng-click="$root.showContent = !$root.showContent; importedScope.url = '';">
<span class="icon icon-v-left-caret">
</span>Back
</h2>
<iframe ng-src="https://help.salesforce.com/s/%7B%7BimportedScope.url%7D%7D" onload="iframeLoaded()"ng-show="importedScope.loaded">
</iframe>
</div>

Controller imported:

.controller('infoCtrl', 
function($scope, $rootScope, remoteActions, force, $sce)
{ $scope.loaded = false;
$rootScope.$on('actionSelected',function(event, action) {
console.log(action.url);
$scope.loaded = false;
$rootScope.showContent = false;
$scope.url = $sce.trustAsResourceUrl(action.url);
});
window.iframeLoaded = function() {
if ($scope.url) {
console.log('Community frame loaded');
$scope.loaded = true;
$scope.$apply();
}
};
});

User Information Variable

Information about the user is fetched on the start of the framework. The information is stored under the $rootScope.vlocity variable and is available inside templates in $root.vlocity.

{{$root.vlocity}}

Layout or Card

Example of a query on a card data source using a contextId: Select AccountId, Account.Name, Name, Birthdate,Phone FROM Contact where AccountId  = '{{$root.vlocity.userAccountId}}'

User information available:

  • User Id: $root.vlocity.userId

  • User Name : $root.vlocity.userName

  • User Type: $root.vlocity.userType

  • User Role: $root.vlocity.user

  • User Profile Id : $root.vlocity.userProfileId

  • User Profile Name : $root.vlocity.userProfileName

  • User Account Id : $root.vlocity.userAccountId

  • User Contact Id : $root.vlocity.userContactId

  • Locale in browser lowercase format : $root.vlocity.userAnLocale 

  • Locale in Salesforce format: $root.vlocity.userSfLocale

  • Currency code: $root.vlocity.userCurrency

  • Language: $root.vlocity.userLanguage

  • Time Zone: $root.vlocity.userTimeZone

# Cards Designer (Managed Package) For the managed package runtime, you can use the Cards Designer to interactively create and configure layouts, zones, cards, flyouts, and card states. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/screenshot___vlocity_cards_eg.png) The optional Preview tab displays changes as soon as you make them: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/screenshot___layout___configure.png) For information on how to use the Cards Designer to create and configure Card layouts, see [Creating a New Card Layout using Cards Designer](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_card_layout_using_card_designer.htm&release=264.0.0&type=5 "For the managed package runtime, create a card layout to build visual components to your customer interactions by adding data, enabling actions, and using custom or Vlocity templates to determine the look and feel."). # Cards Framework Event Tracking (Managed Package) For the managed package runtime, the Vlocity Tracking Service is an event-tracking service that can capture details about how Vlocity users interact with the Cards Framework. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Preview Event Tracking in the Cards Designer (Omnistudio for Managed Packages) (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_event_tracking_in_the_cards_designervlocity.htm&release=264.0.0&type=5)** For the managed package runtime, typically, administrators who are tracing Cards Framework triggers want to track only runtime events. The Cards Framework includes a `Track.CardPreview` trigger for Card Designer Preview tracking entries, which you can disable to screen out preview events. - **[Event Tracking Data for Cards Framework (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_event_tracking_data_for_cards_framework.htm&release=264.0.0&type=5)** For the managed package runtime, for the Cards Framework, events tracked are OmniAnalytics Card Events, initTracking, initCardFramework, initLayout, selectCard, performAction, trackField, and Resolution. # Cards Framework Required Resources (Managed Package) For the managed package runtime, for Angular components, when implementing the `CardFramework` in your custom page, you must include these resources, in the order given. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Resource

Location

Description

vlocity_core_assets.js

$Resource.vlocity_core_assets, '/latest/vlocity_core_assets.js'

A compilation of libraries and frameworks used by Vlocity, including:

  • AngularJS 1.6.8

  • jQuery 3.2.1

  • Lodash 4.17.4

  • Moment 2.17

  • Angular-animate

  • Angular-sanitize

  • Angular-messages

  • Angular-aria

  • Angular-hotkeys

  • CurrencyFormatter.js 1.x

  • Vlocity internal providers and services:

    • Vlocity.js

    • RemoteActions.js

    • promiseQueue.js

    • localizable.js

    • InteractionTracking.js

    • currencyInfo

AngularStrap

$Resource.angular_strap_bundle_1_6

Incorporates bootstrap directives in the framework to be used whenever necessary.

SldsAngular

$Resource.SldsAngular

Angular directives that use the Salesforce Lightning Design System

CardFramework_Assets

$Resource.cardframework_core_assets , '/latest/cardframework_assets.js'

Compilation of specific libraries needed for Cards Framework functionality, including:

  • ForceTK

  • ForceNG

  • tmhDynamicLocale

  • Moment with Locales

  • Moment-timezone

  • Ng-Table

  • SVG4Everybody

  • IFrameResizer

  • CometD

CardFramework.js

$Resource.cardframework_core_assets , '/latest/cardframework.js'

The main framework file including all the directives, services, factories, and providers that house the functionality

# Cards Framework Versioning (Managed Package) For the managed package runtime, the Vlocity Cards Framework supports versioning for all components. The name, author, and version combination must be unique for each component of a given type (layout, card, or template) in an org. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Use the following fields to create unique versions of a component:

Field

Description

Name

Components are requested by name.

Author

Specifies the user organization that created the record. Use author names that describe the team creating the content. Vlocity-authored components have Vlocity as the author. You cannot modify these components, but you can clone them.

Version

An integer that increases by one with every new version.

Active

Indicates whether a record is active for runtime use. One active record per name is allowed in an org. Activating a component deactivates all other components of the same type that have the same name. Only active records are exported when a DataPack is created.

- **[Card and Card Layout Naming Conventions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_card_and_card_layout_naming_conventions.htm&release=264.0.0&type=5)** For the managed package runtime, follow Vlocity's requirements and best practices when naming cards and card layouts. - **[Activation in the Cards Framework (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activation_in_the_cards_framework.htm&release=264.0.0&type=5)** For the managed package runtime, multiple versions of a component can exist, but only one version at a time can be active. - **[Versioning in the Cards Framework (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_versioning_in_the_cards_framework.htm&release=264.0.0&type=5)** For the managed package runtime, creating a version of a component creates an exact copy of the record with a Version equal to the latest version number plus one. - **[Cloning in the Cards Framework (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cloning_in_the_cards_framework.htm&release=264.0.0&type=5)** For the managed package runtime, when you clone a component, you must change the **Name** and/or **Author** fields. - **[Understanding the Author of a Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_understanding_the_author_of_a_card_layout.htm&release=264.0.0&type=5)** For the managed package runtime, the **Author** property in templates, layouts, and cards specify the user organization that created the record. - **[Sample Versioning Workflow (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_sample_versioning_workflow.htm&release=264.0.0&type=5)** For the managed package runtime, this example shows the differences in versioning between a clone and a new version. - **[Versioning Best Practices (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_versioning_best_practices.htm&release=264.0.0&type=5)** For the managed package runtime, consider the following best practices for versioning in Omnistudio. - **[Exporting Vlocity Layouts and Cards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_exporting_vlocity_layouts_and_cards.htm&release=264.0.0&type=5)** For the managed package runtime, when deploying components in a new org, you must export any applicable Vlocity Cards framework components, particularly those that you modified. The Vlocity Cards Framework supports versioning for all components (layouts, cards and templates). Only active versions are exported. # Cards Framework Web Deployment Options (Managed Package) For the managed package runtime, you can deploy Omnistudio for Managed Packages components, including Omniscripts and Cards Framework components, outside of Salesforce. This type of deployment is also called off-platform. You can use these components in an external server with or without an active connection to a Salesforce org. You can deploy components to a Heroku web server or to Adobe Enterprise Manager. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Keep in mind that certain features require a connection. Be mindful of API usage, as every call costs an API hit to your org. Use data pack side-loading and batch calls to reduce hits. - **[Deploying the Cards Framework to a Heroku Web Server (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_deploying_the_cards_framework_to_a_heroku_web_server.htm&release=264.0.0&type=5)** For the managed package runtime, this topic assumes you have a Heroku server deployed and know how to upload resources to it using development tools such as FTP and Git. It also assumes that you understand AngularJS and HTML5. - **[Adding a Vlocity Card Component to an AEM Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_vlocity_card_component_to_an_aem_page.htm&release=264.0.0&type=5)** For the managed package runtime, to add a Vlocity Card Component (VCC) to a page in Adobe Experience Manager (AEM) page: - **[Hosting Vlocity Templates On An External Server (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_hosting_vlocity_templates_on_an_external_server.htm&release=264.0.0&type=5)** For the managed package runtime, host Vlocity Templates on external servers. # Cards URL Syntax (Managed Package) For the managed package runtime, the Vlocity Cards framework uses a generic Visualforce page to show layouts. This page requires at least one parameter pair to load a specific layout. For example: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). `/apex/consolecards?layout=MyLayout&layoutId=3141592653589793` - `layout`—Represents the name of an active layout. - `layoutId`—for testing purposes, the layout ID is passed so you can view the layout regardless of its version or status. By default, `layout` and `layoutId` get passed as URL parameters. For example: `/apex/ConsoleCards?layout=Test&layoutId=0011500001ChJqa`. You can add more parameters to the URL as necessary. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If either `layout` or `layoutId` are not set, the framework loads the default Grid layout. Consequently, any other parameters passed to the page get stored in the `{{params}}` context variable to use on that page. # Carousel Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains a Carousel LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _Carousel Lightning Web Component_ displays a series of images inside a container. Images display one at a time and you can set how to navigate between images (by image thumbnail or colored dots). ## Available c-carousel Attributes

Attribute

Value

Type

Required

Description

arrow

true, false (Default: true)

boolean

 

To display next and previous navigation arrows, set to false.

extraclass

 

string

 

Sets extra class to parent level element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

interval

 

number

 

If set, adds timer in milliseconds, with play and pause controls.

mode

preview, dots (Default: dots)

string

 

Sets which navigation type to display.

thumbnaillimit

 

number

 

Limits the number of thumbnails to display. Controls thumbnail width when thumnaillimit is greater than the number of carousel items.

## Example c-carousel Component ``` ``` ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _Carousel Lightning Web Component_ displays a series of images inside a container. Images display one at a time and you can set how to navigate between images (by image thumbnail or colored dots). ## Available c-carousel Attributes

Attribute

Value

Type

Required

Description

arrow

true, false (Default: true)

boolean

 

To display next and previous navigation arrows, set to false.

extraclass

 

string

 

Sets extra class to parent level element. To add multiple classes, use a space to separate each class, such as `classone classtwo'.

interval

 

number

 

If set, adds timer in milliseconds, with play and pause controls.

mode

preview, dots (Default: dots)

string

 

Sets which navigation type to display.

thumbnaillimit

 

number

 

Limits the number of thumbnails to display. Controls thumbnail width when thumnaillimit is greater than the number of carousel items.

## Example c-carousel Component ``` ``` # CarouselItem Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains a CarouselItem LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _CarouselItem Lightning Web Component_ is the basic element inside the _Carousel Lightning Web Component_. Each carousel item populates the carousel images. ## Available c-carousel-item Attributes

Attribute

Value

Type

Required

Description

assertive-text

 

string

 

Adds assistive text for the image.

description

 

string

 

Adds text to display under the header.

header

 

string

 

Adds text to display under the image.

src

URL

string

yes

Adds the image source path.

thumbnail

URL

string

 

Adds the thumbnail source path.

## Example c-carousel-item Component ``` ``` ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _CarouselItem Lightning Web Component_ is the basic element inside the _Carousel Lightning Web Component_. Each carousel item populates the carousel images. ## Available c-carousel-item Attributes

Attribute

Value

Type

Required

Description

assertive-text

 

string

 

Adds assistive text for the image.

description

 

string

 

Adds text to display under the header.

header

 

string

 

Adds text to display under the image.

src

URL

string

yes

Adds the image source path.

thumbnail

URL

string

 

Adds the thumbnail source path.

## Example c-carousel-item Component ``` ``` # Cases Create cases for loyalty program members and associate the cases with the respective loyalty program member records. Manage cases in the service console for loyalty program members. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions
Available in: Orgs that have the B2C - Loyalty Management Plus or the Loyalty Management - Advanced license enabled
# Categorize Date Column Values into Buckets In Salesforce Data Pipelines, Data Prep provides transformations that allow you to prepare, clean, and transform your data. For example, you can use a transformation to create a calculated column based on a formula. You add transformations inside a Transform node. You can string together multiple transformations to manipulate data sequentially. ### Required Editions ## Categorize Date Column Values into Buckets
User Permissions Needed
To manage and create a recipe: Edit CRM Analytics Dataflows OR Edit Dataset Recipes
1. In the Transform node of a Data Prep recipe, select the date column in the Preview tab. 2. In the Transform toolbar, click the Bucket button (![Create bucket button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_data_prep_bucket_icon.png)) to define the buckets. 3. Select whether to use absolute or relative dates. Absolute dates are defined dates on a calendar, like July 25, 2023. Relative dates are a time period in relation to the day the data is viewed, like last quarter, or next month. ![The left pane shows options to configure the date buckets.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_bucket_dates_edit.png) 4. Select ![Add bucket button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_recipe_add_filter_condition_button.png). 5. Enter a label for the first bucket. The first bucket is for the earliest date range. Each subsequent bucket must have a later date range than the previous bucket. ![The Define Range modal allows you to specify a bucket label and its range.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_bucket_dates_define_bucket.png) 6. Select the date range for this bucket. 7. Click **Add**. 8. To create another bucket with a later date range, click ![Add bucket button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_recipe_add_filter_condition_button.png) and specify the details. 9. To place null values into their own bucket, select **Bucket null values**. 10. Under Show Results In, select whether the new bucket values appear in a new column and what happens to the original column. 11. If you elect to create a column, set its label under Column Label. 12. Click **Apply** to add the transformation to the Transform node. The Preview tab shows the new bucket column. 13. To view the Graph area, click the Collapse button (![Collapse button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_button_collapse.png)). 14. Save the recipe. After you run the recipe, you can view the bucket assigned to each row in the bucket column. # Categorize Dimension Column Values into Buckets In Salesforce Data Pipelines, use a bucket column in a Data Prep recipe to categorize and organize text values. For example, you can create buckets West, Central, and East to group regions. ### Required Editions ## Categorize Text Column Values into Buckets In Salesforce Data Pipelines, use a bucket column in a Data Prep recipe to categorize and organize text (dimension) values. For example, you can create buckets West, Central, and East to group regions.
User Permissions Needed
To manage and create a recipe: Edit CRM Analytics Dataflows OR Edit Dataset Recipes
1. In the Transform node of a Data Prep recipe, select the text (dimension) column in the Preview tab. 2. In the Transform toolbar, click the Bucket button (![Create bucket button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_data_prep_bucket_icon.png)) to define the buckets. ![The left panel provides options to define the buckets.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_bucket_dimensions_edit.png) 3. Click ![Add bucket button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_recipe_add_filter_condition_button.png). 4. Enter a label for the bucket. Click ![Add bucket terms button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_recipe_add_filter_condition_button.png) to add bucket terms. ![The Define Range modal allows you to set the bucket label and add terms.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_bucket_define_dim_bucket.png) 5. Select an operator and a value. ![The term modal allows you to set the term operator and value.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_bucket_define_dim_bucket_terms.png) In the Value box, search for and select the values to be assigned to this bucket. For direct datasets and datasets, you can search for all values. Otherwise, you are limited to preview data. If a value doesn’t appear in the list, adjust your sample size or refine your search. You can select from the list of available values or click **Add new value** and enter a custom value. 6. Click **Done**. 7. To add more terms, click ![Add bucket terms button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_recipe_add_filter_condition_button.png) again. 8. Click **Done** when you have entered all of the terms for your bucket. 9. To create more buckets, click ![Add bucket button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_recipe_add_filter_condition_button.png) and select another label and the values to assign to the bucket. 10. To place null values into their own bucket, select **Bucket null values**. 11. To place values not otherwise bucketed together in a bucket, select **Bucket remaining values** then specify the name for this group. 12. To bucket similarly spelled values together, select **Apply smart bucketing**. To change the edit distance, use the Distance Threshold slider. Einstein uses the [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance) for fuzzy matching. The default edit distance is set to 1, which means that a single-character edit is allowed for text matching. For example, with an edit distance of 2, variations such as flavor, Flavor, flavour, and flavors can all belong in the same bucket. By default, differences in uppercase and lowercase characters are ignored. 13. Under Show Results In, select whether the buckets appear in a new column and what happens to the original column. 14. If you elect to create a column, set the label under Column Label. 15. Click **Apply** to add the transformation to the Transform node. The Preview tab shows the new bucket column. 16. To view the Graph area, click the Collapse button (![Collapse button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_button_collapse.png)). 17. Save the recipe. After you run the recipe, you can view the bucket assigned to each row in the bucket column. # Categorize Measure Column Values into Buckets In Salesforce Data Pipelines, use a bucket column in a Data Prep recipe to categorize and organize numeric values. For example, you can create buckets High, Middle, Low to group numbers of cases per account.
User Permissions Needed
To manage and create a recipe: Edit CRM Analytics Dataflows OR Edit Dataset Recipes
1. In the Transform node of a Data Prep recipe, select the number (measure) column in the Preview tab. 2. In the Transform toolbar, click the Bucket button (![Create bucket button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_data_prep_bucket_icon.png)) to define the buckets. ![The left panel provides options to set the buckets.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_bucket_measures_edit.png) 3. For Range 1, enter a value and label for the first bucket. Rows with values below the Range 1 value are assigned to this bucket. ![The Define Range modal is where you specify the bucket label and range.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_bucket_define_mea_bucket.png) 4. If your bucket column has more than two buckets, click **Add Range>>** to add a middle range. 5. For each additional middle range you add, enter the range of values and the bucket label. Rows with values greater than or equal to the first value and less than the second value are assigned this bucket. 6. For the final range, enter a value and bucket label. Rows with values greater than or equal to this value are assigned to this bucket. ![The defined ranges appear in the Bucket modal.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_bucket_define_mea_ranges.png) 7. To place null values into their own bucket, select **Bucket null values**. 8. Under Show Results In, select whether the buckets appear in a new column and what happens to the original column. 9. If you elect to create a column, set the label under Column Label. 10. Click **Apply** to add the transformation to the Transform node. The Preview tab shows the new bucket column. 11. To view the Graph area, click the Collapse button (![Collapse button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_button_collapse.png)). 12. Save the recipe. After you run the recipe, you can view the bucket assigned to each row in the bucket column. # Categorizing Technician Time with Time Sheet Entry Records The Time Sheet Entry records represent the time that a technician spends on a field service task. To ensure compliance with labor laws, use the Time Sheet Entry record to categorize the time your technician has spent on different tasks in a shift. ### Required Editions
Available in: Lightning Experience
Available in: All editions of Field Service Plus for Energy & Utilities, and all editions of Asset Service Lifecycle Management
| Name | API Name | Notes | | --- | --- | --- | | Break Time | BreakTime | Either paid or unpaid depending on the labor union and labor laws. Some unions mandate break time, so technicians can document a Time Sheet Entry with the category set to Break Time for compliance. | | Drive Time | DriveTime | Either paid or unpaid. | | Idle Time | IdleTime | Records wait times. For example, in a morning shuffle, Idle Time indicates the time it takes to wait for the scheduler to give a technician work for the day. | | Meal Time | MealTime | Records meal times. | | Meeting Time | MeetingTime | Records meeting times. | | Other-Auto | OtherAuto | Automatically assigned to record time spent in miscellaneous tasks. | | Other-Manual | OtherManual | Manually assigned to record time spent in miscellaneous tasks. | | Spread Time | SpreadTime | Hours associated with work that isn’t associated with a Word Order/Work Order Line Item. | | Work Time (default) | WorkTime | The only category that's automatically selected by Geolocation-Based Automation. | | Mandatory Break Time | MandatoryBreakTime | Records break time that is mandated by the labor union. | | Between Shifts | BetweenShift | Records time between shifts. The Field Service mobile app automatically adds this entry when technicians log multiple shifts in a day. | | Vacation | Vacation | Records approved paid vacation time. | | Unpaid Vacation | Unpaid Vacation | Records unpaid vacation time. | # Certificate-Based Authentication Using certificates to authenticate simplifies provisioning your mobile users, and your day-to-day mobile administration tasks by eliminating usernames and passwords. Salesforce uses X.509 certificates to authenticate users more efficiently, or as a second factor in the login process. ## MDM Settings for Certificate-Based Authentication To enable certificate-based authentication for your mobile users, you configure key-value pair assignments through your MDM suite. Here are the supported keys:
Key Data Type Platform Description
RequireCertAuth Boolean Android, iOS

If true, the certificate-based authentication flow initiates.

Android: Uses the user certificate on the device for authentication inside a webview.

iOS: Redirects the user to Safari for all authentication requests.

ManagedApp​CertAlias String Android Alias of the certificate deployed on the device picked by the app for user authentication. Required for Android only.
After you save your key-value pair assignments, you can push the mobile app with the updated certificate-based authentication flow to your users via your MDM suite. # Certificate-Based Authentication In addition to authentication methods like single sign-on, Salesforce provides certificate-based authentication, which you can configure to authenticate your Salesforce users with unique PEM-encoded X.509 certificates. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience in All editions
Certificate-based authentication complies with [FedRAMP High Authenticator Assurance Level (AAL) 3 digital identity requirements](https://www.fedramp.gov/assets/resources/documents/CSP_Digital_Identity_Requirements.pdf) and [personal identification verification cards](https://piv.idmanagement.gov/pivcertchains/). Your org can also use certificate authority-signed (CA) certificates with certificate-based authentication. View the list of [Outbound Messaging SSL CA Certificates](https://login.salesforce.com/cacerts.jsp). Certificate-based authentication uses the Mutual Transport Layer Security (mTLS) protocol. With this protocol, Salesforce and the user mutually prove their identity to each other by using a process called the mTLS handshake. Here's a high-level overview of the authentication flow. - The user goes to your My Domain login page and clicks **Certificate-Based Login**. - Salesforce sends its server certificate and certificate chain to the user's browser. - The browser verifies the server certificate and chain. - If prompted, the user selects or provides a user authentication certificate, also known as a client certificate. This step can vary depending on the browser, the Salesforce service that the user is accessing, and whether the user has used the certificate before. - The user's browser sends the user authentication certificate and the certificate chain to the Salesforce server. Salesforce verifies the certificate and chain by using the user authentication certificate configured in your org settings. - After Salesforce and the browser have mutually authenticated each other, the user is logged in. To add the user authentication certificate to your org, upload it to your User Authentication Certificates in Setup. Alternatively, use REST API, SOAP API, and standard API object creation to manage the [UserAuthCertificate object](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_userauthcertificate.htm). You can then integrate the uploaded user certificates with an external API tool, such as Data Loader. External API tools can help you manage your user certificates. Before enabling certificate-based authentication, keep these requirements in mind. - This feature is available only in orgs configured with the Let users authenticate with a certificate setting enabled on the Identity Verification page in Setup. - Certificated-based authentication isn’t supported in Experience Cloud sites. - If you use a user authentication certificate from a public CA vendor, the certificate must chain to a valid Root CA for your instance. For a list of valid Public CA vendors, add /cacerts.jsp to your instance URL, such as https://MyCompany.my.salesforce.com/cacerts.jsp. - User authentication certificates must contain the Client Authentication EKU (Extended Key Usage) extension. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important With Google Chrome Root Program Policy v1.7, your user authentication (client) and server certificates can't originate from the same Public Root CA in the Chrome Trusted Root List. With this change, you can no longer use certificates that include EKUs for both user and server authentication. To prevent disruptions, transition to separate certificate hierarchies. The Google Chrome policy changes take effect on June 15, 2026, but you can experience issues with certificate renewal for some Public CA vendors before that date. For more information, see [Upcoming Mandatory Changes to Public Key Infrastructure (PKI)](https://help.salesforce.com/s/articleView?id=005237282&type=1&language=en_US). - Uploaded user authentication certificates must be PEM-encoded X.509 digital certificates. - An uploaded PEM file can contain a single certificate or up to 10 certificates in a certificate chain. - An uploaded PEM file can be up to 1 MB. - The user authentication certificate can’t be expired. - The user authentication certificate must be unique to a single Salesforce org. - A user can have multiple authentication certificates, but a certificate must be unique to a user. - The user must be able to connect to port 8443. Certificate-based authentication operates off Salesforce port 8443. ## Configuration Tasks To set up certificate-based authentication for an API client, see [Set Up a Mutual Authentication Certificate for API Login](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_uploading_mutual_auth_cert.htm&release=264.0.0&type=5 "To improve security by preventing impersonation, you can require mutual authentication when a client app tries to access Salesforce data. With mutual authentication, the client app and the Salesforce server prove their identity to each other with signed certificates by using the Mutual Transport Layer Security (mTLS) protocol. As a prerequisite for mutual authentication, upload your client certificate to Salesforce.") and [Configure Your API Client to Use Mutual Authentication](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_uploading_mutual_auth_cert_api.htm&release=264.0.0&type=5 "To use mutual authentication when calling Salesforce services via API, configure your client app to present your client certificate and chain to Salesforce. For security reasons, the client certificate must be used only in your org."). To configure certificate-based authentication for UI login, see the resources below. - **[Enable Certificate-Based Authentication](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_enable.htm&release=264.0.0&type=5)** To use certificates to authenticate individual users to your org, you must enable certificate-based authentication. - **[Validate the Revocation Status of User Authentication Certificates](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_revocation_status.htm&release=264.0.0&type=5)** Each time users log in with a certificate, you can validate its revocation status using the Online Certificate Status Protocol (OCSP) or Certificate Revocation Lists (CRL). With OCSP, Salesforce checks the revocation status of certificates in real time. If an OCSP status check fails, or a certificate isn’t configured for OCSP, Salesforce uses a CRL instead. - **[Review Certificate Login Errors](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_errors.htm&release=264.0.0&type=5)** When you enable certificate revocation status checks, Salesforce prevents logins with certificates that are revoked or can’t be validated. To see why a certificate login failed, check your org’s Login History page. Review these login errors. - **[Upload a User Authentication Certificate](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_upload.htm&release=264.0.0&type=5)** After enabling certificate-based authentication, you can upload PEM-encoded X.509 digital certificates to authenticate individual users to your org. - **[Add Certificate-Based Authentication to Your My Domain Login Page](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_login.htm&release=264.0.0&type=5)** After you enable certificate-based authentication in Identity Verification, add the Certificate-Based Login button to your My Domain login page. Users can click the button to authenticate using their unique user authentication certificate. - **[View Details About User Authentication Certificates](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_view.htm&release=264.0.0&type=5)** You can view all user authentication certificates uploaded for your org, and you can view certificates assigned to a single user. From these views, you can see when the certificates were uploaded and when they expire. You can also rename and delete certificates. - **[Download a User Authentication Certificate](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_download.htm&release=264.0.0&type=5)** You can download the PEM-encoded X.509 digital certificate previously uploaded to your org. - **[Rename User Authentication Certificates](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_rename.htm&release=264.0.0&type=5)** You can rename a user authentication certificate. To edit more than a user certificate’s name, delete the certificate, and upload a new PEM-encoded X.509 digital certificate. - **[Delete User Authentication Certificates](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_delete.htm&release=264.0.0&type=5)** Delete a user authentication certificate if it’s compromised and the certificate has been revoked, expired, or no longer being used. - **[Log In to Your Org with Certificate-Based Authentication](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth_user_login.htm&release=264.0.0&type=5)** If your Salesforce org supports certificate-based authentication as a login method, you can log in with your unique user authentication certificate instead of a username and password. #### See Also - [Session Security](https://help.salesforce.com/s/articleView?id=xcloud.security_overview_sessions.htm&release=264.0.0&type=5 "After logging in, a user establishes a session with the platform. Use session security to limit exposure to your network when a user leaves the computer unattended while still logged in. Session security also limits the risk of internal attacks, such as when one employee tries to use another employee’s session. Choose from several session settings to control session behavior.") - [Object Reference for Salesforce and Lightning Platform: UserAuthenticationCertificate](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_userauthcertificate.htm) # Certificates and Keys Salesforce certificates and key pairs are used for signatures that verify a request is coming from a customer org. They’re used for authenticated SSL communications with an external website, or when using a customer org as an Identity Provider. Customers must generate a Salesforce certificate and key pair only if they’re working with an external website that wants verification that a request is coming from a Salesforce org. Salesforce offers two types of certificates: - Self-Signed: A self-signed certificate is signed by Salesforce. Not all external websites accept self-signed certificates. - CA-Signed: A CA-signed certificate is signed by an external certificate authority (CA). Most external websites accept CA-signed certificates. Customers must first generate the certificate signing request to send to a CA, and then import the signed version of the certificate before they can use it. See “[About Salesforce Certificates and Keys](https://help.salesforce.com/apex/HTViewHelpDoc?id=security_keys_about.htm&language=en_US)” for more information. # Certificates and Keys Salesforce certificates and key pairs are used for signatures that verify a request is coming from your org. They’re used for authenticated SSL communications with an external website, or when using your Salesforce org as an Identity Provider. You only need to generate a Salesforce certificate and key pair if you're working with an external website that wants verification that a request is coming from a Salesforce organization. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: all editions
User Permissions Needed
To create, edit, and manage certificates: Manage Certificates
- **[Certificates in Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_policy_and_rotation.htm&release=264.0.0&type=5)** Understand how certificates are used in Salesforce and how they expire. To prevent disruption and potential downtime, replace your certificates before they expire. Processes can stop working when a certificate expires, which can lead to outages. - **[Generate a Self-Signed Certificate](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_creating.htm&release=264.0.0&type=5)** Generate a certificate signed by Salesforce to show that communications purporting to come from your organization are really coming from there. - **[Generate a Certificate Signed by a Certificate Authority](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_uploading_signed_cert.htm&release=264.0.0&type=5)** A certificate authority-signed (CA-signed) certificate can be a more authoritative way to prove that your org’s data communications are genuine. You can generate this type of certificate and upload it to Salesforce. - **[Export and Import Certificates with a Keystore](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_export_import_certs_with_a_keystore.htm&release=264.0.0&type=5)** You can export all your certificates and private keys into a keystore for storage or import certificates and keys from a keystore. This keystore lets you move keys from one organization to another. The exported file is in the Java Keystore (JKS) format, and the imported file must also be in the JKS format. - **[Set Up a Mutual Authentication Certificate for API Login](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_uploading_mutual_auth_cert.htm&release=264.0.0&type=5)** To improve security by preventing impersonation, you can require mutual authentication when a client app tries to access Salesforce data. With mutual authentication, the client app and the Salesforce server prove their identity to each other with signed certificates by using the Mutual Transport Layer Security (mTLS) protocol. As a prerequisite for mutual authentication, upload your client certificate to Salesforce. - **[Configure Your API Client to Use Mutual Authentication](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_uploading_mutual_auth_cert_api.htm&release=264.0.0&type=5)** To use mutual authentication when calling Salesforce services via API, configure your client app to present your client certificate and chain to Salesforce. For security reasons, the client certificate must be used only in your org. - **[Manage Master Encryption Keys](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_using_master.htm&release=264.0.0&type=5)** Encrypted custom fields, such as Social Security Number or Credit Card Number, are encrypted with a master encryption key. This key is automatically assigned when you select fields to encrypt. You manage your own master key according to your organization’s security and regulatory needs. - **[Set Expired Certificate Notification Permission](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_set_expired_certificate_notification_permission.htm&release=264.0.0&type=5)** Limit who's notified about expiring certificates by assigning the Receive Certificate Expiration Notifications permission. When you assign this permission to at least one admin, users with the System Administrator profile or the Modify All Data permission receive emails about an expiring certificate only the day before it expires and the day of expiry. Admins with the permission receive emails at 60, 30, and 10 days before a certificate expires. If you don’t assign this permission to anyone, all users with either the System Administrator profile or the Modify All Data system permission continue to receive all certificate expiration emails. - **[Manage Expired Certificates](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_manage_expired_certificates.htm&release=264.0.0&type=5)** When you’re notified that a certificate authority (CA) or self-signed certificate is expiring, or when your org no longer needs a certificate, manage certificate deletion appropriately. - **[Replace the Default Proxy Certificate for SAML Single Sign-On](https://help.salesforce.com/s/articleView?id=xcloud.security_auth_retire_proxy_cert_sso_saml.htm&release=264.0.0&type=5)** The proxy.salesforce.com default certificate has been retired due to its expiration and for security best practices. If your Salesforce org uses this certificate for SAML single sign-on, act now to prevent a possible interruption of service. - **[Manage Your Certificate Trust Store](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_trust_store_manage.htm&release=264.0.0&type=5)** Use the Certificate Trust Store to maintain a repository of root certificates for validating inbound TLS connections (not inbound mTLS). The Certificate Trust Store is tied to your individual Salesforce org and isn’t shared with others. By managing your own trust store, you can ensure that integrations align with your specific security and compliance requirements. # Certificates in Salesforce Understand how certificates are used in Salesforce and how they expire. To prevent disruption and potential downtime, replace your certificates before they expire. Processes can stop working when a certificate expires, which can lead to outages. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: all editions
## Certificate Compliance and Expiration Salesforce complies with the guidance of the Certification Authority Browser Forum (CA/Browser Forum), the organization that sets most of Web Public Key Infrastructure (WebPKI) rules. Salesforce adheres to their Transport Layer Security (TLS) Server Baseline Requirements, which change regularly. These requirements are outside of Salesforce control, and all certificate vendors are bound by the rules of the CA/Browser Forum. The CA/Broswer Forum is implementing a phased approach to shorten the maximum allowed certificate lifespan and the maximum reuse period for domain validation information. - Until March 15, 2027, the maximum lifespan and maximum reuse period for domain validation information is 200 days. - As of March 15, 2027, the maximum lifespan and maximum reuse period for domain validation information is 100 days. - As of March 15, 2029, the maximum lifespan is 47 days and the maximum reuse period for domain validation information is 10 days. These maximum lifespans and reuse periods apply at the time of certificate creation. For example, the latest possible expiration date of a TLS certificate created on June 1, 2025 is July 4, 2026. But the latest possible expiration date of a TLS certificate created on June 1, 2026 is December 18, 2026. Because Salesforce complies with the guidance of the Certification Authority Browser Forum (CA/Browser Forum), these changes apply to certificates created in Salesforce. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important As we reach each milestone, these lifespans apply to all new certificates signed by a public Certificate Authority (CA), regardless of whether you, Salesforce, or a third party purchase the certificate. However, these changes have no impact on the expiration date of existing certificates. Self-signed certificates aren’t subject to the new lifespans or reuse periods for domain validation information, and there’s no change to the expiration date on existing certificates. Currently, when you create a self-signed certificate in Salesforce, that certificate expires after one year. CA certificates that you import into Salesforce expire based on the rules of your vendor, which conform to CA/Browser Forum rules. The current maximum time period for domain validation information reuse is 200 days, after which Domain Control Validation (DCV) is required. Salesforce plans to publish a release note as we reach each milestone. To receive notifications about upcoming expirations for certificates stored in your org, assign the Expired Certificate Notification permission to specific admins. See [Set Expired Certificate Notification Permission](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_set_expired_certificate_notification_permission.htm&release=264.0.0&type=5 "Limit who's notified about expiring certificates by assigning the Receive Certificate Expiration Notifications permission. When you assign this permission to at least one admin, users with the System Administrator profile or the Modify All Data permission receive emails about an expiring certificate only the day before it expires and the day of expiry. Admins with the permission receive emails at 60, 30, and 10 days before a certificate expires. If you don’t assign this permission to anyone, all users with either the System Administrator profile or the Modify All Data system permission continue to receive all certificate expiration emails."). Those notifications apply to certificates that are stored in your org, not Salesforce TLS certificates. ## Salesforce Certificates To deliver a trustworthy experience, Salesforce uses High Availability (HA), Disaster Recovery (DR), load balancing, and auto-scaling technologies. With this approach, Salesforce orders and provisions certificates as needed. Hyperforce services already implement this approach. Salesforce typically rotates the certificates that we provide at least 45 days before they expire, though a certificate can be rotated by the platform sooner. ## Salesforce Features That Use Certificates In Salesforce, certificates are used for encryption in transit and [encryption at rest](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_overview.htm&type=5&language=en_US), for [Certificate-Based Authentication](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth.htm&release=264.0.0&type=5 "In addition to authentication methods like single sign-on, Salesforce provides certificate-based authentication, which you can configure to authenticate your Salesforce users with unique PEM-encoded X.509 certificates."), and for some [Single Sign-On](https://help.salesforce.com/s/articleView?id=xcloud.sso_about.htm&release=264.0.0&type=5 "Single sign-on (SSO) is an authentication method that enables users to access multiple applications with one login and one set of credentials. For example, after users log in to your org, they can automatically access all apps from the App Launcher. You can set up your Salesforce org to trust a third-party identity provider to authenticate users. Or you can configure a third-party app to rely on your org for authentication.") options. You can also use a certificate that you own to serve a [custom domain](https://help.salesforce.com/s/articleView?id=platform.domain_mgmt.htm&type=5&language=en_US). If you use these features, prepare to update the related certificates according to the new cadence, as your certificate vendor is also bound by the CA/Browser Forum rules. If you use a certificate stored in Salesforce to serve your custom domain, consider updating your custom domain to use the Salesforce CDN or a third-party CDN or service that manages certificates. The Salesforce CDN is available only for custom domains that serve an Experience Cloud site. Both configuration options reduce your effort to manage certificates with shorter lifespans. ## TLS Certificate Cryptography All certificates that Salesforce uses for TLS have these properties. - Key parameter: RSA 2048 bit, RSA 3072 bit, RSA 4096 bit, ECDSA P-256 curve, ECDSA P-384 curve, or ECDSA P-521 curve - Signature algorithm: SHA256, SHA384, or SHA512 ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important Verify that your software and hardware integrations support all these key parameters and signature algorithms. In particular, if an integration uses Java or SAP that’s more than 10 years old, that integration probably uses JDK 8 or earlier. Unless you use JDK 9 or higher, additional files are required to use today’s stronger cryptographic algorithms. See the Oracle [Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files Download](https://www.oracle.com/java/technologies/javase-jce-all-downloads.html). ## Create the Required Root Certificate Truststore The certificates Salesforce issues are intended for use with TLS. Salesforce guarantees that our issued certificates chain to a root certificate authority (CA) on the [Mozilla Server Authentication (SSL/TLS) Root Certificates List](https://www.ccadb.org/resources). To support TLS in Salesforce, create a truststore that contains all those root CAs. ## Don't Pin Other Certificates Certificate pinning is the practice of selecting a single certificate or set of certificates to trust that aren’t root CAs. Pinning is an outdated security practice that adds operational complexity, can cause outages when the pinned certificate expires, and can cause outages when you use a new certificate that's not part of the pinset. Outage risks increase as the maximum lifespan for a TLS certificate decreases. In line with [OWASP’s guidance on Certificate and Public Key Pinning](https://owasp.org/www-community/controls/Certificate_and_Public_Key_Pinning), Salesforce strongly recommends against certificate pinning. Certificate pinning isn’t supported in Hyperforce or for Marketing Cloud Engagement customers. And if you pin the authentication certificate for the Salesforce mobile app, users can’t log in after a certificate is rotated until you update the app or the user reinstalls the app. If you pin certificates, we encourage you to stop that practice as soon as possible. Although Salesforce strongly advises against certificate pinning, we recognize that some customers pin certificates for orgs in first-party (1P) data centers. For those customers, Salesforce announces upcoming certificate changes only for production orgs in 1P data centers until July 6, 2026. If your org isn’t on Hyperforce yet, you can receive those notifications via the [Certificate Changes Trailblazer Community group](https://trailhead.salesforce.com/trailblazer-community/groups/0F9300000001oAF). ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_warning.png) Warning Salesforce plans to stop public certificate rotation announcements for 1P production orgs on July 6, 2026. ## Automate Certificate Rotation To create and update self-signed and Certificate Authority (CA)-signed certificates in Salesforce, use the Metadata API type. ## Global Trust Store vs. Certificate Trust Store The Salesforce global trust store compares to the Certificate Trust Store as follows: | Salesforce Global Trust Store | Certificate Trust Store | | --- | --- | | A single, shared trust store maintained by Salesforce across all tenants. | Each Salesforce org gets its own isolated trust store. | | Contains a standard set of trusted root/intermediate CAs. | Supports private/internal CAs that wouldn't be in a global store (e.g., your org's internal PKI). | | Tenants have no control over what's in it — it's one-size-fits-all. | Changes in one org's trust store have no impact on other orgs. | | If Salesforce adds or removes a CA, it affects every org simultaneously. | Changes in one org's trust store have no impact on other orgs. | | Works fine for standard public CAs (DigiCert, Comodo, etc.), but doesn't accommodate custom or private CAs. | Enables compliance with strict security policies that require controlling exactly which CAs are trusted. | #### See Also - [Certificates and Keys](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_about.htm&release=264.0.0&type=5 "Salesforce certificates and key pairs are used for signatures that verify a request is coming from your org. They’re used for authenticated SSL communications with an external website, or when using your Salesforce org as an Identity Provider. You only need to generate a Salesforce certificate and key pair if you're working with an external website that wants verification that a request is coming from a Salesforce organization.") - [_Metadata API Developer Guide_: Certificate](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_certificate.htm) - [Manage Your Certificate Trust Store](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_trust_store_manage.htm&release=264.0.0&type=5 "Use the Certificate Trust Store to maintain a repository of root certificates for validating inbound TLS connections (not inbound mTLS). The Certificate Trust Store is tied to your individual Salesforce org and isn’t shared with others. By managing your own trust store, you can ensure that integrations align with your specific security and compliance requirements.") # Certifications on Your Trailblazer Profile Your Trailblazer profile lets you share your professional achievements, including Salesforce certifications, with the world. ### Required Editions
Available in: All Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trailblazer_identity-264-0-0-production-enus/ccc43018-73ae-4159-814a-676d2b189e1c/images/icon_note.png) Note A Trailblazer account is available to AppExchange, Commerce Cloud Developer Center, Events, IdeaExchange, Salesforce Help, Salesforce+, Trailblazer Community, Trailhead users, and Partner Community. If your profile is public and other people view it, they see information about any certifications you earned in the Achievements tile, including - certification names - certification dates - certification descriptions ![The Achievements tile in a Trailblazer profile](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trailblazer_identity-264-0-0-production-enus/ccc43018-73ae-4159-814a-676d2b189e1c/trailblazer_identity/images/tbid_ach_3rd_party.png) When viewing your own profile, you see the information that others see and each certification’s maintenance status. ![Achievements tile with maintenance status.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trailblazer_identity-264-0-0-production-enus/ccc43018-73ae-4159-814a-676d2b189e1c/trailblazer_identity/images/certs_tile.png) ## Add Your Salesforce Certifications to Your Trailblazer Profile Do you have Salesforce Credentials? Show them off on your Trailblazer profile, in the Achievements tile. To display your certifications on your Trailblazer account, add the email address associated with your Salesforce, Slack, Tableau, MuleSoft, or Accredited Professionals credentials to your Trailblazer profile. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trailblazer_identity-264-0-0-production-enus/ccc43018-73ae-4159-814a-676d2b189e1c/images/icon_note.png) Note The email address you use with your certification account must be connected to your Trailblazer account to show your certifications on your profile. If it’s not connected, click your profile picture and select **Settings**, then add that email address as a connected account. 1. Log in to Trailhead. 2. Select your profile avatar and choose **Settings**. 3. On the Settings page in the **Connected Accounts** section, select **Connect an Account**. 4. Enter the email address associated with your Salesforce, Tableau, Slack, MuleSoft, or Accredited Professional account. After your email is confirmed, your active ecosystem certifications will be automatically displayed. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trailblazer_identity-264-0-0-production-enus/ccc43018-73ae-4159-814a-676d2b189e1c/images/icon_note.png) Note Your Webassessor account is added if it contains one or more certifications. ## Remove Salesforce Certifications from Your Trailblazer Profile If you no longer want to show your Salesforce Certifications on your Trailblazer profile, you can disconnect your certification account. Remove the email address associated with your certification account, and your credentials are removed. You can also set your profile to Private if you no longer want your Trailblazer account to be visible. #### See Also - [_Salesforce Help—Your Privacy on Trailblazer_](https://help.salesforce.com/articleView?id=tbid_privacy.htm&type=5&language=en_US) - [_Salesforce Help—Get Support for Trailblazer_](https://help.salesforce.com/articleView?id=get_tbid_support.htm&language=en_US) # Change a Consumption Threshold for a Specific Card Learn how to configure the Digital Wallet Consumption Threshold Alerts flow to only send notifications when a specific card reach a certain usage threshold. ## Find the Card Definition Developer Name 1. Click View Consumption Details for the desired card. 2. In the page URL, look for c\_\_card=YourCardDefinitionDeveloperName. See an example below. 3. Now follow the instructions in Assign a New Decision Outcome and Conditions. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/images/icon_example.png) Example In the URL below, the card definition developer name is PlatformServicesCard: `https://myorg.lightning.force-com/standard-ConsumptionCards?c__view=cardDetail&c__card=PlatformServicesCard&c__env=Production&c__model=PrePurchased` ## Assign a New Decision Outcome and Conditions 1. Ensure that you complete the steps above in Find the Card Definition Developer Name. 2. Create a new flow with the Consumption Threshold Alerts template or open an existing Consumption Threshold Alerts flow to edit it. 3. With the flow open, click the Check Card Conditions element in the flow itself or click the element in the toolbox in the side panel to edit it. 4. Create a new decision outcome. Give it a name based on the type of card you’re targeting, such as "Data Cloud Card." Salesforce recommends that you don't remove the existing decision paths. 5. In the Order Outcome sidebar, move the new decision outcome above the existing ones. This gives it the highest priority. 6. In the Outcome Details pane, add conditions to check for the desired card definition developer name. 1. Set Resource to Current Item from Loop Cards > cardDefinitionDeveloperName. 2. Set Operator to Equals. 3. Set Value to the single card definition developer name. 4. Repeat for each card you wish to target. If you’re adding more than one condition, you’ll need to change Condition Requirements to Execute Outcome to Any Condition is Met (OR). 5. Return to the main Flow Builder pane. ![Shows steps 4, 5, and 6](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-alerts-threshold-one-card-step-4-5-6-2025-01-22.png) 7. Add an assignment element to your new decision branch. This will be used to set the AlertTriggerType variable. 1. Click the + under your new decision branch. Select the Assignment element type. 2. In the edit pane, go to Set Variable Values. 3. Set Resource to AlertTriggerType. 4. Set Operator to Equals. 5. Set Value to the desired AlertTriggerType. If you want to send an alert when a percentage of the consumption card has been consumed, such as 60%, use the AlertTriggerType\_ThresholdPercent constant. If you want to send an alert when a raw consumption value has been reached, such as 100,000 credits, use the AlertTriggerType\_ThresholdUnits constant. 6. Name the element appropriately. 8. Add another assignment element immediately following the one you just created. 1. Click the + under your previous assignment element. 2. Select the Assignment element type. 3. In the edit pane, go to Set Variable Values. 4. Set Resource to ThresholdValues. 5. Set Operator to Add. 6. For Value, enter the desired threshold value to alert on, as an integer. 7. Repeat for as many thresholds as you wish to add. 8. Name the element appropriately. See an example below of a flow with a new decision branch added. ![View of the completed flow](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-alerts-threshold-one-card-completed-2025-01-22.png) 9. To keep your changes, click **Save**. The original flow template stays the same. 10. To start notifications, click **Activate**. # Change a Contributor’s Access Role You can change a contributor’s access role to increase or decrease the level of access. A contributor’s access role is specific to a CMS workspace, so you must change the contributor’s role in each assigned workspace. Admins can’t change their own role. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To manage contributors in a CMS workspace: A CMS workspace contributor role of content admin
1. In the Digital Experiences app, go to CMS Workspaces and open the appropriate workspace. 2. On the Contributor’s tab, click next to the contributor you want to change and select **Change Role**. ![Change Role Screen](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_access_control_change.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/images/icon_note.png) Note To prevent you from accidentally removing your access to a workspace, you can’t edit or remove your own contributor role. To change your level of access, another admin must update your role. 3. Select the new contributor role, and click **Update**. #### See Also - [Role-Based Access in Experience Builder](https://help.salesforce.com/s/articleView?id=experience.networks_access_control_overview.htm&type=5&language=en_US) - [Control Chatter Access Through Permission Sets](https://help.salesforce.com/articleView?id=collab_pbr_perm_sets.htm&type=5&language=en_US) # Change a Member Tier You can change a member’s tier manually from the loyalty program member list view or record page. These changes happen in real-time mode. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
1. In the Loyalty Programs tab, select your loyalty program. 2. On the Setup tab, click **Loyalty Program Members**. 3. Select a loyalty program member, and click **Change member tier**. 4. Select a tier group that the member belongs to. 5. Select a new tier. 6. Select the reason for changing the member’s tier. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The default change reasons are Resolve Tier Conflict, VIP Member, and Based on Past Activities or Tier. However, you can add new values to the change reason. 7. Enter any comments associated with this particular change to a member's tier. 8. Click **Change**. # Change a Percentage Threshold for all Cards Learn how to change a usage threshold your org has to reach before the Consumption Threshold Alerts flow sends notifications. 1. Create a new flow with the Consumption Threshold Alert template or open an existing Consumption Threshold Alerts flow to edit it. 2. With flow open, click the Assign Thresholds element in the flow itself or click the element from the toolbox in the side panel to edit it. 3. When the edit pane opens, find the Set Variable Values section. 4. To remove a threshold, click the trash icon at the end of the row. Salesforce recommends that you don't remove the 100% threshold. Removing that thresholds means you won't be notified if you exceed 100% of your entitlements on any consumption cards. 5. To add a threshold, add a new assignment row. 1. Click **Add Assignment**. 2. For Variable, select **ThresholdValues**. 3. For Operator, select **Add**. 4. For Value, enter the desired threshold value to alert on, as an integer. For example, enter 50 if you would like to receive a 50% alert. 6. To keep your changes, click **Save**. The original flow template stays the same. 7. To start notifications, click **Activate**. ![View of flow with steps 2-7 highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-alerts-flow-threshold-change-all-cards-2025-03-17.png) # Change a Record’s Owner You can give ownership of a record to another user as long as that user has at least Read permission for the type of record being transferred. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: Essentials, Group, Professional, Enterprise, Performance, Unlimited, Developer, and Contact Manager Editions
User Permissions Needed
To transfer single records: Transfer Record
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note To transfer ownership of a case, contact, or opportunity record, either: - The new owner must already have at least read access to its associated parent account via sharing features. - The user who is transferring the record must have the ability to share the associated parent account. The account owner, system administrators, users who are above the account owner in the role hierarchy, and users with the Modify All Records permission on accounts have this ability. Otherwise, the ownership transfer can’t be completed. 1. On the record detail page, click the link to change the owner. If you don’t see the link, you don’t have permissions to change record ownership. 2. Enter or select a new owner. In organizations where the Salesforce Customer Portal or partner portal is enabled, you can filter the results that appear on the user lookup dialog. Select either a queue or group of users from the Owner or Assigned To drop-down list. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note - You can only enter or select users who have permission to own the record. - External users trying to edit record ownership can’t filter by user type. 3. To notify the new owner, select the Send Notification Email checkbox. The “From” email address displayed in the notification is your return email address set in your email settings. For cases in Professional, Enterprise, Unlimited, Performance, and Developer Edition organizations, the Case Assigned Template setting specified in Support Settings determines the email text. For other records, the email text is generated automatically and cannot be customized. 4. Depending on your user permissions and the type of object you’re transferring, you can select which related items to transfer. 5. Save your changes. If your organization-wide default sharing for an object is set to Private, you see an error after changing the owner of a record for that object. The error occurs because you no longer have access to the record. This error is safe to ignore. #### See Also - [Considerations for Changing a Record’s Owner](https://help.salesforce.com/s/articleView?id=xcloud.account_owner_transfer.htm&release=264.0.0&type=5 "When you change a record’s owner, some items that are related to the record transfer to the new owner.") # Change a User’s Access to a Document As your teammates move on and off projects, you can provide and revoke access to documents. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. Open the document or spreadsheet, and then click **Share**. 2. Click **Manage**. 3. Locate the user, and select a new level of access in the dropdown. # Change Distribution Account You may have to change your distribution account if you need to change the developer account associated with your distribution type. This can also happen if there are errors with your developer account details. Changing your distribution account requires a change in account ownership. The Salesforce support team will reach out to you with any required information from either Apple or Google. - **[Change Distribution Account for iOS](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_distribution_change_account_ios.htm&release=264.0.0&type=5)** Here’s how to change your distribution account for iOS. - **[Change Distribution Account for Android](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_distribution_change_account_android.htm&release=264.0.0&type=5)** Here’s how to change your distribution account for Android. # Change Distribution Account You may have to change your distribution account if you need to change the developer account associated with your distribution type. This can also happen if there are errors with your developer account details. Changing your distribution account requires a change in account ownership. The Salesforce support team will reach out to you with any required information from either Apple or Google. - **[Change Distribution Account for iOS](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_distribution_change_account_ios.htm&release=264.0.0&type=5)** Here’s how to change your distribution account for iOS. - **[Change Distribution Account for Android](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_distribution_change_account_android.htm&release=264.0.0&type=5)** Here’s how to change your distribution account for Android. # Change Distribution Account for Android Here’s how to change your distribution account for Android. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
1. From Setup, enter Mobile Publisher in the Quick Find box, then select **Mobile Publisher**. 2. Choose the app you want to change the distribution type for. 3. Go to the Customer Distribution Information section, and click **Add**. ![Change delegated account for Android](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_delegated_acct_change_android.png) 4. Read about the impact of changing your account and click **Confirm**. ![Change account confirm pop up](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_delegated_acct_change_confirm.png) 5. Add your new Google Play Developer Account. ![Add Google developer account](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_google_acct.png) - Name is chosen by you and is for Salesforce internal use only (the name can’t be changed after you save). - Google Play Developer Account ID is the set of numbers you copied to your clipboard from the URL of your browser address bar. - Service Account Private Key is the JSON file you saved to your computer from your Google Play Console. 6. Click **Save**. The new Google Play Developer Account is selected by default. # Change Distribution Account for Android Here’s how to change your distribution account for Android. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
1. From Setup, enter Mobile Publisher in the Quick Find box, then select **Mobile Publisher**. 2. Choose the app you want to change the distribution type for. 3. Go to the Customer Distribution Information section, and click **Add**. ![Change delegated account for Android](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_delegated_acct_change_android.png) 4. Read about the impact of changing your account and click **Confirm**. ![Change account confirm pop up](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_delegated_acct_change_confirm.png) 5. Add your new Google Play Developer Account. ![Add Google developer account](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_google_acct.png) - Name is chosen by you and is for Salesforce internal use only (the name can’t be changed after you save). - Google Play Developer Account ID is the set of numbers you copied to your clipboard from the URL of your browser address bar. - Service Account Private Key is the JSON file you saved to your computer from your Google Play Console. 6. Click **Save**. The new Google Play Developer Account is selected by default. # Change Distribution Account for iOS Here’s how to change your distribution account for iOS. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
1. From Setup, enter Mobile Publisher in the Quick Find box, then select **Mobile Publisher**. 2. Choose the app you want to change the distribution type for. 3. Go to the Customer Distribution Information section, and click **Add**. ![Change delegated account](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_delegated_acct_change.png) 4. Read about the impact of changing your account and click **Confirm**. ![Change account confirm pop up](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_delegated_acct_change_confirm.png) 5. Add your new Apple Developer Team Account. ![Add Apple developer team account](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_ios_dev_team_acct.png) - Team Name is the name from your Apple Developer Account. - Team ID is the ID from your Apple Developer Account. 6. Click **Save**. The new Apple Developer Team Account is selected by default. # Change Distribution Account for iOS Here’s how to change your distribution account for iOS. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
1. From Setup, enter Mobile Publisher in the Quick Find box, then select **Mobile Publisher**. 2. Choose the app you want to change the distribution type for. 3. Go to the Customer Distribution Information section, and click **Add**. ![Change delegated account](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_delegated_acct_change.png) 4. Read about the impact of changing your account and click **Confirm**. ![Change account confirm pop up](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_delegated_acct_change_confirm.png) 5. Add your new Apple Developer Team Account. ![Add Apple developer team account](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_ios_dev_team_acct.png) - Team Name is the name from your Apple Developer Account. - Team ID is the ID from your Apple Developer Account. 6. Click **Save**. The new Apple Developer Team Account is selected by default. # Change Distribution Type for iOS You can change the distribution type for your iOS app. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/images/icon_important.png) Important Changing the distribution type for iOS requires a new managed package to be installed and updates to the Bundle ID. If you must change the distribution type for your app, it’s best to do so before your app is live. You can’t use the same app name for any app that's live that you want to change the distribution type for. See [App Distribution Type Considerations](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_distribution_considerations.htm&type=5&language=en_US) before changing the distribution type for your app. 1. From Setup, enter Mobile Publisher in the Quick Find box, then select **Mobile Publisher**. 2. Choose the app you want to change the distribution type for. 3. Go to the App Distribution section, and select **Change App Distribution Type**. ![Change Distribution Type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_change_dist_type.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/images/icon_note.png) Note You can change the distribution type for your existing iOS app only if the app isn’t live. If you want to change the distribution type of your live iOS app, create and submit a new app. Then, ask users to uninstall the existing app and install the new app. 4. Read about the impact of changing your distribution type and click **Confirm**. ![Change distribution type pop up message](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_change_dist_type_pop.png) 5. Choose your new distribution type and click **Save**. ![iOS distribution type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_dist_type_ios.png) # Change Distribution Type for iOS You can change the distribution type for your iOS app. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
1. From Setup, enter Mobile Publisher in the Quick Find box, then select **Mobile Publisher**. 2. Choose the app you want to change the distribution type for. 3. Go to the App Distribution section, and select **Change App Distribution Type**. ![Change Distribution Type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_change_dist_type.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note You can change the distribution type for your existing iOS app only if the app isn’t live. If you want to change the distribution type of your live iOS app, create and submit a new app. Then, ask users to uninstall the existing app and install the new app. 4. Read about the impact of changing your distribution type and click **Confirm**. ![Change distribution type pop up message](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_change_dist_type_pop.png) 5. Choose your new distribution type and click **Save**. ![iOS distribution type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_dist_type_ios.png) # Change Distribution Types Consider the impact of changing the distribution type for your branded app. You can change the distribution type for your branded app. If you do change your distribution type, make sure that the right distribution type matches your use case. We recommend that you refer to Apple and Google’s app distribution guidelines. - **[Change Distribution Type for iOS](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_distribution_change_type_ios.htm&release=264.0.0&type=5)** You can change the distribution type for your iOS app. - **[Change Distribution Types for Android](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_distribution_change_type_android.htm&release=264.0.0&type=5)** You can change the distribution type for your Android app. # Change Distribution Types Consider the impact of changing the distribution type for your branded app. You can change the distribution type for your branded app. If you do change your distribution type, make sure that the right distribution type matches your use case. We recommend that you refer to Apple and Google’s app distribution guidelines. - **[Change Distribution Type for iOS](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_distribution_change_type_ios.htm&release=264.0.0&type=5)** You can change the distribution type for your iOS app. - **[Change Distribution Types for Android](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_distribution_change_type_android.htm&release=264.0.0&type=5)** You can change the distribution type for your Android app. # Change Distribution Types for Android You can change the distribution type for your Android app. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
1. From Setup, enter Mobile Publisher in the Quick Find box, then select **Mobile Publisher**. 2. Choose the app you want to change the distribution type for. 3. Go to the App Distribution section, and select **Change App Distribution Type**. ![Change Distribution Type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_change_dist_type.png) 4. Read about the impact of changing your distribution type and click **Confirm**. ![Change distribution type pop up message](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_change_dist_type_pop.png) 5. Choose your new distribution type and click **Save**. ![Android distribution type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_dist_type_android.png) # Change Distribution Types for Android You can change the distribution type for your Android app. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
1. From Setup, enter Mobile Publisher in the Quick Find box, then select **Mobile Publisher**. 2. Choose the app you want to change the distribution type for. 3. Go to the App Distribution section, and select **Change App Distribution Type**. ![Change Distribution Type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_change_dist_type.png) 4. Read about the impact of changing your distribution type and click **Confirm**. ![Change distribution type pop up message](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_change_dist_type_pop.png) 5. Choose your new distribution type and click **Save**. ![Android distribution type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_dist_type_android.png) # Change How to Invoke Embedded Login on the Server You can change the default behavior of Embedded Login on the server by modifying the ` ``` `cacheMaxAge=n` Sets the cache control maximum age header, which the browser uses to determine whether the cached content is fresh or must be refreshed from the server. By default, the cache is cleared every 24 hours. You can change the maximum age, where n is the specified number of seconds. To improve performance, increase the cache age. However, as a result, you receive JavaScript updates from Salesforce less frequently because the updates occur when the cache is cleared. Here, the cache refreshes every three days. ```html ``` Embedded Login supports localization. For example, it localizes the login form based on browser settings. All labels, errors, and actions match the browser’s language setting. # Change Language Settings in Quip Change your language settings in Quip. All Quip features and UI text appear in the chosen language. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. From your Quip account settings, select **Profile**. 2. Select a language. # Change Member Tier Process Template To upgrade or downgrade a member’s tier from an external system, you can use the Change Member Tier process template to create processes for changing the tier of the members in the loyalty tier group. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
- **[Overview of the Change Member Tier Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_overview_of_the_change_member_tier_process_template.htm&release=264.0.0&type=5)** Learn about the Change Member Tier process template and its components. Also, understand how you can use the template to create a loyalty program process and execute the process. - **[Create a Process Using the Change Member Tier Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_task_change_member_tier_process_template.htm&release=264.0.0&type=5)** The Change Member Tier process template contains a rule and a set of parameters that upgrade or downgrade a Loyalty Program Member of the Loyalty Tier Group. You can create a process using the template and extend it based on your requirements. # Change Site Association Change the Experience Cloud site association with your loyalty program using Change Site Association. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
1. In the Loyalty Programs tab, select your loyalty program. 2. Click **Change Site Association**. 3. To associate the site with the loyalty program, select the Experience Cloud Site. 4. Save your changes. # Change the Dashboard on Your Home Tab in Salesforce Classic If your Home tab contains a dashboard snapshot, you can change the dashboard. ### Required Editions
Available in: Salesforce Classic
Available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note The link to customize your Home tab in Salesforce Classic is only available if your Salesforce admin has customized your home page layout to include a dashboard. Only your admin can add or remove the Dashboard snapshot component from your home page. 1. Click **Customize Page** in the Dashboard section of the Home tab. ![A Home tab with the Dashboard showing. The Customize Page button is in the top right corner.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/home_customize_page_classic_step_1.png) 2. Search for a dashboard and select a different dashboard from the dropdown list. ![The Customize Your Home Page section with a dropdown list of dashboards. The Company Performance Dashboard is highlighted.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/home_customize_page_classic_step_2.png) 3. To show the new dashboard, or to refresh its data, click **Refresh**. ![A Home tab with the Dashboard showing. The Refresh button is toward the top left-center of the page.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/home_customize_page_classic_step_3.png) #### See Also - [Customize Your Pages](https://help.salesforce.com/s/articleView?id=xcloud.user_userdisplay_pages.htm&type=5&language=en_US) - [Salesforce Classic Home Tab Page Layouts](https://help.salesforce.com/s/articleView?id=platform.customize_homepage.htm&type=5&language=en_US) - [Set Up the Lightning Experience Home Page](https://help.salesforce.com/s/articleView?id=xcloud.admin_home_lex_intro.htm&type=5&language=en_US) # Change the Default Division for Users If you can manage user settings, you can change a user’s default division. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To change a user’s default division: Manage Users
If your organization uses divisions to segment data, a default division is assigned to all users and is applied to new accounts, leads, and appropriate custom objects .The default division doesn’t prevent users from viewing or creating records in other divisions. If, however, the new record is related to an existing record, the new record is assigned the same division as the existing record. 1. From Setup, enter Users in the Quick Find box, then select **Users**. 2. Click the name, alias, or username of the user whose default division you want to change. 3. Next to the Default Division field, click **Change**. 4. Select a new default division. 5. Select an action to be applied to records the user already owns. 6. Click **Save**. If you are changing your own default division, skip step 1 and go to your personal settings. Enter Advanced User Details in the Quick Find box, then select **Advanced User Details**.No results? Enter Personal Information in the Quick Find box, then select **Personal Information**. #### See Also - [How Divisions Work](https://help.salesforce.com/s/articleView?id=xcloud.admin_division_overview.htm&release=264.0.0&type=5 "Divisions can be assigned to users and other kinds of records. For example, you can create a report to show the opportunities for just the North American division to get accurate sales numbers for the North American sales team.") - [Set Up Divisions](https://help.salesforce.com/s/articleView?id=xcloud.getting_started_with_divisions.htm&release=264.0.0&type=5 "When setting up divisions, you must create divisions and assign records to divisions to make sure that your data is categorized effectively.") - [Create and Edit Divisions](https://help.salesforce.com/s/articleView?id=xcloud.creating_and_editing_divisions.htm&release=264.0.0&type=5 "Creating logical divisions for your organization helps you segment your records to make searching and reporting easier.") - [Transferring Multiple Records Between Divisions](https://help.salesforce.com/s/articleView?id=xcloud.admin_divisionchange.htm&release=264.0.0&type=5 "Select groups of records to move into or between divisions.") - [Reporting With Divisions](https://help.salesforce.com/s/articleView?id=xcloud.reports_division.htm&release=264.0.0&type=5 "If your organization uses divisions to segment data, you can customize your reports to show records within specific divisions.") # Change the Encryption Scheme for Standard and Custom Fields After you turn on Field-Level Encryption (FLE) for a field, you can change the encryption scheme at any time. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
User Permissions Needed
To view setup: View Setup and Configuration
To encrypt files: Customize Application
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Shield Platform Encryption. Read about implementing field-level encryption using Shield Extension in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). Before you begin: - When switching to a new encryption scheme, there are several considerations to be aware of. Understand the process and choose the best configuration for your needs. See [Switch Between Probabilistic and Deterministic Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_onboard_change_encryption_mode.htm&release=264.0.0&type=5 "If you are already encrypting fields using the probabilistic encryption scheme, and have decided to switch one or more of them over to deterministic encryption you should consider your options and plan carefully."). - If you recently rotated your keys, sync your data before switching to a new encryption scheme. Sync once again after you make the switch, regardless of your last key rotation. To change a field’s encryption scheme: 1. From the App Launcher, find and select **Shield**. 2. Go to the **Platform Encryption** tab, and then click **Field-Level Encryption**. 3. Under Fields, find the field that you want to change, and then click the dropdown menu. 4. Click **Change Encryption Scheme**. 5. Select a new encryption scheme, and then click **Change**. 6. When prompted, confirm the change. Salesforce executes the encryption job in the background. You receive an email when the process completes. Next steps: - Sync Data with [Self-Service Background Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_stats_sync.htm&release=264.0.0&type=5 "Synchronizing your data with your active key material keeps your encryption policy up to date. You can sync data in standard and custom fields, the Attachment—Content Body field, and for field history and feed tracking changes from the Encryption Statistics and Data Sync page in Setup. To synchronize all other encrypted data, contact Salesforce Customer Support.") See Also - [Differences Between Probabilistic and Deterministic Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_probabilistic_deterministic_diffs.htm&release=264.0.0&type=5 "In Shield Platform Encryption, probabilistic encryption randomizes the ciphertext output each time the same plaintext is encrypted. This enhancing security by making patterns harder to discern but it also prevents filtering or exact-match searches on encrypted data. Conversely, deterministic encryption always produces the same ciphertext for a given plaintext. This allows for filtering, sorting, and equality comparisons on encrypted fields, but with a slight reduction in randomness compared to probabilistic encryption.") # Change the Hierarchical Level of a List If a list is defined at the wrong level of a JSON node hierarchy, you can use an Omnistudio Data Mapper Transform to change the level at which the list is defined. This approach only works for a short list with a known number of items. This example describes how to create a Data Mapper Transform that converts a list defined at `Contacts:Name` to a list defined at `Contacts`. ## Create Settings | Field | value | notes | | --- | --- | --- | | Interface Type | Transform |   | | Input Type | JSON | In this example, the input is provided as JSON and not pulled from another source. | | Output Type | JSON |   | ## Transform Settings In the Manage Input/Output Type window, use these values. Input JSON ```json { "Contacts": { "Name": [ { "First": "John", "Last": "Doe" }, { "First": "June", "Last": "Doe" } ] } } ``` Expected JSON Ouput ```json { "Contacts": { "Name": [ { "First": "John", "Last": "Doe" }, { "First": "June", "Last": "Doe" } ] } } ``` Click **Quick Match**, and in the Quick Match dialog, click **Auto Match** and save. To add list position indexes, edit the mappings. | Field | value | notes | | --- | --- | --- | | Input JSON Path | `Contacts:Name|1:First` |   | | Output JSON Path | `Contacts|1:Name:First` |   | Click **Quick Match** again, click **Auto Match** and save. Edit the new mappings to add list position indexes. | Field | value | notes | | --- | --- | --- | | Input JSON Path | `Contacts:Name|2:First` |   | | Output JSON Path | `Contacts|2:Name:First` |   | ## Transformation Preview In Preview, the input is similar to the sample JSON. ```json { "Contacts": { "Name": [ { "First": "John", "Last": "Doe" }, { "First": "June", "Last": "Doe" } ] } } ``` After you execute the sample Data Mapper in Preview, the input map is transformed into a list, as indicated by the square brackets. ```json { "Contacts": [ { "Name": { "First": "John", "Last": "Doe" } }, { "Name": { "First": "June", "Last": "Doe" } } ] } ``` # Change the Mobile Platform for Push Notifications To change the mobile platform that you’ve configured for push notifications, edit the mobile connected app’s settings. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

User Permissions Needed
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage Connected Apps

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. 1. Open the list of apps. From Setup, enter Apps in the Quick Find box, then select **App Manager**. 2. Locate the connected app, click ![Action dropdown](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/dropdown.png), and then select **Edit**. 3. Deselect **Push Messaging Enabled**. 4. Save the connected app, and then click **Edit**. 5. To reflect the new platform, change **App Platform** and the associated values in Mobile Settings. 6. Reconfigure push notifications for the new platform. # Change Who Gets Consumption Threshold Alerts By default, the Digital Wallet Consumption Threshold Alerts flow sends notifications to all users who are assigned the System Administrator profile. However, you can change the flow behavior to send notifications to users who belong to a public group or are assigned a specific permission set. #### See Also - [_Salesforce Help_: Create Permission Sets](https://help.salesforce.com/s/articleView?id=platform.perm_sets_create.htm&language=en_US) - [_Salesforce Help_: Create and Edit Public Groups](https://help.salesforce.com/s/articleView?id=platform.creating_and_editing_groups.htm&language=en_US) ## Delete the Existing User Recipient Behavior To notify users assigned to a profile other than the System Administrator, see [Configure and Activate the Consumption Threshold Alerts Flow](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_alerts_create.htm&release=264.0.0&type=5 "Quickly configure consumption thresholds alerts using the provided Consumption Threshold Alerts template. Alerts trigger only for consumption cards with active entitlements."). You can easily swap the profile name in the flow. To send notifications to users in a public group or permission set requires additional modifications to the flow. First delete the existing elements that retrieve all users with the System Administrator profile. 1. Create a new flow with the Consumption Threshold Alerts template or open an existing Consumption Threshold Alerts flow to edit it. 2. With flow open, click the Create Alert and Notify action in the flow itself or click the element in the toolbox in the side panel to edit it. 3. Go to Set Inputs for the Selected Action. Clear the value from the Recipient IDs input. This will allow us to delete the flow elements that were previously referenced here. 4. Go back to the main Flow Builder pane. Find the Collect User IDs element. 1. Click the element. 2. Click remove element. 3. Repeat for the Get Users and Get Sys Admin Profile elements. 5. To set your new recipients, now follow the steps for sending alerts to either users in a public group or users with a certain permission set. ## Send Notifications to Users in a Public Group Before starting, complete the instructions above in Delete the Existing User Recipient Behavior. To ensure that all users in a specific public group get consumption notifications, follow the steps below. The instructions below assume that you have a [public group](https://help.salesforce.com/s/articleView?id=platform.ls_create_public_groups.htm&type=5&language=en_US) you’d like to use and have assigned users to it. These instructions only cover how to notify users that are directly part of a Public Group. It doesn’t consider members of a nested group. 1. Open the flow you edited in the first set of steps on this page (Delete the Existing User Recipient Behavior). 2. Add a Get Records element to retrieve the desired Group object. 1. In the main Flow Builder pane, click the + immediately below the Has Cards decision branch label. 2. Select Get Records. Go to the edit pane. 3. Set Object to Group. 4. Add a new Filter. Set the Field to DeveloperName. Set Operator to Equals. Set Value to the developer name of the group you’d like to select. 5. Set How Many Records to Store to Only the first record. 6. Add a label and name for the element. 3. Add another Get Records element to retrieve all Group Member records for your group. 1. In the main Flow Builder pane, click the + immediately below the Get Records element you just added. 2. Select Get Records. Go to the edit pane. 3. Set Object to Group Member. 4. Configure the Filter. Set the Field to GroupId. Set Operator to Equals. Set Value to Group from \[Name of previous element\] > Id. 5. Set How Many Records to Store to All Records. 6. Add a label and name for the element. 4. Add a Transform element to collect the user or group IDs from the group members you just selected. 1. In the main Flow Builder pane, click the + immediately below the Get Records element you just added. 2. Select Transform. Go to the edit pane. 3. Click the + next to Source Data. Select the name of your Group Member Get Records element. 4. Click the + next to Target Data. Select Text as the data type and check the box to allow multiple elements. 5. Under Source Data, click the socket icon next to UserOrGroupId, then click the socket icon next to the new resource you created in the Target Data section. This establishes the mapping. 6. Add a label and name for the element. 5. Find the Create Alert and Notify element. 1. Click the element to edit it. 2. Go to the Recipients IDs parameter. 3. Select the name of the output collection from the user IDs transform element. 6. Add another Get Records element to retrieve all Users matching the user or group IDs we collected. 1. In the main Flow Builder pane, click the + immediately below the Transform element you just added. 2. Select Get Records. Go to the edit pane. 3. Set Object to User. 4. Configure the Filter. Set Field to UserId. Set Operator to In. Set Value to \[Name of output collection from the user or group IDs transform element\]. 5. Set How Many Records to Store to All Records. 6. Add a label and name for the element. 7. Add another Transform element to collect user IDs from the users you just selected. 1. In the main Flow Builder pane, click the + immediately below the Get Records element you just added. 2. Select Transform. Go to the edit pane. 3. Click the + next to Source Data. Select the name of your User Get Records element. 4. Click the + next to Target Data. Select Text as the data type and check the box to allow multiple elements. 5. Under Source Data, click the socket icon next to UserId, then click the socket icon next to the new resource you created in the Target Data section. This establishes the mapping. 6. Add a label and name for the element. 8. To keep your changes, click Save. The original flow template stays the same. 9. To start notifications, click Activate. ## Send Notifications to Users with a Permission Set Before starting, complete the instructions above in Delete the Existing User Recipient Behavior. To ensure that all users with a specific permissions set get consumption notifications, follow the steps below. These instructions assume that you already have a permission set to use and have assigned users to it. These instructions cover how to notify users with a specific permission set directly assigned. This method doesn’t consider users that have the permission set assigned as part of a permission set group. However, this method can easily be adapted to notify users that have a specific permission set group assignment. Simply use the Permission Set Group object instead of the Permission Set object in the following instructions. 1. Open the flow you edited in the first set of steps on this page (Delete the Existing User Recipient Behavior). 2. Add a Get Records element to retrieve the desired Permission Set object. 1. In the main Flow Builder pane, click the + immediately below the Has Cards decision branch label. 2. Select Get Records. Go to the edit pane. 3. Set Object to Permission Set 4. Add a new Filter. Set Field to Name. Set Operator to Equals. Set Value to the name of the permission set you’d like to use. 5. Set How Many Records to Store to Only the first record 6. Add a label and name for the element 3. Add another Get Records element to retrieve all Permission Set Assignment records for your permission set. 1. In the main Flow Builder pane, click the + immediately below the Get Records element you just added. 2. Select Get Records. Go to the edit pane. 3. Set Object to Permission Set Assignment. 4. Configure Filter. Set Field to PermissionSetId (or if using Permission Set Group, PermissionSetGroupId). Set Operator to Equals. Set Value to Permission Set from \[Name of Permission Set Get Records element\] > Id 5. Set How Many Records to Store to All Records. 6. Add a label and name for the element. 4. Add a Transform element to collect user IDs from the permission set assignments you just selected. 1. In the main Flow Builder pane, click the + immediately below the Get Records element you just added. 2. Select Transform. Go to the edit pane. 3. Click the + next to Source Data. Select the name of your Permission Set Assignments Get Records element. 4. Click the + next to Target Data. Select Text as the data type and check the box to allow multiple elements. 5. Under Source Data, click the socket icon next to AssigneeId, then click the socket icon next to the new resource you created in the Target Data section. This establishes the mapping. 6. Add a label and name for the element. 5. Find the Create Alert and Notify element. Add the user IDs you just collected as an input parameter. 1. Click the element to edit it. 2. Go to the Recipients IDs parameter. 3. Select the name of the output collection from the user IDs transform element. 6. To keep your changes, click Save. The original flow template stays the same. 7. To start notifications, click Activate. # Change Your Company Information in Quip Update your company’s Quip site information, such as the company name, quip.com subdomain, and company logo. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. Go to https://admin.quip.com. 2. Log in using your Quip admin email and password. 3. From Settings, select **Site Settings**. 4. To update your company information, click **Edit Profile**. - **[Considerations for Updating Company Information in Quip](https://help.salesforce.com/s/articleView?id=xcloud.quip_company_info_considerations.htm&release=264.0.0&type=5)** As you update your company’s Quip site information, keep these considerations in mind. # Change Your Default Notification Settings Change how often Quip notifies you of activities on your desktop, mobile phone, email, and Slack. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. From Account Settings, click **Notifications**. 2. In each tab, set the level of notification. 3. Click **Done**. # Change Your My Domain Details If you don’t like your My Domain or circumstances warrant a change, you can rename it. For example, you can change the name when your company’s name or branding changes. In some orgs, the admin can also choose a different domain suffix, enable enhanced domains, and remove instance names from certain My Domain URLs. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To edit My Domain settings: Customize Application
To define a My Domain name:

Customize Application

AND

Modify All Data

We recommend that you test a change to your My Domain details in a sandbox. To review the high-level steps, the recommended practices, and how to reduce the impact on your users and customers, see [Plan for a My Domain Change](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_plan.htm&release=264.0.0&type=5 "Whether you change your My Domain to update your brand, to adopt enhanced domains, or to enable partitioned domains, the URLs that Salesforce hosts for your org change. Those changes can have a large impact, and making the required updates can seem like a daunting project. To make the process as smooth as possible for you, your users, and your customers, review the high-level steps, the recommended practices, and how to reduce the impact on your users and customers."). 1. From Setup, in the Quick Find box, enter My Domain, and then select **My Domain**. 2. Under My Domain Details, select **Edit**. The My Domain Details edit page appears. 3. To change your My Domain, enter your new My Domain or suffix. Your chosen My Domain Login URL is displayed. 1. To change your My Domain name, enter a new domain name. To confirm that your new name is available, click **Check Availability**. If your name is already taken, choose a different one. ![My Domain Details edit page](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/my_domain_rename.png) Avoid entering personal information in your domain name. Instead, enter only public information. In production and sandbox orgs, your name must contain at least 3 characters and no more than 34 characters. In Developer Edition orgs, your name must contain at least 3 characters and no more than 27 characters. It can include letters, numbers, and hyphens, but you can’t start the name with a hyphen. 2. If other suffixes are available for your org’s My Domain, a suffix dropdown list appears. To change your My Domain suffix, select a new suffix. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip Unsure of which suffix to pick? For most orgs, the Standard suffix is the best option. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note To avoid potential conflicts between follow-up processes such as CNAME and DNS updates, you can’t make a change that requires provisioning for 15 minutes after you change your My Domain name or enable enhanced domains. Changes that require provisioning include changing your My Domain name or suffix, enabling enhanced domains, moving to Salesforce Edge Network, and removing your previous My Domain. 4. If your suffix is Standard, select **Use enhanced domains**. Enhanced domains were enforced in Winter ’24. After enhanced domains are deployed, you can’t disable this feature. Only a limited number of orgs are using legacy My Domain without enhanced domains. This feature allows your Salesforce login process and related URLs to meet the latest browser requirements. It also stabilizes your My Domain URL by removing the Salesforce instance, preventing user login disruption when your org moves to another Salesforce instance. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important Enhanced domains change URL formats across your org. For more information, see [My Domain URL Format Changes with Enhanced Domains Deployment](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_url_format_changes_enable_enhanced.htm&release=264.0.0&type=5 "Understand how login and application URL formats changed when enhanced domains, the latest version of My Domain, were deployed. These changes apply only to orgs created in June 2022 or earlier."). Before you deploy your updated My Domain in production, test it in a sandbox. 5. Optional: Stabilize your Visualforce, Experience Builder, Site.com Studio, and content file URLs. 1. Select **Stabilize Visualforce, Experience Builder, Site.com Studio, and content file URLs**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note If you disabled **Use enhanced domains**, this option is enabled by default. To revert your URLs to their prior formats before enhanced domains were deployed, if this My Domain setting was previously disabled, deselect **Stabilize Visualforce, Experience Builder, Site.com Studio, and content file URLs**. To determine whether this setting was disabled before enhanced domains were deployed, check the Setup Audit Trail and find the audit trail action for the deployment of your My Domain with enhanced domains. If you see the action, “Enabled the My Domain setting, Stabilize Visualforce, Experience Builder, Site.com Studio, and content file URLs”, immediately before the deployment of enhanced domains, then this My Domain setting was disabled before enhanced domains were deployed. 2. Optional: Select **Include the instance name in Visualforce URLs when third-party cookies are blocked**. This option only applies to the Standard, Database.com, and Cloudforce suffixes when Visualforce URLs are stabilized without enhanced domains. Third-party cookie blocking can cause issues loading Visualforce pages with stabilized URLs. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note If enhanced domains are enabled, these URLs are stabilized and these settings aren’t available. Several browsers and operating systems updated their URL requirements after this option was first made available. Enhanced domains provide the latest standard for stabilizing the URLs that Salesforce hosts for your org. Unless you disabled enhanced domains in a prior step, these settings apply upon saving, without redeploying your My Domain. 6. Save your changes. If you changed your My Domain name or suffix, or if you enabled or disabled enhanced domains, Salesforce provisions your My Domain. Those changes take effect after you deploy your new My Domain. The provisioning process usually finishes in a few minutes, but it can take up to 24 hours. You receive an email when your My Domain is ready to be deployed and tested. When you change your My Domain details, Salesforce redirects your previous My Domain URLs to your current My Domain. If you change your My Domain more than one time, only the last set of My Domain URLs for your org are redirected. For more information, see [My Domain Redirections](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_redirections.htm&release=264.0.0&type=5 "When you deploy a change to your My Domain, Salesforce redirects multiple host names automatically. Learn about the types of redirections, how to log redirections for the host names that Salesforce hosts for your org, and how you can control these redirections."). Next Steps: - Salesforce provisions your updated My Domain URLs. The provisioning process usually finishes in a few minutes, but it can take up to 24 hours. You receive an email when your updated My Domain is ready to be deployed and tested. - Review the changes to your org’s URLs in [My Domain URL Formats](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_app_url_changes.htm&release=264.0.0&type=5 "Your My Domain name is a subdomain used in login URL and application URLs across your Salesforce org, including sites and Visualforce pages. Understand what determines your org’s URL formats and the structure of those formats."). - [Deploy your new My Domain, update your org, and test the changes](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_deploy_update_test.htm&release=264.0.0&type=5 "Before you deploy a change to your My Domain, work with your users to preserve their login access to your org. To test My Domain changes, deploy the change in a sandbox. If your My Domain login URL or site URL changes, update authentication. Review and make the required updates to support the new domains. Then test access to your org and your functional workflows in Salesforce. After you complete testing in a sandbox, use the same process to update your production org. Finally, update redirection behavior for your old URLs."). #### See Also - [My Domain Considerations](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_considerations.htm&release=264.0.0&type=5 "When you deploy a change to your My Domain, it’s important to understand the impact on URLs across your Salesforce org. Review these considerations about URL changes, feature testing, and reducing the impact to your users.") - [My Domain URL Formats](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_app_url_changes.htm&release=264.0.0&type=5 "Your My Domain name is a subdomain used in login URL and application URLs across your Salesforce org, including sites and Visualforce pages. Understand what determines your org’s URL formats and the structure of those formats.") - [Enhanced Domains](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_enhanced.htm&release=264.0.0&type=5 "Enhanced domains are the current version of My Domain that meets the latest browser requirements. With enhanced domains, all URLs across your org contain your company-specific My Domain name, including URLs for your Experience Cloud sites, Salesforce Sites, Visualforce pages, and content files. This feature changed domain suffixes (the part after the My Domain name) to meet the latest security standards. With no instance names, enhanced My Domain URLs are easier for users to remember and don’t change when your org is moved to another Salesforce instance. Because enhanced domains meet the latest browser requirements, this feature was enforced in Winter ’24.") - [Disable or Remove Your Previous My Domain](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_remove_previous.htm&release=264.0.0&type=5 "Each time that you deploy a change to your My Domain, Salesforce redirects requests from your previous My Domain URLs to your current My Domain. Optionally, disable redirections from your previous My Domain. We recommend that you use that option when you test a My Domain change. Or, to use your previous My Domain in a different Salesforce org, remove your previous My Domain.") # Change Your Notification Settings for a Document You can override your default notification settings for a document. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. Open the document or folder. 2. From the Document or Folder menu, select **Advanced** | **Notification Setting**. The setting that you select remains in effect if you change your account-level default notification settings later. You can apply custom notification settings to every item in a folder by changing the notification settings for the folder. # Change Your Password After you log in, you can change your password for better security. If you lost your password, click the **Forgot Your Password** link on the login page to reset your password via email. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: All Editions
To protect the privacy of your data, change your password periodically. If your Salesforce administrator expires user passwords on a periodic basis, you’re prompted to change your password at the end of each period. 1. From your personal settings, enter Password in the Quick Find box, then select **Change My Password**. 2. Enter the password information requested. 3. Click **Save**. - If you forgot your password and can't log in, see [Reset Your Forgotten Password](https://help.salesforce.com/s/articleView?id=xcloud.retrieving_forgotten_passwords.htm&release=264.0.0&type=5 "If you forgot your password, you can easily reset it using the forgot password link on the login page. You need your username and access to your email address. You also need your MFA method to verify your identity. In some cases, you're asked to answer your security question instead of using MFA."). - If you're required to log in to Salesforce via single sign-on (SSO), for example from a Google account or a company portal, you can't change your password in Salesforce because you don't have an active password credential. If you aren't sure whether SSO is required, check with your Salesforce admin. - When your Salesforce administrator or Salesforce Support initiates a password reset for you, your current password becomes invalid. To log in again, finish resetting your password. - You can’t reset your password in the Salesforce mobile app. # Change Your Profile or Group Photo Upload a photo to your profile so people can see who you are. Upload a photo for groups that you own or manage.
Available in: Salesforce Classic and Lightning Experience
Available in: Essentials, Group, Professional, Enterprise, Performance, Unlimited, Contact Manager, and Developer Editions
1. Go to your profile or the group’s page. 2. Mouse over the photo and click **Add Photo** or **Update**. 3. Browse for the photo you want to upload and open the file. You can upload photos in .jpg, .gif, or .png format, up to 10 MB in Classic and 16 MB in Lightning Experience. Photos also have a 36 MP dimension limit. 4. Create a thumbnail image by dragging the dotted lines across the photo. If the photo is for your profile and you’re a member of any Experience Cloud sites, you can select Show my photo on publicly accessible pages. This option makes the photo visible to guest users viewing publicly accessible sites or pages that don’t require login. 5. Save your changes. # Change Your Security Question If you forget your password and have to reset it, you’re sometimes required to verify your identity by answering a security question that you previously chose. You can change the security question and answer on the Change My Password page in your personal settings. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: All Editions
If you don't see the Change My Password option, contact your Salesforce admin for assistance. 1. From your personal settings, enter Password in the Quick Find box, then select **Change My Password**. 2. Enter your current password. 3. From the Security Question drop-down menu, select a question. 4. Enter your answer to the question in the Answer field. 5. Click **Save**. #### See Also - [Troubleshoot Login Issues](https://help.salesforce.com/s/articleView?id=xcloud.getstart_login.htm&release=264.0.0&type=5 "Can’t log in? Forgot your username or password, or you’re locked out from too many login attempts? To resolve login problems, try these solutions.") # Change Your Time Zone The Trust Status site uses your device’s location, if its location is enabled, to set the local time zone, or you can select a specific time zone. 1. Go to [status.salesforce.com](http://status.salesforce.com). 2. Click ![Settings](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trust_status-264-0-0-production-enus/81c1e273-49e5-4d33-a060-6c35b74bb603/trust_status/images/settings0.png), then click ![Select Timezone](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trust_status-264-0-0-production-enus/81c1e273-49e5-4d33-a060-6c35b74bb603/trust_status/images/clock0.png). 3. Click **Use My Local Timezone**, or select a specific time zone. 4. Click **Submit**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trust_status-264-0-0-production-enus/81c1e273-49e5-4d33-a060-6c35b74bb603/images/icon_note.png) Note Clearing your site cookies or cache resets your Trust Status settings, including your time zone. If your device’s location is enabled, your time zone is reset based on your device’s location. # Change Your Working Division If your org uses divisions, you can change your working division from the Divisions field in the sidebar. ### Required Editions
Available in: Salesforce Classic
Available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions
Divisions segment your organization's data into logical sections, making searches, reports, and list views more meaningful. Select the division you want to work in from the Divisions field on the sidebar. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_example.png) Example Let’s say your org has set up divisions for sales areas. You can change your working division to a particular sales area and create a report to show the opportunities for just that division. Divisions are useful for organizations with large amounts of data. # Channel Management Console Monitor your channel business like a pro from the Channel Management Console.
Available for channel managers in Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Sales Cloud or Service Cloud. You must have at least one PRM add-on license.
- **[Monitoring Channel Business from the Channel Management Console](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_prm_cmc_overview.htm&release=264.0.0&type=5)** Channel managers can see a complete view of partners’ sales activity from the Channel Management Console. Follow the performance metrics you care about most from the console dashboard. Review and approve partners’ leads and easily access frequently-used objects. - **[Setting Up the Channel Management Console](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_prm_setup_cmc_parent.htm&release=264.0.0&type=5)** The Channel Management Console lets channel managers monitor partner activities and performance from a standard Lightning console app. Salesforce admins must give channel managers access to the console and its features. If they want, Salesforce admins can customize the console. # Channel Partner Inventory Tracking Get greater visibility into your channel partner inventory. Effectively track the inventory based on sales to partners and resale from partners to end-customers. Enhance downstream processes such as ship and debit claim processing and price protection. Calculate the partner inventory in the channel by leveraging partner point of sales and sales data. - **[Set Up Channel Partner Inventory Tracking](https://help.salesforce.com/s/articleView?id=xcloud.chrm_cpit_set_up.htm&release=264.0.0&type=5)** Set up and configure the Channel Partner Inventory Tracking features to enhance downstream processes with better visibility into calculated partner inventory. Assign the permissions for Channel Partner Inventory Tracking to users who want to get inventory traceability through ledgers. - **[Manage Channel Partner Inventory Tracking](https://help.salesforce.com/s/articleView?id=xcloud.chrm_cpit_manage.htm&release=264.0.0&type=5)** Manage partner inventory visibility through partner unsold inventory. Protect channel partners from price fluctuations by tracking unsold inventory and utilizing price protection capabilities. Validate partner claims using the ship and debit functionality and point-of-sale documents. - **[Reconcile Partner Unsold Inventory and Partner Reported Inventory](https://help.salesforce.com/s/articleView?id=xcloud.chrm-partner-inventory-rec.htm&release=264.0.0&type=5)** Track, process, and reconcile partner-reported inventory to ensure accurate inventory visibility. Use Partner Staged Data to capture inventory, and run data processing engine (DPE) definitions to generate and update reconciliation records based on reported and unsold inventory. - **[Create Transaction Journals For Point of Sale Data](https://help.salesforce.com/s/articleView?id=xcloud.chrm_cpit_experience_cloud.htm&release=264.0.0&type=5)** Partners can upload Point of Sale documents by using the Manufacturing Experience Cloud site. These documents contain data related to sales made by the partners. This data is used to create transaction journals. - **[Data Processing Engine Templates with Channel Partner Inventory Tracking](https://help.salesforce.com/s/articleView?id=xcloud.chrm_cpit_dpe_templates.htm&release=264.0.0&type=5)** Channel Partner Inventory Tracking has Data Processing Engine (DPE) templates that you can clone and customize. The templates help you to create partner unsold inventory records. Examples of processes are: converting sale and point of sale data into transaction journal records, validating price protection and ship-and-debit transactions, and calculating unsold inventory with partners. - **[Process Partner and Point-of-Sale Return Transactions](https://help.salesforce.com/s/articleView?id=xcloud.chrm-partner-pos-returns.htm&release=264.0.0&type=5)** Capture and validate return transactions reported by partners—whether initiated by end customers or through direct partner returns. Automate inventory updates and ledger adjustments using data processing engines (DPEs) to streamline reconciliation and maintain accurate unsold inventory records. # Channel Partner Inventory Tracking Data Model The Channel Partner Inventory Tracking Cloud data model includes objects and fields that you can use to store information about your channel partner inventory tracking operations. The data model is built with industry-wide best practices, and you can adapt and extend the data model to meet your company’s unique needs. ### Required Editions
Available in: Enterprise, Professional, and Unlimited Editions with the Channel Revenue Management add on
Use these objects to store information about your entire channel partner inventory tracking operations. ![Data model showing objects related to channel partner inventory tracking.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/channel_revenue_mgmt/images/MfgrCloud_Channel_partnerInventoryTracing_DataModel.png) Channel Partner Inventory Tracking Objects | Object | Description | | --- | --- | | Transaction Journal | Stores information about transactions, such as points of sales and point of sale returns. | | Partner Unsold Inventory | Stores the unsold quantity of inventory available with the partner. | | Partner Unsold Inventory Ledger | Stores the remaining quantity of unsold inventory available with the partner and also calculates onhold quantities. | | Rebate Program | Stores rebate programs your organization runs with a single account, all accounts, or specific list of accounts. | | Program Rebate Type Product | Stores a junction between a program rebate type and a product. | | Price Protection Term | Stores all price protection term records. | | Rebate Program Member | Stores information about members of a rebate program, eligible for rebate payments. | | Rebate Partner Special Pricing Term | Stores information about the special pricing term for a ship and debit program. | # Channel Partner Inventory Tracking Licenses and Permissions Assign these licenses and permission sets to users. ### Required Editions
Available in: Enterprise, Professional, and Unlimited Editions with the Channel Revenue Management add on
Assign these licenses. | License | description | | --- | --- | | Channel Partner Inventory Tracking | Gives users access to channel partner inventory tracking features. | Assign permission sets required to set up and use Channel Partner Inventory Tracking. | Persona | what they do | permission set | | --- | --- | --- | | Standard User | Views ledger and traceability records. Creates and updates transaction journal, partner unsold inventory, and partner unsold inventory ledger records. | Channel Partner Inventory Standard User | | Admin | Helps set up the Channel Partner Inventory Tracking capability and maintains Data Processing Engine definitions. | Channel Partner Inventory Admin User | # Channel Partner Inventory Tracking Licenses and Permissions for Experience Cloud Representatives at the partner organizations can upload resale documents using the Manufacturing Experience Cloud Site. Enable these licenses and assign permission sets to users. ### Required Editions
Available in: Enterprise, Professional, and Unlimited Editions with the Channel Revenue Management add on
Enable these licenses. | License | description | | --- | --- | | Channel Partner Inventory Tracking for Experience Cloud | Gives external users access to the channel partner inventory processes and ledger and traceability records in Experience Cloud. | | Channel Partner Inventory For Experience Cloud | Gives users access to partner-reported inventory and point of sale records in Experience Cloud. | Assign permission sets required to set up and use Channel Partner Inventory Tracking. | Persona | permission set | what they do | | --- | --- | --- | | Partner Manager | ​​Channel Partner Inventory for Experience Cloud User | Submits the point-of-sale data through partner portal or B2B interface. | # Channel Revenue Management Channel Revenue Management is a suite of robust features built on the Salesforce Platform that help your business elevate channel partner engagement, track channel inventory, and drive channel sales with incentives. It's a unified suite that helps you manage channel partner operations, protect margins, report market opportunities, and strengthen partner collaboration and trust. ### Required Editions
Available in: Enterprise, Professional, and Unlimited Editions with the Channel Revenue Management add on
Improve access to market opportunities and resolve channel conflicts by using Design Registration. Improve partner inventory visibility to reduce overpayments and revenue leakages by using Channel Partner Inventory Tracking. Establish and manage transparent and collaborative relationships with your partners by using Price Protection. Incentivize your partners to meet targets with volume, growth, and other types of rebates by using Rebate Management. Compensate partners for competitive product pricing by using Ship and Debit Process Management. Empower your partners to maintain healthy inventory levels by returning or scrapping unsold products for credit by using Stock Rotation. - **[Discover and Set Up Channel Revenue Management Features with Salesforce Go](https://help.salesforce.com/s/articleView?id=xcloud.chrm_salesforce_go_parent.htm&release=264.0.0&type=5)** Explore, set up and configure, and monitor usage of Channel Revenue Management features in one streamlined setup location. Access content resources, such as videos, Trailhead, and Salesforce Help articles, to learn about features, and get help with configuration. Discover more Channel Revenue Management features and add-on licenses that are available based on your Salesforce edition. And if you’ve turned on the Your Account app, you can quickly buy add-on licenses for some products directly from Salesforce Go. - **[Common Capabilities in Channel Revenue Management](https://help.salesforce.com/s/articleView?id=xcloud.chrm_common_capabilities_in_channel_revenue_management.htm&release=264.0.0&type=5)** Set up and manage core Channel Revenue Management features that support rebate programs, incentives, and partner-related processes. These shared capabilities are used across multiple Channel Revenue Management workflows and aren’t tied to a specific use case. - **[Agentforce for Channel Revenue Management](https://help.salesforce.com/s/articleView?id=xcloud.chrm_genai_agentforce_bucket_parent.htm&release=264.0.0&type=5)** Agentforce for Channel Revenue Management simplifies the management of rebate programs and payout processes through natural language interactions. With predefined agent topics and actions, track calculations, resolve issues with payout insights, and review overall rebate program details to ensure transparency, traceability, and accurate claims. - **[Data Cloud for Channel Revenue Management](https://help.salesforce.com/s/articleView?id=xcloud.chrm_data_cloud_parent.htm&release=264.0.0&type=5)** Connect, harmonize, and analyze high-volume incentive, member performance, and transactional data at scale by setting up Data Cloud for Channel Revenue Management. Easily start your implementation by deploying the standard Channel Revenue Management data kit that comes with predefined data streams and unified data model objects (DMOs). - **[Channel Revenue Management Billable Usage Types](https://help.salesforce.com/s/articleView?id=xcloud.chrm_payout_usage.htm&release=264.0.0&type=5)** Usage of certain Channel Revenue Management features impacts your credit consumption. For more information on how usage is billed, refer to your contract or contact your account executive. - **[Channel Partner Inventory Tracking](https://help.salesforce.com/s/articleView?id=xcloud.chrm_channel_inventory_parent.htm&release=264.0.0&type=5)** Get greater visibility into your channel partner inventory. Effectively track the inventory based on sales to partners and resale from partners to end-customers. Enhance downstream processes such as ship and debit claim processing and price protection. Calculate the partner inventory in the channel by leveraging partner point of sales and sales data. - **[Design Registration](https://help.salesforce.com/s/articleView?id=xcloud.chrm-design-registration-parent.htm&release=264.0.0&type=5)** Allow partners to register designs through the vendor portal, capturing key details for better sales visibility and planning. Enable channel managers to approve design submissions, ensuring fairness and tracking contributions. Simplify the process and increase accountability for partners. - **[Price Protection](https://help.salesforce.com/s/articleView?id=xcloud.chrm-price-protection-parent.htm&release=264.0.0&type=5)** Manage Price Protection programs for partners and distributors to ensure margin stability amid price fluctuations. - **[Rebate and Accrual Management Advanced](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_adv_parent.htm&release=264.0.0&type=5)** Automate financial liability tracking and rebate payout processing and improve profit and loss accuracy by managing high-volume rebate accruals and payouts through DPE on Data 360. Companies that sell through indirect channels such as manufacturing, automotive, and consumer goods can use Rebate and Accrual Management Advanced to ensure that funds are reserved and forecasted correctly, and that final payouts are calculated and settled accurately. - **[Rebate Management](https://help.salesforce.com/s/articleView?id=xcloud.rebates_admin_parent.htm&release=264.0.0&type=5)** Rebate Management gives businesses complete control on their rebate’s lifecycle to reward their partners when their partners meet an agreed-upon sales target. Manufacturers give rebates to partners to build deeper loyalty and drive the desired channel purchasing behavior. Use Rebate Management to create rebate programs and define an incentive structure with benefits and corresponding qualification thresholds. - **[Ship and Debit Process Management](https://help.salesforce.com/s/articleView?id=xcloud.shipdebit_parent.htm&release=264.0.0&type=5)** Ship and Debit Process Management gives manufacturers the ability to craft an end-to-end ship and debit process to compensate partners who sell competitively priced products and deftly react to market conditions. Manufacturers adjust product prices to protect their partners’ margins and to incentivize partners to repeat business. Use Ship and Debit Process Management to create ship and debit programs and set up special prices and discounts that partners receive for different products. - **[Stock Rotation Incentive](https://help.salesforce.com/s/articleView?id=xcloud.chrm_stock_rotation_incentive_parent.htm&release=264.0.0&type=5)** Manage stock rotation programs to allow partners and distributors to return or scrap unsold inventory for credit, ensuring optimal stock levels and financial flexibility. - **[Manage Budgets](https://help.salesforce.com/s/articleView?id=xcloud.rebates_manage_budget.htm&release=264.0.0&type=5)** Set, allocate, and track financial budgets to maintain control and visibility over your rebate program commitments. Effective budget management allows you to prevent overspending, ensure funds are available for payouts, and accurately forecast liabilities. - **[Simplify Reporting with Accounting Subledger](https://help.salesforce.com/s/articleView?id=xcloud.simplify_reporting_with_account_subledger.htm&release=264.0.0&type=5)** Improve your financial reporting by extending Accounting Subledger functionality to include rebate and incentive records. By integrating with Accounting Subledger, you can generate debits and credits within Salesforce, eliminating manual exports and data reconciliation in separate spreadsheets. # Channel Revenue Management Channel Revenue Management is a suite of robust features built on the Salesforce Platform that help your business elevate channel partner engagement, track channel inventory, and drive channel sales with incentives. It's a unified suite that helps you manage channel partner operations, protect margins, report market opportunities, and strengthen partner collaboration and trust. ### Required Editions
Available in: Lightning Experience
Available in: Sales Cloud Enterprise Edition (or above) with PEM, Partner Community, and External Apps licenses.
Improve access to market opportunities and resolve channel conflicts by using Design Registration. Improve partner inventory visibility to reduce overpayments and revenue leakages by using Channel Partner Inventory Tracking. Establish and manage transparent and collaborative relationships with your partners by using Price Protection. Incentivize your partners to meet targets with volume, growth, and other types of rebates by using Rebate Management. Compensate partners for competitive product pricing by using Ship and Debit Process Management. See [Channel Revenue Management](https://help.salesforce.com/s/articleView?id=xcloud.chrm_channel_revenue_management_parent.htm&type=5&language=en_US) # Channel Revenue Management Billable Usage Types Usage of certain Channel Revenue Management features impacts your credit consumption. For more information on how usage is billed, refer to your contract or contact your account executive. ### Required Editions
Available in: Enterprise, Professional, and Unlimited Editions with the Channel Revenue Management add on
## Credit Usage Each Channel Revenue Management subscription includes a quantity of credits. These Credits must be used before the Order End Date set forth in the Usage Details table on the Order Form, and no rollover will be permitted. The customer consumes these Credits at the applicable multiplier rate based on the Usage Type identified below. | Usage Type | Description | | --- | --- | | Channel Revenue Management Payout | Usage is calculated based on the total value of all channel revenue management payouts that are calculated during an Order Term, in US dollars. A payout represents the value of the incentives paid out to channel partners in one of these Channel Incentive Programs: Rebate Program, Ship and Debit Program, Price Protection Program, or Stock Rotation Program. | # Channel Revenue Management Cloud Data Streams Data streams map data model objects in Data Cloud to objects in your Salesforce org. The Channel Revenue Management data kit contains predefined data streams for data model objects. The fields on the data model objects are mapped to the corresponding fields on the source objects. You can map other fields as required, or delete the mappings that you don't use. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions
## Cloud Mapping for Account Use these mappings to store information about individual or business accounts for rebate program members, partners, or customers. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Account ID | Text | Id | Unique identifier for the account | | Account Name | Text | Name | Name of the account | | Account Number | Text | AccountNumber | Customer-defined account number | | Account Source | Text | AccountSource | Source of the account record | | Account Type | Text | Type | Type of account (for example, Customer, Partner) | | Annual Revenue | Currency | AnnualRevenue | Estimated annual revenue of the account | | Billing Address | Address | BillingAddress | Billing address of the account | | Created By ID | Text | CreatedById | ID of user who created the record | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Description | Text | Description | Description of the account | | Industry | Text | Industry | Industry classification | | Last Modified By ID | Text | LastModifiedById | ID of user who last modified the record | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | | Owner ID | Text | OwnerId | ID of the user who owns the account | | Parent Account ID | Text | ParentId | ID of the parent account | | Phone | Text | Phone | Primary phone number | | Shipping Address | Address | ShippingAddress | Shipping address of the account | | Website | Text | Website | Account website URL | ## Cloud Mapping for User Use these mappings to store information about Salesforce users who manage rebate programs, approve payouts, or own rebate records. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | User ID | Text | Id | Unique identifier for the user | | Username | Text | Username | Username for login | | Email | Text | Email | Email address of the user | | First Name | Text | FirstName | User's first name | | Last Name | Text | LastName | User's last name | | Full Name | Text | Name | Full name of the user | | Is Active | Boolean | IsActive | Indicates whether the user is active | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | | Profile ID | Text | ProfileId | ID of the user's profile | | Role ID | Text | UserRoleId | ID of the user's role | | Manager ID | Text | ManagerId | ID of the user's manager | | Department | Text | Department | User's department | | Title | Text | Title | User's job title | ## Cloud Mapping for UnitOfMeasure Use these mappings to store units of measurement used in rebate calculations. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Unit of Measure ID | Text | Id | Unique identifier for the unit of measure | | Unit Name | Text | Name | Name of the unit of measure | | Code | Text | Code | Short code for the unit | | Description | Text | Description | Description of the unit of measure | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for ProgramRebateType Use these mappings to store rebate type configurations, calculation methods, and benefit parameters. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the rebate type | | Rebate Type Name | Text | Name | Name of the rebate type | | Rebate Program ID | Text | RebateProgramId | Reference to the parent rebate program | | Status | Text | Status | Status of the rebate type (Active, Inactive) | | Calculation Type | Text | CalculationType | Type of calculation (Per Unit, Per Transaction, Formula, Growth) | | Calculation Method | Text | CalculationMethod | Method for calculating rebate benefits | | Calculation Basis | Text | CalculationBasis | Type of payout (Accrual, Invoice, etc.) | | Rebate Measure Type | Text | RebateMeasureType | Type of rebate measure (Volume, Revenue, etc.) | | Measure Field Name | Text | MeasureFieldName | Field used for rebate amount calculations | | Aggregate Object Name | Text | AggregateObjectName | Name of the custom aggregation entity | | Benefit Qualifier Field Name | Text | BenefitQualifierFieldName | Field used to determine benefit value | | Filter Action | Text | FilterAction | Filter logic for rebate type conditions | | Filter Criteria Text | Text | FilterCriteriaText | Filter definition in JSON format | | Filter Logic Text | Text | FilterLogicText | Filter criteria options (AND, OR, Custom) | | Product Filter Type | Text | ProductFilterType | Criteria applied for product filters | | Accrual Rate | Number | AccrualRate | The accrual rate for the rebate type | | Accrual Calculation Method | Text | AccrualCalculationMethod | Calculation method for accrual amount | | Unit of Measure ID | Text | UnitOfMeasureId | Associated unit of measure | | Validity Duration Number | Number | ValidityDurationNumber | Duration of inventory eligibility | | Aggregation Criteria Text | Text | AggregationCriteriaText | PoS aggregate criteria in JSON format | | Last Calc Agg Criteria Date Time | DateTime | LastCalcAggCriteriaDateTime | When aggregation criteria was last calculated | | Created Date Time | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date Time | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for RebateProgramMember Use these mappings to store information about members enrolled in rebate programs. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the program member | | Member Name | Text | Name | Name of the program member | | Rebate Program ID | Text | RebateProgramId | Reference to the parent rebate program | | Account ID | Text | AccountId | Reference to the member's account | | Ship To Account ID | Text | ShipToAccountId | Account receiving the benefit | | Member Status | Text | Status | Status of membership (Active, Inactive) | | Owner ID | Text | OwnerId | Owner of the member record | | Last Activation Date | Date | LastActivationDate | Latest date member was activated (day precision) | | Last Deactivation Date | Date | LastDeactivationDate | Latest date member was deactivated (day precision) | | Cumulative Payout Amount | Currency | CumulativePayoutAmount | Total rebate amount paid to this member | | Total Payout Amount | Currency | TotalPayoutAmount | Total payout amount across all periods | | Total Accrued Amount | Currency | TotalAccruedAmount | Total accrued amount across all periods | | Is Payout Calc Skipped | Boolean | IsPayoutCalcSkipped | Whether payout calculation is skipped for this member | | Created Date Time | DateTime | CreatedDate | Date and time when the record was created | ## Cloud Mapping for RebateProgram Use these mappings to store rebate program configuration, including program dates, frequency, and status. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the rebate program | | Program Name | Text | Name | Name of the rebate program | | Program Reference Number | Text | ProgramReferenceNumber | Reference number assigned to this rebate program | | Description | Text | Description | Description of the rebate program | | Start Date | Date | StartDate | Start date of the rebate program (day precision) | | End Date | Date | EndDate | End date of the rebate program (day precision) | | Status | Text | Status | Status of the rebate program (for example, Draft, Active, Completed) | | Type | Text | Type | Type of rebate program (for example, Standard, Ship and Debit) | | Frequency Text | Text | Frequency | Frequency of the rebate program (Monthly, Quarterly, etc.) | | Accrual Frequency Text | Text | AccrualFrequency | The frequency at which rebate amounts are accrued | | Execution Type | Text | ExecutionType | Specifies the execution platform (Standard, Advanced) | | Grace Period Day Count | Number | GracePeriodDays | Number of days transactions are considered after period end | | Payout Calculation Day Count | Number | PayoutCalculationDays | Number of days from period end before payment is calculated | | Owner ID | Text | OwnerId | ID of the user who owns the rebate program | | Created By ID | Text | CreatedById | ID of the user who created the rebate program | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for RebateProgramPayoutPeriod Use these mappings to store payout period definitions and calculation dates. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the payout period | | Period Name | Text | Name | Name of the payout period | | Rebate Program ID | Text | RebateProgramId | Reference to the parent rebate program | | Start Date | Date | StartDate | Start date of the payout period (day precision) | | End Date | Date | EndDate | End date of the payout period (day precision) | | Status | Text | Status | Status of the payout period | | Payout Calculation Date | Date | PayoutCalculationDate | Date when payout is calculated (day precision) | | Transaction Grace Period Date | Date | TransactionGracePeriodDate | Last date for transactions to be included (day precision) | | Last Calculation Date | Date | LastCalculationDate | Date of the last calculation run (day precision) | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for ProgramRebateTypeFilter Use these mappings to store filter criteria for rebate type qualification. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the filter | | Filter Name | Text | Name | Name of the filter | | Program Rebate Type ID | Text | ProgramRebateTypeId | Reference to the parent rebate type | | Field Name | Text | FieldName | Name of the field to filter on | | Operator | Text | Operator | Filter operator (equals, greater than, etc.) | | Value | Text | Value | Filter value | | Sequence Number | Number | SequenceNumber | Order of filter evaluation | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for ProgramRebateTypeBenefit Use these mappings to store benefit tiers and values for rebate types. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the benefit | | Benefit Name | Text | Name | Name of the benefit tier | | Program Rebate Type ID | Text | ProgramRebateTypeId | Reference to the parent rebate type | | Benefit Type | Text | BenefitType | Type of benefit (Percentage, Fixed Amount, etc.) | | Benefit Value | Number | BenefitValue | Value of the benefit | | From Value | Number | FromValue | Starting threshold for tier | | To Value | Number | ToValue | Ending threshold for tier | | Effective Start Date | Date | EffectiveStartDate | Date benefit becomes effective (day precision) | | Effective End Date | Date | EffectiveEndDate | Date benefit expires (day precision) | | Sequence Number | Number | SequenceNumber | Order of tier evaluation | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for RebateProgramMemberPayout Use these mappings to store calculated payout amounts for program members by period. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the member payout | | Member Payout Name | Text | Name | Name of the member payout record | | Member ID | Text | RebateProgramMemberId | Reference to the program member | | Period ID | Text | RebateProgramPayoutPeriodId | Reference to the payout period | | Payment ID | Text | RebatePaymentId | Reference to the rebate payment | | Status | Text | Status | Status of payout (Ready for Approval, Approved, Rejected) | | Calculation Date | Date | CalculationDate | Date calculation occurred (day precision) | | Calculated Rebate Amount | Currency | CalculatedRebateAmount | Total calculated rebate amount | | Accrued Amount | Currency | AccruedAmount | Payout amount accrued by the member | | Total Calculated Payout Amount | Currency | TotalCalculatedPayoutAmount | Base payout before adjustments | | Total Approved Adjustment Amount | Currency | TotalApprovedAdjustmentAmount | Summarized approved adjustments | | Total Rebate Amount | Currency | TotalRebateAmount | Summarized total payout amount | | Payout Amount | Currency | FinalPayoutAmount | Total payout including adjustments | | Created By ID | Text | CreatedById | ID of user who created the record | | Created Date Time | DateTime | CreatedDate | Date and time when the record was created | ## Cloud Mapping for ProgramRebateTypePayout Use these mappings to store aggregate payout amounts by rebate type and period. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the type payout | | Type Payout Name | Text | Name | Name of the type payout record | | Program Rebate Type ID | Text | ProgramRebateTypeId | Reference to the rebate type | | Payout Period ID | Text | RebateProgramPayoutPeriodId | Reference to the payout period | | Status | Text | Status | Status of the type payout | | Rebate Amount | Currency | RebateAmount | Total rebate amount for the type | | Accrued Amount | Currency | AccruedAmount | Total accrued amount for the type | | Calculated Payout Amount | Currency | CalculatedPayoutAmount | Calculated payout before adjustments | | Total Payout Amount | Currency | TotalPayoutAmount | Total payout including adjustments | | Total Rate Adjusted Amount | Currency | TotalRateAdjustedAmount | Total rate adjustment amount | | Total Prior Period Adj Amount | Currency | TotalPriorPeriodAdjAmount | Total prior period adjustment amount | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for ProgramRebateTypPayoutSrc Use these mappings to track payout source details by rebate type, member, and period. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the payout source | | Payout Source Name | Text | Name | Name of the payout source record | | Program Rebate Type ID | Text | ProgramRebateTypeId | Reference to the rebate type | | Program Member ID | Text | RebateProgramMemberId | Reference to the program member | | Payout Period ID | Text | RebateProgramPayoutPeriodId | Reference to the payout period | | Rebate Amount | Currency | RebateAmount | Rebate amount for this source | | Accrued Amount | Currency | AccruedAmount | Accrued amount for this source | | Payout Amount | Currency | PayoutAmount | Payout amount for this source | | Rate Adjusted Amount | Currency | RateAdjustedAmount | Rate adjustment amount | | Prior Period Adjusted Amount | Currency | PriorPeriodAdjustedAmount | Prior period adjustment amount | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for RebatePrgmMbrPayoutAdjustment Use these mappings to store manual adjustments applied to member payouts. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the adjustment | | Adjustment Name | Text | Name | Name of the adjustment record | | Member Payout ID | Text | RebateProgramMemberPayoutId | Reference to the member payout | | Adjustment Type | Text | Type | Type of adjustment (Increase, Decrease) | | Adjustment Amount | Currency | AdjustmentAmount | Amount of the adjustment | | Adjustment Reason | Text | Reason | Reason for the adjustment | | Status | Text | Status | Status of the adjustment (Pending, Approved, Rejected) | | Approved By ID | Text | ApprovedById | ID of user who approved the adjustment | | Approved Date | Date | ApprovedDate | Date adjustment was approved (day precision) | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for RebatePayment Use these mappings to store actual payment transactions issued to members. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the payment | | Payment Name | Text | Name | Name of the payment record | | Payment Number | Text | PaymentNumber | Payment reference number | | Member Payout ID | Text | RebateProgramMemberPayoutId | Reference to the member payout | | Payment Method | Text | PaymentMethod | Method of payment (Check, ACH, Wire Transfer) | | Payment Status | Text | Status | Status of the payment (Issued, Cleared, Cancelled) | | Amount | Currency | Amount | Payment amount | | Payment Date | Date | PaymentDate | Date payment was issued (day precision) | | Check Number | Text | CheckNumber | Check number if applicable | | Transaction ID | Text | TransactionId | External payment transaction ID | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for PgmRebateTypBnftMapping Use these mappings to store mappings between aggregate fields and benefit qualifiers. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the mapping | | Mapping Name | Text | Name | Name of the benefit mapping | | Program Rebate Type ID | Text | ProgramRebateTypeId | Reference to the rebate type | | Aggregate Field Name | Text | AggregateFieldName | Field in aggregate object | | Rebate Type Benefit Field | Text | RebateTypeBenefitField | Field in benefit definition | | Sequence Number | Number | SequenceNumber | Order of mapping evaluation | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for RebateMemberProductAggregate Use these mappings to store aggregated transaction data by member and product. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the aggregate | | Aggregate Name | Text | Name | Name of the aggregate record | | Program Member ID | Text | RebateProgramMemberId | Reference to the program member | | Product ID | Text | ProductId | Reference to the product | | Aggregation Period | Text | AggregationPeriod | Period of aggregation | | Total Quantity | Number | TotalQuantity | Total quantity sold | | Total Transaction Amount | Currency | TotalTransactionAmount | Total transaction value | | Prior Total Transaction Amount | Currency | PriorTotalTransactionAmount | Prior period transaction value | | Growth Amount | Currency | GrowthAmount | Growth vs. prior period | | Growth Percentage | Number | GrowthPercentage | Growth percentage vs. prior period | | Transaction Count | Number | TransactionCount | Number of transactions | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | ## Cloud Mapping for ProgramRebateTypeProduct Use these mappings to store product associations for rebate types. | Data Model Object Field | Field Type | Data Source Object Field | Description | | --- | --- | --- | --- | | Id | Text | Id | Primary key - unique identifier for the product association | | Association Name | Text | Name | Name of the product association | | Program Rebate Type ID | Text | ProgramRebateTypeId | Reference to the rebate type | | Product ID | Text | ProductId | Reference to the product | | Product Category | Text | ProductCategory | Category of the product | | Is Included | Boolean | IsIncluded | Whether product is included or excluded | | Effective Start Date | Date | EffectiveStartDate | Date association becomes effective | | Effective End Date | Date | EffectiveEndDate | Date association expires | | Created Date | DateTime | CreatedDate | Date and time when the record was created | | Last Modified Date | DateTime | LastModifiedDate | Date and time when the record was last modified | # Channel Revenue Management Data Kit Get your Data Cloud implementation up and running by installing and deploying the predefined Channel Revenue Management data kit. This data kit packages core components, data streams, and structural definitions to safely offload complex logic to the Data Cloud Batch Transform engine. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions
- **[Install the Channel Revenue Management Data Kit](https://help.salesforce.com/s/articleView?id=xcloud.chrm_data_cloud_install_data_kit.htm&release=264.0.0&type=5)** To create the necessary Data Lake Objects (DLOs) and data model objects (DMOs) for your calculations, deploy the standard package in your org. - **[Deploy the Data Streams from Channel Revenue Management Data Kit](https://help.salesforce.com/s/articleView?id=xcloud.chrm_data_cloud_deploy_data_streams.htm&release=264.0.0&type=5)** Create a data stream to connect your Salesforce org to Data Cloud. These data streams ingest your rebate program rules, active members, and benefit parameters directly into the engine staging areas. - **[Channel Revenue Management Cloud Data Streams](https://help.salesforce.com/s/articleView?id=xcloud.chrm_data_cloud_data_streams.htm&release=264.0.0&type=5)** Data streams map data model objects in Data Cloud to objects in your Salesforce org. The Channel Revenue Management data kit contains predefined data streams for data model objects. The fields on the data model objects are mapped to the corresponding fields on the source objects. You can map other fields as required, or delete the mappings that you don't use. # Channel Revenue Management Data Model Objects Data model objects (DMOs) store unified incentive data in Data Cloud. You can access standard model objects as part of the package deployment. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions
After data is ingested, you map your Data Lake Objects (DLOs) to standard DMOs to map Salesforce CRM data to Data Cloud. This setup replaces traditional objects with high-performance Data Cloud engines during batch transforms. Data model objects: - RebateProgram - RebateProgramMember - RebateProgramRebateType - RebateProgramPayoutPeriod - RebateProgramMemberPayout - RebateProgramRbtTypPayout - RebateProgramRbtTypPayoutSrc - RebatePgmRbtTypeBnftMapping - RebateProgramRbtTypBenefit - RebateProgramRbtTypFilter - RebateProgramRbtTypeProduct - RebatePrgmMbrPayoutAdjustment - RebatePayment - RebateMemberProductAggregate - Account - User - UnitOfMeasure # Chart Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains a Chart LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Summer '20 The _Chart Lightning Web Component_ displays data as a chart and enables users to perform actions from the chart. ## Available c-chart Attributes For more chart configuration options, see [Chart.js](https://www.chartjs.org/docs/latest/).

Attribute

Value

Type

Required

Description

values

 

array

yes

Contains the data for the chart.

labels

 

array

yes

Contains the labels for the chart.

type

line, bar, radar, doughnut, pie, polarArea, bubble, scatter

string

yes

Sets the type of the chart to display. See also ChartDonut Lightning Web Component, which extends the Chart component for a dougnut chart.

background-color

RGB value or color name (Default: rgba(0, 0, 0, 0.1))

array

yes

Sets background color for each data segment on the chart.

background

RGB value or color name (Default: white)

string

 

Sets the color for the background of the chart.

channel

query, dataraptor

string

 

Sets the data source type.

aspectRatio

(Default: 2)

number

 

Provides the canvas aspect ratio. (For example, width : height, a value of 1 representing a square canvas.)

cutoutPercentage

(Default : 50 for doughnut chart. Default: 0 for all other chart types)

number

 

If type is "doughnut", sets the percentage of the doughnut chart that is cut out of the middle.

displayLegend

true, false (Default: true)

boolean

 

To hide chart legend, set to false.

disableAnimateRotate

true, false (Default: true)

boolean

 

To enable chart rotation animation, set to false.

disableAnimateScale

true, false (Default: false)

boolean

 

To disable chart scaling animation from the center outwards, set to true.

icon-class

 

string

 

Adds an extra class to the icon element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

icon-name

(Format: utility:add)

string

 

Sets the icon for the chart. See SLDS icons.

icon-size

xx-small, x-small, small, medium, large

string

 

Sets the icon size for the button element.

icon-url

URL

string

 

Sets the icon URL, overriding the defined url for the svg resource. Used with Newport Design System (NDS) theme only.

title

 

string

 

Adds a title to the chart.

minSizeResizeable

 

boolean

 

Adds a minimum canvas width for the chart. This attribute is required if you are using the chart inside a responsive parent where resizing is required.

## Example c-chart Component ``` ``` ## Example Using Query as a Data Source Set the _channel_ attribute to a value of "query". ``` // import the dataHandler method import { getDataHandler } from "c/utility"; // declare the query recordSource = { type: "query", { query: "SELECT FirstName,Id FROM Contact" } }; // declare a variable with track @track testLabel1 = []; let request = JSON.stringify(this.recordSource); // call the getDataHandler and format the response from the query getDataHandler( request ).then(data => { console.log('request from query : ',data); this.formatResponse(data); }).catch(error => { console.log('error from query : ',error); }); ``` ``` ``` ## Example Using an Omnistudio Data Mapper as a Data Source To use a Data Mapper as a data source: - Create a Data Mapper to use with the _Chart_ component. - Set the _channel_ attribute to a value of `dataraptor`. - Add and configure a DatasourceDataraptor component. See _DatasourceDataraptor Lightning Web Component_. ``` @track testLabel2 = []; ``` ``` ``` ## Example Values for Arrays ``` // Labels needs to be an array. labels = ['Red', 'Orange', 'Yellow', 'Green', 'Blue']; // Incase you provide a string it will get converted into character array labels = 'hello' /* This Becomes */ labels = ['h','e','l','l','o'] // Values needs to be an array. values = [10,5,45,25,15] //or values = [,,,4,2] //or values = [3.5,6,7,0,8.5] /****** CANNOT BE NULL *****/ // BackgroundColor needs to be an array. // can be RGB colors backgroundColor1 = [ 'rgb(255, 99, 132)', 'rgb(255, 159, 64)', 'rgb(255, 205, 86)', 'rgb(75, 192, 192)', 'rgb(54, 162, 235)' ]; // can be string color names backgroundColor1 = ['Red','Green','Yellow'] ``` ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _Chart Lightning Web Component_ displays data as a chart and enables users to perform actions from the chart. ## Available c-chart Attributes For more chart configuration options, see [Chart.js](https://www.chartjs.org/docs/latest/).

Attribute

Value

Type

Required

Description

values

 

array

yes

Contains the data for the chart.

labels

 

array

yes

Contains the labels for the chart.

type

line, bar, radar, doughnut, pie, polarArea, bubble, scatter

string

yes

Sets the type of the chart to display. See also ChartDonut Lightning Web Component, which extends the Chart component for a dougnut chart.

background-color

RGB value or color name (Default: rgba(0, 0, 0, 0.1))

array

yes

Sets background color for each data segment on the chart.

background

RGB value or color name (Default: white)

string

 

Sets the color for the background of the chart.

channel

query, dataraptor

string

 

Sets the data source type.

aspectRatio

(Default: 2)

number

 

Provides the canvas aspect ratio. (For example, width : height, a value of 1 representing a square canvas.)

cutoutPercentage

(Default : 50 for doughnut chart. Default: 0 for all other chart types)

number

 

If type is "doughnut", sets the percentage of the doughnut chart that is cut out of the middle.

displayLegend

true, false (Default: true)

boolean

 

To hide chart legend, set to false.

disableAnimateRotate

true, false (Default: true)

boolean

 

To enable chart rotation animation, set to false.

disableAnimateScale

true, false (Default: false)

boolean

 

To disable chart scaling animation from the center outwards, set to true.

icon-class

 

string

 

Adds an extra class to the icon element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

icon-name

(Format: utility:add)

string

 

Sets the icon for the chart. See SLDS icons.

         

icon-size

xx-small, x-small, small, medium, large

string

 

Sets the icon size for the button element.

icon-url

URL

string

 

Sets the icon URL, overriding the defined url for the svg resource. Used with Newport Design System (NDS) theme only.

title

 

string

 

Adds a title to the chart.

## Example c-chart Component ``` ``` ## Example Using Query as a Data Source Set the _channel_ attribute to a value of "query". ``` // import the dataHandler method import { getDataHandler } from "c/utility"; // declare the query recordSource = { type: "query", { query: "SELECT FirstName,Id FROM Contact" } }; // declare a variable with track @track testLabel1 = []; let request = JSON.stringify(this.recordSource); // call the getDataHandler and format the response from the query getDataHandler( request ).then(data => { console.log('request from query : ',data); this.formatResponse(data); }).catch(error => { console.log('error from query : ',error); }); ``` ``` ``` ## Example Using DatarRaptor as a Data Source To use a Data Mapper as a data source: - Create a Data Mapper to use with the _Chart_ component. - Set the _channel_ attribute to a value of "dataraptor". - Add and configure a DatasourceData Mapper component. See _DatasourceData Mapper Lightning Web Component_. ``` @track testLabel2 = []; ``` ``` ``` ## Example Values for Arrays ``` // Labels needs to be an array. labels = ['Red', 'Orange', 'Yellow', 'Green', 'Blue']; // Incase you provide a string it will get converted into character array labels = 'hello' /* This Becomes */ labels = ['h','e','l','l','o'] // Values needs to be an array. values = [10,5,45,25,15] //or values = [,,,4,2] //or values = [3.5,6,7,0,8.5] /****** CANNOT BE NULL *****/ // BackgroundColor needs to be an array. // can be RGB colors backgroundColor1 = [ 'rgb(255, 99, 132)', 'rgb(255, 159, 64)', 'rgb(255, 205, 86)', 'rgb(75, 192, 192)', 'rgb(54, 162, 235)' ]; // can be string color names backgroundColor1 = ['Red','Green','Yellow'] ``` ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _Chart Lightning Web Component_ displays data as a chart and enables users to perform actions from the chart. ## Available c-chart Attributes For more chart configuration options, see [Chart.js](https://www.chartjs.org/docs/latest/).

Attribute

Value

Type

Required

Description

values

 

array

yes

Contains the data for the chart.

labels

 

array

yes

Contains the labels for the chart.

type

line, bar, radar, doughnut, pie, polarArea, bubble, scatter

string

yes

Sets the type of the chart to display. See alsoChartDonut Lightning Web Component, which extends the Chart component for a dougnut chart.

background-color

RGB value or color name (Default: rgba(0, 0, 0, 0.1))

array

yes

Sets background color for each data segment on the chart.

background

RGB value or color name (Default: white)

string

 

Sets the color for the background of the chart.

channel

query, dataraptor

string

 

Sets the data source type.

aspectRatio

(Default: 2)

number

 

Provides the canvas aspect ratio. (For example, width : height, a value of 1 representing a square canvas.)

cutoutPercentage

(Default : 50 for doughnut chart. Default: 0 for all other chart types)

number

 

If type is ``doughnut'', sets the percentage of the doughnut chart that is cut out of the middle.

displayLegend

true, false (Default: true)

boolean

 

To hide chart legend, set to false.

disableAnimateRotate

true, false (Default: true)

boolean

 

To enable chart rotation animation, set to false.

disableAnimateScale

true, false (Default: false)

boolean

 

To disable chart scaling animation from the center outwards, set to true.

icon-class

 

string

 

Adds an extra class to the icon element. To add multiple classes, use a space to separate each class, such as `classone classtwo'.

icon-name

(Format: utility:add)

string

 

Sets the icon for the chart. See SLDS icons.

         

icon-size

xx-small, x-small, small, medium, large

string

 

Sets the icon size for the button element.

icon-url

URL

string

 

Sets the icon URL, overriding the defined url for the svg resource. Used with Newport Design System (NDS) theme only.

title

 

string

 

Adds a title to the chart.

## Example c-chart Component ``` ``` ## Example Using Query as a Data Source Set the _channel_ attribute to a value of \`\`query''. ``` // import the dataHandler method import { getDataHandler } from "c/utility"; // declare the query recordSource == { type: "query", { query: "SELECT FirstName,Id FROM Contact" } }; // declare a variable with track @track testLabel1 == []; let request == JSON.stringify(this.recordSource); // call the getDataHandler and format the response from the query getDataHandler( request ).then(data => { console.log('request from query : ',data); this.formatResponse(data); }).catch(error => { console.log('error from query : ',error); }); ``` ``` ``` ## Example Using DatarRaptor as a Data Source To use a Data Mapper as a data source: - Create a Data Mapper to use with the _Chart_ component. - Set the _channel_ attribute to a value of \`\`dataraptor''. - Add and configure a DatasourceData Mapper component. See_DatasourceData Mapper Lightning Web Component_. ``` @track testLabel2 == []; ``` ``` ``` ## Example Values for Arrays ``` // Labels needs to be an array. labels == ['Red', 'Orange', 'Yellow', 'Green', 'Blue']; // Incase you provide a string it will get converted into character array labels == 'hello' /* This Becomes */ labels == ['h','e','l','l','o'] // Values needs to be an array. values == [10,5,45,25,15] //or values == [,,,4,2] //or values == [3.5,6,7,0,8.5] /****** CANNOT BE NULL *****/ // BackgroundColor needs to be an array. // can be RGB colors backgroundColor1 == [ 'rgb(255, 99, 132)', 'rgb(255, 159, 64)', 'rgb(255, 205, 86)', 'rgb(75, 192, 192)', 'rgb(54, 162, 235)' ]; // can be string color names backgroundColor1 == ['Red','Green','Yellow'] ``` # ChartDonut Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains a ChartDonut LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _ChartDonut Lightning Web Component_ extends the _Chart Lightning Web Component_ and adds additional features. This component adds the ability to display and resize text at the center of the donut. ## Available c-chart-donut Attributes

Attribute

Value

Type

Required

Description

center-text

 

string

 

If set, displays text inside the center of the donut.

text-color

(Default: #000000)

string

 

Defines the color of the text.

font-style

(Default: Arial)

string

 

Sets the font style of the display text.

side-padding

(Default: 20px)

string

 

Sets the side padding for the text inside. Value must be 20px or greater.

## Example c-chart-donut ``` ``` ## Example JavaScript for Center Text Feature To implement the center text feature: - Pass a string value to the _center-text_ attribute. - Pass a plugin to the plugin sevice. See [Chart.js plugins](https://www.chartjs.org/docs/latest/developers/plugins.html) for more information. ``` let plugin = function(chart) { if (chart.config.options.elements.center) { // Your plugin code } }; this.renderChart(this.config, this.template, this.templateName, plugin); ``` ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _ChartDonut Lightning Web Component_ extends the _Chart Lightning Web Component_ and adds additional features. This component adds the ability to display and resize text at the center of the donut. ## Available c-chart-donut Attributes

Attribute

Value

Type

Required

Description

center-text

 

string

 

If set, displays text inside the center of the donut.

text-color

(Default: #000000)

string

 

Defines the color of the text.

font-style

(Default: Arial)

string

 

Sets the font style of the display text.

side-padding

(Default: 20px)

string

 

Sets the side padding for the text inside. Value must be 20px or greater.

## Example c-chart-donut ``` ``` ## Example JavaScript for Center Text Feature To implement the center text feature: - Pass a string value to the _center-text_ attribute. - Pass a plugin to the plugin sevice. See [Chart.js plugins](https://www.chartjs.org/docs/latest/developers/plugins.html) for more information. ``` let plugin == function(chart) { if (chart.config.options.elements.center) { // Your plugin code } }; this.renderChart(this.config, this.template, this.templateName, plugin); ``` # Chatter Action for Integration Procedures The Chatter Action creates a Chatter post and sends it to a Chatter feed. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Beginning in Summer ’26, Chatter is turned off by default in all new orgs. For any features in these orgs that require access to Chatter functionality or the Chatter APIs, turn on Chatter by going to **Setup** | **Chatter Settings** and selecting **Enable**. For details, see [Chatter Is Turned Off by Default in New Orgs Beginning in Summer ’26](https://help.salesforce.com/s/articleView?id=experience.collab_chatter_default_off.htm&type=5&language=en_US). To obtain the Id for the Mentioned User Id, Subject Id, Image Id, or File Id, go to the object's record page and select the Id from the URL. To find the Id of a community, run a query (for example, `SELECT Id,Name FROM Network`) in the Developer Console.

Property

Description

Community Id

Id of the Community to which to post.

  • User Id
  • Mentioned User Id (If you’re using the designer on a managed package)

User Id to mention in the post. Can be a single value or a JSON list.

Markup Type

Leave blank or select Bold, Italic, or Underline to determine the style of the Text property.

Subject Id

(Required) Id of the object that has the Chatter feed. Can be any object that supports Chatter feeds, such as Account, Contact, User, or Group.

Image Id

Id of a File object to be used as an image for the post. Can be a single value or a JSON list.

  • Uploaded File Id
  • File Id (If you’re using the designer on a managed package)

Id of a File object to be included as an attachment to the post. Can be a single value or a JSON list.

Text

Text of the post. Can include merge fields and HTML markup.

# Chatter Action for Integration Procedures (Managed Package) For the managed package runtime, the Chatter Action creates a Chatter post and sends it to a Chatter feed. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning in Summer ’26, Chatter is turned off by default in all new orgs. For any features in these orgs that require access to Chatter functionality or the Chatter APIs, turn on Chatter by going to **Setup** | **Chatter Settings** and selecting **Enable**. For details, see [Chatter Is Turned Off by Default in New Orgs Beginning in Summer ’26](https://help.salesforce.com/s/articleView?id=experience.collab_chatter_default_off.htm&type=5&language=en_US). - **[Chatter Action Properties for Integration Procedures (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_chatter_action_properties_for_integration_procedures.htm&release=264.0.0&type=5)** For the managed package runtime, these properties are unique to or function in a unique manner in Chatter Actions. All properties except **Markup Type** support merge fields. The Chatter Action creates a Chatter post and sends it to a Chatter feed. - **[Find the Id of a Community (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_find_the_id_of_a_community.htm&release=264.0.0&type=5)** For the managed package runtime, to find the Id of a community, you must run a query in the Developer Console. - **[Workflow for Chatter Action Example (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_chatter_action_example.htm&release=264.0.0&type=5)** For the managed package runtime, an Integration Procedure sends a Chatter post to a user. This post includes text, an image, and mentions of two other users. # Chatter Action Properties for Integration Procedures (Managed Package) For the managed package runtime, these properties are unique to or function in a unique manner in Chatter Actions. All properties except **Markup Type** support merge fields. The Chatter Action creates a Chatter post and sends it to a Chatter feed. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To obtain the Id for the **Mentioned User Id**, **Subject Id**, **Image Id**, or **File Id** property, go to the object's record page and select the Id from the URL.

Property

Description

Community Id

Id of the Community to which to post.

Mentioned User Id

User Id to mention in the post. Can be a single value or a JSON list.

Markup Type

Leave blank or select Bold, Italic, or Underline to determine the style of the Text property.

Subject Id

(Required) Id of the object that has the Chatter feed. Can be any object that supports Chatter feeds, such as Account, Contact, User, or Group.

Image Id

Id of a File object to be used as an image for the post. Can be a single value or a JSON list.

File Id

Id of a File object to be included as an attachment to the post. Can be a single value or a JSON list.

Text

Text of the post. Can include merge fields and HTML markup.

# Chatter: What’s Different or Not Available in the Salesforce Mobile App Learn about Chatter functionality in Lightning Experience on desktop that isn’t available or that works differently in the Salesforce mobile app. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note Beginning in Summer ’26, Chatter is turned off by default in all new orgs. For any features in these orgs that require access to Chatter functionality or the Chatter APIs, turn on Chatter by going to **Setup** | **Chatter Settings** and selecting **Enable**. For details, see [Chatter Is Turned Off by Default in New Orgs Beginning in Summer ’26](https://help.salesforce.com/s/articleView?id=experience.collab_chatter_default_off.htm&type=5&language=en_US). ## Feeds When viewing feed items in the Salesforce mobile app, you can’t see: - Live feed or live comment updates. - Rich text formatting or code snippets in the main feed. - Inline images in the main feed—you see a placeholder with the name of the image instead. - Multiple attachments on an item in the main feed—only the first attachment is displayed. - Previews of links in the main feed. - Bundled posts in the What I Follow feed. - Social feed posts. - The full content of posts shared from Lightning Experience when viewed in the main Chatter feed. - The full content of posts shared from Lightning Experience when viewed in feeds on profiles. (_Salesforce for iOS only_) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note To see the shared content, tap the **View Post** link in the shared feed item. When posting, commenting, or doing other work in feeds from the Salesforce mobile app, you can’t: - Apply rich text formatting or include code snippets in feed items. - Add more than one attachment to feed items. - Edit posts that include rich text, inline links, or inline images. - Share posts. - Search in feeds on user profiles and records. There are some other features that aren’t available in Chatter in the Salesforce mobile app. You can’t: - Switch the main feed to show only muted posts. - Filter the main feed to show all updates, fewer updates, questions, or only posts related to a specific object. - Send or view Chatter messages. - See recommendations. - Add or view Chatter favorites. - See Chatter activity statistics or Chatter influence status. - Invite coworkers to sign up for Chatter. - Receive Chatter push notifications if you’re an external user. ## Topics When using topics, you can’t: - See trending topics. - Edit topic details (name and description). - Tag favorite topics. - Assign topics to records. - See the Related Topics and Knowledgeable on Topics related lists. - See topics in auto-complete options when searching using hashtags. ## Chatter Questions Mobile Limitations When using Chatter Questions, you can’t: - See similar questions and knowledge articles when you ask questions. - Select best answers. Chatter Questions isn’t fully supported in the Salesforce mobile app. When coworkers ask questions, you can see who posted but the text of the question isn’t displayed. You can see any answers to the question, however. ## Groups When using groups, you can’t: - See live feed updates. - Invite customers to join private customer groups. - Add records to Chatter groups with customers using the **Add Record** action. - Withdraw requests to join private groups. - Change email and in-app notification settings for groups in Experience Cloud sites. - See or customize group member engagement data. - Share files with a group unless you’re a member or admin (iOS only) Group owners and managers can’t remove files from the group files list. ## People and Profiles When using People to view profiles, you can’t: - Edit profile information in Salesforce for iOS. - Upload a profile photo using the Good Access™ secure mobile browser. - Hover on user profile photos to see user information. - Use custom profiles. - Filter the Following related list on your profile. # Check for API Versions Not sure whether your org has Apex classes, Apex triggers, and Visualforce pages? Each has a list in Setup that includes the version number. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: all editions
User Permissions Needed
To define, edit, delete, set security, and set version settings for Apex classes: Author Apex
To run Apex tests: View Setup and Configuration
To view Apex triggers: View Setup and Configuration
To edit Apex triggers: Author Apex
- To see your Apex classes, from Setup, in the Quick Find box, enter Apex Classes, and then select **Apex Classes**. - To see your Apex triggers, from Setup, in the Quick Find box, enter Apex Triggers, and then select **Apex Triggers**. - To see your Visualforce pages, from Setup, in the Quick Find box, enter Visualforce Pages, and then select **Visualforce Pages**. The version number is shown in the Version field. If a list is empty, you don’t have any of those items. ![Apex Triggers Setup page with the version column circled.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/admin_locales_apex_triggers.png) In this example, a user created the first Apex trigger in the list, SetDealPrediction, and the other triggers were included in a managed package. How can we tell? The other triggers have a Namespace Prefix, which indicates that they’re part of an installed package. To quickly identify the items on API version 44.0 or earlier that you can modify, create a view. This example shows creating a filter for the Apex Triggers list. You can use the same process for the Apex Classes list and the Visualforce Pages list. 1. Click **Create New View**. 2. In View Name, enter a view name. For example, Non-packaged, API v44 or earlier. 3. In View Unique Name, enter a unique name to identify this view for the API. For example, apex\_triggers\_nopackage\_api44\_or\_earlier. 4. On the first line, for Field, select **Api Version**. For Operator, select **less or equal**. And for Value, enter 44.0. On the second line, for Field, select **Installed Package**. For Operator, select **equals**, and leave Value blank. ![Filter criteria options with the values populated.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/admin_locales_apex_triggers_filter_logic.png) If you’re a partner or developer who owns a managed package, for Value, enter your Installed Package name. Or you can filter on your Namespace Prefix. 5. Optionally, select the fields to display in the list. 6. In **Step 4. Restrict Visibility**, specify whether you want this view to be visible to only you, to all users, or to certain groups of users. 7. Save your changes. The list now shows items with an API version of 44.0 or earlier that aren’t part of an installed package. Or, if you specified an Installed Package in your filter, the list shows only items included in that package. ![The Apex Triggers list filtered to show only one trigger that's on API verion 44.0 and has no Namespace Prefix.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/admin_locales_apex_triggers_filtered.png) # Check for Desktop Client Updates Desktop clients such as Salesforce for Outlook and Connect Offline integrate Salesforce with your PC. Your administrator controls which desktop clients you are allowed to install. ### Required Editions
Available in: Salesforce Classic
Available in: All Editions except for Database.com
User Permissions Needed
To view client update alerts:

On, updates w/alerts

OR

On, must update w/alerts

on your profile

If your administrator enabled Home tab alerts, an alert banner displays on your Home tab when a new client version is available. You can also see which clients are installed on your computer and check for updates on your own. 1. From your personal settings, enter Check for Updates in the Quick Find box, then select **Check for Updates**. 2. From the table, review the names and version numbers of available desktop clients. 3. If you are using Internet Explorer, click the correct desktop client and then click **Install Now** to install a client. If you are using another browser such as Mozilla Firefox, click **Download Now** to save the installer file to your computer. To run the installer program, double-click the saved file. After you install the update, the alert banner displays on your Home tab until you log in through the newly updated client. # Check for Ongoing Incidents or Maintenance Check the current status of ongoing incidents or maintenance events from the Trust Status home page. The incidents and maintenance events on the home page are for all Salesforce instances and services. 1. Go to [status.salesforce.com](http://status.salesforce.com). 2. On the Incidents or Maintenance tab, click the ID of an incident or a maintenance event to view its latest details. You see the event’s current status, the instances and services that it affects, its start and end times, and more. # Check in on Your Data (And Who’s Using It) Use Event Monitoring and non-Shield Salesforce tools for an in-depth look into who’s using your data and how. Monitoring not only helps you understand how well your security policies are working, but also how users and systems respond to changes in system settings and company policies.

Play icon in a circleMonitor Events

Access and Query Log Data with Event Log Objects

REST API Developer Guide: Use Event Monitoring via API

Access Event Log Files with the Event Log Browser

REST API Developer Guide: Query or View Hourly Event Log Files

Monitor Login History (not part of Shield)

Platform Events Developer Guide: Pair Real-Time and Platform Events

Wrench in a circleBuild Transaction Security Policies

Best Practices for Writing and Maintaining Transaction Security Policies

Learn About ReportEvent Policies

Learn About LoginEvent Policies

Learn About ApiEvent Policies

Plan More Kinds of Transaction Security Policies

Build a Transaction Security Policy with Condition Builder

See Transaction Security Policy Examples

Magnifying glass in a circleUse Threat Detection to Spot Anomalous Activity

Threat Detection Overview

Make the Threat Detection App Visible to Users

View Threat Events

Report Anomaly Detection Examples

Best Practices for Investigating Report Anomalies

# Check Rebate Calculations Using a Flow Eliminate guesswork and rework by checking which transactions are considered in the rebate calculations by the Rebate Orchestration flow. Use the Check Rebate Calculations prebuilt app to quickly run a screen flow and find out which Transaction Journal records qualify for the final payout for a specific rebate member enrolled in a rebate program, and for a specific payout period. You can also find out which rebate types are applied to the transactions that qualify for payout. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note The Check Rebate Calculations app only works for standard rebate programs. You can’t use this app for ship-and-debit rebate programs. - **[Prework for Using the Check Rebate Calculations Prebuilt App](https://help.salesforce.com/s/articleView?id=xcloud.rebates_prebuilt_rebate_calculations_prereqs.htm&release=264.0.0&type=5)** Complete these tasks before you deploy and use the Check Rebate Calculations prebuilt app. - **[Install the Rebate Transaction Qualification Check Package](https://help.salesforce.com/s/articleView?id=xcloud.rebates_prebuilt_rebate_calculations_package.htm&release=264.0.0&type=5)** To get access to the screen flow for the Calculate Forecasts for Accounts in a Hierarchy prebuilt app, first install the Rebate Transaction Qualification Check package in Salesforce. You can clone and customize the Rebate Transaction Qualification Check flow as per your business requirements. - **[Use the Check Rebate Calculations Flow](https://help.salesforce.com/s/articleView?id=xcloud.rebates_prebuilt_rebate_calculations_use.htm&release=264.0.0&type=5)** Run the Check Rebate Calculations screen flow to see the list of rebate types and the related transaction journals that are eligible for payout. Based on the results, you can understand how the rebate orchestration flow calculates the payout because you already know the type of transactions that qualify for a specific period. The flow also helps you identify whether the rebate program, the rebate types and their benefits, or the payout period is active or not. # Check the Connection to Your EKM Key You can check the connection between Salesforce and your external key management service. This information can help you troubleshoot problems when you configure your key policy. ### Required Editions
Available in both Lightning Experience and Salesforce Classic (not available in all orgs).
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires purchasing Salesforce Shield or Shield Platform Encryption, and the External Key Management Service. Data 360 customers must also have the Platform Encryption for Consumption license.
User Permissions Needed
To generate, destroy, export, import, upload, and configure tenant secrets and customer-supplied key material: Manage Encryption Keys
Before you can check a key connection, you must [set up a key policy](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_encrypt.htm&release=264.0.0&type=5 "An encryption policy is your plan for encrypting data with Shield Platform Encryption. You can choose how you want to implement it. For example, you can encrypt the entire transactional database using Database Encryption. If you want advanced key management, you can use field-level encryption to encrypt individual fields and apply different encryption schemes to those fields. Or you can choose to encrypt other data elements such as files and attachments, data in Chatter, or search indexes. Remember that encryption is not the same thing as field-level security or object-level security. Put those controls in place before you implement your encryption policy."). Check the connection anytime you want to verify an accessible connection. 1. From Setup, in the Quick Find box, enter Platform Encryption, and then select **Key Management**. 2. In the External Key Inventory table, click **Details**. 3. In the KMS Connection Status section, click **Check**. You see details about your connection, such as whether the connection is successful and the unique key identifier used. If the connection is unsuccessful, you see an error that explains what went wrong. Use the information in this error to correct the issue. 4. If a key is listed as Unavailable, click **Retry**. This calls out to AWS to check whether the key works now and, if so, update the state. # Check the Verification Status of an Email-Sending Domain Salesforce requires both domain-level and user-level verification to send email. View the verification status of a domain that you own on the Deliverability Setup page. ### Required Editions
User Permissions Needed
To configure email deliverability: Customize Application
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note To check the domains configured in your org, use Developer Console. See [Get a List of Your Verified Email-Sending Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_domains_identify_verified.htm&release=264.0.0&type=5 "To identify your verified email-sending domains, use Salesforce Object Query Language (SOQL) and Tooling API. Query your DomainKeys Identified Mail (DKIM) keys and your authorized email domains."). 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Deliverability**. 2. In the Domain Verification section, for Email-sending domain, enter your domain, such as example.com or sub-domain.example.com. 3. Click **Check Verification**. The results are shown below the domain name. Here’s an example of the result when the domain requires verification. ![Result when a domain isn’t verified.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/email/domain_verification_check_not_verified.png) And here’s an example of the result when the domain is verified. ![Result when a domain is verified.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/email/domain_verification_check_verified.png) Your domain’s status is one of these values. - Domain Verified: Salesforce can send user-authored and system-generated emails from this domain. The results show the specific verification method. - Domain Not Verified: Email delivery fails for user-authored and system-generated emails with this domain in the From address, regardless of whether the email address is verified. To send email from this domain, add an active DKIM key or a verified authorized email domain. - Domain Temporarily Exempted: Salesforce added this domain to a temporary allowlist of email-sending domains that were previous used in this org. To know when that allowlist expires in your org, see [Mandatory Sending-Email Domain Verification Timeline](https://help.salesforce.com/s/articleView?id=005316660&type=1&language=en_US). To continue sending email from this domain, add an active DKIM key or a verified authorized email domain. - Domain Exempted: Salesforce can use this domain in the From address to send user-authored and system-generated emails. Because this is a Salesforce-owned or public email service domain, it doesn't require an active DKIM key or a verified authorized email domain. #### See Also - [Enable Salesforce to Send Email](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification.htm&release=264.0.0&type=5 "Before Salesforce can send email on behalf of your users, domain-level and user-level verification is required. Salesforce admins verify the domains that you own, and users verify their email and return email addresses.") - [Determine How to Verify Your Email-Sending Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification_domain_auth.htm&release=264.0.0&type=5 "To send email from Salesforce on domains that you own, verification is required for each of your email-sending domains. Determine the best method to verify your email domains: DomainKeys Identified Mail (DKIM), authorized email domains, or both options.") - [Send Email for Users with Unverified Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification_substitute_domain.htm&release=264.0.0&type=5 "Enable Salesforce to send email for users with email domains that you can't verify, such as site users, consultants, and users with public email addresses like yahoo.com or icloud.com. With these options, the user's display name and reply-to address remain unchanged, but the From address uses an organization-wide email address or site-specific sender address of your choice.") - [Use a Verified Domain for User-Level Email Verification](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_user_bypass.htm&release=264.0.0&type=5 "If a trusted integration or admin manages your users’ email addresses in Salesforce, specify which domains require address verification. For each authorized email domain, you can require email address verification only when users change their email address, or disable address verification entirely. Or use your active DomainKeys Identified Mail (DKIM) keys to verify addresses for new users and new organization-wide email addresses.") # Check Your Cache-Only Key Connection Because your cache-only key material is stored outside of Salesforce, it’s important to maintain a functional callout connection. Use the Callout Check page to monitor your connection and quickly respond to key service interruptions that could prevent the service from fetching your keys. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires purchasing Salesforce Shield or Shield Platform Encryption, and the External Key Management Service.
User Permissions Needed
To generate, destroy, export, import, upload, and configure tenant secrets and customer-supplied key material: Manage Encryption Keys
The Cache-Only Key: Callout Check page is accessible after you enable the Cache-Only Key Service in your org and make your first callout. Data presented as part of a callout check are never stored in the system of record. 1. From Setup, enter Platform Encryption in the Quick Find box, then select **Key Management**. 2. Choose the Certificate Unique Name and Named Credential associated with your Unique Key Identifier. 3. In the Actions column, next to the key material you want to check, click **Details**. 4. On the Cache-Only Key: Callout Check page, click **Check**. Details about your callout connection display on the page. It can take a few moments for the callout check to complete and display the results. ![Cache-Only Key: Callout Check page with results of a callout check](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cache_only_key_check_results.png) 5. Review the details about your callout connection. If your callout connection was unsuccessful, you see a descriptive error message at the bottom of the results pane. Use this message to make the appropriate adjustments to your key service. #### See Also - [Object Reference for Salesforce and Lightning Platform: RemoteKeyCalloutEvent](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/api/sforce_api_objects_remotekeycalloutevent.htm) # Checkbox Properties (Managed Package) For the managed package runtime, Checkbox properties are configurable from the Properties panel when you select a Checkbox element. With the Checkbox element, enable users to select a checkbox in your Omniscript. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Property

Description

Default Value

Select to enable the checkbox by default. The value is true or false in the Data JSON.

# CheckboxGroup Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains a CheckboxGroup LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Summer '20 The _CheckboxGroup Lightning Web Component_ enables users to select from single or multiple options. ## Available c-checkbox-group Attributes

Attribute

Value

Type

Required

Description

alignment

vertical, horizontal (Default for 'slds' theme is vertical) (Default for 'nds' theme is horizontal)

string

 

Sets the orientation of the checkbox group.

checked-background-color

Accepts name, RGB, and Hex values. (Default: slds brand blue)

string

 

When type is set to 'icon', sets the checkbox button background color when checkbox is checked.

checked-border-color

Accepts name, RGB,and Hex values. (Default: slds brand blue)

string

 

When type is set to 'icon', sets the checkbox button border color when checkbox is checked.

checked-icon-color

Accepts name, RGB, and Hex values. (Default: slds brand blue)

string

 

When type is set to 'icon', sets the checkbox icon color when checkbox is checked.

checked-icon-name

(Default: utility:add)

string

 

When type is set to 'icon', sets icon to use when checkbox is checked.

checked-label-color

Accepts name, RGB, and Hex values. (Default: slds brand blue)

string

 

When type is set to 'icon', sets the checkbox label color when checkbox is checked.

disabled

     

If set, the checkbox group is disabled and users cannot interact with it.

extraclass

     

Adds a class to the main container element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

icon-url

URL

string

 

Sets the icon URL, overriding the defined url for the svg resource.

label

 

string

yes

Sets visible label for the checkbox group.

message-when-value-missing

 

string

 

To display a message when no checkbox is selected and required is set to true, set this attribute.

name

 

string

 

Specifies the name of the checkbox group. Only only one button can be selected if a name is specified for the group.

options

 

string

yes

Defines the array of label-value pairs for each checkbox.

required-label

 

string

 

Adds a title for the asterisk when required is set to true.

required

     

If set, a checkbox must be selected before the form can be submitted.

theme

slds, nds (Default: slds)

   

Sets the theme for the component.

type

checkbox, button (Default: checkbox)

string

 

Sets the type of input elements to render.

unchecked-background-color

Accepts name, RGB, and Hex values. (Default: slds brand blue)

string

 

When type is set to 'icon', sets the checkbox button background color when checkbox is not checked.

unchecked-border-color

Accepts name, RGB, and Hex values. (Default: slds brand gray )

string

 

When type is set to 'icon', sets the checkbox button border color when checkbox is not checked.

unchecked-icon-color

Accepts name, RGB, and Hex values. (Default: white)

string

 

When type is set to 'icon', sets the checkbox icon color when checkbox is not checked.

unchecked-icon-name

(Default: utility:check)

string

 

When type is set to 'icon', sets icon to use when checkbox is not checked.

unchecked-label-color

Accepts name, RGB, and Hex values. (Default: white)

string

 

When type is set to 'icon', sets the checkbox label color when checkbox is not checked.

validity

JSON

Object

 

Sets the validity state for an element, with respect to constraint validation.

value

 

string

 

Sets the default value of checkbox group.

## Example c-checkbox-group Component ``` ``` ## Label Slot Usage A named slot (name = label) is available in the event a user would like to dynamically insert markup next to the input's label. ``` Additional markup is inserted here ``` ## Available Methods checkValidity() Returns the valid attribute value (boolean) on the ValidityState object. reportValidity() Displays the error messages and returns false if the input is invalid. If the input is valid, _reportValidity()_ clears the error message and returns true. setCustomValidity(message) Sets a custom error message to display when the input value is submitted. Takes the _message_ argument. If _message_ is an empty string, the error message is reset. showHelpMessageIfInvalid() Displays error messages on invalid fields. An invalid field fails at least one constraint validation and returns false when checkValidit() is called. focus() Sets the focus on the textarea field. ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _CheckboxGroup Lightning Web Component_ enables users to select from single or multiple options. ## Available c-checkbox-group Attributes

Attribute

Value

Type

Required

Description

alignment

vertical, horizontal (Default for 'slds' theme: vertical) (Default for 'nds' theme: horizontal)

string

 

Sets the orientation of the checkbox group.

checked-background-color

Accepts name, rgb and hex values. (Default: slds brand blue)

string

 

When type is set to 'icon', sets the checkbox button background color when checkbox is checked.

checked-border-color

Accepts name, rgb and hex values. (Default: slds brand blue)

string

 

When type is set to 'icon', sets the checkbox button border color when checkbox is checked.

checked-icon-color

Accepts name, rgb and hex values. (Default: slds brand blue)

string

 

When type is set to 'icon', sets the checkbox icon color when checkbox is checked.

checked-icon-name

(Default: utility:add)

string

 

When type is set to 'icon', sets icon to use when checkbox is checked.

disabled

     

If set, the checkbox group is disabled and users cannot interact with it.

extraclass

     

Adds a class to the main container element. To add multiple classes, use a space to separate each class, such as 'classone classtwo'.

icon-url

URL

string

 

Sets the icon URL, overriding the defined url for the svg resource.

label

 

string

yes

Sets visible label for the checkbox group.

message-when-value-missing

 

string

 

To display a message when no checkbox is selected and required is set to true, set this attribute.

name

 

string

 

Specifies the name of the checkbox group. Only only one button can be selected if a name is specified for the group.

options

 

string

yes

Defines the array of label-value pairs for each checkbox.

required

     

If set, a checkbox must be selected before the form can be submitted.

theme

slds, nds (Default: slds)

   

Sets the theme for the component.

type

checkbox, button (Default: checkbox)

string

 

Sets the type of input elements to render.

unchecked-background-color

Accepts name, rgb and hex values. (Default: slds brand blue)

string

 

When type is set to 'icon', sets the checkbox button background color when checkbox is not checked.

unchecked-border-color

Accepts name, rgb and hex values. (Default: slds brand gray )

string

 

When type is set to 'icon', sets the checkbox button border color when checkbox is not checked.

unchecked-icon-color

Accepts name, rgb and hex values. (Default: white)

string

 

When type is set to 'icon', sets the checkbox icon color when checkbox is not checked.

unchecked-icon-name

(Default: utility:check)

string

 

When type is set to 'icon', sets icon to use when checkbox is not checked.

validity

JSON

Object

 

Sets the validity state for an element, with respect to constraint validation.

value

 

string

 

Sets the default value of checkbox group.

## Example c-checkbox-group Component ``` ``` ## Available Methods checkValidity() Returns the valid attribute value (boolean) on the ValidityState object. reportValidity() Displays the error messages and returns false if the input is invalid. If the input is valid, _reportValidity()_ clears the error message and returns true. setCustomValidity(message) Sets a custom error message to display when the input value is submitted. Takes the _message_ argument. If _message_ is an empty string, the error message is reset. showHelpMessageIfInvalid() Displays error messages on invalid fields. An invalid field fails at least one constraint validation and returns false when checkValidity() is called. focus() Sets the focus on the textarea field. ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _CheckboxGroup Lightning Web Component_ enables users to select from single or multiple options. ## Available c-checkbox-group Attributes

Attribute

Value

Type

Required

Description

alignment

vertical, horizontal (Default for `slds' theme: vertical) (Default for `nds' theme: horizontal)

string

 

Sets the orientation of the checkbox group.

checked-background-color

Accepts name, rgb and hex values. (Default: slds brand blue)

string

 

When type is set to `icon', sets the checkbox button background color when checkbox is checked.

checked-border-color

Accepts name, rgb and hex values. (Default: slds brand blue)

string

 

When type is set to `icon', sets the checkbox button border color when checkbox is checked.

checked-icon-color

Accepts name, rgb and hex values. (Default: slds brand blue)

string

 

When type is set to `icon', sets the checkbox icon color when checkbox is checked.

checked-icon-name

(Default: utility:add)

string

 

When type is set to `icon', sets icon to use when checkbox is checked.

disabled

     

If set, the checkbox group is disabled and users cannot interact with it.

extraclass

     

Adds a class to the main container element. To add multiple classes, use a space to separate each class, such as `classone classtwo'.

icon-url

URL

string

 

Sets the icon URL, overriding the defined url for the svg resource.

label

 

string

yes

Sets visible label for the checkbox group.

message-when-value-missing

 

string

 

To display a message when no checkbox is selected and required is set to true, set this attribute.

name

 

string

 

Specifies the name of the checkbox group. Only only one button can be selected if a name is specified for the group.

options

 

string

yes

Defines the array of label-value pairs for each checkbox.

required

     

If set, a checkbox must be selected before the form can be submitted.

theme

slds, nds (Default: slds)

   

Sets the theme for the component.

type

checkbox, button (Default: checkbox)

string

 

Sets the type of input elements to render.

unchecked-background-color

Accepts name, rgb and hex values. (Default: slds brand blue)

string

 

When type is set to `icon', sets the checkbox button background color when checkbox is not checked.

unchecked-border-color

Accepts name, rgb and hex values. (Default: slds brand gray )

string

 

When type is set to `icon', sets the checkbox button border color when checkbox is not checked.

unchecked-icon-color

Accepts name, rgb and hex values. (Default: white)

string

 

When type is set to `icon', sets the checkbox icon color when checkbox is not checked.

unchecked-icon-name

(Default: utility:check)

string

 

When type is set to `icon', sets icon to use when checkbox is not checked.

validity

JSON

Object

 

Sets the validity state for an element, with respect to constraint validation.

value

 

string

 

Sets the default value of checkbox group.

## Example c-checkbox-group Component ``` ``` ## Available Methods checkValidity() Returns the valid attribute value (boolean) on the ValidityState object. reportValidity() Displays the error messages and returns false if the input is invalid. If the input is valid, _reportValidity()_ clears the error message and returns true. setCustomValidity(message) Sets a custom error message to display when the input value is submitted. Takes the _message_ argument. If _message_ is an empty string, the error message is reset. showHelpMessageIfInvalid() Displays error messages on invalid fields. An invalid field fails at least one constraint validation and returns false when checkValidity() is called. focus() Sets the focus on the textarea field. # CheckboxImageGroup Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains a CheckboxImageGroup LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _CheckboxImageGroup Lightning Web Component_ extends the _CheckboxGroup Lightning Web Component_ adding additional features. The _CheckboxImageGroup Lightning Web Component_ enables users to select from single or multiple options by clicking images instead of checkboxes. ## Available c-checkbox-image-group Attributes

Attribute

Value

Type

Required

Description

checked

true, false (Default: false)

boolean

 

Sets the default value of checkbox input. Applies only when is-display-checkbox is true.

enabled-caption

true, false (Default: false)

boolean

 

To show a caption, set to true.

control-width

Width in pixels. (Default: auto)

string

 

Sets the width of checkbox image.

control-height

Height in pixels. (Default: auto)

string

 

Sets the height of checkbox image.

image-count-in-row

 

integer, string

 

To set the number of checkbox images to display in a row, set this attribute.

is-display-checkbox

true, false (Default: false)

boolean

yes (if is-image is set to false)

To display checkbox as a checkbox input, set to true. If set to true, is-image cannot be true.

is-image

true, false (Default: false)

boolean

(if is-display-checkbox is set to false)

To display checkbox as image, set to true. If set to true, is-display-checkbox cannot be true.

is-image-display

true, false (Default: false)

boolean

 

To display images, set to true.

## Example c-checkbox-image-group Component ``` ``` ## Available Methods ## checkValidity() Returns the valid attribute value (boolean) on the ValidityState object. ## reportValidity() Displays the error messages and returns false if the input is invalid. If the input is valid, _reportValidity()_ clears the error message and returns true. ## setCustomValidity(message) Sets a custom error message to display when the input value is submitted. Takes the _message_ argument. If _message_ is an empty string, the error message is reset. showHelpMessageIfInvalid() Displays error messages on invalid fields. An invalid field fails at least one constraint validation and returns false when checkValidity() is called. focus() Sets the focus on the textarea field. ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _CheckboxImageGroup Lightning Web Component_ extends the_CheckboxGroup Lightning Web Component_ adding additional features. The_CheckboxImageGroup Lightning Web Component_ enables users to select from single or multiple options by clicking images instead of checkboxes. ## Available c-checkbox-image-group Attributes

Attribute

Value

Type

Required

Description

checked

true, false (Default: false)

boolean

 

Sets the default value of checkbox input. Applies only when is-display-checkbox is true.

enabled-caption

true, false (Default: false)

boolean

 

To show a caption, set to true.

control-width

Width in pixels. (Default: auto)

string

 

Sets the width of checkbox image.

control-height

Height in pixels. (Default: auto)

string

 

Sets the height of checkbox image.

image-count-in-row

 

integer, string

 

To set the number of checkbox images to display in a row, set this attribute.

is-display-checkbox

true, false (Default: false)

boolean

yes (ifis-image is set to false)

To display checkbox as a checkbox input, set to true. If set to true, is-image cannot be true.

is-image

true, false (Default: false)

boolean

(ifis-display-checkbox is set to false)

To display checkbox as image, set to true. If set to true, is-display-checkbox cannot be true.

## Example c-checkbox-image-group Component ``` ``` ## Available Methods ## checkValidity() Returns the valid attribute value (boolean) on the ValidityState object. ## reportValidity()\*\* Displays the error messages and returns false if the input is invalid. If the input is valid, _reportValidity()_ clears the error message and returns true. ## setCustomValidity(message)\*\* Sets a custom error message to display when the input value is submitted. Takes the _message_ argument. If _message_ is an empty string, the error message is reset. showHelpMessageIfInvalid() Displays error messages on invalid fields. An invalid field fails at least one constraint validation and returns false when checkValidit() is called. focus() Sets the focus on the textarea field. # Checklist to Run a Rebate Program Review the high-level procedure to configure, create, and manage a standard rebate program. Use the predefined Rebate Orchestration flow to run an end-to-end rebate calculation process. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
To ensure that you’ve successfully configured your org and set up a rebate program, complete the tasks specified in this checklist. We’ve only listed the minimum steps required to run payout calculations for a member in a standard rebate program. You can always customize and extend the application with data processing engine definitions, batch management jobs, flow actions, and custom objects and fields. - [Create a rebate program](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_define_program.htm&release=264.0.0&type=5 "Create a rebate program to reward your partners when they attain specific sales targets. Enroll program members and create payout periods. Set up rebate types within a rebate program. Add benefits, additional benefit criteria, and eligibility rules for rebate types. Track transactions and aggregated payout data for members."), and then define the payout frequency. - [Generate payout periods](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_create_payout_periods.htm&release=264.0.0&type=5 "You can manually create payout periods or automatically generate them for each rebate program. If you choose to automatically generate payout periods, they’re generated based on the program's frequency. Payouts are calculated during an active period and finalized at the end of each period. View the payout periods on the Payout Periods related list of a rebate program record.") for the program. - [Enroll at least one member account](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_add_program_member.htm&release=264.0.0&type=5 "Add partners, dealers, and distributors as members to a rebate program. Add Account records to a program to enroll members. Add one account at a time, or use an existing Accounts list view to enroll multiple members. You can enroll an account in multiple rebate programs. View the enrolled members on the Members related list of a rebate program record.") in the rebate program. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note Ensure that all enrolled members are in Active status. Payouts are not calculated for members in Draft or Inactive status. - Identify the Data Processing Engine template that works best for your rebate type. Depending on your aggregation requirements, [choose the appropriate definition](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_dpe_templates.htm&release=264.0.0&type=5 "Rebate Management has Data Processing Engine (DPE) templates to help you aggregate transactions by different criteria and manage other rebate processes. Examples of processes are: converting order records into transaction journal records, validating ship-and-debit transactions, and calculating payouts at the parent-account level."). - To aggregate data for payout calculations, [clone the applicable Data Processing Engine definition](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_clone_dpe_templates.htm&release=264.0.0&type=5 "Clone and use the data processing engine definitions for Rebate Management as-is, extend them to meet your business needs, or create definitions from scratch. To use a definition for a rebate type, activate the definition."). Activate the definition to use in a rebate type record. - [Create a rebate type](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_create_rebate_types.htm&release=264.0.0&type=5 "Define rebate types to specify the incentive structure within a rebate program. A rebate program can include multiple rebate types, each representing a different strategy, such as volume, revenue, or growth. To configure a rebate type, create a Program Rebate Type record. Define the calculation logic, eligibility, benefit thresholds, and product associations to determine how rebates are calculated and paid out.") for the rebate program and specify the aggregation method, calculation method, measure type, and other fields. Select the cloned and active data processing engine definition as the calculation definition. - [Add benefits](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_create_benefits.htm&release=264.0.0&type=5 "Add benefits to a rebate type to define qualifying ranges and benefit values for each range. View and edit benefits from the Benefits tab on a Rebate Type record.") to the rebate type by creating at least two benefit tiers. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note You must define at least one **Rebate Benefit** record for the Rebate Type. If benefit records are missing, the Rebate Orchestration Flow will complete, but no **Member Payout** records will be created. - To include or exclude a member’s transactions based on specific rules, [define eligibility criteria](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_program_rebate_type_eligibility.htm&release=264.0.0&type=5 "Filter transaction journal records applicable for a rebate type by defining eligibility rules. Based on the eligibility criteria, a member’s transaction records are considered or discarded for payout calculations.") for the rebate type. - [Populate records in the Transaction Journal](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_populate_transaction_data.htm&release=264.0.0&type=5 "When partners purchase your products, the transactions are recorded as claims and invoices. These transactions are used as inputs for rebate payout calculations. Retrieve transaction data of your org from Salesforce objects such as Orders, from partners submitting claims via the Experience Cloud site, and from external systems.") for the member that you enrolled earlier. Ensure that the Activity Date value in the transaction records falls within the start and end dates of a payout period, as defined in the program. - Clone and activate the Rebate Orchestration Flow template, and then run it for the rebate program that you created. - [Track the progress of jobs](https://help.salesforce.com/s/articleView?id=ind.task_monitor_batches.htm&type=5&language=en_US) by using Monitor Workflow Services. - After the flow run is successful, on the Payout tab of a Rebate Program Member record, [verify the calculated amounts](https://help.salesforce.com/s/articleView?id=xcloud.users_rebates_program_member_payout.htm&release=264.0.0&type=5 "After an admin configures the payout calculation schedule, payouts are calculated and created as Rebate Program Member Payout records. Rebate payouts are created in the Program Rebate Type Payout Source, Program Rebate Type Payout, and the Rebate Program Member Payout objects. Program managers can also view the payout details in the Member Payouts related list of Rebate Program Payout Period records."). - For a deeper analysis of how payouts are calculated from transactions, in the Rebate Member Product Aggregate object, [view the aggregate values](https://help.salesforce.com/s/articleView?id=xcloud.admin_rebates_view_aggregated_payout_information.htm&release=264.0.0&type=5 "Payouts are calculated for each record in the aggregate object. The admin can either use the default Rebate Member Product Aggregate object to store aggregate records, or create a custom object for the purpose. The aggregate values get updated each time a Data Processing Engine is run to process the transactions as defined in a rebate type. Track the aggregate records to view the total transaction quantity, total transaction amount, and other details for each rebate type for a member in a specific payout period."). # Checklist to Run an Advanced Rebate Program Review the high-level procedure to configure and manage financial liabilities and payouts for an advanced rebate program. Use the data processing engine to run an end-to-end accrual and payout calculation process. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
To ensure you've successfully configured your org to track liabilities, complete these tasks: - Org provisioned with RebateAndAccrualsManagementAdvancedAddOn license - Data 360 enabled and Accrual and Payout Engine Data Kit deployed - Permission sets assigned - Create a Rebate Program: Define the Accrual Frequency to establish how often liabilities are calculated, and the (payout) Frequency to establish how often payouts are settled. - Create Accrual Periods: Establish the specific timeframes for financial tracking within the program. - Create Payout Periods: Establish the specific timeframes for payout settlement within the program. - Enroll Members: Add at least one active account to the program. Accruals are not calculated for members in Draft or Inactive status. - Identify DPE Templates: Use the predefined Data Processing Engine templates for Advanced Accruals and Payouts. - Clone and Activate DPEs: Clone and activate all [six Data Processing Engine definitions](https://help.salesforce.com/s/articleView?id=xcloud.rebates_adv_dpe_example.htm&type=5&language=en_US) required for the Advanced engine in their exact operational sequence. - Set Up the Orchestration Flow: Clone and configure the orchestration flow to run the six DPE definitions in sequence automatically. - Configure Rebate Type: Specify the aggregation method and calculation logic. Ensure the Calculation Basis includes Accrual, Payout, or Payout and Accrual, depending on what you want the engine to produce. See [Create Rebate Types for a Program](https://help.salesforce.com/s/articleView?id=xcloud.rebates_adv_create_rebate_types.htm&type=5&language=en_US) - Define Product Eligibility: Set filters on the program rebate type to include or exclude specific products from calculations. - Add Benefits and Mappings: Create benefit tiers with specific sales targets and apply benefit mappings for granular dimensions like region or category. - Define Eligibility: Set rules to include or exclude specific transactions from the liability calculation. - Populate Transaction Journals: Ensure transaction records fall within the start and end dates of the defined accrual and payout periods. - Monitor Calculations: Run the [six DPE definitions](https://help.salesforce.com/s/articleView?id=xcloud.rebates_adv_dpe_example.htm&type=5&language=en_US) in their exact operational sequence. Use Monitor Workflow Services to track the progress of each Data 360 processing job. - Verify Accrual and Payout Sources: After a successful run, review the Program Rebate Type Accrual Source and Program Rebate Type Payout Source records to verify the calculated amounts, including any automated adjustments. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note When executing the Rebate Configuration Generation (or subsequent Rebate DPE templates) in an environment where Data 360 was already active prior to setup, the DPE job may fail or throw data visibility/connector errors. Before running any Advanced Rebate DPE configurations, ensure that you manually verify and assign object-level permissions. # China State Codes These state codes are available for all orgs. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: All Editions except Database.com
| State Code | STATE/Province | | --- | --- | | 11 | Beijing | | 12 | Tianjin | | 13 | Hebei | | 14 | Shanxi | | 15 | Nei Mongol | | 21 | Liaoning | | 22 | Jilin | | 23 | Heilongjiang | | 31 | Shanghai | | 32 | Jiangsu | | 33 | Zhejiang | | 34 | Anhui | | 35 | Fujian | | 36 | Jiangxi | | 37 | Shandong | | 41 | Henan | | 42 | Hubei | | 43 | Hunan | | 44 | Guangdong | | 45 | Guangxi | | 46 | Hainan | | 50 | Chongqing | | 51 | Sichuan | | 52 | Guizhou | | 53 | Yunnan | | 54 | Xizang | | 61 | Shaanxi | | 62 | Gansu | | 63 | Qinghai | | 64 | Ningxia | | 65 | Xinjiang | | 71 | Taiwan (see also separate country/territory code entry under TW) | | 91 | Hong Kong | | 92 | Macao (see also separate country/territory code entry under MO) | # Choose a Custom Fiscal Year Template When defining a new custom fiscal year, your first step is to choose a custom fiscal year template. ### Required Editions
User Permissions Needed
To change your fiscal year: Customize Application
These templates are available to make it easier for you to define your custom fiscal year. They create a simple custom fiscal year that you can customize to meet your exact needs. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note If you choose a template and realize that it is not the best one for your fiscal year definition, you can reset it at any time using the **Reset Fiscal Year Structure** option. Choose one of three types of templates: - **4 Quarters per Year, 13 Weeks per Quarter** Choose one of these templates for your fiscal year if you want each quarter to have the same number of weeks per quarter. These templates all have 4 quarters, 12 periods, and 52 weeks per year. Each quarter is 13 weeks long and is composed of three periods. Two of the periods in each quarter are 4 weeks, and one is 5 weeks. In a 4-4-5 template, for example, the first and second period of a quarter are 4 weeks long, and the third period is 5 weeks long. Weeks are always 7 days long. A typical customization for these templates is to add extra weeks for leap years.
4-4-5Within each quarter, period 1 has 4 weeks, period 2 has 4 weeks, and period 3 has 5 weeks
4-5-4Within each quarter, period 1 has 4 weeks, period 2 has 5 weeks, and period 3 has 4 weeks
5-4-4Within each quarter, period 1 has 5 weeks, period 2 has 4 weeks, and period 3 has 4 weeks
- **13 Periods per Year, 4 Weeks per Period** Choose one of these templates if your fiscal year has more than 12 periods and if one quarter is longer than the other quarters. These templates all have 4 quarters per year, 13 periods per year, 3 or 4 periods per quarter, 53 weeks per year, and 4 weeks per period (5 weeks in the final period). Weeks generally have 7 days, but include a short week at the end of a year. The most common customization for this type of template is to create or change the length of a short week.
3-3-3-4Quarter 1 has 3 periods, quarter 2 has 3 periods, quarter 3 has 3 periods, and quarter 4 has 4 periods
3-3-4-3Quarter 1 has 3 periods, quarter 2 has 3 periods, quarter 3 has 4 periods, and quarter 4 has 3 periods
3-4-3-3Quarter 1 has 3 periods, quarter 2 has 4 periods, quarter 3 has 3 periods, and quarter 4 has 3 periods
4-3-3-3Quarter 1 has 4 periods, quarter 2 has 3 periods, quarter 3 has 3 periods, and quarter 4 has 3 periods
- **Gregorian Calendar** 12 months/year, standard Gregorian calendar. Unlike the other template styles, you can’t do advanced customization of a fiscal year that has been created from a Gregorian calendar template. Only use this template if you want to create a fiscal year that follows the Gregorian calendar. This template mimics the functionality of standard fiscal years. #### See Also - [Define Your Fiscal Year](https://help.salesforce.com/s/articleView?id=xcloud.admin_about_cfy.htm&release=264.0.0&type=5 "Specify a fiscal year that fits your business needs.") # Choose Distribution Type Start the public distribution process by selecting your distribution type. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
First, we must choose the correct distribution type for your branded app. 1. Choose **Public Distribution** from the App Distribution menu and select **Next**. ![Android distribution type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_dist_type_android.png) 2. Select **Copy** to copy the Salesforce Developer Email to your clipboard. You’ll need this email address when you log into your Google Play Developer account. ![Add Android email](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_dev_email.png) # Choose Distribution Type First, we must choose the correct distribution type for your branded app. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
1. Select **Public Distribution** from the App Distribution menu, and click **Next**. ![iOS distribution type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_ios_delegated_public.png) 2. Click **Copy** to copy and save the Salesforce Developer Email onto your computer for future reference. ![iOS copy email](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_dev_email_ios.png) You’re going to need the Salesforce Developer Email address when you log into your Apple Developer account to grant Salesforce access to distribute your app. # Choose Distribution Type First, we must choose the correct distribution type for your branded app. 1. Select **Private Distribution** from the App Distribution menu, and click **Next**. ![iOS distribution type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_ios_delegated_private.png) 2. Click **Copy** to copy and save the Salesforce Developer Email onto your computer for future reference. ![iOS copy email](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_dev_email_ios.png) You’re going to need the Salesforce Developer Email address when you log into your Apple Developer account to grant Salesforce access to distribute your app. # Choose Distribution Type for Your Android App Start the distribution process by selecting your distribution type. This step applies to public distribution only. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
If you're setting up private distribution, skip this step and go to [Create Service Account User and Find Your Google Play Developer ID](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_gather_android_dev_ser_key_a.htm&release=264.0.0&type=5 "To manage the distribution your branded app with your developer account, Mobile Publisher needs your Service Account User and Google Play Developer ID info."). Private Android apps are distributed through Managed Google Play and don't require a distribution type selection in Mobile Publisher. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note Not sure which distribution type to choose? See [App Distribution Considerations](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_distribution_considerations.htm&release=264.0.0&type=5 "Choose the right distribution type based on your use case and Apple and Google guidelines. As an app developer, Salesforce complies with Apple and Google distribution guidelines, and violating the guidelines can cause Apple or Google to reject your branded app.") for guidance on public versus private distribution for your apps. 1. Choose **Public Distribution** from the App Distribution menu and select **Next**. ![Android distribution type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_dist_type_android.png) 2. Select **Copy** to copy the Salesforce Developer Email to your clipboard. You’ll need this email address when you log into your Google Play Developer account. ![Add Android email](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_dev_email.png) # Choose Distribution Type for Your iOS App Start the distribution process by selecting your distribution type in Mobile Publisher. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note Not sure which distribution type to choose? See [App Distribution Considerations](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_distribution_considerations.htm&release=264.0.0&type=5 "Choose the right distribution type based on your use case and Apple and Google guidelines. As an app developer, Salesforce complies with Apple and Google distribution guidelines, and violating the guidelines can cause Apple or Google to reject your branded app.") for guidance on public versus private distribution for your apps. 1. Select **Public Distribution** or **Private Distribution** from the App Distribution menu, and click **Next**. ![iOS distribution type](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_ios_delegated_public.png) 2. Click **Copy** to copy and save the Salesforce Developer Email onto your computer for future reference. ![iOS copy email](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_dev_email_ios.png) You need the Salesforce Developer Email address when you log into your Apple Developer account to grant Salesforce access to distribute your app. # Choose Recipients to Email with List Sends Use the Send Email button on a list view to start the List Sends email flow. Choose whether to send a sales or marketing email. Then, define your recipients, craft your message, and send your email. The List Sends tab provides a unified table where marketing users can view, search, sort, and act on all list emails—both marketing (promotional) and sales (relational). ### Required Editions
Available in: Lightning Experience
Available in: Free, Starter and Pro Suite Editions.
To use List Sends, activate the Marketing app. 1. From the list view in either the Contacts or Lead page, select the recipients you want to target. Select individuals manually, or create a filtered list view. You can also choose recipients later, in the composer. 2. Click **Send Email**. ![A filtered list of leads with the Send Email button highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/suites_send_email.png) 3. In the composer window, select your message type. The choices are Sales or Marketing. 4. Define your recipients. The choices you see are different depending on the selected message type and how you entered the composer. ![The list sends email composer with the Define Your Recipients box highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/suites_send_email_composer.png) 5. Craft your message, including selecting a template, editing the images, send time, and other options. 6. When satisfied, click **Send Message**. Use the List Sends tab to see a unified view of the processed emails. # Choosing a Backup Region When you set up Salesforce Backup & Recover Next, you select a region to store your backup data. The region determines the physical location of your backed-up data and can differ from your Salesforce org's region. After setup, you can't change your backup region. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Backup & Recover Data and Backup & Recover Files add-on licenses
Choosing the right region helps you meet data residency requirements for your organization. Data residency is the physical or geographic location where data is stored. Your organization might have legal, regulatory, or compliance requirements that dictate where to store backup data. Backup & Recover Next supports these regions for backup data storage. | Salesforce Region Name | AWS Instance | | --- | --- | | Japan | ap-northeast-1 | | GovCloud | us-gov-east-1 | | India | ap-south-1 | | US East | us-east-1 | | US West | us-west-2 | Your backup region can be different from your Salesforce org's region. For example, your org can be hosted in the United States while your backup data is stored in Japan. Select the region that meets your data residency requirements when you set up Salesforce Backup & Recover Next. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important After you select a region during setup, you can't change it through the Salesforce Backup & Recover Next interface. If you must change your backup region, contact Salesforce Support. All data backed up in your original region is permanently lost when you change regions. Your backup history and previously backed-up data can't be accessed or transferred to the new region. - **[Select Your Storage Region](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_select_region.htm&release=264.0.0&type=5)** Before you start backing up data, select the region where Backup & Recover Next stores backup data. Selecting a region helps your organization meet data residency requirements and align backup placement with disaster recovery plans. # Choosing a Method for Importing Data Learn about your options for importing data into Salesforce. | Tool | Editions supported | Number of records you can import or export | Import | Export | Internal or external to Salesforce | Additional information | | --- | --- | --- | --- | --- | --- | --- | | Basic Data Import | Enterprise and Performance | Up to 50,000 | Yes | No | Internal | An in-browser tool that provides a simplified approach for users who only need to import contacts and leads. For details, see [Contact and Lead Imports](https://help.salesforce.com/s/articleView?id=sales.sales_core_import_csv.htm&type=5&language=en_US) in Sales Cloud. | | Data Import Wizard | All, except Personal and Database.com Editions | Up to 50,000 | Yes | No | Internal | An in-browser wizard that imports your org’s accounts, contacts, leads, solutions, campaign members, and custom objects. | | Data Loader | Enterprise, Unlimited, Performance, Developer, and Database.com Editions | Between 5,000 and 5 million | Yes | Yes | External | Data Loader is an application for the bulk import or export of data. Use it to insert, update, delete, or export Salesforce records. | | dataloader.io | All | Varies by dataloader.io plan | Yes | Yes | External | Dataloader.io is a cloud-based data import tool powered by Mulesoft. For product details, see the [pricing overview](https://dataloader.io/pricing). | #### See Also - [Data Import Wizard](https://help.salesforce.com/s/articleView?id=xcloud.data_import_wizard.htm&release=264.0.0&type=5 "You can use the Data Import Wizard to import accounts, contacts, leads, solutions, campaign members, person accounts, and custom objects. You can import up to 50,000 records at a time.") - [Salesforce Data Import](https://help.salesforce.com/s/articleView?id=xcloud.importing.htm&release=264.0.0&type=5 "Salesforce offers several ways to import your data. You can import up to 50,000 records into Salesforce.") # Choosing the Right Salesforce Suites Edition For You Each Salesforce edition is designed to meet specific business needs, offering different levels of functionality and customization. By selecting the appropriate edition, you ensure you have access to the right tools and features to help your business connect with customers and grow your revenue. But how do you determine which edition is right for your business? Start with these considerations: - **Size of your business**: What’s the current size of your business and how much will it grow in one to two years? How big are your sales, service, and marketing teams? - **Business maturity**: How mature is your business? Are your processes ad-hoc, informal, and dependent on specific individuals? Is your brand relatively new or unknown? This may indicate your business is still developing. On the other hand, if your processes are automated, standardized, and predictable, and your brand is an established market leader, this may indicate a relatively mature business. - **Complexity of business requirements**: Do you need workflow automation? Customizations or custom objects? Unlimited custom apps? Advanced reporting and analytics? Do you manage complex edge cases or large volumes of data? - **Number of users**: Does everyone in your business need access to the CRM system or just a subset? - **Budget**: Fiscal limitations often play a large role in determining which edition is best for your business. Luckily all three Salesforce Suites editions provide affordable options. - **Level of support**: How much support would you like from Salesforce? Is free, automated help, such as Agentforce, sufficient for your needs? Do you want personalized programs, expert guidance, and expedited support? Next, assess your findings and compare Salesforce Suites editions. - **Evaluate your results**: Based on your results from the considerations, make a list of the features and users you need. Note any advanced features or customizations you may require. Decide how many users need to access the CRM system. - **Compare editions, features, and pricing**: Review the features and pricing of each Salesforce Suites edition and compare them to your requirements. Consider which features are most important to your business and choose an edition that includes them. Compare maximum number of users across editions. For example, maybe products and price books are important to your business. Starter Suite provides both features. If you're looking for forecasting and quoting functionality, Pro Suite includes these features. Younger companies may prioritize flexibility and cost-effectiveness, foregoing a more robust feature set. Mature companies may have more data to manage and analyze, requiring more advanced customization and integration tools. The following table provides a brief summary of each Salesforce Suites edition and key benefits.
Salesforce Suites comparison table
SALESFORCE suites edition good for key benefits
Free Suite

Individuals, micro-businesses, and start-ups.

Those unfamiliar with CRM who want a more focused experience.

Free. Designed for small businesses. Brings together customer activity, service cases, sales pipeline, and Slack messages in one place.

Starter Suite

Small businesses and start-ups.

Those with some exposure to CRM and need more features and flexibility from their CRM system.

Cost-effective, all-in-one-solution for small companies to start fast and grow faster. Get a 360-degree view of your business. Unlimited number of users.

Pro Suite

Small to medium businesses with maturing products and processes.

Advanced customization, automation, and integration options. Enhanced sales and service functionality. Unlimited number of users.

# Classic Cards (Managed Package) For the managed package runtime, Classic Cards in the Vlocity Cards Framework are UI components rich in information and actions relevant to the customer's context. The Classic Card Designer is a declarative tool to create cards and card layouts, with minimal HTML, CSS, and AngularJS coding. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Beginning with Vlocity Health and Insurance Summer '19, Vlocity supports Salesforce's Lightning Web Components programming model with Vlocity Lightning Web Components. Vlocity Lightning Web Components include components, functionalities, and templates exclusive to LWC Cards. LWC Cards enables you to use standard JavaScript and HTML to modify and extend Vlocity products. ## Cards A Vlocity card is a block that contains a combination of pertinent information and links to processes within a specific context. An account card, for example, includes unique account information, such as: - Status - Priority or service level agreement - Creation date ![Vlocity Cards Context](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cardscontext.png) Actions on an account card might include: - Closing a case - Opening a new case - Creating a new task Each action can launch an Omniscript to begin a guided process. An action can also open an external web address or application. With an LWC enabled card, you can fire a pubsub event from an action. ## Card Flyouts You can design a card to have an action that, when clicked, opens or "flies out" an additional card. A card flyout contains additional information and actions related to the parent card. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cardflyout.png) ## Card Layouts A card layout contains one or more cards. When you create a new card layout, you can: - Choose existing cards to include in the layout - Create new cards to include in the layout ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cardlayoutbasic.png) ## Controlling the Look of Cards and Card Layouts Each card and card layout is associated with a template that can use HTML and CSS/SCSS, and may use Javascript. Templates control the style and appearance of the card and the card layout, and they can be changed using the Template Designer. The Template Designer is not supported when LWC is enabled. ![Vlocity Cards JavaScript Templates](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/javascripttemplates.png) ## Data Sources for Cards and Card Layouts When you create a card or a card layout, you indicate where it retrieves data to display. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/multipledatasources.png) - **[Installing and Activating Vlocity Templates and Cards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_installing_and_activating_vlocity_templates_and_cards.htm&release=264.0.0&type=5)** For the managed package runtime, after you install the latest Vlocity package, you must install and activate the base templates and cards. - **[Configuring Community Profiles for Vlocity Cards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_community_profiles_for_vlocity_cards.htm&release=264.0.0&type=5)** For the managed package runtime, ensure users see Vlocity Card Layouts on community pages by configuring user profile settings. Enable the appropriate interface, and configure custom object permissions, Visualforce page access, and Apex class access. - **[Lightning Web Component Cards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_lwc_cards.htm&release=264.0.0&type=5)** For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model. - **[Apply Global Branding to Vlocity Cards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_apply_global_branding_to_vlocity_cards.htm&release=264.0.0&type=5)** For the managed package runtime, apply global style changes to all Vlocity Cards in your org by using the Newport Design System. The Newport Design System enables you to download, edit, and override the existing Newport CSS styles with your own styles. - **[Working with the Template Designer and Card Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_working_with_the_template_designer_and_card_designer.htm&release=264.0.0&type=5)** For the managed package runtime, customize the look of card layouts, card states, and flyouts by creating or editing templates in the Template Designer. - **[Cards Framework Versioning (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_framework_versioning.htm&release=264.0.0&type=5)** For the managed package runtime, the Vlocity Cards Framework supports versioning for all components. The name, author, and version combination must be unique for each component of a given type (layout, card, or template) in an org. - **[Using Actions with Cards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_using_actions_with_cards.htm&release=264.0.0&type=5)** For the managed package runtime, cards use Vlocity Actions, OS Actions, and Custom Actions to launch procedures. For example, a card can launch an Omniscript, run an Apex class, redirect to a URL endpoint, and so on. - **[Previewing a Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_previewing_a_layout.htm&release=264.0.0&type=5)** For the managed package runtime, preview a card layout to see how your cards will look once published to a Lightning or Community page. - **[Adding a Card to a Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_card_to_a_layout.htm&release=264.0.0&type=5)** For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model. - **[Adding a State to a Card (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_state_to_a_card.htm&release=264.0.0&type=5)** For the managed package runtime, add card states to display data fields from the card or card layout data source, to present different interactions and layouts based on specified conditions, to add actions, and to add flyouts to display additional information about a record. For example, for cards displaying past due policy information, use a card state template, and display actions, fields, and flyouts different from those on cards displaying information for active policies in good standing. - **[Creating a Custom State Field (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_custom_state_field.htm&release=264.0.0&type=5)** For the managed package runtime, you can create a custom State Field in the template for your layouts or cards by entering `'custom-type'` into the supporting HTML for the template in the Template Designer, as follows: - **[Configuring Data Sources for Cards Components (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_data_sources_for_cards_components.htm&release=264.0.0&type=5)** For the managed package runtime, configure a data source on a card, layout, or flyout to retrieve data from a Salesforce object or an external database. Display the returned data on cards in a layout or flyout. - **[Cards URL Syntax (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_url_syntax.htm&release=264.0.0&type=5)** For the managed package runtime, the Vlocity Cards framework uses a generic Visualforce page to show layouts. This page requires at least one parameter pair to load a specific layout. For example: - **[Creating Zones (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_zones.htm&release=264.0.0&type=5)** For the managed package runtime, zones enable you to arrange the information on a card layout into sections. Create zones in the Template Designer, add the zones to a layout in the Card Designer, then add cards or nested layouts inside the zones. - **[Creating a Placeholder (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_placeholder.htm&release=264.0.0&type=5)** For the managed package runtime, create placeholders in the Template Designer to insert additional fields into card states in the Card Designer. For example, to add a unique title for escalated case cards, select the `card-active-placeholders-slds` card template, and enter Escalated for the value of the **Title** placeholder. - **[Creating a Flyout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_flyout.htm&release=264.0.0&type=5)** For the managed package runtime, create a flyout to display additional information about the record displayed on the card when you click the card. For example, a flyout can display information from long text strings that do not fit in the standard card field, or data from child records, such as open cases for an account, or additional actions. - **[Cloning a Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cloning_a_card_layout.htm&release=264.0.0&type=5)** For the managed package runtime, clone an existing card layout to copy layout, card state, and data source settings to a new card layout. - **[Creating a Version of a Template (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_version_of_a_template.htm&release=264.0.0&type=5)** For the managed package runtime, to make minor edits and switch between active versions, create a version of a template. - **[Cloning a Template (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cloning_a_template.htm&release=264.0.0&type=5)** For the managed package runtime, edit a template without overriding existing code and settings by cloning an Omniscript element or Cards Framework component template with the Template Designer. - **[Adding Cards to a Lightning or Community Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_cards_to_a_lightning_or_community_page.htm&release=264.0.0&type=5)** For the managed package runtime, launch Vlocity Cards from Lightning and Community pages by adding Card Layouts with the Lightning App Builder and the Community Builder. - **[Reloading a Card After Updating an LWC Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_reloading_a_card_after_updating_an_lwc_omniscript.htm&release=264.0.0&type=5)** For the managed package runtime, update information on a card after making a change to an LWC Omniscript by passing an event to the Omniscript in the URL parameter `c__vlocEvents` of an OS Action. - **[Cards Context Variables (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_context_variables.htm&release=264.0.0&type=5)** For the managed package runtime, several variables are available across the framework to provide contexts to cards, data sources, flyouts, templates, and other components. - **[Exporting Vlocity Layouts and Cards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_exporting_vlocity_layouts_and_cards_1.htm&release=264.0.0&type=5)** For the managed package runtime, when deploying components in a new org, you must export any applicable Vlocity Cards framework components, particularly those that you modified. The Vlocity Cards Framework supports versioning for all components (layouts, cards and templates). Only active versions are exported. - **[Cards Framework Web Deployment Options (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_framework_web_deployment_options.htm&release=264.0.0&type=5)** For the managed package runtime, you can deploy Omnistudio for Managed Packages components, including Omniscripts and Cards Framework components, outside of Salesforce. This type of deployment is also called off-platform. You can use these components in an external server with or without an active connection to a Salesforce org. You can deploy components to a Heroku web server or to Adobe Enterprise Manager. - **[Base UI and Card Templates (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_base_ui_and_card_templates.htm&release=264.0.0&type=5)** For the managed package runtime, the following tables list the base templates that are available for use with Vlocity Cards. When editing a template, it’s best practice to clone the existing template first and to edit the cloned version. - **[Cards Framework Required Resources (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_framework_required_resources.htm&release=264.0.0&type=5)** For the managed package runtime, for Angular components, when implementing the `CardFramework` in your custom page, you must include these resources, in the order given. - **[Creating a Custom Cards Apex Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_custom_cards_apex_page.htm&release=264.0.0&type=5)** For the managed package runtime, to create a custom Cards Apex page, create a Visualforce Apex page, add your Angular app to the page, add some common scripts, and add your layout name. # Classic Omniscript Designer (Managed Package) For the managed package runtime, create Omniscripts in the classic designer when an element, property, or functionality solves a project requirement that you cannot resolve in the LWC Omniscript Designer. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note In Omnistudio for Managed Packages, Omniscripts built on AngularJS are no longer supported. We recommend migrating them to the Omniscript Lightning web component (LWC) framework for continued support. It is possible to switch between the classic and LWC Omniscript designers. The classic Omniscript designer is built in Angular and provides a limited view of the Omniscript during configuration. The LWC Omniscript Designer provides in-product help and a user-friendly canvas that enables users to preview the appearance of an Omniscript while configuring elements. ## What’s Next Learn how to use the classic designer. See [Creating the Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_the_omniscript.htm&release=264.0.0&type=5 "For the managed package runtime, understand how to create an Omniscript by using the Vlocity Omniscript Designer tab."). - **[Getting Started with Omniscripts (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_getting_started_with_omniscript.htm&release=264.0.0&type=5)** For the managed package runtime, Vlocity Omniscript is an omnichannel customer engagement and a business tool built on the Salesforce platform. Administrators can define a script once and then deploy the script within a Salesforce application or on a web page. Omniscript can be used to collect data from both Salesforce.com users and anonymous users via a wide variety of HTML controls. - **[Creating the Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_the_omniscript.htm&release=264.0.0&type=5)** For the managed package runtime, understand how to create an Omniscript by using the Vlocity Omniscript Designer tab. - **[Omniscript Script Structure Definitions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_script_structure_definitions.htm&release=264.0.0&type=5)** For the managed package runtime, Omniscripts are defined by Administrators directly within the application. - **[Create the Script Structure (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_the_script_structure_1.htm&release=264.0.0&type=5)** For the managed package runtime, create the logic that executes when the script runs, by building a hierarchical structure of Actions and Steps. - **[Creating Steps in an Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_steps_in_an_omniscript.htm&release=264.0.0&type=5)** For the managed package runtime, when creating the structure for an Omniscript, Steps should be used to create each "page" of the form. Users can navigate through Steps using Next and Previous buttons. You can enable field validation for a Step, which means that all required fields on the Step must be completed in order to move forward. Conditionally display elements by applying conditional views to steps. This enables you to create one Omniscript that offers different experiences based on the user's responses. - **[Adding Elements to a Step (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_elements_to_a_step.htm&release=264.0.0&type=5)** For the managed package runtime, after creating the structure of an Omniscript, drag the desired elements into the structure. - **[Previewing Omniscripts (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_previewing_omniscripts.htm&release=264.0.0&type=5)** For the managed package runtime, preview your Omniscript by clicking **Preview** to launch your script. When using an LWC Omniscript, click **LWC Preview**. From the **Preview** panel, you can navigate through the steps of the Omniscript, use the Debug console to view an action's request and response data, change the preview layout, or view the JSON data. The Preview view defaults to Lightning Universal Page. To change the layout, click the drop-down menu and select your desired layout from the available list. - **[Test Angular Omniscript Data in the Omniscript Data Panel (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_angular_omniscript_data_in_the_omniscript_data_panel.htm&release=264.0.0&type=5)** For the managed package runtime, test data while previewing an Angular Omniscript by using the Omniscript Data panel. - **[Test LWC Omniscript Data in the Omniscript Data Panel (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_lwc_omniscript_data_in_the_omniscript_data_panel.htm&release=264.0.0&type=5)** For the managed package runtime, test data while previewing an LWC Omniscript by using the Omniscript Data panel. - **[Ending the Execution of an Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_ending_the_execution_of_an_omniscript.htm&release=264.0.0&type=5)** For the managed package runtime, the **Done** action ends an Omniscript and returns the user to the page from which the script was launched, or to a specified URL. - **[Activating Omniscripts (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activating_omniscripts.htm&release=264.0.0&type=5)** For the managed package runtime, to activate a script for production deployment, edit the script and, in the Script Configuration section, click **Activate Version**. # Classify Fields in Security Center Security Center's Field Classification tool lets you assign and manage sensitivity level and other classifications for fields across all objects in your parent and tenant orgs, individually or in bulk.
Available in: Lightning Experience
Available in: Enterprise and Unlimited Editions with the Security Center add-on license.
Available for free in: Developer Edition
Easily identify which fields potentially contain sensitive or regulated data and who is responsible for that data. Maintain classifications to identify security risks, optimize data governance, spot trends, and make sure your org ecosystem meets audit and regulatory requirements. Review classifications as org data evolves or policies are updated, and address unclassified fields, which might indicate a compliance gap or audit risk. When classifying fields, you can view all objects or individual objects, and filter and sort fields by classification attributes, such as fill rate, compliance category, and sensitivity level. A color-coded progress bar shows the distribution of all org fields across sensitivity levels, including unassigned fields. Hovering over a segment shows the level description and field count. ![Security Center Field Classification feature showing classified fields with filter options pinned to the page.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/sc_field_class_with-filters.png) - **[Field Classification Attributes](https://help.salesforce.com/s/articleView?id=xcloud.security_center_field_classification_attributes.htm&release=264.0.0&type=5)** Before you classify fields, customize your Fields view, or filter the Fields list, make sure you understand the field classification attributes. - **[Customize Your Field Classification Fields List](https://help.salesforce.com/s/articleView?id=xcloud.security_center_field_classification_customize.htm&release=264.0.0&type=5)** Select the field attributes you need to see on the Fields list and remove the ones you don't. Object, Field, and Sensitivity Level attributes are always visible, but you can add, arrange, and remove others to get the view you want. - **[Calculate Fill Rates for Salesforce Fields](https://help.salesforce.com/s/articleView?id=xcloud.security_center_field_classification_fill_rates.htm&release=264.0.0&type=5)** Field fill rates help identify which fields are filled on object records and how actively and consistently they're filled. Use fill rates to prioritize high-use fields to classify and identify fields that aren't used. - **[Classify Object Fields by Security Level, Compliance, and Other Attributes](https://help.salesforce.com/s/articleView?id=xcloud.security_center_field_classification_classify_fields.htm&release=264.0.0&type=5)** Select objects whose fields you want to classify according to predefined attributes, such as sensitivity level, compliance category, and field usage. Classify fields individually or in bulk. - **[Field Classification Filters and Use Cases](https://help.salesforce.com/s/articleView?id=xcloud.security_center_field_classification_filters.htm&release=264.0.0&type=5)** Field Classification's advanced filters let you focus on the fields that matter, whether you're trying to identify high-traffic fields that carry real compliance risk or flagging empty fields that go unused and can be deprecated. - **[Filter the Fields List by Classification Attributes](https://help.salesforce.com/s/articleView?id=xcloud.security_center_field_classification_filter_fields.htm&release=264.0.0&type=5)** Filtering the Field Classification tool's Fields list by classification attributes lets you narrow the list of fields you're working with and analyze your field security posture more efficiently. Filter by object and field attributes, and adjust field fill rate calculations. - **[Field Classification Considerations](https://help.salesforce.com/s/articleView?id=xcloud.security_center_field_classification_considerations.htm&release=264.0.0&type=5)** Make sure you understand these considerations for classifying fields and configuring the Field Classification Fields list. # Classify Object Fields by Security Level, Compliance, and Other Attributes Select objects whose fields you want to classify according to predefined attributes, such as sensitivity level, compliance category, and field usage. Classify fields individually or in bulk.
Available in: Lightning Experience
Available in: Enterprise and Unlimited Editions with the Security Center add-on license.
Available for free in: Developer Edition
| User Permissions Needed |   | | --- | --- | | To view Security Center Tools tab: | View Security Center Pages | | To view and manage classification: | Manage Security Center | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note We run a scheduled, one-time job to populate the lists of objects and their fields. It can take up to 24 hours after the job is run for objects and fields to appear. 1. Make sure your sensitivity and compliance picklist values are configured for your org. Go to Setup and enter Data Classification Settings in the Search field. 2. On the Fields list, select the objects whose fields you want to classify. 3. Select the fields you want to classify. If you select multiple fields, you must classify them all the same way. 4. Click **Update Selected Fields** and select sensitivity level, compliance category, data owner, and field usage as needed. 5. Click **Review Changes**, then confirm your classifications or edit them. Changes appear on the Fields list. If you classify a large number of fields, the job may take a while. Fields being classified aren't available for further classification until the job is complete. # Clean Data (Managed Package) For the managed package runtime, the Omnistudio Build Tool includes a script to help find and eliminate incorrect data. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Run the script with this command: ``` vlocity -propertyfile -job cleanOrgData ``` This Node.js script adds global keys to all SObjects that are missing them and deletes a number of stale data records. # Clean Metadata Deployment for Omnistudio Clean Metadata Deployment modernizes how you deploy Omnistudio components. When you turn it on, Omnistudio components behave like standard Salesforce metadata, so you deploy them with Salesforce CLI, DevOps Center, change sets, and packaging, alongside Lightning web components, flows, and Apex classes in a single pipeline. Omnistudio components become standard setup entities, represented by new metadata types. Each component exposes only a single version, dependencies are detected automatically, and source files use clean, version-agnostic names. You deploy Omnistudio components with the same tools and workflows that you already use for the rest of the Salesforce platform. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Clean Metadata Deployment is available only on the standard runtime and standard designer. If you're on the managed package runtime and designer, migrate to the standard runtime and designer to use this feature. See [Migrate Your Components to Omnistudio Standard Runtime Using the Omnistudio Migration Assistant](https://help.salesforce.com/s/articleView?id=xcloud.os_migrate_omnistudio.htm&type=5&language=en_US). ## Key Benefits Clean Metadata Deployment brings these improvements to Omnistudio deployment. - Atomic deployment: Deploy Omnistudio changes together with other Salesforce metadata types in one cohesive deployment. - Automatic dependency detection in first-generation (1GP) packages: When you retrieve or deploy an Omnistudio component, the framework identifies the components it depends on and includes them. - Streamlined version management: Each component exposes only its single version for deployment. Each deployment creates a version in the target org, so you no longer scan a long list of versions to find the right one. - Readable diffs: The new metadata produces consistent, readable diffs of your deployed Omnistudio changes for reviewers. - Packaging support: The new metadata is packageable in first-generation (1GP) and second-generation (2GP) packages. - Sandbox copy support: When you create a full copy or partial copy sandbox, your Omnistudio components are copied to the sandbox. See [Sandbox Types and Templates](https://help.salesforce.com/s/articleView?id=platform.create_test_instance.htm&type=5&language=en_US). - Source tracking: Track the changes between your local project and a scratch org or sandbox when you create, update, or delete Omnistudio components. See [Track Changes Between Your Project and Org](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_source_tracking.htm). ## Key Differences This table compares Omnistudio deployment before and after you turn on Clean Metadata Deployment. | Capability | Legacy Deployment | Clean Metadata Deployment | | --- | --- | --- | | Deploy alongside other metadata types | No | Yes | | Versions exposed for deployment | All versions | Single version only | | Automatic dependency detection | Not supported | Supported (1GP only) | | Source files in version control | Hard to compare | Readable, consistent diffs | | File naming | Includes version number | Version-agnostic | | Source tracking | Not supported | Supported | | Full sandbox copy | Omnistudio components not copied | Omnistudio components copied | | 1GP packaging | Limited | Supported | | 2GP packaging | Limited | Supported | | Change sets | Not supported | Supported | ## Supported Deployment Methods and Tools After you turn on the feature, you can use Omnistudio components with these options: - Salesforce CLI: Retrieve, deploy, and package Omnistudio components with `sf project` commands. See [project Commands](https://developer.salesforce.com/docs/platform/salesforce-cli-reference/guide/cli_reference_project.html). - Change sets: Include Omnistudio components in change sets, with dependencies identified automatically. See [Deploy Using Change Sets](https://help.salesforce.com/s/articleView?id=platform.code_tools_changesets.htm&type=5&language=en_US). - Metadata API: Work with the new metadata types programmatically. See [Understanding Metadata API](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_intro.htm). - 1GP and 2GP packaging: Package Omnistudio components in first-generation and second-generation packages. See [First-Generation Managed Packages](https://developer.salesforce.com/docs/atlas.en-us.pkg1_dev.meta/pkg1_dev/sharing_apps.htm) and [Second-Generation Managed Packages](https://developer.salesforce.com/docs/atlas.en-us.pkg2_dev.meta/pkg2_dev/sfdx_dev_dev2gp.htm). - Sandbox copy: When you create or refresh a Developer, Developer Pro, Partial Copy, or Full sandbox, Omnistudio components copy automatically. See [Sandboxes](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_sandboxes.htm). ## New Metadata Types When Clean Metadata Deployment is turned on, use these metadata types for retrieve and deploy operations. These metadata types require API version 67.0 or later. | Component | New Metadata Type | Legacy Type (no longer supported) | | --- | --- | --- | | Omniscript | [OmniscriptDefinition](https://developer.salesforce.com/docs/atlas.en-us.industries_reference.meta/industries_reference/meta_omniscriptdefinition.htm) | OmniScriptConfig | | Integration Procedure | [IntegrationProcdDefinition](https://developer.salesforce.com/docs/atlas.en-us.industries_reference.meta/industries_reference/meta.integrationprocddefinition.htm) | OmniIntegrationProcConfig | | Data Mapper | [DataMapperDefinition](https://developer.salesforce.com/docs/atlas.en-us.industries_reference.meta/industries_reference/meta.datamapperdefinition.htm) | OmniDataTransformConfig | | Flexcard | [FlexcardDefinition](https://developer.salesforce.com/docs/atlas.en-us.industries_reference.meta/industries_reference/meta.flexcarddefinition.htm) | OmniUiCardConfig | ## Limitations Consider these limitations when you plan your deployment. - The Tooling API isn't supported. - Omnistudio components that reference Data Mappers in the non-Industries managed package aren't supported. - Packaging doesn't allow version overrides. If a component name conflicts with an existing component during installation, the installation creates a version. - **[Set Up Clean Metadata Deployment](https://help.salesforce.com/s/articleView?id=xcloud.os_set_up_clean_metadata_deployment.htm&release=264.0.0&type=5)** Turn on Clean Metadata Deployment from Omnistudio Settings in Setup. Turn it on in both the source org and the target org. - **[Omnistudio Clean Metadata Frequently Asked Questions (FAQs)](https://help.salesforce.com/s/articleView?id=xcloud.os_clean_metadata_deployment_faqs.htm&release=264.0.0&type=5)** Get answers to common questions about using Clean Metadata Deployment for Omnistudio. # Clean, Transform, and Load Data with Data Prep _Data Prep_ provides an intuitive, visual interface in Salesforce Data Pipelines that allows you to easily point-and-click your way to build recipes that prepare data and load it into a target. Use the graph of a recipe to see at a glance where data comes from and how it flows through the recipe to the target. To validate the recipe as you build, preview how raw data is transformed at every step of the way. Watch a Demo: [![Play button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/_corporate/images/play_btn.png) Introducing Data Prep (English Only)](https://salesforce.vidyard.com/watch/dbZ1ibEJJqvN7EkWTuTpNt?) In Data Prep, a recipe consists of nodes. You can add different types of nodes to a recipe to bring in, manipulate, and write data to a target. Data Prep displays a graph of the recipe and its nodes in the Graph area. ![The large recipe is a lot easier to read bbecause transformations don't appear in the graph.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_large.png) A Data Prep graph doesn’t show every transformation. It shows only inputs (source data), appends, aggregates, filters, joins, and the output (where the data is written). It also shows transforms, which are groups of transformations that change the raw data, such as concatenation and column type conversions. By hiding lower-level data changes, the graph provides a higher-level, easier-to-read view of the flow of data. We call each object shown in the graph a _node_. A recipe can have multiple Input, Append, Aggregate, Filter, Join, Transform, and Output nodes. Although the graph doesn’t show individual data transformations, you can select a Transform node (1) in the Graph area to see its transformations in the Details area (2). ![The Steps panel shows all transformations included in the selected Transform node. Preview shows the results for the selected transformation.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipe_transform_details.png) You can select a transformation step in the left panel of the Details area to preview the results of that transformation in the Preview tab. Similarly, you can select any node in the graph to preview the results of that node. ![The Details area shows all tranformations added to the selected Transform node and the results of the selected transformation step.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_transformation_step_preview.png) When you run a recipe, Salesforce Data Pipelines applies the function of each node on the input data, and then outputs the results to the specified target. If the target is a dataset, you can then use that dataset as input to other recipes. - **[Data Prep Access Based on Your User Type](https://help.salesforce.com/s/articleView?id=xcloud.sdp_data_prep_security.htm&release=264.0.0&type=5)** Not all Data Prep users in Salesforce Data Pipelines need access to all data prep features. For example, a business analyst doesn’t need to change dataset security to grant themselves and others access to more data. To support advanced and limited Data Prep user types, Salesforce Data Pipelines comes with two user permissions: Edit Analytics Dataflows and Edit Dataset Recipes. - **[Create a Recipe with Data Prep](https://help.salesforce.com/s/articleView?id=xcloud.sdp_recipe_create.htm&release=264.0.0&type=5)** Use a Data Prep recipe in Salesforce Data Pipelines to clean, transform, and enrich data before loading it into one or more targets. Preview your results as you build the recipe to confirm that the logic is correct. - **[Manage Recipes](https://help.salesforce.com/s/articleView?id=xcloud.sdp_integrate_data_prep_recipe_manage_monitor.htm&release=264.0.0&type=5)** After you create a recipe, use the Recipes tab to edit and delete them. - **[Preview Results in a Data Prep Recipe](https://help.salesforce.com/s/articleView?id=xcloud.sdp_recipe_preview_results.htm&release=264.0.0&type=5)** As a best practice in Salesforce Data Pipelines, catch mistakes early by previewing the results of each node and transformation that you add to your Data Prep recipe. - **[Profile Columns to Understand Data in a Data Prep Recipe](https://help.salesforce.com/s/articleView?id=xcloud.sdp_recipe_profile.htm&release=264.0.0&type=5)** In Salesforce Data Pipelines, run column profiling on sample data to estimate key stats about columns, such as the frequency of values and percent of columns with missing values. Column profiling is especially useful when you are combining data from different sources, where inconsistencies are often introduced. Column profiles are available only for columns shown in preview. # Clear a Saved State from a Previous Step (Managed Package) For the managed package runtime, beginning with Vlocity Insurance and Health Winter '20 , when a Custom LWC's saved state relies on data from a previous step, you can conditionally clear the saved state of the Custom LWC whenever a user navigates to a previous step. After configuration, the Step element passes a boolean flag to the custom LWC. The code in your Custom LWC must use the boolean to determine whether to instantiate a new saved state or continue using the existing saved state. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To configure the clear saved state functionality: 1. In Omniscript, determine the Step that clears the Custom LWCs saved state. 2. In the Step's properties, click **Edit as JSON**. 3. Enter the property `"omniClearSaveState": [ ]`. 4. In the **omniClearSaveState** property, enter the name of one or more custom LWC elements `"omniClearSaveState": [ "CustomLWC1"]`. The Step sends data to the Custom LWC enabling the Custom LWC to determine if the Step rendered. 5. In your Custom LWC's code, retrieve the current state. ``` const state = this.omniGetSaveState() ``` 6. In your Custom LWC's code, set a variable equal to `this.omniGetSaveState(this.omniJsonDef.name + '-$Vlocity.cleared'`. The function evaluates whether the previous Step containing the omniClearSaveState property rendered and returns a boolean. ``` let stateCleared = this.omniGetSaveState(this.omniJsonDef.name + '-$Vlocity.cleared'); ``` 7. Modify your code by using the boolean value to determine whether to keep the current saved state or instantiate a new saved state. # Clear Platform and User Session Caches (Managed Package) For the managed package runtime, remove temporarily stored data by clearing the platform and user session caches to get the latest available data. Cards, card layouts, templates, custom labels, and profile data load from the **VlocityMetadata** partition of the Platform Cache when the card is active and viewed from a record page or a community page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To confirm your org has enough space allocated to the **VlocityMetadata** partition or to allocate more space, see [Allocating Space in the Platform Cache Partitions](https://help.salesforce.com/s/articleView?id=service.vaccine_packages_allocate_org_cache_hv.htm&type=5&language=en_US).

Required Versions

Available beginning with Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20,

1. Open the Vlocity Cards tab, and click **Cache Settings**. ![Cards Cache Settings](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cache_settings.png) 2. To clear org caches, click one or more of the **Platform Org Cache** checkboxes: - **Layouts**: To clear cached card layouts, check this box. - **Cards**: To clear cached cards, check this box. - **Templates**: To clear cached card templates from the Vlocity Cards Framework, check this box. - **Custom Labels**: To clear cached Custom Labels across the Vlocity Cards Framework, check this box. To learn more about Custom Labels, see [Custom Labels](https://help.salesforce.com/articleView?id=cl_about.htm&type=5&language=en_US). ![Cards Clear Platform Org Cache](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/clear_cache_settings_platform.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning with Vlocity Insurance and Health Vlocity Spring '20, Vlocity supports disabling the Vlocity platform cache. See [Disable Platform Cache (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_disable_platform_cache.htm&release=264.0.0&type=5 "For the managed package runtime, disable caching across the Vlocity Cards Framework to get the latest available data directly from the database. Cards, card layouts, templates,custom labels, and profile data load from the VlocityMetadata partition of the Platform Cache when the card is active and viewed from a record page or a community page by the end-user."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning with Vlocity Insurance and Health Vlocity Spring '20, enabling async calls on the Vlocity platform cache. See [Enable Async Caching on the Vlocity Card Framework (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_enable_async_caching_on_the_vlocity_card_framework.htm&release=264.0.0&type=5 "For the managed package runtime, use the Future Method to enable card caching to run in sync with the Vlocity Card Framework. Future method calls are async calls made by an Apex class."). 3. To clear cached data specific to the logged-in user across the Vlocity Cards Framework, select the **User Profile** checkbox in the **Platform Session Cache** column. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note The user info data cleared are: **User Id**, **Name**, **LanguageLocaleKey**, **LocaleSidKey**, **TimeZoneSidKey**, **UserType**, **UserRole.Name**, **ProfileId**, **Profile.Name**, **AccountId**, and **ContactID**. ![Cards Clear Platform Session Cache](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/clear_cache_settings_userinfo.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning with Vlocity Insurance and Health Vlocity Winter '20 Minor Release 107.1.0.2, Vlocity supports disabling the user session cache. See [Disable User Information Caching (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_disable_user_information_caching.htm&release=264.0.0&type=5 "For the managed package runtime, disable user information caching in the session cache. The Vlocity Cards Framework keeps stored user profile data on the VlocityMetadata partition of the Platform Cache. The Cards.UserTrigger caches the user after user information updates, and removes the cached user after the user is disabled or deleted."). 4. Click **Clear**. # Clickjack Protection Control Salesforce provides Clickjack Protection settings to protect your organization from UI redress attacks. ## Control Name Clickjack Protection ## Recommended Configuration - Enable clickjack protection for Setup pages - Enable clickjack protection for non-Setup Salesforce pages - Enable clickjack protection for customer Visualforce pages with standard headers - Enable clickjack protection for customer Visualforce pages with headers disabled On the Session Settings Setup page, in the Clickjack Protection section, enable all settings. ## Control Overview To protect your organization from UI redress attacks, Salesforce provides Clickjack Protection settings that prevent malicious websites from embedding your Salesforce pages, such as Setup or custom Visualforce pages, within an invisible iframe. ## Security Risk If Not Configured Not enabling clickjack protection exposes your users to UI Redress attacks, where an attacker embeds your Salesforce pages into an invisible iframe on a malicious site to trick them into performing unintended actions like deleting records or granting permissions. This oversight creates a high risk of unauthorized data modification and account compromise, as legitimate user interactions are hijacked to execute malicious commands without the user's knowledge. ## Threat Scenarios An attacker lures an authenticated Salesforce user to a malicious website that hosts an invisible iframe of a sensitive Salesforce page, such as a User Deactivation or Record Deletion screen, directly over a decoy button like "Claim Your Prize." When the user clicks the decoy, they unknowingly execute the hidden Salesforce command, potentially resulting in the unauthorized deletion of critical customer data or the elevation of an attacker's own system permissions without any visible warning. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations The core risk impact involves a critical compromise of data confidentiality and system integrity, where the exploitation of unmitigated vulnerabilities leads to unauthorized data exfiltration, fraudulent administrative actions, and severe regulatory non-compliance. ## Higher Risk When The risk is significantly heightened by an overly permissive Trusted Domains list, which can allow untrusted or compromised external sites to bypass framing restrictions and host invisible Salesforce components. Additionally, neglecting to enable clickjack protection for custom Visualforce pages or Experience Cloud sites while only securing the internal setup creates a vulnerable "backdoor" for attackers to target non-administrative users. ## Low or No Risk When To minimize the risks of clickjacking, organizations can utilize Trusted Domains for Inline Frames to explicitly whitelist only authorized external sites, ensuring that framing is restricted to known-safe environments. Additionally, adopting Lightning Web Components (LWC) with secure API integrations allows for native data rendering without the need for iframes, effectively eliminating the primary attack vector while maintaining a Least Privilege model to limit the potential damage of any accidentally hijacked clicks. ## Business and Integration Considerations Implementing clickjack protection requires a comprehensive audit of all external portals and third-party applications that iframe Salesforce pages to ensure they are correctly allowlisted, as overly restrictive settings can break business-critical integrations and customer-facing workflows. ## Recommended Remediation Enable the clickjack protection in Salesforce Session Settings. ## Security Health Review Guidance Security Health Review inspects the session settings setup of the org to verify that clickjack protection is enabled in alignment with best practices. #### See Also - [Configure Clickjack Protection](https://help.salesforce.com/s/articleView?id=xcloud.security_clickjack_protection_configure.htm&release=264.0.0&type=5 "Clickjacking is a type of attack that tricks users into clicking something, such as a button or link. The click sends an HTTP request that performs malicious actions that can lead to data intrusion, unauthorized emails, changed credentials, or similar results. To help protect against this kind of attack, most Salesforce pages can only be served in an inline frame by a page on the same domain. Learn which types of pages can be framed and how to configure the related clickjack settings.") # Clone a Calculation Procedure (Managed Package) For the managed package runtime, the Clone action button isn't present for calculation procedures by default, but you can add it. When you clone a calculation procedure, you're cloning all of its versions, steps, variables, and constants. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). By default, the new (cloned) calculation procedure does not have any versions set to Enabled. You have to manually enable one of the versions to use it. Any calculation matrices used by the calculation procedure are not cloned. In Salesforce Lightning, you add a **Clone** button to the Calculation Procedure object, then add the button to the Calculation Procedure page layout: 1. Go to **Setup** | **Object Manager** | **Vlocity Calculation Procedure** | **Buttons, Links, and Actions**. 2. Click **New Button or Link**. 3. Enter a **Label** and a **Name** for the button. 4. In **Display Type**, choose either **Detail Page Button** or **Detail Page Link**. 5. Choose a **Behavior**. Recommended: Display in existing window with sidebar. 6. In **Content Source**, choose **Visualforce Page**. 7. In **Content**, choose **CalculationProcedureCloner**. 8. Click **Save**. 9. Go to **Setup** | **Object Manager** | **Vlocity Calculation Procedure** | **Page Layouts**. 10. Choose the layout. 11. In the top pane, choose **Buttons**, then drag the **Clone** button onto the page layout. Recommended location: The **Vlocity Calculation Procedure Detail** | **Custom Buttons** area. 12. Click **Save**. 13. After you have added the button, you can clone a calculation procedure: 1. Go to the Vlocity Calculation Procedures list page and click the calculation procedure that you want to clone. 2. Click the **Clone** button. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_tip.png) Tip If you can't see the **Clone** button on your screen, click the gray down-arrow at the top right of the page and select **Clone**. 3. In the **New Vlocity Calculation Procedure** window, enter a name for your new calculation procedure, then click **Save**. # Clone a Flexcard (Managed Package) For the managed package runtime, create an identical copy of a Flexcard with the Clone feature in the Flexcard Designer. Cloning an existing Flexcard creates a new Flexcard with a new Name, or Author, or both. The Name and Author must be unique. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note To create a new version of a Flexcard with the same name and author, make minor modifications, and compare between versions, see [Create a New Version of a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_new_version_of_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, create a new version of a Flexcard in the Flexcard Designer when you want to make slight modifications to a current. Creating a version of a Flexcard makes an exact copy with a version number equal to the latest version number plus one. For example, if you already have two versions, the new version number will be 3."). 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. Click **Clone** in the submenu. 3. If you're not changing the author, enter a new **Name**. Either the Name, or Author, or both must change. 4. If you're not changing the name, enter a new **Author**. Either the Name, or Author, or both must change. 5. (Optional) Update the following properties: - Update the **Theme** to Lightning (SLDS) or Newport. - Update the **Title** of the rendered component visible in the component lists in the Lightning App Builder and Community Builder. - If disabled, enable **Child Card** to embed it inside another Flexcard. - Update the **Description** that displays on the Flexcards tab. 6. Click **Clone**. # Clone a Flexcard or Create a New Version Consider the available options for copying a Flexcard. 1. From the App Launcher, find and select **Flexcards**. 2. Expand a Flexcard and select the version to copy. 3. Clone or create a version of the Flexcard: - New Version: Update a Flexcard that you already published such as for testing purposes. The name and author remain the same, and only one version can be active at a time. When you activate a version, Omnistudio deactivates all other versions of the Flexcard. - Clone: Create a Flexcard with the same layout, settings, or both, as an existing Flexcard. The required information is the same as for a new Flexcard. 4. Set up the cloned Flexcard or the new version as needed. # Clone a Rebate Program and Rebate Type Use the Clone and Clone with Related actions on Rebate Program and Program Rebate Type records to copy a record along with its related records. For Advanced Rebate programs, this allows you to quickly replicate independent accrual and payout configurations for new regions or periods. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
User Permissions Needed
To clone a rebate program Rebate and Accrual Management Advanced Admin permission set
1. From App Launcher search, enter Rebate Programs or Rebate Type, and then select **Rebate Programs or Rebate Type**. 2. From the Quick Actions Menu, select one of these fields and values.
Object clone clone with related
Rebate Program Copy the Rebate Program record and its core settings, including the Execution Type.

Copy the Rebate Program record with the option to copy related records:

  • Program Rebate Type
  • Rebate Program Accrual Period
  • Rebate Program Payout Period
  • Program Rebate Type Benefit
Rebate Type Copy the Program Rebate Type record.

Copy the Program Rebate Type record with the option to copy the following related records:

  • Program Rebate Type Benefit
  • Program Rebate Type Benefit Mapping
  • Program Rebate Type Filter
3. Update the Start Date, End Date, and other details as required. 4. For Advanced programs, ensure the Execution Type remains set to Advanced and the Source Matching Field is correctly mapped before saving. 5. Click **Save**. # Clone a Rebate Program and Rebate Types Use the Clone and Clone with Related actions on Rebate Program and Program Rebate Type records to copy a record along with their related records. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
User Permissions Needed
To clone a rebate program Rebate Management Admin permission set
1. From App Launcher search, enter Rebate Programs or Rebate Type, and then select **Rebate Programs** or **Rebate Type**. 2. From the Quick Actions Menu, select one of these fields and values.
Object Clone Clone with Related
Rebate Program Copy the Rebate Program record.

Copy the Rebate Program record with the option to copy the following related records:

  • Program Rebate Type
  • Program Rebate Type Filter
  • Program Rebate Type Benefit
  • Program Rebate Type Benefit Mapping
  • Rebate Program Payout Period
Rebate Type Copy the Program Rebate Type record.

Copy the Program Rebate Type record with the option to copy the following related records:

  • Program Rebate Type Benefit
  • Program Rebate Type Benefit Mapping
  • Program Rebate Type Filter
3. Update other details as required, and click **Save**. #### See Also - [Create a Rebate Program](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_create_rebate_program.htm&release=264.0.0&type=5 "Create a rebate program to offer incentives to your partners when they meet agreed-upon targets. Specify the details of the program such as its duration, payout period frequency, and program description.") - [Create Rebate Types for a Program](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_create_rebate_types.htm&release=264.0.0&type=5 "Define rebate types to specify the incentive structure within a rebate program. A rebate program can include multiple rebate types, each representing a different strategy, such as volume, revenue, or growth. To configure a rebate type, create a Program Rebate Type record. Define the calculation logic, eligibility, benefit thresholds, and product associations to determine how rebates are calculated and paid out.") - [Run a Rebate Program for AMER and LATAM Partners (Example)](https://help.salesforce.com/s/articleView?id=xcloud.user_rebates_run_rebate_program_example.htm&release=264.0.0&type=5 "This example shows how an automotive company creates a rebate program to reward its partners in the AMER and LATAM regions.") # Clone and Activate Book Service Appointment Flow Clone a screen flow to book service appointments. This procedure guides you through setting up a new flow, adding the necessary components, and configuring the flow to book service appointments efficiently. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
1. From Setup, in the Quick Find box, enter Flows, and then select **Flows**. 2. Click **New Flow**. 3. Select **Start From Scratch**, then click **Next**. 4. Select **Screen Flow**, and then click **Create**. 5. Add the Screen element to the canvas. 6. For Label, enter Book Service Appointment. The API Name is automatically set to Book\_Service\_Appointment. 7. From the Components list, drag the **Book Service Appointments** component to the canvas. 8. For API Name, enter a name. For example, Book Service Appointment. 9. In the Work Order ID picklist, select **New Resource**. 10. In the Resource Type picklist, select **Variable**. 11. For API Name, enter a name. 12. In the Data Type picklist, select **Text**. 13. Click **Done**. 14. Save the configuration. 15. Click **Save**. 16. Enter a label and API name for the flow, and then click **Save**. 17. Activate the flow. # Clone and Activate Data Processing Engine Definitions Advanced Rebate and Accrual Management uses a coordinated sequence of six Data Processing Engine definitions to move, transform, and aggregate high-volume data between Salesforce Core and Data Cloud. Administrators must manually clone and activate these templates before running advanced accrual processing. Once cloned, you can customize the definition's nodes, variables, and aggregation logic to meet your business requirements. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
**Key Configuration Rules** - Verify Process Type when cloning: The six DPEs use two different process types. - When cloning the Delta Calculation and Rule Processing DPEs, set the Process Type to Accruals And Payout Engine. - When cloning the Rule Configuration, Data Preparation, Source Generation, and Status Update DPEs, set the Process Type to Rebate and Accrual Management Advanced. - Do Not Map to Rebate Types: Leave the Calculation Definition field on your Program Rebate Type records blank. In the Advanced engine, the six Data Processing Engine definitions run on Data Cloud as Batch Transforms rather than being triggered by a record-level Calculation Definition lookup. The DPEs are still required. Leaving this field blank simply prevents the classic record-level calculation from running. - Run DPEs in sequence: The advanced calculation process requires running the cloned DPE templates manually, or by scheduling a flow, or via custom automation in their exact operational sequence (Advanced Rebate and Accrual Pre-Processing - Rule Configuration > Advanced Rebate and Accrual Pre-Processing - Data Preparation > Accrual and Payout Engine - Delta Calculation > Accrual and Payout Engine - Rule Processing > Advanced Rebate and Accrual Post-Processing - Source Generation > Advanced Rebate and Accrual Post-Processing - Status Update) to successfully generate and aggregate your accrual sources. For detailed DPE configuration examples, see [Data Processing Engine (DPE) Definitions](https://help.salesforce.com/s/articleView?id=xcloud.rebates_adv_dpe_example.htm&type=5&language=en_US) # Clone Child Cards of Widget FlexCards Some member engagement widgets use child cards to show the details. Clone a child card and then make the desired changes. After you customize a cloned child card, embed the child card in the parent FlexCard. You can also activate a child card and use it as an independent FlexCard. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To configure member widgets: Loyalty: Member engagement widgets
Child cards are available with these widgets. - Member Vouchers - Member Badges - Member Benefits - Member Benefit Selection 1. Clone a child card. 1. Open the widget that contains the child card. 2. Select the widget component that contains the child card. 3. Click **View Card**. The child card opens on a new tab. 4. Click **Clone**. 5. Define the widget, and select **Is Child Card**. 6. Click **Clone**. 2. [Embed the cloned child card in the parent card](https://help.salesforce.com/s/articleView?id=xcloud.os_embed_flexcard_inside_another_flexcard.htm&type=5&language=en_US). When you publish your widgets, ensure that you publish your child cards before publishing its parent cards. #### See Also - [_Salesforce Help_: View Active Vouchers Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_voucher_view.htm&release=264.0.0&type=5 "The View Active Vouchers widget template lets members see the vouchers that they can redeem. Members can also view the name, description, expiration date, and code of their redeemable voucher. The widget also enables members to copy the code of the widget. The widget doesn’t show expired vouchers and the vouchers that members have already redeemed. The widget displays vouchers based on their expiration date, with the voucher with the nearest expiration date listed first.") - [_Salesforce Help_: View Member Benefits Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_benefits_view.htm&release=264.0.0&type=5 "The View Member Benefits widget template lets members view the tier benefits and personalized benefits that have been assigned to them. The widget displays benefits alphabetically based on the name of the benefit.") - [_Salesforce Help_: View Member Badges Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_badges_view.htm&release=264.0.0&type=5 "The View Member Badges widget template lets members view the badges currently assigned to them. The widget displays badges based on their start date, with the badge with the nearest start date listed first.") - [_Salesforce Help_: Select Member Benefits Widget Template](https://help.salesforce.com/s/articleView?id=xcloud.widgets_benefits_select.htm&release=264.0.0&type=5 "The Select Member Benefits widget template can be used to let members select benefits from the ones available to them. Loyalty program managers can decide the benefits to be made available on the widget, for selection by the members.") # Clone Member Engagement Widget FlexCards Loyalty Management provides widgets as FlexCard templates. Before you customize a widget, clone the widget’s FlexCard template. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To configure member widgets:
  • Loyalty Management permission set
  • Omnistudio Admin
1. From the App Launcher, select **Omnistudio FlexCards**. 2. Expand the widget FlexCard template that you want to clone. 3. Open the template’s active version. The FlexCard opens in a new tab. If you see a record detail page instead of FlexCard Designer, [update your org's default Lightning record page for the Omni UI Card object and set the org's default Lightning record page to Vlocity Card Designer](https://help.salesforce.com/s/articleView?id=xcloud.os_update_the_flexcard_object_s_default_lightning_record_page_to_access_the_flexcard_designer.htm&type=5&language=en_US). 4. Click **Clone**. 5. Name your widget, and click **Clone**. # Clone Member Engagement Widget Templates Loyalty Management provides 11 member engagement widget templates. Clone a widget template, and then customize the widget to suit your use case and your company’s requirements. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To clone member engagement widget templates: Loyalty Management permission set
1. On the Loyalty Program tab in Loyalty Management, select the program that you want to clone a member engagement widget template for. 2. Click **Setup**. 3. In the Loyalty Program Widgets related list, click **New**. 4. Search for and select the desired widget template. 5. Click **Next**. 6. Enter the name and description of the widget. 7. Save your changes. The cloned widget opens in Loyalty Widget Designer. Customize the widget as per your requirements. # Clone Promotions Loyalty program managers can clone their seasonal or repetitive promotions. Instead of creating a promotion from scratch, loyalty program managers can clone a similar promotion, edit the cloned promotion if necessary, and activate the new promotion. Loyalty program managers can clone promotions that are created either using the standard Promotion page layout or using the Quick Promotion guided flow. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions that have Loyalty Management enabled.
User Permissions Needed
To clone promotions:

Loyalty Management permission set

AND

Manage Loyalty Programs permission set

## Clone the Promotions Created from the Standard Page Layout When you clone a promotion that's created using the standard Promotion page layout, you can choose which promotion-related records to clone. Here are a few options to consider when you clone a promotion:
Option What It Means
Clone the promotion's market segment

The new promotion targets the same set of customers as the cloned promotion.

A new Promotion Market Segment record is automatically created for the new promotion. This record associates the new promotion with the same segment as the cloned promotion.

This option is available only in orgs where Data Cloud is enabled.

Create engagement attributes for the promotion

Members' progress in achieving the targets of the new promotion is tracked using engagement attributes.

You can either create engagement attributes for the new promotion or use the same engagement attributes for the cloned promotion and the new promotion.

If you choose to create engagement attributes, then new Loyalty Program Engagement Attribute records are created in the Draft status to track the member progress for the promotion. After you activate the new promotion, activate the promotion's engagement attributes as well. Also, new Loyalty Program Engagement Attribute Promotion records are created to associate the promotion with the engagement attributes.

If you choose to reuse engagement attributes that belong to the cloned promotion, then new Loyalty Program Engagement Attribute Promotion records are created to associate the new promotion with the engagement attributes.

If you use the same engagement attribute for two promotions, the engagement attributes track members' progress for both promotions. You can reuse engagement attributes when the cloned promotion and the new promotion are run during different periods. If period during which the cloned promotion and the new promotion are active overlap, decide whether to use the same engagement attributes for both promotion or to create separate engagement attributes for the new promotion.

Reuse the source promotion's engagement attributes
Clone the promotion's loyalty program partners

The same set of partners are collaborating with the brand for the new promotion as the cloned promotion.

New Loyalty Program Partner Promotion records are automatically created for the new promotion. Each Loyalty Program Partner Promotion record associates the new promotion with a partner from the cloned promotion.

Clone the promotion's loyalty program partner products

Members can use the new promotion for the same set of partner products as the cloned promotion.

New Promotion Loyalty Partner Product records are automatically created for the new promotion. Each Promotion Loyalty Partner Product record associates the new promotion with a partner product from the cloned promotion.

Clone the promotion's rules

The loyalty process rules that are associated with the cloned promotion are also cloned and associated with the new promotion. The steps in the new promotion's rules are identical to the steps in the rules of the cloned promotion. If the new promotion's eligibility criteria or rewards differ from the cloned promotion, update the steps of the new promotion's rules.

New Loyalty Process Rule records are automatically created for the new promotion. The new rules are also associated with the same process as the cloned rules.

1. From the loyalty program that contains the promotion you want to clone, open the promotion. 2. Click **Deep Clone**. 3. Update the name and duration of the new promotion if necessary. 4. Select the related records that you want to clone from the promotion. 5. Click **Clone**. 6. Activate the promotion. A new promotion is created and the selected records are also cloned and related to the new promotion. To help you easily identify the names of the cloned rules and engagement attributes, the new rules and engagement attribute names contain the name and ID of the promotion that you cloned. You can update the names based on your requirements. The loyalty process rules that are created for the new promotion are automatically activated when the promotion is activated. If you've created engagement attributes for the new promotion and not reused the engagement attributes of the cloned promotion, activate the new engagement attributes. ## Clone Promotions Created from the Quick Promotion Guided Flow When you clone a promotion that's created by using the Quick Promotion guided flow, the new promotion inherits the complete configuration and related records of the promotion that you cloned. 1. From the loyalty program that contains the promotion you want to clone, open the promotion. 2. Click **Deep Clone**. 3. Update the name and duration of the new promotion if necessary. 4. Click **Clone**. A new promotion is created and is inactive. 5. Click ![Dropdown](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/loyalty_management/images/dropdown_icon.png) and select **Edit**. 6. Go through the Quick Promotion guided flow to change the configuration of the promotion if necessary. 7. Save and activate the promotion. # Clone Records Create a record by making a copy of a similar record. When you clone certain records, you can also clone related records. ### Required Editions
 
Clone action available in Lightning Experience, Salesforce Classic, and the Salesforce mobile app in: Contact Manager, Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
Clone with Related action available in Lightning Experience in: Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To clone a record with or without related records:

Create on the object

AND

Read on the record you’re cloning

1. Open a record, and select the **Clone** or **Clone with Related** action. When cloning record pages, the fields that are copied depend on how the page is configured. If the record page uses the Record Detail component, only fields from the record's page layout are cloned. However, the page uses Dynamic Forms, the cloned fields are sourced from the Field Sections on the original page. Clone with Related isn’t available in the Salesforce mobile app. If the record type of the cloned record isn’t available in your profile or permission sets, but other record types are available, choose the type you want. Otherwise, your default record type is applied. 2. If you selected Clone with Related, select the related records that you want to carry over to the new record. Click **Next**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note The related records that you select can’t total more than 999. Related records are cloned in batches of up to 200. For example, if you clone a record with 500 related records, it’s cloned in three batches. Validation rules, Apex triggers, and workflow are applied separately to each batch. If a related record includes a custom field configured to contain a unique value, you must delete the value before cloning the record. 3. Enter or change other information in the new record. If the record you’re cloning or a related record contains a field you don’t have access to, the field in the new record is blank. If the record you’re cloning contains a field you have read-only access to, the field in the new record is blank. However, if a related record contains a field you have read-only access to, the field value is copied into the new record. 4. Save the new record. #### See Also - [Considerations for Cloning Opportunities](https://help.salesforce.com/s/articleView?id=opp_clone.htm&language=en_US) - [Considerations for Cloning Products](https://help.salesforce.com/s/articleView?id=products_clone.htm&language=en_US) - [Field Handling for Cloning Campaigns with Related Records](https://help.salesforce.com/s/articleView?id=campaigns_clone_considerations.htm&language=en_US) # Clone the Template Data Processing Engine Definitions Loyalty Management provides a set of template Data Processing Engine definitions that can be used to automate processes for your loyalty program. Admins can clone these templates and customize them based on your loyalty program’s requirements. After the cloned definition is modified and activated, it’s available in the Flow Builder as an action. Use the action to run the definition at your required frequency. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To clone a Data Processing Engine definition:
  • Modify All Data
  • Customize Application
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note You can’t run template Data Processing Engine definitions. 1. From Setup, in the Quick Find box, enter Data Processing Engine, and then select **Data Processing Engine**. 2. Click the name of a Data Processing Engine that is marked as a Template and the Process Type is Loyalty. For example, the Aggregate Fixed Non-Qualifying Points in Expiration Ledgers 3. Click **Save As**. 4. Enter the details of the definition and select the Process Type as Loyalty. Make sure Use as a template is deselected. 5. Save the changes. 6. Modify the definition based on your loyalty program’s requirement. 7. Click **Activate**. The Data Processing Engine definition is now available in the Flow Builder as an action. The action has the same name as the definition. # Cloning a Card Layout (Managed Package) For the managed package runtime, clone an existing card layout to copy layout, card state, and data source settings to a new card layout. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To clone an existing card layout: 1. Go to the Vlocity Cards tab and click on an existing card layout to reveal the list of card layout versions. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cloning_card_choose_version.png) 2. Select a card layout version, click the dropdown arrow, and click **Clone**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cloning_card_clone_link.png) 3. In the **Layout Name** field, update the name of the card layout. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Vlocity recommends that you create a unique name when cloning a layout. Only one layout with the same layout name can be active at a time. 4. (Optional) Enter values for these properties: - **Layout Type**: To create a card layout, select **Layout**. See [Vlocity Layouts (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_vlocity_layouts.htm&release=264.0.0&type=5 "For the managed package runtime, Vlocity layouts consist of rectangular canvases that act as containers for cards. Cards display information and clickable actions to support efficient navigation through complex CRM interactions."). To extend a card with supplemental information that is either hidden or displayed in larger areas, select **Flyout**. See [Creating a Flyout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_flyout.htm&release=264.0.0&type=5 "For the managed package runtime, create a flyout to display additional information about the record displayed on the card when you click the card. For example, a flyout can display information from long text strings that do not fit in the standard card field, or data from child records, such as open cases for an account, or additional actions."). - **Layout Author**: Enter an author name that describes the team creating the content. To learn more about layout author names, see [Understanding the Author of a Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_understanding_the_author_of_a_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, the Author property in templates, layouts, and cards specify the user organization that created the record."). 5. Click **Clone**. # Cloning a Template (Managed Package) For the managed package runtime, edit a template without overriding existing code and settings by cloning an Omniscript element or Cards Framework component template with the Template Designer. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning with the Summer '19 release, Vlocity supports Salesforce's Lightning Web Components programming model with Vlocity Lightning Web Components. Vlocity Lightning Web Components include components, functionalities, and templates exclusive to LWC Cards. To clone an LWC Card template, see [Creating Custom LWC Card Templates (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_custom_lwc_card_templates.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model."). To create a new template or import a template, see [Creating a Template with the Template Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_template_with_the_template_designer.htm&release=264.0.0&type=5 "For the managed package runtime, customize the layout of a card state or card layout by creating custom templates for Omniscript elements or Cards Framework components with the Vlocity Template Designer."), To clone an existing template: 1. Go to the Vlocity Templates tab, click to expand a template you want to clone. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/selecttemplateversion.png) 2. Choose one of the following to clone a template version: - Click down arrow: In the last column next to the Active column, click the down arrow of the version of the template you want to clone, and then click **Clone**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/clone_teamplate.png) - Open template version: Click to open the template version you want to clone, then click **Clone**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/click_to_clone_template.png) 3. Enter a **Template Name**, **Template Type**, and **Template Author**, then click **Clone**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/clonetemplatedialog.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note A template is unique as a result of the combination of its Name, Author, and Version attributes. See [Cards Framework Versioning](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_framework_versioning.htm&release=264.0.0&type=5 "For the managed package runtime, the Vlocity Cards Framework supports versioning for all components. The name, author, and version combination must be unique for each component of a given type (layout, card, or template) in an org."). 4. After editing your cloned template, click **Save**. # Cloning in the Cards Framework (Managed Package) For the managed package runtime, when you clone a component, you must change the **Name** and/or **Author** fields. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The version of the new component is set to 1. The **Name**, **Author**, and **Version** combination must be unique within the component type for this action to be successful. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cards_cloning.png) # Close a Flexcard Flyout Modal from an Action (Managed Package) For the managed package runtime, enable users to close a Flyout from an actionable element inside the modal. Add a custom event action with the `closemodal` event to your child Flexcard, custom LWC, or Omniscript flyout. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Required Versions

Available beginning Spring '22.

1. Open or create the Flexcard that displays the action that closes the modal. For example, if your flyout is an Omniscript, select the Flexcard that is embedded in the Omniscript. If your flyout is a child or custom LWC Flexcard, select it. 2. Drag an actionable element such as an Action or Block onto the canvas. Click **\+ Add Action** if your element is not an Action element to display action properties. 3. Select Event as the **Action Type** and Custom as the **Event Type**. 4. Enter closemodal in the **Event Name** field. 5. Select both **Composed** and **Bubbles**. 6. For additional configuration options for your custom event action, see [Trigger a Custom Event from an Action on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_trigger_a_custom_event_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, notify a Flexcard of an event occurring from an action on an element. Then execute an action based on the event. Custom Events are used to communicate between a child to its parent, whether it's between a child Flexcard and its parent, or between an element and the Flexcard it's on."). 7. Open or create a Flexcard that displays the flyout. 8. Drag an action (or actionable element such as a Block) onto the canvas and select Flyout as the **Action Type**. 9. From the **Flyout Type** dropdown, select the type of content to display in the modal. 10. Click into **Flyout** and select from the list of active child Flexcards, Custom LWCs or Omniscripts to display in your modal. 11. Select Modal from the **Open Flyout In** dropdown. 12. To configure other flyout action properties, see [Launch a Flyout from an Action on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_launch_a_flyout_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, create a flyout to display additional information when a user clicks an action on a Flexcard. For example, a Flexcard that displays Account information can display the Primary Contact's name and email address in a flyout."). 13. To test closing the modal, open the Flexcard with the flyout action created in Step 7 and click the **Preview** tab. Click on the action that launches the flyout modal, and click the action element inside the modal to close the modal. # Close More Deals With Salesforce Suites, your sales teams have everything they need to communicate with prospects and customers, manage sales details, and close deals. ### Required Editions
Available in: Lightning Experience
Available in: Free, Starter and Pro Suite Editions.
## Connect with Your Customers Bring together email, calendar, and CRM in one experience. Initiate, track, and share your communications with your customers directly from your CRM. The activities and communications you have with your customers are available for reference for you and your sales team so everyone stays up to date. ![Options to communicate with your customers](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/easy_sales_connect.png) Do you and your team prefer to send communications and schedule events in Outlook, Gmail, or Google Calendar? In Starter and Pro Suite, you can do that too. Add the Salesforce app directly to your email or calendar app and you have access to the same customer data and can log your communications automatically. ## Turn Your Conversations into Actionable Data Salesforce Starter and Pro Suite integrate with your video call providers so you can bring your video meetings into your CRM to unlock a deeper level of customer understanding, stop worrying about manual note-taking, and focus entirely on your customer. Einstein Conversation Insights (ECI) identifies next steps from your calls, ensuring no detail—or deal—gets lost. After a call, access call analysis, complete with analysis of customer sentiment and follow-up tasks. Each year, Starter users are allotted 30 hours of analysis, while Pro users are allotted 60. See [Einstein Conversation Insights](https://help.salesforce.com/s/articleView?id=sales.call_coaching.htm&type=5&language=en_US). ECI’s generative AI features, such as call summaries, aren’t currently available in Starter and Pro. Conversation Hub is also not available in Starter and Pro Suite. ## Organize and Prioritize Your Tasks The To Do List is the place to see, sort, and organize your tasks across accounts and contacts. Use colors and labels, such as Urgent or New Business, to help identify what to tackle first. Flag and sort tasks that are most important, or see what’s due today, or find previously overlooked tasks. Apply filters as applicable to see what needs your attention first. Open the To Do List from the utility bar in the lower portion of the page. ![Find the To Do List in the utility bar.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/easy_sales_todo.png) ## Close More Deals Sales opportunities give you one place to keep all the details about each deal. The opportunity shows where a deal is on its journey through the sales process. Having all the information about the deal in one place saves you time tracking down details. Plus, tracking sales data over time provides valuable insight into what works best for your business. Here are the parts of an opportunity that give you all the information about a deal. ![Opportunity record showing sales stages, communication history, assigned contacts, and related files](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/starter_sales_opportunity.png) (1) Review your company’s defined stages from an opportunity’s start to close. You always know where the deal is in the process and the requirements to move an opportunity to the next stage (1). Send emails, log call details, and track tasks related to this opportunity to keep your team informed (2). Identify each contact’s role in a deal so that your team knows who to contact with updates (3). Attach proposals, presentations, and other strategic documents that you gather along the way for reference later (4). ## Generate and Share Invoices For sales reps with Starter or Pro Suite, invoicing is a part of the deal flow. Instead of handing off closed opportunities to billing, generate a professional PDF invoice right from the opportunity or quote record. Once generated, you can email it to the customer immediately. You can also create and manage invoices through the Invoices tab. To work with a specific invoice, select its document number from this list displayed in the Invoices tab. From there, you can generate the invoice PDF (1), email it to your customers (2), or void the whole thing (3). You can also view invoice details (4), track billing and payment activity (5), and access related documents (6). ![Invoice record showing how to create and manage invoices](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/starter_sales_invoicing.png) Each Starter or Pro Suite org can generate up to 1,000 invoices per month. ## Find Out Whether Your Sales Are on Track Salesforce Suites can answer your important sales questions without you manually crunching numbers or flipping through spreadsheets. Determine whether sales are on track for the quarter, where to improve your win rate, and so many other details. Dashboards offer a powerful display of your data around a common theme. Salesforce Suites provide various sales-related dashboards to get you started. You can find all available dashboards from the Analytics tab. ![Sales dashboard showing metrics for how sales is performing](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/starter_sales_dashboard.png) Reports drive the data behind the visuals in the dashboards. To see the data driving each chart in the dashboard, use the links in each dashboard component or access each report from the Analytics tab. Your data can tell you loads about your business. When you’re ready, create your own reports and dashboards to tell you even more. # Close More Deals with Leads Snag a business card or see some new opt-ins for your newsletter? Those are leads, or customers who are interested in your product or service. ## Why Do We Use Them? It’s much easier to make an interested person a purchasing customer with marketing and outreach efforts. Even if they don’t purchase after your first attempt, keeping their contact info in Salesforce means that you can easily try again. ## Why Are They Important? Customers take time to go from discovering your product to purchasing it. While getting to know your business, these potential customers are called leads until they show they are likely to purchase. Separating potential customers from your likely-to-purchase ones in Opportunities and Accounts keeps your reports accurate and makes it easy to spend your marketing budget and time on the right customers. #### See Also - [Manage Leads](https://help.salesforce.com/articleView?id=leads_manage_parent.htm&language=en_US) - [Things to Know About Leads](https://help.salesforce.com/articleView?id=leads_supplemental.htm&language=en_US) - [Leads FAQs](https://help.salesforce.com/articleView?id=faq_leads.htm&language=en_US) # Club Management Managing clubs involves a range of tasks, such as enrolling new members and leveraging business APIs for streamlined operations. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Advanced
From the App Launcher, find and select **Clubs Management**. The navigation bar contains the Home page and the Club Setup page. The Home page lists the clubs in your org. You can open a club to view the details such as benefits and promotions, and manage the members. You can create promotions specific to your club and manage vouchers to reward the club members. For more information about creating promotions, see [Quick Promotion Wizard Steps](https://help.salesforce.com/s/articleView?id=mktg.global_promotions_management_design_promotion_wizard.htm&language=en_US). For more information about defining vouchers, see [Add Your Company’s Voucher Definitions](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_vouchers_definition.htm&release=264.0.0&type=5 "Voucher definitions are templates that are used to issue vouchers. You set up a voucher definition one time and then use the voucher definition to issue vouchers on demand or by configuring flows and loyalty program rules. Based on your requirements, createas many voucher definitions as needed and use each of them for different purposes."). - **[Add a Club Member](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_clubs_add_member.htm&release=264.0.0&type=5)** After you set up a club and activate it, you can add club members. - **[Business APIs to Manage Clubs](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_clubs_business_apis.htm&release=264.0.0&type=5)** You can use business APIs to manage your clubs effectively. # Club Setup Learn about the necessary prerequisites for clubs and the audience of clubs. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Advanced
## Prerequisites for Creating Clubs Before you set up a club, work with your admin to complete the prerequisites. - Permissions: Assign users the Loyalty Management and the Manage Loyalty Programs permission sets to give them access to the Clubs Management app and permissions to create clubs. - Clubs related list: Turn on the Interest-Based Clubs setting to view the Clubs related list under a loyalty program. You can update the related list on the page layout from the Lightning App Builder. For more details on customizing page layouts, see [Customize Page Layouts with the Enhanced Page Layout Editor](https://help.salesforce.com/s/articleView?id=platform.layouts_customize_ple.htm&language=en_US) You can add flexibility and control by using a dynamic related list. When you configure a dynamic related list, configure these options. - Parent Record: Loyalty Program - Related List: Loyalty Tier Groups - Related List Label: Clubs - Related List Fields: Add fields such as Name, Description, Start Date, End Date, and Active. For more details dynamic related lists, see [Create Dynamic Related Lists in Lightning App Builder](https://help.salesforce.com/s/articleView?id=platform.lightning_app_builder_create_dynamic_related_list.htm&language=en_US) - Duration: Set up the values for the timeframe within which a customer must pay the club membership fees. Duration is a dynamic enum field and you can configure the picklist values such as monthly, quarterly, and yearly. For more details about adding picklist values using Object Manager, see [Add or Edit Picklist Values](https://help.salesforce.com/s/articleView?id=platform.updating_picklists.htm&language=en_US). Use the Membership Duration Type picklist field under the Loyalty Tier Membership Fee Option Object. - Payment model: Set up the values for the type of payment that a customer can use for club membership. Payment Model is a dynamic enum field and you can configure the picklist values such as cash, loyalty currency, or cash and loyalty currency. For more details about adding picklist values using Object Manager, see [Add or Edit Picklist Values](https://help.salesforce.com/s/articleView?id=platform.updating_picklists.htm&language=en_US). Use the Fee Type picklist field under the Loyalty Tier Membership Fee Option Object. ## Club Audience - Customers who are a part of specific Data Cloud segments, campaigns, and actionable lists - Members of specific tiers within a loyalty program # Clubs Data Model Clubs are interest-based membership initiatives designed to provide exclusive benefits and privileges to customers. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Advanced
Clubs are modeled as loyalty tier groups. For each club, there is an associated loyalty tier that has the same name as the loyalty tier group. This loyalty tier is then associated with various objects that store eligibility criteria, benefits, and promotions. Clubs are either independent or associated with existing loyalty programs. For independent clubs, a dummy loyalty program is set up. ![Club data model showing various related objects](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/loyalty_management/images/loyalty_clubs_datamodel.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note To access the objects that are part of the Clubs data model, user must be assigned the Manage Loyalty Programs permission set. These objects are associated with the clubs data model. - [Loyalty Program](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyaltyprogram.htm): Stores the loyalty program that the club is a part of. - ̌[Loyalty Tier Group](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyaltytiergroup.htm): Groups all your company's clubs together. - [Loyalty Tier](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyaltytier.htm): Stores detailed information about each club, including its name, description, and specific attributes. - [Loyalty Tier Eligibility Source](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyalty_loyaltytiereligibilitysrc.htm): Determines the eligibility criteria for club membership. The criteria can be based on: - Loyalty Tiers: Loyalty program members from specific tiers. - Segments: Customers who are part of specific Data Cloud segments. - Campaigns: Customers who are part of specific campaigns. - Actionable Lists: Customers who are part of specific actionable lists. - [Loyalty Tier Membership Fee Option](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyaltytiermshpfeeoption.htm): Stores information about the subscription fees for each club, including the amount and payment models, such as: - Cash - Loyalty Currency - Cash and Loyalty Currency - [Loyalty Tier Benefit](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyaltytierbenefit.htm): Associates club to a benefit that the club offers. - [Loyalty Tier Promotion](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyaltytierpromotion.htm): Associates exclusive promotions with the club, which you can offer to members. - [Loyalty Program Member](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyaltyprogrammember.htm): Stores information about a club member. - [Loyalty Member Tier:](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyaltymembertier.htm) Tracks the membership tenure of each member, including the start and end dates of their club membership. - [Loyalty Program Member Promotion](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyaltyprogrammbrpromotion.htm): Associates a club member with the promotion they're eligible for. - [Loyalty Membership Lifecycle](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/sforce_api_objects_loyaltymembershiplifecycle.htm): Manages the stages of a member's subscription, from initial enrollment to ongoing engagement, and any changes in status. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note These objects and fields are shared between loyalty programs and clubs of your organization. # Cluster Transformation: Segment Your Data In Salesforce Data Pipelines, use the Cluster transformation in a Data Prep recipe to segment rows of data into distinct clusters based on common characteristics. For example, you can cluster accounts based on number of employees, numerical rating, and annual revenue. Using the clusters, you can identify products and services to upsell to each account based on other accounts in the same cluster, apply different service handling or marketing campaigns based on cluster, or define different metrics and KPIs for analysis. ### Required Editions ## Cluster Transformation: Segment Your Data
User Permissions Needed
To create a recipe: Edit CRM Analytics Dataflows OR Edit Dataset Recipes
1. In a Transform node of a Data Prep recipe, select any column in the Preview tab. 2. To add a Cluster transformation to the Transform node, click the Cluster button (![Cluster button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_transformation_cluster_button.png)). ![The Cluster panel shows the configuration options.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_transformation_cluster_config.png) 3. In Number of Clusters, enter the number of clusters to create, from 2–20, inclusive. 4. Select **Use optimal number of clusters** and we evaluate all options 25% above and below your base Number of Clusters to find the best data organization where data groupings are most like each other. For example, if you enter 20, we evaluate scenarios from 15—25 and show data for the optimum number of clusters in that range. If you select to detect the optimal number of clusters without a starting point, we evaluate each clustering scenario from 2–50. This evaluation takes more time than if you enter a starting number of clusters, but it can reveal a data relationship you weren’t aware of. 5. In Columns Used to Determine Clusters, select the text (dimension) columns to determine the clusters. The clustering algorithm determines clusters by comparing the values for all selected columns. For example, if the number of employees and annual revenues don’t fall into the same ranges determined by the algorithm, accounts with the same industry and rating can be placed in different clusters. 6. Select an option under **Scale Number** to rescale the data. For example, comparing between differently scaled data easier by rescaling each column’s data values from 0 through 1 with the Min-Max scaling option. 7. If needed, change the label of the cluster column, which stores the cluster for each row. 8. To add the transformation to the Transform node, click **Apply**. Preview shows sample cluster values you can use when building other recipe transformations. These values are just samples—they can change after the recipe runs. 9. To view the Graph area, click the Collapse button (![Collapse button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_button_collapse.png)). 10. Save the recipe. 11. Run the recipe to assign and view a cluster for each row. To process billions of rows, the Cluster transformation uses the K-Means clustering algorithm. The clusters are detected dynamically during the recipe job’s runtime, but aren’t persisted. The clusters can change between recipe runs even if the data and the clustering configuration doesn’t change. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_example.png) Example For months, you’ve noticed that some accounts have lots of deals with lower average opportunity amounts and other accounts that have larger deals, but fewer of them. To find ways to drive larger deal sizes and more deals, you decide to cluster your accounts. You use the Cluster transformation to create three clusters based on the account industry, number of employees, rating, and annual revenue. ![The Account Cluster column shows the cluster for each acccount.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_transformation_cluster_results.png) While analyzing the clusters in a dashboard, you notice that Cluster 3 has the highest average annual revenue (about $40 billion), but only three accounts are in that cluster. ![The dashboard shows dot and key information about each cluster.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_transformation_cluster_dashboard.png) Why doesn’t Cluster 3 have more deals? Is it due to repeat business? Let’s find out. Use the Aggregate node to group total spend by account and pivot the results by opportunity type: Add-On Business, New Business, Renewal, and Services. ![The Aggregate node pivots Opportunity Type to show account spend for each type.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_transformation_cluster_pivotOnOppType.png) Looking at spend by opportunity type for Cluster 2, we see lots of repeat business. Great! ![The dashboard shows that Cluster 2 has lots of repeat business.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_transformation_cluster_Cluster1SpendByOppType.png) But Cluster 3 has new business only. These accounts buy one time and don’t return for additional business—hence the lower number of deals. ![The dashboard shows that Cluster 3 hardly has any repeat business.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_transformation_cluster_Cluster3SpendByOppType.png) We found gold! To increase the number of deals from Cluster 3 accounts, we can push renewals, services, and add-on business. # CMS Channels CMS channels deliver published content from your CMS workspaces to an audience. Create a CMS channel, and then associate that channel with a CMS workspace. Channels can correspond to publishing endpoints such as a website or email message. Or create custom endpoint integration with third-party sites by using Salesforce headless APIs. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
In the Digital Experiences app, you create channels and add those channels to CMS workspaces. Salesforce supports unlimited Experience Cloud site channels and up to 300 other channels. To view all CMS Channels on the CMS Channels tab, click the down arrow on the tab menu ![down arrow image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_down_arrow.png) (1), and select **CMS Channels** (2). ![The Digital Experience Home tab is highlighted. First select the down arrow to show the menu, then select CMS Channels.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_channels_tab.png) ## Decide on a Connection Type All CMS channels have a connection type. The connection type determines which audience can access the CMS content delivered in the channel. When you create a CMS channel in the Digital Experiences app, choose from public, restricted, or the B2C Commerce Page Designer connection types. When you create a CMS channel outside of the app, the connection types can be Experience Cloud sites, Account Engagement emails (which are public connections), or external channels. To publish content intended for a public audience or to connect content to custom apps, create a public connection type. Public connections are ideal for marketing emails, websites, and custom apps. Only public channels can have an assigned domain. Serve public channel content with high-performance delivery when you use a content delivery network (CDN), which you can configure in Salesforce Setup. You can assign a CDN to a public channel from within the Digital Experiences app. An easy way to get started is to use Salesforce’s CDN for Digital Experiences and a default domain hosted by our CDN partner (requires a [custom domain](https://help.salesforce.com/s/articleView?id=domain_mgmt.htm&language=en_US)). Or use a CDN of your choice to deliver Salesforce CMS content to your Experience Cloud site. Then, edit the channel to configure the domain. To publish content intended for specific users such as an employee intranet, partner portal, Lightning app, or connected Salesforce app, create a restricted channel. Define a permission set and apply it to the restricted channel for the users that you want to access the content through APIs. You can’t serve restricted channel content from a CDN. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/images/icon_note.png) Note As of Spring ’25, all public and restricted channels are enhanced channels by default. When you create an enhanced channel, you can use non-enhanced [CMS Managed Content Resources](https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_resources_managed_content_resources.htm) to get content from enhanced CMS workspaces and to enable search. Enable the setting Use non-enhanced APIs. Keep in mind that these Managed Content resources (non-enhanced APIs) can’t retrieve all available content types from enhanced CMS workspaces, including: - Content types installed from packages - Complex custom content types that use enhanced CMS features, such as repeatable or block elements - Block-based content types in Marketing workspaces, such as emails or landing pages If you’re already using [Enhanced CMS Workspaces Resources](https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_resources_managed_content_enhanced_resources.htm), it’s not necessary or recommended to enable the non-enhanced APIs setting. If you enable this setting for enhanced channels that use enhanced APIs, there’s a small performance impact. If you have a public or restricted channel that was non-enhanced before Spring ’25, that channel already has the Use non-enhanced APIs setting enabled. ## Create a Public Channel for Orgs Hosted on Hyperforce To deliver content with high performance and low latency, orgs hosted on Hyperforce can use the Dedicated Content Delivery setting. This setting is on by default for all new public channels in an enhanced CMS workspace. To enable Dedicated Content Delivery for existing public channels on Hyperforce, edit the channel settings. When you enable this setting, newly published content is served through Hyperforce. Existing published content is served through Hyperforce when it’s next published. ## Create a Commerce Cloud Channel To develop rich, content-driven shopping experiences for your customers by using your Salesforce CMS content and the B2C commerce page designer, create a Commerce Cloud channel. To establish a trust relationship between Salesforce CMS and your B2C Commerce instance, contact Salesforce Customer Support or your success manager. To use your CMS content in the B2C Commerce Page Designer, your Business Manager admin must configure the connected Commerce Cloud instance in the Business Manager. ## Create an Experience Cloud Site Channel You can create a site connection by adding the site channel to your CMS workspace. First [create an Experience Cloud site](https://help.salesforce.com/s/articleView?id=networks_creating.htm&language=en_US), then add the Experience Cloud site channel to a CMS workspace. When you publish content from a CMS workspace to an Aura or LWR Experience Cloud site channel, the content is automatically available to use in Experience Builder. To curate, organize, and publish content from a CMS workspace to Aura and LWR sites use the Digital Experiences app. When you create an Experience Builder site, make sure that it’s based on the most up-to-date Lightning template. You can use Salesforce CMS content in sites created with all Experience Builder templates. To publish content to enhanced LWR sites with the Microsite or Build Your Own (LWR) templates, use an enhanced CMS workspace. Control user access to published content with the site settings. Publish content to Aura site channels from CMS workspaces. To publish to Aura sites from an enhanced CMS workspace, make sure that non-enhanced APIs are enabled. This setting is enabled by default for Aura site channels as of Spring ’25. To share and organize Salesforce CMS content with the B2B Commerce managed package or in other Salesforce Tabs + Visualforce sites, use the API. See the [Connect REST API Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_resources_managed_content_delivery.htm) and [Apex Reference Guide](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_ConnectAPI_ManagedContent_static_methods.htm#apex_ConnectAPI_ManagedContent_static_methods). ## Create an Account Engagement Email Channel To share Salesforce CMS content with your Account Engagement email design materials, create a public connection type and use Salesforce’s CDN for Digital Experiences as the domain for that CMS channel. See the [Configure Salesforce CMS for Account Engagement Email](https://help.salesforce.com/articleView?id=pardot_eilex_setup_cms.htm&language=en_US) help. ## Create an External Channel Deliver your Salesforce CMS content across all the places your customers consume it. Use our headless APIs to connect to external third-party sites. See the [Connect REST API Developer Guide](https://developer.salesforce.com/docs/atlas.en-us.chatterapi.meta/chatterapi/connect_resources_managed_content_delivery.htm) and the [Apex Reference Guide](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_ConnectAPI_ManagedContent_static_methods.htm#apex_ConnectAPI_ManagedContent_static_methods). - **[Create and Manage CMS Channels](https://help.salesforce.com/s/articleView?id=xcloud.cms_channel_create.htm&release=264.0.0&type=5)** To deliver content from Salesforce CMS workspaces to your audience, create a CMS channel in the Digital Experience app. Select a channel type, and configure the channel’s settings, depending on your use case. Edit channel settings at any time, and when you no longer need the channel, you can delete it from your org. - **[Configure the Salesforce CDN for Salesforce CMS](https://help.salesforce.com/s/articleView?id=xcloud.cms_channel_enable_cdn.htm&release=264.0.0&type=5)** Use the Salesforce content delivery network (CDN) to serve Salesforce CMS content on your sites, send enhanced emails, and serve custom applications. Set a cache duration for CMS content served in Salesforce CDN channels and configure a domain that links content from your public channel to the CDN. - **[Preview Salesforce CMS Content on Your Site](https://help.salesforce.com/s/articleView?id=xcloud.cms_preview_content.htm&release=264.0.0&type=5)** See how your CMS content looks on your Aura, LWR, or enhanced LWR site on a desktop or mobile device. You can preview image, document, news, or custom content types in any status on site channels connected to the CMS workspace. - **[Collections in Enhanced CMS Workspaces](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_collections.htm&release=264.0.0&type=5)** A collection is a set of CMS content items. Collections keep content items grouped and ready to use in your channels. You can create collections right from your enhanced CMS workspace. - **[Enable Search for Content in CMS Channels](https://help.salesforce.com/s/articleView?id=xcloud.community_managed_content_search_content.htm&release=264.0.0&type=5)** Make finding CMS content easier for your users. Configure search within all your channels, including Experience Cloud sites, Commerce Cloud, Marketing Cloud Engagement, Heroku, LEX apps, and more. #### See Also - [Serve Your Experience Cloud Site with the Salesforce Content Delivery Network (CDN)](https://help.salesforce.com/s/articleView?id=platform.domain_mgmt_salesforce_cdn.htm&type=5&language=en_US) - [The Build Your Own Template (LWR)](https://help.salesforce.com/s/articleView?id=experience.rss_build_your_own_lwr.htm&type=5&language=en_US) - [_LWR Sites for Experience Cloud:_ Create an LWR Site](https://developer.salesforce.com/docs/atlas.en-us.exp_cloud_lwr.meta/exp_cloud_lwr/get_started_create.htm) # CMS Content Create, organize, schedule, publish, and delete digital content in CMS workspaces. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
CMS content items are unique to each CMS workspace. You can create original content directly in a CMS workspace by using the CMS content editor, or import content to a workspace from another source. When you publish content, it’s shared with all channels associated with that CMS workspace. You can see how your content looks on your site and set up publication schedules to plan the delivery to your CMS channels. Save time and space when you share content between enhanced CMS workspaces. To reuse content between workspaces without duplicating records, work with content shared from a source workspace to a target workspace in the Shared with Workspaces folder. After workspaces are shared, you can make copies of a shared content record and save it to a folder in a target enhanced CMS workspace. Managed content and variants of managed content items are considered one content record. For example, a managed content item with three translations is one record. CMS content refers to content created and added to your CMS workspaces. You can add other kinds of content to an Experience Cloud site such as Salesforce CRM data. To work with content such as Salesforce files and libraries, Salesforce knowledge, or an external CMS, see [Find Your Way Around Experience Workspaces](https://help.salesforce.com/s/articleView?id=experience.networks_workspaces.htm&type=5&language=en_US). Deliver personalized content to your audience with dynamic collections. In enhanced CMS workspaces, tag content with content taxonomy terms, and then create dynamic collections based on the tags. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/images/icon_note.png) Note Take time to consider your needs and [plan your site’s content management strategy](https://help.salesforce.com/s/articleView?id=experience.exp_cloud_plan_content_strategy.htm&type=5&language=en_US). - **[Types of CMS Content](https://help.salesforce.com/s/articleView?id=xcloud.cms_customcontenttypes.htm&release=264.0.0&type=5)** Every CMS workspace comes with standard content types. You can also create custom content types for your specific needs, like blog posts or product announcements. To create custom content types, use the Managed Content API or CMS Content Type Manager in AppExchange. - **[Create and Manage CMS Content](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_create_manage.htm&release=264.0.0&type=5)** Create and edit content in your CMS and enhanced CMS workspaces without changing what's live in your CMS channels. In enhanced CMS workspaces, clone existing content records of any type, including the content's variants. - **[Use Content from External Providers in Enhanced CMS Workspaces](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_external.htm&release=264.0.0&type=5)** Connect your external content provider or digital asset management (DAM) system to Salesforce CMS to streamline content creation in enhanced CMS workspaces. - **[Deploy and Set Up the CMS Base Data Kit](https://help.salesforce.com/s/articleView?id=xcloud.cms_base_data_kit_setup.htm&release=264.0.0&type=5)** Deploy and configure the CMS Base data kit to support semantic and AI-powered search. Deploy the data kit in a specific data space, and then configure settings such as transform frequency and search indexes. Data 360 ingests content metadata from Salesforce CMS to power these AI-driven search experiences. - **[Apply Taxonomy Tags to Content](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_tag.htm&release=264.0.0&type=5)** When a content taxonomist creates a content taxonomy for your org, you search for tags and add them to the content record. Tag your enhanced CMS content with taxonomy tags, and then define conditions that automatically add content items to a dynamic collection. - **[Work with Image Content in Salesforce CMS](https://help.salesforce.com/s/articleView?id=xcloud.cms_images_overview.htm&release=264.0.0&type=5)** Updating your Salesforce CMS content with images is easy, and there’s lots of flexibility when you work with image references in other content. - **[Publish Content to CMS Channels](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_publish.htm&release=264.0.0&type=5)** In CMS workspaces, publishing a content item makes it immediately available for use in all channels added to the workspace including site channels. If you publish a new version of content that's live, the existing live content is replaced with the new version. You can publish content immediately or schedule a later publication date. - **[Unpublish Content from CMS Channels](https://help.salesforce.com/s/articleView?id=xcloud.community_managed_content_unpublishing_content.htm&release=264.0.0&type=5)** Remove content from published destinations and make it unavailable for use in CMS channels with manual unpublishing. - **[Delete Content from a CMS Workspace](https://help.salesforce.com/s/articleView?id=xcloud.community_managed_content_delete_content.htm&release=264.0.0&type=5)** As your business grows and changes, so does your content. To keep your CMS workspace tidy, delete content. Deleting a content item removes all versions and variants of the item from your workspace. The procedure to delete content from an enhanced CMS workspace differs from the procedure to delete content from a CMS workspace. - **[Work with Extensions in Salesforce CMS](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_editor_sidebar_extensions.htm&release=264.0.0&type=5)** Use extensions to add productivity tools to the content editor in an enhanced CMS workspace. Streamline your content workflow with generative AI tools, spell checkers, and translation services. Developers can build extensions for specific CMS content types. - **[Add Videos to Content from the Rich Text Editor](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_rte_video.htm&release=264.0.0&type=5)** Embed video in rich text fields to enliven your content with product reviews, promotional videos, instructional walk-throughs, and more. - **[Create Content Publication Schedules in Salesforce CMS](https://help.salesforce.com/s/articleView?id=xcloud.cms_schedule_create.htm&release=264.0.0&type=5)** Publish and unpublish Salesforce CMS content at designated dates and times. - **[Export and Import Content with Salesforce CMS](https://help.salesforce.com/s/articleView?id=xcloud.cms_import_export_overview.htm&release=264.0.0&type=5)** Get an overview of how to add content to a CMS or enhanced CMS workspace, or transfer content from one org to another. Learn more about how to format and handle content in some common use-case scenarios. - **[Translate Salesforce CMS Content](https://help.salesforce.com/s/articleView?id=xcloud.cms_translations_overview.htm&release=264.0.0&type=5)** To meet the global demands of your business, offer your content in multiple languages. First, set up your CMS workspace with the languages you require. Then manage the content through the translation lifecycle, from draft to publish. - **[Salesforce CMS Content Key](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_key.htm&release=264.0.0&type=5)** The Salesforce CMS content key is a unique identifier that sticks with your content through version updates and across Salesforce orgs, sites, and components. You can use the content key to copy content between orgs, such as from sandbox to production, using the Salesforce CMS export and import feature. - **[View CMS Content Details in Enhanced CMS Workspaces](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_details.htm&release=264.0.0&type=5)** The content detail page in enhanced CMS workspaces gives a summary of a content item. If the content item has variants, you can switch between them from the left navigation menu. In the center column, see a quick view of the content. View content details, version history, and see where the content is published or referenced. Edit, publish, or unpublish, and run content workflows for your content. - **[View Content Version History in Salesforce CMS](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_versionhistory.htm&release=264.0.0&type=5)** On the content detail page, the Version History list shows all versions of a content item, its status, and the date and time it was last modified. #### See Also - [Add Salesforce CMS Content to Your Experience Builder Site](https://help.salesforce.com/s/articleView?id=experience.networks_cms_content.htm&type=5&language=en_US) - [Role-Based Access in Salesforce CMS](https://help.salesforce.com/s/articleView?id=xcloud.cms_access_control_overview.htm&release=264.0.0&type=5 "Use role-based access to control who does what in each CMS workspace. Contributors are users or public groups in your org that you add to your CMS workspace. Contributors can belong to more than one workspace and have specific roles in each workspace, according to the level of access they need.") - [_CMS Developer Guide:_ Connect Your External CMS to Your Experience Builder Site](https://developer.salesforce.com/docs/atlas.en-us.cms-dev.meta/cms_dev/communities_dev_cms_connect_intro.htm) - [Select a Security Level in Experience Builder Sites](https://help.salesforce.com/s/articleView?id=experience.networks_security_csp_scriptlevel.htm&type=5&language=en_US) - [View Content Version History in Salesforce CMS](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_versionhistory.htm&release=264.0.0&type=5 "On the content detail page, the Version History list shows all versions of a content item, its status, and the date and time it was last modified.") - [CSP and Lightning Locker in Experience Builder Sites](https://help.salesforce.com/s/articleView?id=experience.networks_security_csp_overview.htm&type=5&language=en_US) - [Manage Trusted URLs](https://help.salesforce.com/s/articleView?id=xcloud.security_trusted_urls_manage.htm&type=5&language=en_US) - [Create Content Publication Schedules in Salesforce CMS](https://help.salesforce.com/s/articleView?id=xcloud.cms_schedule_create.htm&release=264.0.0&type=5 "Publish and unpublish Salesforce CMS content at designated dates and times.") # CMS Workflows and Approvals Your CMS workspace grows and changes with time, which makes role-based workflows useful and sometimes necessary. Workflows allow content creators to request an approval, translation, or anything else you can dream up, directly from a content item and send that request directly to the relevant user. The workflow captures a full audit trail of each assigned or completed step. With workflows, you always know where you are in the process and who’s responsible for the next step. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
Workflows are built on Flow Orchestrations and appear in your enhanced CMS workspaces. Content authors are often responsible for creating and editing content items, but frequently require managerial review and approval before the content can be published. Workflows appear as a component on your CMS content items and allow content authors to automate workflows. If users want to create unique workflows or edit existing ones, the flows are managed and created in Flow Builder. - **[Enable CMS Workflows](https://help.salesforce.com/s/articleView?id=xcloud.cms_workflows_enable.htm&release=264.0.0&type=5)** With workflows you can attach your approvals and other business processes directly to CMS content items. Access workflows from your content items and variants, and create a full audit trail that you can refer to later. Workflows and Approvals are automatically turned on in all CMS enhanced workspaces. - **[Building Blocks of a CMS Workflow](https://help.salesforce.com/s/articleView?id=xcloud.cms_workflows_building_blocks.htm&release=264.0.0&type=5)** CMS workflows are built on Flow Orchestrations that use common flow and orchestration elements in addition to process and step types that are unique to CMS. - **[Use Workflows in CMS](https://help.salesforce.com/s/articleView?id=xcloud.cms_workflows_access.htm&release=264.0.0&type=5)** Workflows are built on Flow Orchestration and with them you can create processes that are attached to CMS content items. From a content item, launch a ready to use flow such as an approval, a translation, or another process that you can create from scratch. Modify workflows in Flow Builder and create multiple, selectable workflows for various use cases. - **[Anatomy of the Basic Approval Request Workflow](https://help.salesforce.com/s/articleView?id=xcloud.cms_workflows_basic_approval.htm&release=264.0.0&type=5)** Workflows and approvals are built using Flow Orchestration technology. Salesforce Flow Orchestration was created so you can quickly create sophisticated, multi-user, multi-step automated business processes without code. Enhanced CMS workspaces include a pre-existing approval workflow that you can use to get started. # CMS Workspaces In the Digital Experiences app, you use CMS workspaces and enhanced CMS workspaces to create content, organize content in folders, and schedule content publication. Limit access to the content with CMS workspace contributors and roles. Manage the content translation lifecycle, and add languages to reach more people with your content. Deliver your content to global audiences when you connect your CMS workspaces to both Salesforce and external channels. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
Enhanced CMS workspaces are part of the enhanced sites and content platform, which is a flexible system that connects Salesforce CMS and LWR sites. In the Digital Experiences App, the ![Enhanced badge](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/community_enhanced_icon.png) badge appears beside workspaces and sites that are hosted on the new platform. Connect your enhanced CMS workspaces to Aura sites and enhanced LWR sites such as the Microsite or Build Your Own (LWR) templates. Use enhanced CMS workspaces and enhanced LWR sites to better manage the content translation lifecycle and create manual collections for LWR sites. Lastly, simplify content management tasks and save time when you share content between enhanced CMS workspaces. To reuse content between workspaces without duplicating records, work with content shared from a source workspace to a target workspace in the Shared with Workspaces folder. After workspaces are shared, you can make copies of a shared content record and save it to a folder in a target enhanced CMS workspace. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/images/icon_note.png) Note As of Winter ’25, any new workspace that you create is enhanced by default. If your business needs require a non-enhanced CMS workspace, enable the **Create both CMS workspaces and enhanced CMS workspaces** setting. To publish content to non-enhanced LWR sites use a CMS Workspace. - **[Create and Manage a CMS Workspace](https://help.salesforce.com/s/articleView?id=xcloud.cms_cmsworkspace-create.htm&release=264.0.0&type=5)** Get started in the Digital Experiences app with a CMS workspace or an enhanced CMS workspace. Use the guided setup process to name your CMS workspace, add channels, and set the default language. After creating a workspace, you can change its name and description details to clarify its use and make it easier to find. When you no longer need an enhanced workspace, you can delete it. - **[Add or Remove a Channel from a CMS Workspace](https://help.salesforce.com/s/articleView?id=xcloud.cms_channel_add.htm&release=264.0.0&type=5)** CMS channels deliver content from a CMS workspace to an audience. Content published in a CMS workspace is available to all the channels added to the workspace. To control where your content is available, you can add and remove channels. - **[Share Content Across Enhanced CMS Workspaces](https://help.salesforce.com/s/articleView?id=xcloud.cms_cmsworkspace-edit.htm&release=264.0.0&type=5)** Save time and space when you share content across enhanced CMS workspaces, and reuse content between workspaces without duplicating records. Work with content shared from a source workspace to a target workspace in the Shared with Workspaces folder. After workspaces are shared, you can make copies of a shared content record and save it to a folder in a target enhanced CMS workspace. - **[Organize CMS Workspaces and Content With Folders](https://help.salesforce.com/s/articleView?id=xcloud.cms_folders_overview.htm&release=264.0.0&type=5)** Keep your Salesforce CMS workspace tidy and your content organized with folders. Create folders with up to five levels of hierarchy, and edit, move, rename, and delete folders to easily navigate the content in your workspace. Folders are unique to each CMS workspace, and they’re shared with every user in that workspace. - **[Search CMS Content in Enhanced Workspaces](https://help.salesforce.com/s/articleView?id=xcloud.cms_workspace_search.htm&release=264.0.0&type=5)** Find CMS content items within your enhanced CMS workspaces and folders. Use advanced search functions, such as wildcards and logical operators, to maximize your search results. Search results consist of matches for all text fields within CMS content items, including content title, body, and metadata. Both primary content and content variants are searched. #### See Also - [Role-Based Access in Salesforce CMS](https://help.salesforce.com/s/articleView?id=xcloud.cms_access_control_overview.htm&release=264.0.0&type=5 "Use role-based access to control who does what in each CMS workspace. Contributors are users or public groups in your org that you add to your CMS workspace. Contributors can belong to more than one workspace and have specific roles in each workspace, according to the level of access they need.") - [CMS Content](https://help.salesforce.com/s/articleView?id=xcloud.community_managed_content_content_creation.htm&release=264.0.0&type=5 "Create, organize, schedule, publish, and delete digital content in CMS workspaces.") - [The Build Your Own Template (LWR)](https://help.salesforce.com/s/articleView?id=experience.rss_build_your_own_lwr.htm&type=5&language=en_US) - [_LWR Sites for Experience Cloud:_ Create an LWR Site](https://developer.salesforce.com/docs/atlas.en-us.exp_cloud_lwr.meta/exp_cloud_lwr/get_started_create.htm) # Co-Branded Emails for Partners Co-Branded Emails for Partners extends Distributed Marketing capabilities to channel partners so they can conduct their own email outreach while ensuring brand consistency and compliance. Partners can use pre-approved email templates to engage with leads and contacts, personalizing key sections while maintaining brand standards and messaging guidelines. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions in Agentforce for Sales with Partner Ecosystem Management - Members, Partner Ecosystem Management - Login.
- **[Configuring and Executing Co-Branded Email Campaigns](https://help.salesforce.com/s/articleView?id=xcloud.pem_configure_execute_email_campaigns.htm&release=264.0.0&type=5)** The co-branded email experience consists of two main workflows: vendor setup and partner execution. Vendors create and configure marketing campaigns with pre-built email content, then publish these campaigns to the partner Campaign Marketplace. After campaigns are published, partners can browse the marketplace and enroll in campaigns that align with their business goals. After enrollment, partners can send personalized, brand-compliant emails to their leads and contacts directly from the partner portal. - **[Set Up Co-Branded Emails for Partners](https://help.salesforce.com/s/articleView?id=xcloud.pem_co_branded_emails_setup.htm&release=264.0.0&type=5)** Before partners can browse campaigns and send co-branded emails, admins must complete the setup. # Collaborating With Partners Using Partner Cloud for Slack Enhance productivity with real-time collaboration, automate business processes with key AI-infused insights, and grow your channel with actionable analytics in operational dashboards, all without leaving Slack. ### Required Editions ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-partner_cloud-264-0-0-production-enus/cd9c08c3-2648-4867-ab9d-a0251a8a86a5/images/icon_note.png) Note For documentation on the PRM for Slack app, see [PRM for Slack Features](https://help.salesforce.com/s/articleView?id=slack.slack_apps_prm_for_slack_features.htm&type=5&language=en_US).
Available in: Lightning Experience with Salesforce for Slack Integrations Enabled
Available in: Enterprise and Unlimited Editions with Salesforce for Slack Integrations Enabled
Available in: Slack Enterprise Grid
# Collapse and Expand Document Sections See only the content you need by showing or hiding document sections. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
To show or hide document sections, you have two options: - Collapse or expand an individual document section. Hover to the left of a section heading, and click the arrow. - Collapse or expand all document sections at once. From the View menu, select **Collapse / Expand**, and then choose to collapse or expand all sections. - **[Considerations for Collapsed Sections](https://help.salesforce.com/s/articleView?id=xcloud.quip_collapsed_section_considerations.htm&release=264.0.0&type=5)** When collapsing sections in your Quip document, keep these considerations in mind. # Collating by Alphabetic Ranges (Example) (Managed Package) For the managed package runtime, suppose you want to assign Contacts into one of three buckets by last name such that: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - I = Contacts whose last names begin with A-I - J = Contacts whose last names begin with J-R - S = Contacts whose last names begin with S-Z Set up the matrix as follows: ![The input column, a range, is Last Name Starts With, and its values are I, J, and S. The output column is Group, with values A-I, J-R, and S-Z.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/activepricingmatrixex.png) # Collect Debug Logs for Guest Users Your public users generate a large volume of events, which can quickly fill up your debug logs. When collecting debug logs for guest users, keep in mind that all your public site visitors share one guest user license. One Salesforce user represents all your site's public users. ### Required Editions
User Permissions Needed
To view, retain, and delete debug logs: View All Data
To collect a debug log for a guest user, you set a user-based trace flag on the guest user. 1. To find the name of a guest user, from [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Sites**. 2. Select your site from the Site Label column. 3. Select **Public Access Settings** | **View Users**. Now that you have the name of your guest user, you can set the trace flag. 4. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Debug Logs**. 5. Click **New**. 6. Set the traced entity type to **User**. 7. Open the lookup for the Traced Entity Name field, and then find and select your guest user. 8. Assign a debug level to your trace flag. 9. Click **Save**. #### See Also - [Monitor Debug Logs](https://help.salesforce.com/s/articleView?id=xcloud.code_monitoring_debug_logs.htm&release=264.0.0&type=5 "Set trace flags to trigger logging for users, Apex classes, and Apex triggers in the Developer Console or in Setup. Monitor the resulting logs to diagnose problems in your org.") # Collect Health Verifications to Return to Work Verify your employees’ COVID-19 health status to ensure safety when returning to the workplace. ![Banner Image for Collecting Health Verifications to Return to Work](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-z_solutionkits-264-0-0-production-enus/1e49f40e-a11c-44f7-b439-8f20b6c66033/z_solutionkits/images/collect_health_verifications_banner.png) ## Get Started
Trail Icon

Take Trailhead modules related to this solution.

This solution kit helps you: - Capture employee health verifications with a digital process using Lightning Flow. - Extend the Work.com Employee data model to define a custom object that holds COVID-19 health status information. - Organize health verification requests for HR representatives to review, accept, or reject employee health verification records in a standard console. ## Required Products - Work.com, Sales Cloud, Service Cloud, or Salesforce Industries Cloud - Experience Cloud (Optional) ## Disclaimer Work.com and Vaccine Cloud provide you with essential solutions designed to help businesses reopen the workplace as quickly as possible while taking into account health and safety needs. Review [Salesforce’s Principles of Ethical Use of COVID-19 Vaccine Technology Solutions](https://www.salesforce.com/news/stories/principles-for-the-ethical-use-of-covid-19-vaccine-technology-solutions/) document to consider how your organization can use this solution kit in an effective and equitable manner. This solution kit is a reference implementation that provides an overview for implementing potential solutions for verification of COVID health status documentation or credentials. When implemented, this solution kit also allows you to collect and use personal information about individuals, including health-related information, which is subject to various legal requirements in different jurisdictions. Consult with your organization’s legal counsel to confirm that your intended use of this solution kit is appropriate for use cases. In addition, ensure that you’re in compliance with local privacy and healthcare laws, as well as any other applicable laws or guidance. ## Implement This Solution - **[Workflow](https://help.salesforce.com/s/articleView?id=xcloud.collect_health_verifications_workflow.htm&release=264.0.0&type=5)** Learn how data flows through the configurations when you collect health verifications to return to work. - **[Design Consideration](https://help.salesforce.com/s/articleView?id=xcloud.collect_health_verifications_design_considerations.htm&release=264.0.0&type=5)** Keep these design considerations in mind when you collect health verifications to return to work. - **[Configurations](https://help.salesforce.com/s/articleView?id=xcloud.collect_health_verifications_configurations.htm&release=264.0.0&type=5)** Use these configuration steps to collect health verifications to return to work. #### See Also - [Trailhead: Flow Builer Trail - Add Screens to Your Flow](https://trailhead.salesforce.com/en/content/learn/modules/flow-builder/flow-builder-screens) - [Trailhead: Screen Flow Distribution](https://trailhead.salesforce.com/content/learn/modules/screen_flow_distribution) # Collect Ids for the Chatter Post (Managed Package) For the managed package runtime, before you can create the Integration Procedure example with the Chatter Action, you must collect the Ids needed for assembling the Chatter post. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Go to the People tab. 2. Go to the record pages of three users and get their Ids from the browser URL. Each Id looks something like this: `00561000000hjm3AAA`. 3. Choose which user will receive the Chatter post. This user’s Id will be the **Subject Id** of the Integration Procedure's Chatter Action. You will return to this user’s record page later to verify that the user received the Chatter post. 4. Go to the Files tab, click **Upload Files**, and upload an image file of your choice. 5. Select **View File Details** from the down-arrow menu for that file. 6. While on the file's detail page, get the Id from the browser URL. What’s next: [Create the Integration Procedure with the Chatter Action (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_the_integration_procedure_with_the_chatter_action.htm&release=264.0.0&type=5 "For the managed package runtime, after you collect the Ids needed for assembling a Chatter post, you can create an Integration Procedure that sends a Chatter post to a user. The example post includes text, an image, and mentions of two other users."). # Collect More Information on the Experience Builder Self-Registration Page When users register, you often want to ask them for more than just basic information. If you're using the Experience Builder self-registration page, you can easily add fields to collect additional information. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note For even more control over the user information that you collect, disable the standard self-registration component and create a custom Apex controller. 1. From Setup, in the Quick Find box, enter Object Manager, and then select **Object Manager**. 2. From the Object Manager, in the Quick Find box, enter **User**, and then select **User**. 3. Select **Field Sets**. 4. Click **New**. Enter a name for field set. 5. For Where is this used?, enter registration field set. 6. Save the field set. 7. In the Field Set Properties, drag fields into the In the Field Set box and save the changes. This example shows the Title field (1) being dragged into the field set box (2) and saved (3). ![Field set properties](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/xid_reg_field_set.png) 8. . From Setup, in the Quick Find box, enter All Sites, and then select **All Sites**, 9. Next to your site, click **Builder**. You're directed to Experience Builder. 10. In Experience Builder, select **Home**, and then select **Login | Register**. 11. Select ![Page icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/xid_page_icon.png), and then select **Self Registration**. 12. On the right, scroll to Extra Fields Field Set Name, and enter the name of the field set you created. The page reloads and displays the fields you added to the field set. In this example, it displays the Title field. ![Self-registration with title field](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/xid_registration_with_title_field.png) 13. To save your changes, click **Publish**. # Collections in Enhanced CMS Workspaces A collection is a set of CMS content items. Collections keep content items grouped and ready to use in your channels. You can create collections right from your enhanced CMS workspace. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
Use collections to gather items for repeater displays like grids to use and reuse in any channel in the workspace. Collect a series of news items to scroll across the top of your site, gather product images for a seasonal promotion, or group related documents for your AI recommendation engine. You can create two types of collections in enhanced CMS workspaces: manual and dynamic. Manual collections provide a curated, static grouping of up to 50 content items. To add new content to the collection, you edit the collection. Dynamic collections are automatically created based on search results of content in a channel. To create dynamic collections, you define conditions, and then Salesforce searches channels connected to the workspace for content that meets the conditions. The collection results can include up to 250 content items, ordered by relevance. Collection results change as content that meets the defined conditions is added or removed. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/images/icon_note.png) Note There are two ways to create collections of CMS content. - If you’re working with an enhanced LWR site, you can create manual or dynamic collections in the enhanced CMS workspace where your CMS content was authored or shared. - If you’re working with an Aura site, create manual or automatic collections from the Content Management area of the Experience Workspace. For more information, see [Salesforce CMS Collections for Aura Sites](https://help.salesforce.com/s/articleView?id=experience.community_managed_content_collections.htm&type=5&language=en_US). - **[Manage a Manual Collection](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_collections_manual_create.htm&release=264.0.0&type=5)** Create manual collections that provide a curated, static grouping of up to 50 items of a single content type in enhanced CMS workspaces. To add new content to the static collection, edit the collection. You can publish, unpublish, and delete manual collections. - **[Manage a Dynamic Collection](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_collections_dynamic_create.htm&release=264.0.0&type=5)** A dynamic collection continuously updates based on the conditions and available content in your channels. Tag your enhanced CMS content with taxonomy tags, and then define conditions that automatically add content items to the collection. # Column Charts Quip provides these types of column charts: column, stacked column, and column stacked to 100 percent. Use a column chart to compare related values. Use a stacked column chart to compare parts of a whole and show values across one or more categories. Use a column chart stacked to 100 percent to compare the proportions between values in one or more categories. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
## Data Options for Column Charts To customize data in column charts, open the Chart Editor, and click the **Customize** tab. - Stacking: Choose whether to stack data series in the column chart. - Style: Change the position of the chart legend, or hide it entirely. Select the colors for the chart’s background and border. - Series: Apply data labels to show values directly in the chart, and set the labels’ position and color. - Horizontal Axis: Give the axis a title, adjust its scale, set the number of tick marks shown, and change the number formatting. - Vertical Axis: Give the axis a title, adjust its scale, change the number formatting, and reverse the axis order. ## Sample Data for Column Charts and Stacked Column Charts | Rep | Q1 Sales | Q2 Sales | Q3 Sales | | --- | --- | --- | --- | | Brian | $10,000 | $25,000 | $53,000 | | Cameron | $45,000 | $60,000 | $36,000 | | Sally | $37,000 | $50,000 | $78,000 | ![Quip column chart](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_charts_column.png) ![Quip stacked column chart](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_charts_column_stacked.png) ## Sample Data for Column Charts Stacked to 100 Percent | Product Market Share | Product A | Product B | Product C | | --- | --- | --- | --- | | 2019 | 30% | 10% | 60% | | 2020 | 20% | 30% | 15% | | 2021 | 50% | 60% | 25% | ![Quip 100% stacked column chart](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_charts_column_stacked_100.png) # Combine Elements Logically in a Block Combine logical groups of elements in an Omniscript Step using a Block element. Blocks help to group information to create nested JSON data. Blocks are contained within steps and can be repeated to capture an array of data. For example, street, city, state, and postal code elements can be combined into an address block. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note You can nest Blocks within other Blocks, but Blocks don’t support the Custom LWC Element. 1. From the elements panel, drag a **Block** element to the canvas and name the element. 2. In **Field Label**, enter a label that displays to users. 3. To render a collapsed block in the Omniscript, select **Collapse**. 4. In the **Heading Level** field, enter the nesting level of the element as a number. 5. Enable users to add multiple block entries: 1. In Clone Elements, select **Copy elements**. 2. In the designer on a managed package, select **Enable Repeat** under **Repeat Settings**. Repeatable blocks store data in an array format, where each block entry is indexed in an array under the Block's element name. - If you plan to access data from an element in a repeatable Block, see [Access to Data Within and Outside a Repeatable Block](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks_21869.htm&release=264.0.0&type=5 "Suppose you place an element in a repeatable block (a Block or an Edit Block) and you want to access data that is calculated in a different element. The method that you use to access the data depends on whether the element containing the data is within or outside the same repeatable block in the Omniscript. Review guidelines and examples for the Formula element and for the Select element, which is used to add a dependent picklist to an Omniscript."). - For information about prefilling blocks, see [Prefill Repeatable Blocks](https://help.salesforce.com/s/articleView?id=xcloud.os_prefill_repeatable_blocks_21959.htm&release=264.0.0&type=5 "Prefill repeatable blocks with data by passing data to the block in an array format."). 6. To clone values when a Block is repeated, select **Clone When Repeating**. 7. In the **Limit Repeat** field, enter a number to set the number of times a Block can be repeated. 8. Preview the Omniscript and test the functionality. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_example.png) Example Data JSON output format based on your configuration to map data JSON from blocks: - No block JSON: ![No block JSON example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/step_json_lwc_os_designer.png) - Block JSON ![Block JSON example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/block_json_lwc_os_designer.png) - Repeatable block JSON ![Repeatable block JSON example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/block_repeat_json_lwc_os_designer.png) #### See Also - [Access to Data Within and Outside a Repeatable Block](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks_21869.htm&release=264.0.0&type=5 "Suppose you place an element in a repeatable block (a Block or an Edit Block) and you want to access data that is calculated in a different element. The method that you use to access the data depends on whether the element containing the data is within or outside the same repeatable block in the Omniscript. Review guidelines and examples for the Formula element and for the Select element, which is used to add a dependent picklist to an Omniscript.") - [Manage Records with an Edit Block](https://help.salesforce.com/s/articleView?id=xcloud.os_edit_block_14256.htm&release=264.0.0&type=5 "Create, edit, and delete multiple Salesforce or external records on one page using Edit Block. For example, if you're collecting an Account's Contact information, you can add an Edit Block to your Omniscript to enable users to add a record for each Contact.") # Combo Charts Combine a bar chart and a line chart to show more than one data series. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
## Data Options for Combo Charts To customize data in combo charts, open the Chart Editor, and click the **Customize** tab. - Style: Change the position of the chart legend, or hide it entirely. Select the colors for the chart’s background and border. - Series: Apply data labels to show values directly in the chart, and set the labels’ position and color. - Horizontal Axis: Give the axis a title, change the number formatting, display grid lines, and reverse the axis order. - Vertical Axis: Give the axis a title, adjust its scale, set the number of tick marks shown, change the number formatting, and display grid lines. ## Sample Data for Combo Charts | Year | Sales | Expenses | | --- | --- | --- | | 1999 | $1,000,000 | $500,000 | | 2000 | $1,200,000 | $360,000 | | 2001 | $1,400,000 | $350,000 | | 2002 | $1,600,000 | $480,000 | | 2003 | $1,800,000 | $576,000 | ![Quip combo chart](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_charts_combo.png) # Combobox Lightning Web Component ReadMe (Managed Package) For the managed package runtime, this page contains a Combobox LWC ReadMe for each Vlocity release. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Vlocity Health and Insurance Spring '21 The Combobox Lightning Web Component is an input element in which the user can select an option from a list of options. ## Available c-combobox Attributes

Attribute

Value

Type

Required

Description

label

 

string

 

Adds a title for the combobox component.

name

 

string

 

Adds a name to the combobox component.

placeholder

 

string

 

Adds text to the input element to prompt user to select from the dropdown (list of options to render labels). For example, "Select an option".

variant

standard, label-hidden (Default: standard)

string

 

Changes the appearance of the input element.

value

 

string

 

Adds a pre-populatd value to the combobox input.

options

 

array

yes

Sets the list of options available for selection. Each option has "label" and "value" attributes, such as {"label":"Apple","value":"apple"}. It also supports grouping if option is set as {"label":"Apple","value":"apple", "group":"group1"}

required

true, false (Default: false)

boolean

 

If the user must enter a value before submitting the form, set to true.

multiple

true, false (Default: false)

boolean

 

To enable the ability to select multiple options, set to true.

searchable

true, false (Default: false)

boolean

 

To enable user search, set to true.

read-only

true, false (Default: false)

boolean

 

To prevent the user from editing the field, set to true.

theme

slds, nds (Default: slds)

string

 

Sets the theme for the combobox component.

errormessage

warning, success, error, info

string

 

Sets the style of the error message.

disabled

true, false (Default: false)

boolean

 

To disable the combobox, set to true.

max-count

 

number

 

Sets the number of options to display before user must scroll.

sorted

true, false (Default: false)

boolean

 

If set to true the options are sorted in alphabetic order of value or the sortField.

sortField

string

number

 

To set the sortField used to sort the options. Works only if sorted is true

deleteMultiple

true, false (Default: false)

boolean

 

To have delete on multiple select pill

isDisplayFlex

true, false (Default: false)

boolean

 

To set display:flex style for pill wrapper div and it also set overflow:hidden and text-overflow:ellipsis style to each pill. Selected values will be displayed as pills only if the multiple attribute is true.

data-show-lookup

true, false (Default: false)

string

 

Applicable only when read-only is set to true. Set to true to display the lookup fields.

## Example c-combobox Component ```
Footer
``` ## Example Label Slot Usage A named slot (name = label) is available in the event a user would like to dynamically insert markup next to the input's label. ``` Additional markup is inserted here ``` ## Vlocity Insurance and Health Summer '20 The _Combobox Lightning Web Component_ is an input element in which the user can select an option from a list of options. ## Available c-combobox Attributes

Attribute

Value

Type

Required

Description

deleteMultiple

true, false (Default: false)

boolean

 

Enables deleting multiple pills.

disabled

true, false (Default: false)

   

To disable the combobox, set to true.

errormessage

warning, success, error, info

string

 

Sets the style of the error message.

isDisplayFlex

true, false (Default: false)

boolean

 

Makes the wrapper 'div' of the pill flexible by setting the CSS 'display' property to 'flex'. Also sets 'overflow' property to 'hidden', and 'text-overflow' to 'ellipsis'. Selected values display as pills only if the multiple attribute is set to true.

label

 

string

 

Adds a title for the combobox component.

max-count

 

number

 

Sets the number of options to display before the user must scroll.

multiple

true, false (Default: false)

   

To enable the ability to select multiple options, set to true.

name

 

string

 

Adds a name to the combobox component.

options

 

array

yes

Sets the list of options available for selection. Each option has "label" and "value" attributes, such as {"label":"Apple","value":"apple"}. It also supports grouping if option is set as {"label":"Apple","value":"apple", "group":"group1"}

placeholder

 

string

 

Adds text to the input element to prompt user to select from the dropdown (list of options to render labels). For example, "Select an option".

read-only

true, false (Default: false)

   

To prevent the user from editing the field, set to true.

required

true, false (Default: false)

   

If the user must enter a value before submitting the form, set to true.

searchable

true, false (Default: false)

   

To enable user search, set to true.

sortField

string

number

 

Sets the field used to sort the options. Works only if sorted is set o true.

sorted

true, false (Default: false)

boolean

 

If set to true the options are sorted in alphabetic order of value or the sortField.

theme

slds, nds (Default: slds)

string

 

Sets the theme for the combobox component.

value

 

string

 

Adds a pre-populatd value to the combobox input.

variant

standard, label-hidden (Default: standard)

string

 

Changes the appearance of the input element.

## Example c-combobox Component ```
Footer
``` ## Label Slot Usage A named slot (name = label) is available in the event a user would like to dynamically insert markup next to the input's label. ``` Additional markup is inserted here ``` ## Vlocity Insurance and Health Winter '20 and Vlocity CME Spring '20 The _Combobox Lightning Web Component_ is an input element in which the user can select an option from a list of options. ## Available c-combobox Attributes

Attribute

Value

Type

Required

Description

disabled

true, false (Default: false)

   

To disable the combobox, set to true.

errormessage

warning, success, error, info

string

 

Sets the style of the error message.

label

 

string

 

Adds a title for the combobox component.

max-count

 

number

 

Sets the number of options to display before user must scroll.

multiple

true, false (Default: false)

   

To enable the ability to select multiple options, set to true.

name

 

string

 

Adds a name to the combobox component.

options

 

array

yes

Sets the list of options available for selection. Each option has "label" and "value" attributes, such as {"label":"Apple","value":"apple"}.

placeholder

 

string

 

Adds text to the input element to prompt user to select from the dropdown (list of options to render labels). For example, "Select an option".

read-only

true, false (Default: false)

   

To prevent the user from editing the field, set to true.

required

true, false (Default: false)

   

If the user must enter a value before submitting the form, set to true.

searchable

true, false (Default: false)

   

To enable user search, set to true.

theme

slds, nds (Default: slds)

string

 

Sets the theme for the combobox component.

value

 

string

 

Adds a pre-populatd value to the combobox input.

variant

standard, label-hidden (Default: standard)

string

 

Changes the appearance of the input element.

## Example c-combobox Component ```
Footer
``` ## Vlocity Insurance and Health Summer '19 and Vlocity CME Fall '19 The _Combobox Lightning Web Component_ is an input element in which the user can select an option from a list of options. ## Available c-combobox Attributes

Attribute

Value

Type

Required

Description

disabled

true, false (Default: false)

   

To disable the combobox, set to true.

errormessage

warning, success, error, info

string

 

Sets the style of the error message.

label

 

string

 

Adds a title for the combobox component.

max-count

 

number

 

Sets the number of options to display before user must scroll.

multiple

true, false (Default: false)

   

To enable the ability to select multiple options, set to true.

name

 

string

 

Adds a name to the combobox component.

options

 

array

yes

Sets the list of options available for selection. Each option has label'' and `value'' attributes, such as{"label":"Apple","value":"apple"}`.

placeholder

 

string

 

Adds text to the input element to prompt user to select from the dropdown (list of options to render labels). For example, ``Select an option''.

read-only

true, false (Default: false)

   

To prevent the user from editing the field, set to true.

required

true, false (Default: false)

   

If the user must enter a value before submitting the form, set to true.

searchable

true, false (Default: false)

   

To enable user search, set to true.

theme

slds, nds (Default: slds)

string

 

Sets the theme for the combobox component.

value

 

string

 

Adds a pre-populatd value to the combobox input.

variant

standard, label-hidden (Default: standard)

string

 

Changes the appearance of the input element.

## Example c-combobox Component ```
Footer
``` # Command Line API (Managed Package) For the managed package runtime, the command line API can also return JSON formatted output and accept some inputs as JSON. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The primary input JSON is the manifest which can be passed in as: ``` vlocity packExport -manifest '["OmniScript/MACD_Move_English"]' ``` The tool returns JSON is sent the argument --json or --json-pretty and returns a JSON in the format of ``` { "action": "Export", "message": "VlocityUITemplate --- SelectAssetToMove.html --- Not Found", "records": [ { "VlocityDataPackDisplayLabel": "MACD Move English", "VlocityDataPackKey": "OmniScript/MACD_Move_English", "VlocityDataPackStatus": "Success", "VlocityDataPackType": "OmniScript" } ], "status": "error" } ``` Where each record contains the Vlocity data pack key that was exported or deployed, and the export or deploy process is limited to only Vlocity data pack keys passed in as part of the manifest if it is supplied. A deployment always includes only the -manifest keys, however for an export it includes dependencies unless -maxDepth 0 is used as an argument. # Comments Keep collaboration in context with embedded comments in Quip. Comments change color after you read them so you can focus on the content that still needs your attention. You can comment on specific parts of a document or participate in the document conversation. ## Comments You can comment on text, images, and cells in Quip by clicking the Comment icon ![Quip comment icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_comment_inline_icon_01.PNG). When you leave a comment, the person who authored the content and anyone you @mention gets a notification. ## Conversation Every document and spreadsheet has a conversation where you and your teammates can send messages about document-level issues. By default, the conversation is displayed on the right side of the document. Only users with comments access and above can see the conversation pane. The conversation contains: - Any messages people post to the conversation. - A history of every edit made to the document. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note Deleted sections still appear in the conversation. - A history of every comment made on the document. - A record of when people become a member of the document. ## Broadcasting Comments and Messages To send a notification to every member of a document, you can include @everyone in a comment or message. If you @mention everyone when you edit a comment or message, Quip doesn’t send a notification. - **[Add a Comment](https://help.salesforce.com/s/articleView?id=xcloud.quip_add_a_comment.htm&release=264.0.0&type=5)** Solicit or provide feedback, ask questions, or get answers about a specific part of a document. - **[Edit a Comment or Message](https://help.salesforce.com/s/articleView?id=xcloud.quip_edit_a_comment.htm&release=264.0.0&type=5)** Did you mix up your emojis, @mention the wrong teammate, or change your mind about what you wrote? No worries. Edit comments and messages from the conversation pane. You can also edit comments inline. - **[Share a Comment or Message](https://help.salesforce.com/s/articleView?id=xcloud.quip_share_a_comment.htm&release=264.0.0&type=5)** Let your teammates know about an important part of the document conversation by broadcasting, forwarding, or linking to it. # Commerce Enhancements for Starter and Pro Suite Learn about updates to the Pay Now experience. ## Improved Pay Now User Experience The refreshed Pay Now experience includes a redesigned landing page for store home, is easier to navigate, and improves access to your content with revamped workspaces. A streamlined setup experience makes getting started with Pay Now even easier. Quickly access Pay Now with the new store switcher dropdown. Take payers to a Pay Now Checkout page that you can customize with your brand. Monitor all your payment links in the Payment Links workspace. Gain valuable insights into the health and performance of your Pay Now transactions with pre-built reports and dashboards. If you’re a new customer starting in Spring ’25, you receive the refreshed Pay Now experience. If you were a customer before Spring ‘25, you can make the switch at your convenience using our convenient upgrade path. # Commerce Enhancements for Starter and Pro Suite Create an online shopping experience for your customers to drive more sales. With the setup assistant in the Commerce app, you can get your site up and running quickly. ## Sell Online with Salesforce Starter and Pro Suite Sell directly to individual shoppers and provide a personalized online shopping experience with Commerce Store for Starter and Pro Suite. Create a direct-to-consumer (D2C) online shopping experience that represents your brand, engages shoppers, and drives sales. The Commerce app in Starter and Pro Suite offers D2C businesses and their customers best-in-class ecommerce tools, helping merchants develop, operate, and manage ecommerce stores. Get your commerce site up and running quickly with simplified data import, setup assistant, and shared workflows across Salesforce product areas. Utilize store templates and standard Lightning components to set up and configure store settings. This change applies to D2C Commerce in Starter and Pro Suite editions and in the US only. # Common Action Element Properties Review information about Omniscript action element properties. ## Common Action Properties

Property

Description

Label

The label on the button, or, if running remotely, the heading of the Action block.

Validation

Determines whether validation runs on the step before the action is invoked. When set to Step, the action button will be clickable once all required fields within the step contain valid input. Select None to bypass validation.

Invoke Mode

Configure the response behavior of the action.

Default: The Action blocks the UI with a loading spinner.

Non-Blocking: The Action runs asynchronously, and the response is applied to the UI. Pre and Post Omnistudio Data Mapper transforms, and large attachments are not supported.

Fire and Forget: The Action runs asynchronously with no callback to the UI. Pre and Post Data Mapper transforms, and large attachments are not supported. A response will still appear in the debug console but will not be applied to the Data JSON.

Conditional View

All Action elements support conditional view. See Conditionally Display Omniscript Elements.

Pub/Sub

Communicate with Omniscript from a custom LWC by sending key-value pairs. Use the events passed in the key-value pairs to trigger custom behavior in a component. See Messaging Framework for Omniscripts.

Session Storage

Send information to a Session Storage object using key-value pairs. A session storage object clears when a page session ends. See Messaging Framework for Omniscripts.

Window Post Message

Send information from an element to a window object in key-value pairs. SeeMessaging Framework for Omniscripts.

## User Message Properties Actions that run remotely and between steps, or before the first Step is run, contain these User Message properties.

Property

Description

Show a message during execution

Enable Action Message in the designer for a managed package

Enables an input of custom action messages.

Next Label on Failure

Failure Next Label in the designer for a managed package

Label of the continue button if the Action fails.

Previous Label on Failure

Failure Go Back Label in the designer for a managed package

Label of the Go Back button if the Action fails. The default behavior enables users to return to the previous Step unless there are no previous steps.

Success Message

Post Message in the designer for a managed package

Message displayed upon success.

## Send and Response Transformations Send and Response Transformations are properties available on a variety of Omniscript remote actions. They provide flexibility in trimming and reparenting the request and response JSON. For more information on how to use Send and Response Transformations, see [Manipulating JSON with the Send and Response Transformations Property](https://help.salesforce.com/s/articleView?id=xcloud.os_manipulate_json_with_the_send_response_transformations_properties_22367.htm&release=264.0.0&type=5 "Specify and transform the input and output JSON of Omniscripts or Integration Procedures with the Send and Response Transformation properties. The Send properties transform the input; the Response properties transform the output.").

Property

Description

Send JSON Path

This property enables one node of the Omniscript Data JSON to be sent, rather than the entire JSON. Specify the node name in this property.

Send JSON Node

This property allows you to specify the root node name in the outgoing response. For example, if your Omniscript had a Customer node at the root, you could relabel the node to CustomerAccount.

Pre-Transform Data Mapper

In situations where a more complete transformation of the JSON is required, you can specify a Data Mapper transform interface. The service will run on the server, and then return the request body to the client for sending.

Post-Transform Data Mapper

Works identically to the Pre-Transform, except the transformation is applied to the response body before merging into the Data JSON.

Response JSON Path

This property allows you to trim the incoming JSON. For example, if the response has a three-level hierarchy, and you only want one of the nodes, you can specific the path you like to extract. The syntax is node:node:node (colon-separated).

Response JSON Node

This property allows you to reparent the incoming JSON to a node within the Omniscript JSON. Specific the Omniscript element name which will be the new root node for the response JSON.

## Selecting an Invoke Mode Enable actions to run asynchronously, block users from advancing to a future Step, and modify by selecting an invoke mode. Invoke Mode enables you to configure the response behavior of an action. It is available in: - Remote Action - Integration Procedure Action

Property

Description

Default

The Action blocks the UI with a loading spinner.

Non-Blocking

The Action runs asynchronously, and the response is applied to the UI. Pre and Post Data Mapper transforms, and large attachments are not supported.

Fire and Forget

The Action runs asynchronously with no callback to the UI. Pre and Post Data Mapper transforms, and large attachments are not supported. A response will still appear in the debug console but will not be applied to the Data JSON.

## Extra Payload Extra payload is an additional property available for the actions listed below. The Omniscript can set up extra payload to be sent while making the call. This property supports merge fields.It is available in: - Remote Action - Integration Procedure Action - HTTP Action ## Add an Action Message Display an action message beneath the loading spinner while the action is running. 1. In an Action, expand the User Messages property. 2. Check **Enable Action Message**. 3. In **Action Message**, enter a custom message, or leave the default message. # Common Action Element Properties (Managed Package) For the managed package runtime, Action elements can be either rendered as a button when placed in a Step or Block or run remotely if placed between steps. In either case, you can specify a redirect page, where the user can proceed to the next Step or Action, or if a button, back to the source Step. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Common Action Properties
Property Description Example

Label

The label on the button, or, if running remotely, the heading of the Action block.

—

Redirect Page Name

Custom redirect page name. Upon success, the script navigates to this page. Leave blank to bypass the redirect page.

—

Redirect Template URL

HTML template of the redirect page. Vlocity provides templates for redirect pages, or you can create your own.

—

Validation Required

Determines whether validation runs on the script or Step before the Action is invoked. Select Submit to validate the entire script or Step to validate only the Step that the button is on. When set to Step, the Action will be clickable once all required fields within the Step contain valid input. Select None to bypass validation.

—

Invoke Mode

Configure the response behavior of the action.

Default: The Action blocks the UI with a loading spinner.

Non-Blocking: The Action runs asynchronously, and the response is applied to the UI. Pre and Post Omnistudio Data Mapper transforms, and large attachments are not supported.

Fire and Forget: The Action runs asynchronously with no callback to the UI. Pre and Post Data Mapper transforms, and large attachments are not supported. A response will still appear in the debug console but will not be applied to the Data JSON.

—

Conditional View

All Action elements support conditional view.

Use the Conditional View Property to Conditionally Display Elements (Managed Package)

Pub/Sub

Communicate with Omniscript from a custom LWC by sending key-value pairs. Use the events passed in the key-value pairs to trigger custom behavior in a component.

Communicate from Omniscript to a Lightning Web Component (Managed Package)

Session Storage

Send information to a Session Storage object using key-value pairs. A session storage object clears when a page session ends.

Message with Window Post Messages and Session Storage Messages (Managed Package)

Window Post Message

Send information from an element to a window object in key-value pairs.

Message with Window Post Messages and Session Storage Messages (Managed Package)

Tracking Business Category

Define a business category for a tracking entry. For example, eCommerce.

Enable Tracking for Components (Omnistudio for Managed Packages) (Managed Package)

Tracking Business Event

Define a business tracking event for a tracking entry. For example, Payment Plan.

Enable Tracking for Components (Omnistudio for Managed Packages) (Managed Package)
## User Message Properties Actions that run remotely and between steps, or before the first Step is run, contain these User Message properties.

Property

Description

Enable Action Message

Enables an input of custom action messages.

Enable Default Abort

Enables the Abort functionality to override the default Go Back functionality. Users will then only be able to abort the Omniscript if the Action fails.

Failure NextLabel

Label of the continue button if the Action fails, and the Enable Default Abort checkbox is checked.

Failure Abort Label

Label of the abort button if the Action fails, and the Enable Default Abort checkbox is checked.

Failure Abort Message

Confirmation message displayed after user clicks abort button.

Failure Go Back Label

Label of the Go Back button if the Action fails. The default behavior enables users to return to the previous Step unless there are no previous steps, or the Enable Default Abort checkbox has been checked.

In Progress Message:

Message displayed while the Action is being executed. This property is exclusive to Angular Omniscripts.

Post Message

Message displayed upon success.

Redirect Next Label

Label of the next button on the redirect page.

Redirect Next Width

Width of the next button on the redirect page.

Validation Required

Whether to check the validation of the script before the Action is invoked. Default is Submit. Leave blank to bypass validation.

## Redirect Properties Actions that are placed in Steps and render as buttons contain these common elements.

Property

Description

Control Width

Controls the width of the button.

Redirect Previous Label

The label of the previous button on the redirect page.

Redirect Previous Width

The width of the previous button on the redirect page.

## Send and Response Transformations Send and Response Transformations are properties available on a variety of Omniscript remote actions. They provide flexibility in trimming and reparenting the request and response JSON. For more information on how to use Send and Response Transformations, see [Manipulating JSON with the Send and Response Transformations Property](https://help.salesforce.com/s/articleView?id=xcloud.os_manipulate_json_with_the_send_response_transformations_properties.htm&release=264.0.0&type=5 "For the managed package runtime, specify and transform the input and output JSON of Omniscripts or Integration Procedures with the Send and Response Transformation properties. The Send properties transform the input; the Response properties transform the output.").

Property

Description

Send JSON Path

This property enables one node of the Omniscript Data JSON to be sent, rather than the entire JSON. Specify the node name in this property.

Send JSON Node

This property allows you to specify the root node name in the outgoing response. For example, if your Omniscript had a Customer node at the root, you could relabel the node to CustomerAccount.

Pre-Transform Data Mapper

In situations where a more complete transformation of the JSON is required, you can specify a Data Mapper transform interface. The service will run on the server, and then return the request body to the client for sending.

Post-Transform Data Mapper

Works identically to the Pre-Transform, except the transformation is applied to the response body before merging into the Data JSON.

Response JSON Path

This property allows you to trim the incoming JSON. For example, if the response has a three-level hierarchy, and you only want one of the nodes, you can specific the path you like to extract. The syntax is node:node:node (colon-separated).

Response JSON Node

This property allows you to reparent the incoming JSON to a node within the Omniscript JSON. Specific the Omniscript element name which will be the new root node for the response JSON.

## Selecting an Invoke Mode Enable actions to run asynchronously, block users from advancing to a future Step, and modify by selecting an invoke mode. **Invoke Mode** enables you to configure the response behavior of an action. Available in: - Remote Action - Integration Procedure Action

Property

Description

Default

The Action blocks the UI with a loading spinner.

Non-Blocking

The Action runs asynchronously, and the response is applied to the UI. Pre and Post Data Mapper transforms, and large attachments are not supported.

Fire and Forget

The Action runs asynchronously with no callback to the UI. Pre and Post Data Mapper transforms, and large attachments are not supported. A response will still appear in the debug console but will not be applied to the Data JSON.

## Extra Payload ExtraPayload is an additional property available for the actions listed below. The script configurator can set up extra payload to be sent while making the call. This property supports merge fields. - **Remote Action** - **Calculation Action** - **Integration Procedure Action** - **HTTP Action** - **[Add an Action Message (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_an_action_message.htm&release=264.0.0&type=5)** For the managed package runtime, display an action message beneath the loading spinner while the action is running.Beginning with Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20, LWC Omniscripts support custom Action messages. - **[Messaging Framework (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_messaging_framework.htm&release=264.0.0&type=5)** For the managed package runtime, communicate between an Omniscript, windows, Lightning web components, and Omniscript elements using window post messages, session storage messages, and PubSub messaging. # Common Action Utility for Remote Calls (Managed Package) For the managed package runtime, make remote calls from any custom LWC using the Common Action Utility. The Common Action Utility relies on the Vlocity Action Framework to make remote calls without the dependency of a strict Omniscript data structure. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - Utility: `omniscriptActionUtils` - Utility Class Name: `OmniscriptActionCommonUtil` ## Defined Methods and Available Variables (Managed Package) For the managed package runtime, review the available methods and variables for remote calls. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Method Name

Description

Argument - Data Type

Returns

executeAction

Begins the execution of an action flow.

  • params - object

  • queueableId - string

  • comp - component

  • payload - object

  • vlcParams - object

promise

handleActionEvents

Handles action events once the remote call obtains a response. It can be configured to send events to the Omniscript Designer Debug console. Configured for sending pubsub events.

In LWC, if sendDataToDebugConsole is defined in the component, event logs can be sent to the Debug Console in the Omniscript Designer. If the component is not in Omniscript, define _debugLabel in the component populate the debug log event name. If from omniscript, the debug log event name is populated from the label property in the element's property set.

  • comp - component

  • resp - object

  • params - object

  • element - object

void

invokeAction

Method that invokes an Apex class or a Promise resolution using an action transformed request.

  • data - object

  • comp - component

  • (optional) payload - object

promise

postProcess

Post-processes remote call response for both successful and failed remote calls and returns a post-processed response. The return contains an object with the key nodes:

  • result: stores the remote call's raw response

  • error: boolean

  • resp - object

  • element - object

  • comp - component

  • (optional) failure - boolean

object

preProcess

Preprocesses remote call parameters before invoking an action.

  • params - object

  • queueableRespId - string

  • comp - component

  • payload - object

  • vlcParams - object

object

Variable Name

Description

_ns

Namespace in dot notation

_element

(Optional) Omniscript element JSON definition

## Implementing the Common Action Utility (Managed Package) For the managed package runtime, import the Common Action Utility into your Lightning Web component so that you can make remote calls. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Obtain the dot notation format of the namespace in your LWC by importing `getNamespaceDotNotation` from `omniscriptInternalUtils`. Replace **NS** in the first line of code with the namespace of your package. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Remote calls made to Apex classes inside a vlocity managed package must include the namespace in the sClassName parameter sent into the `executeAction`. ``` import { getNamespaceDotNotation } from 'NS/omniscriptInternalUtils'; _ns = getNamespaceDotNotation(); ``` 2. Import `OmniscriptActionCommonUtil` into your LWC from the utility class `omniscriptActionUtils`. Replace **NS** in the first line of code with the namespace of your package. ``` import { OmniscriptActionCommonUtil } from 'NS/omniscriptActionUtils'; ``` 3. Create an instance of the OmniscriptActionCommonUtil javascript class. ``` this._actionUtilClass = new OmniscriptActionCommonUtil(); ``` 4. Use the OmniscriptActionCommonUtil methods to execute remote calls to the server. - The most common flow is to use the `executeAction` method. This method starts the remote call flow, and the response callback from `executeAction` returns an object that has these properties: - result: Contains the response from the remote call. - error: Contains a boolean indicating the invoke status of GenericInvoke2. - Parameters sent into the `executeAction` must be in an object format. The object must have the following keys: - input - sClassName - sMethodName - options Each key requires a stringified value. - If the LWC displays in the Omniscript Designer, it is possible to send events to the Debug Console. Send events to the Debug Console by including the `sendDataToDebugConsole` method in your LWC. The method provides logic on sending events to the Debug Console. `sendDataToDebugConsole` accepts these arguments: - params - resp - label ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_example.png) Example - Sample remote call using **executeAction**: ``` connectedCallback() { this._actionUtilClass = new OmniscriptActionCommonUtil(); } triggerRemote() { const params = { input: '{}', sClassName: 'LwcTest', sMethodName: 'lwctest', options: '{}', }; this._actionUtilClass .executeAction(params, null, this, null, null) .then(response => { window.console.log(response); }) .catch(error => { window.console.log(error); }); } ``` - Sample **sendDataToDebugConsole** method: ``` sendDataToDebugConsole(params, resp, label) { let sendParams = JSON.parse(JSON.stringify(params)); if (sendParams && sendParams.options) { let optionNode = JSON.parse(sendParams.options); delete optionNode.options; delete optionNode.input; sendParams.options = optionNode; } let sendResp = JSON.parse(JSON.stringify(resp)); // for queueable support if (sendResp && sendResp.responseResult) { sendResp.responseResult = JSON.parse(sendResp.responseResult); } // dispatches action data to debug console const debugEvent = new CustomEvent('omniactiondebug', { bubbles: true, cancelable: true, composed: true, detail: { params: sendParams, response: sendResp, element: { label: label }, }, }); this.dispatchEvent(debugEvent); } ``` - Sample **queueable** remote call using **executeAction**: ``` connectedCallback() { this._actionUtilClass = new OmniscriptActionCommonUtil(); } triggerQueueable() { const options = { input: '{}', vlcClass: 'LwcTest', vlcMethod: 'lwctest', useQueueableApexRemoting: true, }; const params = { input: '{}', sClassName: `${this._ns}VFActionFunctionController.VFActionFunctionControllerOpen`, sMethodName: 'runActionFunction', options: JSON.stringify(options), }; this._actionUtilClass .executeAction(params, null, this, null, null) .then(response => { window.console.log(response); }) .catch(error => { window.console.log(error, 'error'); }); } ``` - Sample **continuation** remote call using **executeAction**: ``` connectedCallback() { this._actionUtilClass = new OmniscriptActionCommonUtil(); } triggerContinuation() { const options = { input: '{}', vlcClass: 'QeRemoteAction2', vlcMethod: 'populateElements', useContinuation: true, }; const params = { input: JSON.stringify(this.omniJsonData), sClassName: 'QeRemoteAction2', sMethodName: 'populateElements', options: JSON.stringify(options), }; this._actionUtilClass .executeAction(params, null, this, null, null) .then(response => { window.console.log(response); }) .catch(error => { window.console.log(error, 'error'); }); } ``` - Sample **future** remote call using **executeAction**: ``` connectedCallback() { this._actionUtilClass = new OmniscriptActionCommonUtil(); } triggerFuture() { const options = { useFuture: true, }; const params = { input: '{}', sClassName: `${this._ns}IntegrationProcedureService`, sMethodName: 'Test_Chainable', options: JSON.stringify(options), }; this._actionUtilClass .executeAction(params, null, this, null, null) .then(response => { window.console.log(response); }) .catch(error => { window.console.log(error, 'error'); }); } ``` - Sample **chainable** remote call using **executeAction**: ``` connectedCallback() { this._actionUtilClass = new OmniscriptActionCommonUtil(); } triggerChainable() { const options = { chainable: true, }; const params = { input: '{}', sClassName: `${this._ns}IntegrationProcedureService`, sMethodName: 'Test_Chainable', options: JSON.stringify(options), }; this._actionUtilClass .executeAction(params, null, this, null, null) .then(response => { window.console.log(response); }) .catch(error => { window.console.log(error, 'error'); }); } ``` - Sample **parameters** for a remote call from inside a Vlocity package: ``` const params = { input: '{}', sClassName: `${this._ns}IntegrationProcedureService`, sMethodName: 'Test_Chainable', options: '{chainable: true}', }; ``` # Common Capabilities in Channel Revenue Management Set up and manage core Channel Revenue Management features that support rebate programs, incentives, and partner-related processes. These shared capabilities are used across multiple Channel Revenue Management workflows and aren’t tied to a specific use case. - **[Business Rules Engine](https://help.salesforce.com/s/articleView?id=xcloud.chrm_business_rules_engine.htm&release=264.0.0&type=5)** Simplify the process of determining eligibility or qualification and automate complex decision-making to find solutions faster using Business Rules Engine. - **[Intelligent Document Reader](https://help.salesforce.com/s/articleView?id=xcloud.chrm_intelligent_document_reader.htm&release=264.0.0&type=5)** Automatically extract data from documents to create, update, or verify records by using Intelligent Document Reader. Intelligent Document Reader uses Amazon Textract for optical character recognition. Upload documents in the JPG, JPEG, PNG, or PDF format, define the types of documents that you want to extract information from, and specify objects where extracted information is stored. For example, create a document type for rebate claim invoices, upload a rebate claim invoice, and verify the extracted data against the Transaction Journal records in your org. Or, create a document type for warranty claim invoices and map the extracted information to Claim records. # Common Errors and Resolutions in Omnistudio Find out why some errors occur and how to resolve them Error messages indicate that something is blocking the successful creation or deployment of Omnistudio components. These tables show common errors, causes, and resolutions. ## System Errors
Error Message Potential Causes Potential Resolutions
This org doesn’t have Omnistudio permissions enabled. Enable permissions before using this feature. This error occurs when you attempt to use Omnistudio features, but the Omnistudio permission is not enabled at the org level. Omnistudio must be enabled before you can create or manage Omniscripts, Flexcards, Integration Procedures, or Data Mappers.
  1. Log in as a System Administrator.
  2. From Setup, find and select Omnistudio.
  3. Enable the Omnistudio permission for your org.

If you don't see the option, verify that your org has Omnistudio licenses. Contact your Salesforce Account Executive if licenses are needed.

Tip
Tip After enabling Omnistudio permissions, it may take a few minutes for the changes to propagate throughout your org. If you continue to see this error, try logging out and logging back in.
We couldn’t turn on Global Auto Number because your org contains custom records. Migrate your data to standard objects and records using the migration tool, and try again. Either one or both of these Omni Interaction Configurations are enabled in your org: RollbackDRChanges, RollbackIPChanges. Both configurations must be disabled before enabling Omni Global Auto Number. The best way to resolve this error is to run Omnistudio Migration Assistant. See Migrate Your Components to Omnistudio Standard Runtime Using the Omnistudio Migration Assistant for more information.
## Omniscript Errors
Error Message Potential Causes Potential Resolutions
You can’t update or delete an active Omniscript record. Deactivate the record and try again.
  • Attempting to delete an active Omniscript
  • Attempting to update structural fields on an active Omniscript
  • Attempting to change Type, SubType, or Language on an active Omniscript
  1. From App Launcher, find and select Omniscripts.
  2. Locate the Omniscript you want to modify or delete.
  3. Note the current version and warn users about the upcoming deactivation.
  4. Deselect the Active checkbox to deactivate the Omniscript and save your changes.
  5. Now you can make your desired changes or delete the Omniscript.
  6. If you made changes, you can reactivate by selecting the Active checkbox again.
Warning
Warning Deactivating an Omniscript immediately affects all users and processes currently using it. Consider creating a new version instead of modifying the active one if you need to maintain service continuity.
Another active Omniscript with the same Type, Subtype, and Language exists. Deactivate the existing Omniscript or use a unique combination for Type, Subtype, and Language to activate this one.
  • Another Omniscript with identical Type, SubType, and Language is already active
  • Creating a new version without deactivating the previous version
  • Multiple versions created and attempting to activate more than one

Make sure you have permissions to edit Omniscript records and complete these tasks.

  1. From App Launcher, find and select Omniscripts.
  2. Use filters or search for Omniscripts with matching Type and SubType.
  3. Identify the currently active Omniscript with the same Type/SubType/Language.
  4. Review both versions to determine which should remain active.
  5. Open the Omniscript you want to deactivate.
  6. Deselect the Active checkbox and save your changes.
  7. Return to the new version and activate it.
Warning
Warning Before activating a new version, test it thoroughly in a preview or sandbox environment. When you’re ready to deploy, deactivate the old version and immediately activate the new one to minimize downtime.
These fields are required: Type, SubType, and Language.
  • Type field is empty or null
  • Subtype field is empty or null
  • Language field isn't selected
  • Attempting to save a new Omniscript without filling in all required fields

Make sure you have permissions to edit Omniscript records and complete these tasks.

  1. From App Launcher, find and select Omniscripts.
  2. In the Omniscript properties panel, locate the Type field.
  3. Enter a descriptive Type name such as CustomerOnboarding or ClaimSubmission.
  4. Locate the SubType field and enter a specific SubType name such as Residential or Commercial.
  5. Select a Language from the dropdown.
  6. Make sure all three fields are filled and save your changes.
  7. Return to the new version and activate it.
Tip
Tip Choose meaningful Type and SubType names that clearly indicate the purpose of your Omniscript. These values become part of how you reference the Omniscript in your applications and can't be easily changed after they’re created.
Enter an alphanumeric value with no spaces or underscores.
  • Type or Subtype fields contain spaces
  • Type or Subtype fields contain underscores
  • Type or Subtype fields contain unsupported special characters: !@#$%^&*, and so on
  • Type or SubType fields contain hyphens or other punctuation
  1. Review your Type and SubType values.
  2. Remove any spaces - use UpperCamelCase (or PascalCase) instead. For instance, CustomerOnboarding.
  3. Remove any underscores and replace them with UpperCamelCase (or PascalCase).
  4. Remove any special characters.
  5. Make sure that only letters (A-Z, a-z) and numbers (0-9) are used.
  6. Save your changes.
Tip
Tip Use PascalCase (also called UpperCamelCase) for Type and SubType values. This improves readability without requiring spaces or underscores.
Enter a value within the maximum length limit of {0}.
  • Type value is too long.
  • SubType value is too long.
  • Combined Type + SubType + Language exceeds the character limit.
  1. Review the error message to see the maximum allowed length.
  2. Shorten your Type or SubType value.
  3. Save your changes.
Tip
Tip Use abbreviations where needed. Remove redundant words. Use a shorter naming convention.
The Type or Subtype field contains the restricted keyword: {0}. Use a different value and try again.

The Type or SubType field uses a reserved keyword. Common restricted keywords include: in, out, exc, cb, kt, vt, v, x785f, x5f

As suggested in the error message, replace the restricted keyword with a different value. See Reserved Words on the Omnistudio Naming Conventions page for more information.

You can’t update or delete elements in an active Omniscript. Deactivate the Omniscript and try again.
  • Attempting to add a new element to an active Omniscript.
  • Attempting to modify an existing element on an active Omniscript.
  • Attempting to delete an element from an active Omniscript.
  • The Omniscript is active and in use.

Make sure you have permissions to edit Omniscript records and complete these tasks.

  1. Verify if the Omniscript is currently active.
  2. Consider creating a new version instead of modifying the active one.
  3. To create new version: Click Clone on the Omniscript.
  4. To modify existing: Deactivate by deselecting the Active checkbox and save your changes.
  5. Now you can add, update, or delete elements.
  6. Test your changes.
  7. Activate the Omniscript when ready for use.
Warning
Warning It is recommended that you create a new version for significant changes rather than deactivating and modifying the active version. This allows you to test thoroughly before deploying and provides an easy rollback option if issues arise.
Enter an element name without these characters: ', ", |, : or %. Your element name likely contains any one of the unsupported characters listed in the error message. Rename the element and don’t use unsupported characters.
Enter a value that doesn’t use these Omniscript reserved names: ContextId, timeStamp, userName, userProfile, vlcPersistentComponent Your Omniscript likely contains reserved words mentioned in the error message. Replace the reserved word with an alternative term that carries the same meaning.
An element with the same name already exists. Choose a unique name.
  • Another element in the same Omniscript has the same name.
  • Name collision between elements in different steps.
  • The element was copied and name wasn't changed.
  1. Review all elements in your Omniscript.
  2. Identify the elements with the conflicting names.
  3. Decide which element should keep the name.
  4. Rename the other element with a unique name.
  5. Consider using prefixes to indicate the step or section, for example, step1_firstName, step2_firstName.
  6. Update any formulas or data mappings that reference the renamed element and save your changes.
Looks like you don’t have permissions to update or delete this record. Contact your Salesforce admin or package provider for help.
  • The Omniscript is from a managed package and you don't have permissions to modify or delete it.
  • Attempting to update a packaged Omniscript from outside the package namespace.
  1. Verify the if the Omniscript is from a managed package.
  2. If you need to customize the Omniscript, clone it instead.
  3. Rename the cloned version with your own Type/SubType/Language combination.
  4. Make your desired modifications to the cloned version, save and activate your Omniscript.
  5. Update any formulas or data mappings that reference the renamed element and save your changes.
Tip
Tip Contact the package provider or your Salesforce Administrator if you need to make changes to packaged components. They may provide configuration options or extension points that don't require modifying the packaged Omniscript directly.
A reusable Omniscript can’t contain another reusable Omniscript.
  • The Omniscript is reusable.
  • The Omniscript contains Omniscript elements (embedded Omniscripts).
  • Attempting to make an Omniscript reusable after adding embedded Omniscripts
  1. Decide whether this Omniscript should be reusable or contain embedded Omniscripts.
  2. Option 1: Keep it reusable - Remove all embedded Omniscript elements
  3. Option 2: Allow embedding: Deselect the Reusable checkbox.
  4. If you're removing embedded Omniscripts, consider using Integration Procedures instead. You can refactor the logic into Integration Procedures that can be called from the Omniscript.
Tip
Tip Use Integration Procedures for shared business logic instead of nesting reusable Omniscripts. This creates a cleaner architecture and avoids complexity in Omniscript dependencies.
## Flexcard Errors
Error Message Potential Causes Potential Resolutions
A Flexcard with that Name field is already active. Enter something unique.
  • Another Flexcard with the same Name is already active.
  • Attempting to activate a new version without deactivating the old one.
  1. Search for Flexcards with the same Name field.
  2. Review them to determine which should remain active.
  3. Open the Flexcard you want to deactivate.
  4. Deselect the Active checkbox to deactivate the Flexcard and save your changes.
Warning
Warning Deactivating a Flexcard immediately affects all users and processes currently using it. Consider creating a new version instead of modifying the active one if you need to maintain service continuity.
Looks like you don’t have access to delete that item. Contact your Salesforce admin or package provider for help. You’re trying to delete an active Flexcard from a managed package and lack the access to do so.
  1. Verify the if the Flexcard is from a managed package.
  2. If you need to remove it from use, deactivate it instead of deleting.
  3. To do this, open the Flexcard and deselect the Active checkbox.
  4. If you need a customized version of the Flexcard, clone it instead.
Tip
Tip Contact the package provider or your Salesforce Administrator if you need to make changes to packaged components. They may provide configuration options or extension points that don't require modifying the packaged Flexcard directly.
We can’t find a Flexcard with the name {name}. It may have been deactivated or deleted. Activate or re-create the Flexcard, embed it as a child card, and try again.
  • The name of the child Flexcard name is misspelled.
  • The child Flexcard exists but is not active.
  • The child Flexcard was deleted.
  • The child Flexcard is in a different namespace.
  1. From App Launcher, find and select Note the child Flexcard name from the error message.
  2. Search for the child Flexcard by name.
  3. If found but inactive, activate it.
  4. If not found, verify the correct name.
  5. If name is incorrect, update the parent Flexcard configuration.
  6. In the parent Flexcard, locate the child Flexcard reference.
  7. Correct the name to match an existing, active Flexcard and save the parent Flexcard.
Note
Note Child Flexcards must be activated before the parent Flexcard can reference them. Create and test child Flexcards first, then configure parent Flexcards to use them.
We can’t find an active Omniscript with Type {type}, Subtype {subtype} and Language {language}. Activate it and try again.
  • The Omniscript’s Type/SubType/Language is incorrect.
  • The Omniscript exists but is not active.
  • The Omniscript was deleted.
  • The Omniscript’s Type/SubType/Language was changed.
  1. Note the Type, SubType, and Language from the error message.
  2. Search for the Omniscript with matching Type and SubType.
  3. Verify the Language matches.
  4. If found but inactive, activate the Omniscript.
  5. If not found, verify the correct Type/SubType/Language values.
  6. Return to your Flexcard and update the Omniscript reference with the correct values.
  7. Save your changes.
Tip
Tip Make sure that the referenced Omniscript is active before activating the Flexcard. If you're deploying both together, activate the Omniscript first.
We can’t find an active Data Mapper with the name {name}. Activate it and try again.
  • The name of the Data Mapper is misspelled.
  • The Data Mapper exists but is not active.
  • The Data Mapper was deleted.
  • The Data Mapper’s name was changed.
  1. Note the Data Mapper name from the error message.
  2. Search for the Data Mapper by name.
  3. If found but inactive, activate it.
  4. If not found, verify the correct name.
  5. Return to your Flexcard, update the Data Mapper reference with the correct name, and save your changes.
Tip
Tip Activate Data Mappers before activating Flexcards that reference them. Test the Data Mapper independently to make sure that it returns the expected data structure.
We can’t find an active Integration Procedure with the name {name}. Activate it and try again.
  • The name of the Integration Procedure is incorrect.
  • The Data Mapper exists but is not active.
  • The Data Mapper was deleted.
  • You’re using the wrong naming format (should use Type_SubType format).
  1. Note the Integration Procedure name from the error message.
  2. Search for the Integration Procedure.
  3. Verify that it exists and note its Type and SubType.
  4. If found but inactive, activate it.
  5. Return to your Flexcard.
  6. Update the Integration Procedure reference by using the format: Type_SubType, and save your changes.
Warning
Warning Integration Procedures are referenced using their OmniProcessKey, which follows the Type_SubType format. Make sure that you're using the correct format when configuring the Flexcard.
The Name and Author fields for this Flexcard can’t be changed. Instead, clone the Flexcard or create a new one.
  • Attempting to rename an existing Flexcard.
  • Attempting to change the Author of an existing Flexcard.
  • The UniqueName is used by other components and can't be changed.
  1. If you need a different name or author, clone the Flexcard instead.
  2. Locate your Flexcard and clone it.
  3. Enter the new Name or Author.
  4. Make any other necessary changes to the cloned version and activate your new Flexcard.
  5. Update any components referencing the old Flexcard to use the new one.
  6. Deactivate the old Flexcard once all references are updated.
## Integration Procedure Errors
Error Message Potential Causes Potential Resolutions
Enter a name that doesn't start with 'FileBased' for this Integration Procedure.
  • The Integration Procedure Name starts with FileBased.
  • The Integration Procedure Type starts with filebased.
  • The Integration Procedure SubType starts with FileBased.
  1. Open your Integration Procedure.
  2. Check the Name, Type, and SubType fields.
  3. If any start with FileBased, choose a different prefix.
  4. Consider using prefixes like File, Document, Data, or your organization name.
  5. Update the error-prone fields and save your changes.
You reached the nesting limit of {number} levels for this data structure. This happens when Integration Procedures have very deeply nested structures, specifically:
  • The JSON input schema has nested objects deeper than 10 levels.
  • The JSON output schema has nested objects deeper than 10 levels.
  1. Review your JSON schema structure.
  2. Identify deeply nested sections.
  3. Flatten the structure by reducing nesting levels.
  4. Consider moving deeply nested data to separate Integration Procedures.
  5. Use arrays with flatter objects instead of deeply nested hierarchies.
  6. Restructure to keep nesting under 10 levels.
  7. Save the updated schema.
You reached the limit of {number} keys for this data structure.

Integration Procedure JSON schemas have a maximum limit of 500 keys across the entire structure. This includes all keys at all nesting levels combined. Specifically:

  • The JSON input schema contains more than 500 total keys.
  • The JSON output schema contains more than 500 total keys.
  • The schema includes large numbers of fields across multiple nested objects.
  1. Review your JSON schema.
  2. Count the total number of keys across all levels.
  3. Identify sections with excessive keys.
  4. Consider splitting the Integration Procedure into multiple smaller procedures.
  5. Remove unused or redundant keys.
  6. Use arrays to represent repeated structures instead of numbered keys.
  7. Consolidate related fields into sub-objects.
  8. Save the optimized schema.
Tip
Tip If you legitimately need more than 500 keys, consider breaking the process into multiple Integration Procedures that can be chained together.
## Data Mapper Errors
Error Message Potential Causes Potential Resolutions
The sObject you selected for the Input Type field isn’t supported. Check Omnistudio documentation on Salesforce Help for supported alternatives.
  • The selected sObject is not supported for Data Mapper operations.
  • The selected sObject is a system object that doesn't support queries.
  • The selected sObject doesn't have the necessary API support to work with Data Mappers.
  1. Review the sObject you selected as the input type and check Salesforce Help for supported objects.
  2. Consider using a different, related object that is supported.
  3. If you need data from the unsupported object, use an Integration Procedure with custom Apex instead.
  4. Update your Data Mapper configuration with a supported object and save your changes.
Note
Note Most standard and custom objects are supported. If you encounter an unsupported object, consider whether you can restructure your data flow to use a supported alternative.
## OmniAnalytics Errors
Error Message Potential Causes Potential Resolutions
OmniAnalytics isn’t enabled for your org. Contact your Salesforce admin for help.
  • OmniAnalytics for Omnistudio isn’t enabled.
  • Your org hasn't been configured for OmniAnalytics.
  1. Log in as a System Administrator and from Setup, search for Omnistudio Settings or Omni Interaction Configurations.
  2. Locate the OmniAnalytics for Core setting and enable it.
  3. Save your changes and wait a few minutes for the change to take effect.
  4. Test if your analytics tracking works.
Note
Note Verify that Decision Explainer is properly configured.
Something went wrong. Check the format of the component definition ID, see if it belongs to the OmniTrackingComponentDef object, and if it’s in a valid Salesforce ID format.
  • The ID is not in valid Salesforce ID format, with 15 or 18 characters.
  • The ID doesn't belong to the OmniTrackingComponentDef object.
  • The tracking component definition was deleted.
  • The ID is null or malformed.
  1. Verify the component definition ID you're using.
  2. Navigate to Setup > Omnistudio > Analytics Tracking and find the correct tracking component definition.
  3. Copy the correct ID from the record.
  4. Update your code or configuration with the correct ID.
  5. If the definition was deleted, create a new tracking component definition. See Create a Tracking Group and Add Components to Track.
  6. Test the tracking again.
Note
Note Verify that Decision Explainer is properly configured.
# Common Errors and Warnings in the Archive App Errors and warnings that occur when using the Archive app, and how to solve them.
Error Name Error Code Reason Solution
Blocked Domain This site can't be reached. app1.archive.owndata.com unexpectedly closed the connection. A firewall is blocking owndata.com domain and failing the re-authentication process. If this message appears during the onboarding or re-authenticating process, contact Salesforce Support to verify whether Allowlisting is required to access the Own domain.
Bulk Delete Process Halted Bulk Delete Process Halted The process failed as part of the bulk delete process.

Update these configuration settings.

  • Deselect the hard delete option in the Archive Settings.
  • If one of the children failed to delete because of the lookup relation, if possible, deselect the lookup relation.
Connection Reset by Peer Connection Aborted WARNING: Connection Reset by Peer Connection Aborted Likely temporary connection issues with Salesforce. Archive runs and re-runs the policy as scheduled on a daily, weekly, or monthly basis but gets the same error.

Attempt one of these solutions.

  • Rerun the operation.
  • Wait for the next archive policy run.
  • Reduce the number of lookups in the archive policy.
  • If it includes lookup children, split the archive policy. Add other Archive policies where the root objects are the lookup children.
  • If these previous methods fail to resolve the error, contact Salesforce Support. An internal optimization that reduces the probability of getting this error from Salesforce.
Custom Trigger Error Class.TriggerName Custom triggers have been set up and are causing Archive or Unarchive errors.

Attempt one of these solutions.

  • Disable the trigger during the Archive or Unarchive action.
  • If the custom triggers were implemented with byPassValidationAssign, assign the Integration User bypass triggers.
  • Amend the custom trigger logic so that Archive can bypass it.
Delete Operation Too Large DELETE_OPERATION_TOO_LARGE: Cascade dereferencing too many records This issue is commonly the result of a large number of records being associated with the deleted record through a master-detail or lookup relationship. To resolve record deletion performance issues, identify and delete related records, and empty them from the Recycle Bin. For more information, see Error 'Delete Operation Too Large' or too slow when you delete records.
Enable Email Drafts for Cases Not Enabled INVALID_OPERATION Enable Email Drafts for Cases feature isn't enabled. To insert the email message, add the option to enable Draft emails. For more information, see Enable Email Drafts for Cases.
Field Custom Validation Exception—Bad Restricted Picklist Value FIELD_CUSTOM_VALIDATION_EXCEPTION: Bad value for restricted picklist field

When unarchiving, Salesforce can encounter data validations such as validation rules, restricted picklist, and duplicate rules. In addition to this error message, you can receive one of these messages.

  • Validation rule message
  • sf_delete_error_message_object: status_code: FIELD_CUSTOM_VALIDATION_EXCEPTION
  • error_message: bad value for restricted picklist field: Closed Lost - Account Merged; Originating Class: UpdateOpportunityBeforeMergeAccount
  • object_id: 001C000001CVN1sIAH

Attempt one of these solutions.

  • Deselect restricted picklist value and add a new value.
  • Deactivate the new picklist value and replace it with an existing picklist value.
Integrated User Has Limited Permissions The integration user has limited permissions The permission to query storage details using the tooling API is missing.

Add these permissions.

  • API enabled
  • Manage Multi-Factor Authentication in API
  • View Setup and Configuration
Insufficient Access on Cross-Reference Entity INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY: insufficient access rights on cross-reference id: [different record id] Unarchiving requires a reference to the above record, and the Integration User can't access it.

Verify whether the referenced record exists. If the record exists, verify the Integration User's permissions to the record. Verify the Integration User has the ModifyAllData permission.

If the error persists, contact Salesforce Support.

Invalid Record ID Invalid Record ID The External Lookup Relationship reference field isn't supported when expanding the object record page layout to view records via the Archive component or Archive Search. Remove the External Lookup Relationship field from the component or Archive Search fields configuration.
Modify All Permission Required WARNING: Root object of type A Modify All permission is missing, or Salesforce encountered internal issues with references.

Verify that the Integration User has Modify All permission on the relevant record type.

If the error persists, contact Salesforce Support.

OAuth Access Blocked

One or more of these symptoms occur:

  • Archive dashboard doesn't load or shows access errors
  • Connected App shows blocked actions in OAuth Usage
  • Can't access Archive after updating permission sets
Permission changes can invalidate OAuth tokens. Connected App policies may block access.

Attempt these solutions in order.

  • In Setup, go to Connected Apps > Connected Apps OAuth Usage.
  • In the Search field, enter Archive, then select your Archive app.
  • Verify that all actions associated with the app are unblocked. If you see blocked actions, select them and click Unblock.
  • Review the Connected App policies and verify that the System Administrator and Integration User profiles are listed under Permitted Users. If these profiles are missing, add them to the permitted users list.
  • From the App Launcher, open Archive and verify that the dashboard loads without errors.
Record Failed to Delete Unknown_Exception The record failed to delete. No Salesforce error due to Salesforce unknown exception.

Attempt one of these solutions.

  • Reduce the archive policy limit to a smaller number and rerun the policy.
  • Delete one of the IDs manually.
  • If the error persists, contact Salesforce Support.
Record No Longer Exists Unable to unarchive object with original Salesforce Id:01a2B345673rkcaABC. Reference IDs not found: [list of records] The record you're trying to unarchive references a record that's no longer in Salesforce or in Archive. The reference field is obj.field.

Unarchive by disconnecting the root-child relationship.

After you export and download the record, locate the record ID in the CSV file.

Nullify the field, save your changes, and import the file to Salesforce via an ELT tool.

Then purge the record from the Archive database.

Related Tab Error Error Show related object details operation encountered an error, contact support and provide them with this Error code - 10085#10087#10142#10178 Clicking the Related tab in Archive Search triggers an error. Verify the Archive Settings under Search and Component Layout. Remove any non-indexed fields from the selected fields.
Revoked Authentication Token Get Organization Storage Statistics operation encountered an error, please contact support and provide them with this Error code - 10076#10035#10200. The authentication token has been revoked or IP access is blocked to the Archive backend servers.

Attempt one of these solutions.

Secure Static Resources for Lightning Components Error Error: lightning/platformResourceLoader encountered an error loading. The Archive page fails to load.

Secure Static Resources for Lightning Components is enabled, which can happen when you:

  • Download execution details from Activities tab.
  • Load Archive Dashboard custom components in the home page.
  • Load Archive Search.
  • Reconfigure the Region.

Contact Salesforce Support and request to deactivate these Secure Static Resources for Lightning components.

  • AuraSecStaticResCRUCPerm—Permission to hide Aura Secure Static Resources release update on new orgs.
  • AuraSecStaticResCRUCPref—Org preference that enables Aura Secure Static Resources release update.
Too Many Failures Too_many_failures: failures limit crossed A query failed to archive records due to a trigger, dependency, or validation rule.

Disable the trigger or validation rule that inhibits the policy from deleting this record.

If this error is due to a dependency, archive the referenced dependency before you archive the record.

Unarchive Apex Request Rate Exceeded Error Message: {"error_code": "VALIDATION _ERROR", "error_message": "Exceeded maximum Unarchive SDK request rate."} You sent too many requests within the given time. Apex supports up to 50 Unarchive requests per hour. Wait and try again later.
Wrong Archived Root Record Referenced Unarchive Failed: The record can't be unarchived because it references another archived root record. To resolve this issue, adjust the Unarchive Reference setting and try again. Unarchive failed because the record references another archived root record. Update the Unarchive Reference setting to permit unarchiving of records with archived references.
Wrong Reference ID Unable to unarchive object with original Salesforce Id: 01a2B345673rkcaABC Reference IDs currently archived: [list of archived records] The record you're trying to unarchive references another archived record. The missing records are listed in the the Failed Records column of a CSV file that you can download from the Activities tab.

Attempt one of these solutions.

  • Unarchive the root record before unarchiving the child record. For more information, see Enable Unarchive When Parent Record Archived.
  • Unarchive by disconnecting the root-child relationship.

    After you export and download the record, locate the record ID in the CSV file.

    Nullify the field, save your changes, and import the file to Salesforce via an ELT tool.

    Then purge the record from the Archive database.

Policy Preview No Records Found No records matching your policy criteria were found in the preview sample. All records were filtered by policy constraints, such as ContentDocument owner requirements. The policy preview filtered all candidate records due to policy constraints. This can happen when your SOQL query returns records that don't meet the policy's filtering requirements.

Attempt one of these solutions.

  • Refine your SOQL query to target records linked to the selected parent object.
  • Run the full policy to see actual results instead of relying on the preview sample.
# Common Integration Procedure Action Properties (Managed Package) For the managed package runtime, to compose an Integration Procedure, you add a sequence of actions. To configure an action, you set the action's properties. Standard properties that exist in most or all actions are listed here. All properties are of the String data type unless otherwise noted. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). For details about the properties of specific actions, see the topics for the actions.

Property

Description

Element Name

Label of script element

Send JSON Path

Trims the incoming JSON to the specified path before the action is executed. See Manipulate JSON with the Send/Response Transformations Properties (Managed Package).

Send JSON Node

Reparents the incoming JSON under the specified node. See Manipulate JSON with the Send/Response Transformations Properties (Managed Package).

Response JSON Path

After the action is executed, trims the output JSON to the specified path. See Manipulate JSON with the Send/Response Transformations Properties (Managed Package).

Response JSON Node

Reparents the output JSON under the specified node. To delimit the path, use colons; for example, level1:level2:level3. See Manipulate JSON with the Send/Response Transformations Properties (Managed Package).

Send Only Additional Input

If checked, accepts only the data in the Additional Input property.

Additional Input

Additional key-value pairs to be included in the input JSON data. Values can include formulas and merge fields.

Return Only Additional Output

If checked, returns only the data in the Additional Output property.

Additional Output

Additional key-value pairs to be returned in the output JSON data. Values can include formulas and merge fields.

Send Only Failure Response

If checked, returns only the Failure Response if the action fails.

Failure Response

Key-value pairs to be returned in the output JSON data if the action fails. Values can include formulas and merge fields.

Execution Conditional Formula

Specifies a formula that runs before the step is executed. If the formula returns TRUE, the step is executed. If the formula returns FALSE, the step isn't executed. If no formula is specified, the step is executed.

Failure Conditional Formula

Specifies a custom failure condition that runs after the step is executed.

For example, the Omnistudio Data Mapper Extract Action failing to find any records isn't normally considered an error. But you can use a Failure Conditional Formula to specify this condition. See the second example under Handle Errors Using Try-Catch Blocks (Managed Package).

If the formula returns TRUE, execution of the step has failed and any key-value pairs configured in the Failure Response list are added to the JSON data. For example, if this JSON is returned:

{
  "Result": {
    "ErrorCode": "ERR-123",
    "Success": "FALSE"
    }
}

These settings identify the error and add the error code to the JSON data:

  • Failure Conditional Formula: Result:Success == 'FALSE'

  • Failure Response:

    • Key: ErrorCode

    • Value: %StepName:Result:ErrorCode%

Fail On Step Error

If set to TRUE, the Integration Procedure ends if this step fails.

Chain On Step

Allows the action to run in its own Salesforce transaction. This property can slow performance but decreases the likelihood of exceeding the Salesforce governor limits. For more information, see Settings for Long-Running Integration Procedures (Managed Package).

Additional Chainable Response

Specifies a key-value pair that is sent in the response. The value field accepts merge field syntax.

Action Message

Sends a message to the user if this Action Message is the first in the Integration Procedure or if this action is chained. Useful for long-running actions.

Internal Notes

Descriptive text that's visible only to designers of the Integration Procedure.

# Common Omniscript Element Properties Each Omniscript element has settings, some of which are unique to that element. Some settings are common among the elements, though some of these setting aren’t available in all elements. To edit these settings, use the Properties pane on the Designer.

Property

Description

Add Condition

Add additional test conditions to an element's Conditional View.

See Conditionally Display Omniscript Elements.

Add Group

Group conditions to create complex expressions. A group enables a set of conditionals to have a separate AND/OR operator. For example, you can connect two groups with OR, but inside of each group you can use AND to ensure the group tests are true.

Available For Prefill When Hidden

Data JSON can prefill the element when it’s hidden by a conditional.

Autocomplete Input

Enable users to automatically complete values according to the input's information type. For example, adding tel to a Telephone input element enables automatic completion for phone numbers. For a full list of attributes, see HTML attribute: autocomplete.

Conditional View

If conditions in this field are met, the element displays become editable or are marked as required. The Value field supports merge syntax.

See Conditionally Display Omniscript Elements.

Conditional Type

Condition types determine whether an element shows disables read only or becomes required when the conditions evaluate to true.

See Conditionally Display Omniscript Elements.

Control Width

Displays the width of the control on the page, using a range of 1-12.

Default Value

Sets a default value for the element. If the element has been prefilled with a value, the default value doesn’t overwrite the prefilled value. Supports merge syntax.

Set a Default Value for an Omniscript Element

Element Name

The unique identifier for the element. Element Names can’t contain spaces and must be unique in an Omniscript.

Field Width

Displayed if the Label outside of field checkbox is checked. Specifies the width of the input field separate from the Control Width. Useful if the label is longer than the expected input.

Help Text

The text displayed when the user hovers over the help icon.

Help

Determines if a help icon is displayed to the user.

Help Text Position

Specifies the help text's position.

Internal Notes

Add notes about this element for reference during design. Internal notes appear only in the Omniscript designer and aren't shown to users at runtime.

The field is labeled Internal Notes for Step elements and Notes for all other Omniscript elements. After editing and saving the field in the Omniscript designer, refresh the designer and select the element again to see the updated value. At runtime, the saved value is visible but cannot be edited.

Label outside of field

For input components, specifies whether the label displays outside the field. Valid only when using the Lightning Experience.

Label

Display a label for the control.

Mask

Sets the format for user input. Use A for any letter, 9 for any number, * for any character, and [ ] to enclose optional characters. For example, (999) 999-9999 matches any US-based phone number. For more information about patterns, see Pattern Mask at https://imask.js.org/guide.html#masked-pattern.

When you set the Mask property on text fields, Salesforce shows the default error message instead of custom error messages for those fields.

Maximum Length

Maximum number of characters the user can enter.

Minimum Length

Minimum number of characters the user can enter.

Options

An array of input selections for dropdown, multi-select, and radio button controls.

Pattern Error Text

Message displayed if the input doesn’t match the expression.

Pattern

The pattern flag is used to enforce data validation before submitting. Currently, complex patterns aren’t supported, but simple pattern matching works. The patterns accept regular expressions (regex), and custom error text.

Placeholder

Displays placeholder text in empty fields. Placeholder text isn’t applicable if masking is enabled.

Read-Only

If true, the user can’t modify the value in the field.

Copy Elements

Repeat (in the designer for a managed package)

If true for an element or block, a user can click + to copy the element or blocks of elements on the form.

Prefill Repeatable Blocks

Clone When Repeating

Repeat Clone (in the designer for a managed package)

If true, any values from the element or block of elements are copied to repeated instances of the element or block.

Limit Repeat

Specifies the number of times this element can be repeated. For example, to set a maximum of two repetitions, set Repeat Limit to 1.

Required

Specifies whether the user must enter a value in order to submit the form.

Show/Hide Operator

Determines whether multiple conditions must be met to render an Omniscript. When set to All Conditions Are Met, an AND operator checks if all conditions are valid. When set to Any Condition Is Met, an OR operator checks if any of the conditions are valid.

Show Message As

Display the message inline or as a toast.

Toast Mode

Determines the persistence of the toast. Sticky mode shows the toast until the user closes the message. Pester displays the toast for three seconds. Dismissable displays the toast for three seconds or until the user closes it.

Extra Payload

Sends additional Key/Value pairs. Supports merge field syntax.

Remote Class

Specify a Vlocity Open Interface Class.

Remote Method

Specify a Vlocity Open Interface Method.

Remote Options

Key/value pairs that specify additional class invocation options.

# Common Omniscript Element Properties Definitions (Managed Package) For the managed package runtime, each element also includes an extensible Property set that's specific to the type of element. Use the Properties pane on the Designer to edit these properties. Some common element properties aren’t available in certain elements. This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Property

Description

Example

Add Condition

Add additional test conditions to an element's Conditional View.

Use the Conditional View Property to Conditionally Display Elements (Managed Package).

Add Group

Group conditions to create complex expressions. A group enables a set of conditionals to have a separate AND/OR operator. For example, you can connect two groups with OR, but inside of each group you can use AND to ensure the group tests are true.

n/a

Available For Prefill When Hidden

Data JSON can prefill the element when it’s hidden by a conditional.

n/a

Autocomplete

Enable users to automatically complete values according to the input's information type. For example, adding tel to a phone input element enables automatic completion for phone numbers. For a full list of attributes, see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete.

n/a

Conditional View

If conditions in this field are met, the element displays become editable or are marked as required. The Value field supports merge syntax.

Use the Conditional View Property to Conditionally Display Elements (Managed Package).

Conditional Type

Condition types determine whether an element shows disables read only or becomes required when the conditions evaluate to true.

Control Width

Display the width of the control on the page, using a range of 1-12.

n/a

Default Value:

Sets a default value for the element. If the element has been prefilled with a value, the default value doesn’t overwrite the prefilled value. Supports merge syntax.

Element Name

The unique identifier for the element. Element Names can’t contain spaces and must be unique in an Omniscript.

n/a

Field Width

Displayed if the Label outside of field checkbox is checked. Specifies the width of the input field separate from the Control Width. Useful if the label is longer than the expected input.

n/a

Help Text

The text displayed when the user hovers over the help icon.

n/a

Help

Determines if a help icon is displayed to the user.

n/a

Help Text Position

Specifies the help text's position.

n/a

Internal Notes

Add notes about this element for reference during design. Internal notes appear only in the Omniscript Designer and aren't shown to users at runtime.

The field is labeled Internal Notes for Step elements and Notes for all other Omniscript elements. After editing and saving the field in the Omniscript Designer, refresh the designer and select the element again to see the updated value. At runtime, the saved value is visible but cannot be edited.

n/a

Label outside of field

For input components, specifies whether the label displays outside the field. Valid only when using the Lightning Experience.

n/a

Label

Displays a label for the control.

n/a

Mask

Sets the format for user input. Use A for any letter, 9 for any number, * for any character, and [ ] to enclose optional characters. For example, (999) 999-9999 matches any US-based phone number. For more information about patterns, see Pattern Mask at https://imask.js.org/guide.html#masked-pattern.

When you set the Mask property on text fields, Salesforce shows the default error message instead of custom error messages for those fields.

n/a

Maximum Length

Maximum number of characters the user can enter.

n/a

Minimum Length

Minimum number of characters the user can enter.

n/a

Options

An array of input selections for dropdown, multi-select, and radio button controls.

n/a

Pattern Error Text

Message displayed if the input doesn’t match the expression.

n/a

Pattern

The pattern flag is used to enforce data validation before submitting. Currently, complex patterns aren’t supported, but simple pattern matching works. The patterns accept regular expressions (regex), and custom error text.

Regular Expressions

Placeholder

Displays placeholder text in empty fields. Placeholder text isn’t applicable if masking is enabled.

n/a

Read Only

If true, the user can’t modify the value in the field.

n/a

Repeat

If true for an element or block, a user can click + to copy the element or blocks of elements on the form.

Repeat Clone

If true, any values from the element or block of elements are copied to repeated instances of the element or block.

n/a

Repeat Limit

Specifies the number of times this element can be repeated. For example, to set a maximum of two repetitions, set Repeat Limit to 1.

n/a

Required

Specifies whether the user must enter a value in order to submit the form.

n/a

Show/Hide Operator

Determines whether multiple conditions must be met to render an Omniscript. When set to All Conditions Are Met, an AND operator checks if all conditions are valid. When set to Any Condition Is Met, an OR operator checks if any of the conditions are valid.

n/a

Show Message As

Display the message inline or as a toast.

n/a

Toast Mode

Determines the persistence of the toast. Sticky mode shows the toast until the user closes the message. Pester displays the toast for three seconds. Dismissable displays the toast for three seconds or until the user closes it.

n/a

# Common Rebate Type Configurations Use different rebate types to reward members based on sales volume, revenue targets, or growth. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
## Volume-Based Rebate Type Reward members for attaining specific sales volumes. Partners receive incremental benefits for achieving higher quantity thresholds. The accrual for a period depends on transaction quantity. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_example.png) Example - Amount per unit: Accrues $2 per unit when the transaction quantity is less than 1,000 units, and $3 per unit when the transaction quantity exceeds 1,000 units. - Percentage of revenue: Accrues 2% of total revenue when the transaction quantity is less than 5,000 units, and 5% when the transaction quantity exceeds 5,000 units. - Calculation Type: Aggregate Based - Measure Type: Amount per Unit or Percentage of Revenue - Measure Field: Quantity - Calculation Method: Retrospective or Stepped ## Revenue-Based Rebate Type Reward members for attaining specific revenue targets. Partners receive incremental benefits for attaining higher revenue thresholds. The accrual for a period depends on the transaction amount. For example: ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_example.png) Example - Amount per unit: Accrues $2 per unit when the transaction amount is less than $10,000, and $3 per unit when the transaction amount exceeds $10,000. - Fixed amount: Accrues a fixed $500 when the total transaction amount exceeds $10,000 for the Compactor product category. - Calculation Type: Aggregate Based - Measure Type: Amount per Unit or Fixed Amount - Measure Field: Revenue ## Flat Rebates Reward your partners with a flat rebate for attaining specific thresholds. Use this rebate type when you don't want to scale your payouts. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_example.png) Example - Fixed amount: Offers a $10 rebate per transaction for the Compactor products, and a $20 rebate per transaction for the Hammer products. - Percentage of revenue: Offers a rebate of 10% of the current revenue for all transactions after the total quantity exceeds 1200 units. - Calculation Type: Per Transaction or Aggregate Based - Measure Type: Fixed Amount or Percentage of Revenue # Common Rebate Type Configurations Use different rebate types to reward members based on sales volume, revenue targets, or growth. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
## Volume-Based Rebate Type Reward members for attaining specific sales volumes. Partners receive incremental benefits for achieving higher quantity thresholds. The rebate for a payout period depends on the transaction quantity. - **Example:** - Amount per unit: Offers a $2 rebate per unit when the transaction quantity is less than 1000 units and a $3 rebate per unit when the transaction quantity exceeds 1001 units. - Percentage of revenue: Offers a 2% rebate on total revenue when the transaction quantity is less than 5000 units and a 5% rebate when the transaction quantity exceeds 5000 units. - **Calculation Type:** Aggregate Based - **Measure Type:** Amount per Unit or Percentage of Revenue - **Measure Field:** Quantity - **Calculation Method:** Retrospective or Stepped ## Revenue-Based Rebate Type Reward members for attaining specific revenue targets. Partners receive incremental benefits for attaining higher revenue thresholds. The rebate for a payout period depends on the transaction amount. For example: - **Example:** - Amount per unit: Offers a $2 rebate per unit when the transaction amount is less than $10,000 and a $3 rebate per unit when the transaction amount exceeds $10,001. - Fixed amount: Offers a fixed rebate of $500 when the total transaction amount exceeds $10,000 for the Compactor product category. - **Calculation Type:** Aggregate Based - **Measure Type:** Amount per Unit or Fixed Amount - **Measure Field:** Revenue ## Growth-Based Rebate Type Reward your partners for annual growth in revenue or volume of sales. Partners receive incremental benefits for attaining higher growth thresholds. The volume or revenue for a specific payout period is compared with the values for the same period the previous year. - **Example:** - Percentage of revenue: Offers a 2% rebate on the current revenue when the growth quantity exceeds 10,000 units. - Fixed amount: Offers a $500 rebate when the annual revenue growth is less than 6%. and a $1000 rebate when the annual revenue growth exceeds 6%. - **Calculation Type:** Growth Based - **Measure Field:** Revenue or Quantity ## Flat Rebates Reward your partners with a flat rebate for attaining specific thresholds. Use this rebate type when you don’t want to scale your payouts. - **Example:** - Fixed amount: Offers a $10 rebate per transaction for the Compactor products, and a $20 rebate per transaction for the Hammer products. - Percentage of revenue: Offers a rebate of 10% of the current revenue for all transactions after the total quantity exceeds 1200 units. - **Calculation Type:** Per Transaction or Aggregate Based - **Measure Type:** Fixed Amount or Percentage of Revenue # Communicate from Omniscript to a Lightning Web Component Send data from Omniscript actions and steps to other Lightning web components using the Publish and Subscribe property. Before you begin, review the documentation on using PubSub. See [Communicate Between Components](https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.events_pubsub). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note The `pubsub` module doesn’t operate when the Standard Runtime is enabled. Work around this limitation by using `window post message` (wpm) or `session storage message` (ssm). For more information, see [Message with Window Post Messages and Session Storage Messages.](https://help.salesforce.com/s/articleView?id=xcloud.os_messaging_framework_11452.htm&language=en_US) The Pub/Sub property enables Action and Step elements to send data in key-value pairs to other Lightning web components. Lightning web components must register the Omniscript component's event name and add code to handle the data sent from the event. 1. In an Omniscript action or step, in the Properties panel, under Messaging Framework, select **Pub/Sub**. 2. In the Key and Value fields, configure which data to pass to another Lightning web component. 1. For Key, enter a name to store the value. 2. For Value, enter data to pass to the Lightning web component. The field accepts merge syntax.

Action Example

Step Example

Pass data from the action's response in the Value field using merge syntax. For example, to pass the response node "accountId", enter %accountId% for the value.

Pass data from an element within the step using merge syntax. For example, to pass a text element named Text1, enter %Text1% for the value.

3. Activate the Omniscript. 4. In an Lightning web component that receives data from the Action or Step, import the pubsub module. ``` import pubsub from 'namespace/pubsub'; ``` 5. In the Lightning web component, register the pubsub event using this code without replacing anything. The even must register after the component renders.

Action pubsub Event

Step pubsub Event

pubsub.register('omniscript_action', {
    data: this.handleOmniAction.bind(this),
});
pubsub.register('omniscript_step', {
    data: this.handleOmniStepLoadData.bind(this),
});
6. In the Lightning web component, create a pubsub event handler.

Action Event Handler Example

Step Event Handler Example

handleOmniAction(data) {
  // perform logic to handle the Action's response data
}
handleOmniStepLoadData(data) {
  // perform logic to handle the pubsub data from the Step
}
7. (Optional) If different actions or steps require different logic, use a switch statement to describe how to handle the event. For information on switch statements, see[switch](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch).

Action Example

Step Example

Access the action's Element Name using data.name.

handleOmniAction(data) {
  switch(data.name) {
    case 'SomeNameForAction':
      this.handleSomeNameForAction(data);
      break;
    case 'SomeNameForAction2':
      this.handleSomeNameForAction2(data);
      break;
    default:
      // handle default case
  }
}

handleSomeNameForAction(data) {
    // perform some logic specific to SomeNameForAction action
    // that has element name = "SomeNameForAction"
}

handleSomeNameForAction2(data) {
    // perform some logic specific to SomeNameForAction2 action
    // that has element name = "SomeNameForAction2"
}

Access the step's Element Name using data.name.

handleOmniStepLoadData(data) {
  switch(data.name) {
    case 'FirstStep':
      this.handleOmniFirstStepLoadData(data);
      break;
    case 'SecondStep':
      this.handleOmniSecondStepLoadData(data);
      break;
    default:
      // handle default case
  }
}

handleOmniFirstStepLoadData(data) {
    // perform some logic specific when a Step element which name is
    // FirstStep is loaded
}

handleOmniSecondStepLoadData(data) {
    // perform some logic specific when a Step element which name is
    // SecondStep is loaded
}

Access the action's Element Type using data.type.

handleOmniAction(data) {
  switch(data.type) {
    case 'Integration Procedure Action':
      this.handleIPActionPubsubEvents(data);
      break;
    case 'Remote Action':
      this.handleRemoteActionPubsubEvents(data);
      break;
    default:
      // handle default case
  }
}

handleIPActionPubsubEvents(data) {
    // perform some logic specific to Integration Procedure Actions
}

handleRemoteActionPubsubEvents(data) {
    // perform some logic specific to Remote Actions
}

n/a

# Communicate from Omniscript to a Lightning Web Component (Managed Package) For the managed package runtime, send data from Omniscript Actions and Steps to other Lightning web components using the Pub/Sub property. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before you begin, review the documentation on using PubSub. See [Communicate Between Components](https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.events_pubsub). The Pub/Sub property enables action elements and step elements to send data in key-value pairs to other Lightning web components. Lightning web components must register the Omniscript component's event name and add code to handle the data sent from the event. Beginning with Vlocity Insurance and Health Spring '20, the Step element supports the Pub/Sub property. 1. In an Omniscript Action or Step, select the Messaging Framework and check **Pub/Sub**. 2. In the key and value fields, configure which data to pass to another Lightning web component. 1. For Key, enter a name to store the value. 2. For Value, enter data to pass to the Lightning web component. The field accepts merge syntax.

Action Example

Step Example

Pass data from the action's response in the value field using merge syntax. For example, to pass the response node "accountId", enter %accountId% in the Value field.

image

Pass data from an element within the step using merge syntax. For example, to pass a Text element named Text1, enter %Text1% in the Value field.

image
3. Activate the Omniscript. 4. In an Lightning web component that receives data from the action or step, import the pubsub module. Using this example, replace `ns` with the namespace of your Vlocity package. ``` import pubsub from 'ns/pubsub'; ``` 5. In the Lightning web component, register the pubsub event using this code without replacing anything. The even must register after the component renders.

Action pubsub Event

Step pubsub Event

pubsub.register('omniscript_action', {
    data: this.handleOmniAction.bind(this),
});
pubsub.register('omniscript_step', {
    data: this.handleOmniStepLoadData.bind(this),
});
6. In the Lightning web component, create a pubsub event handler.

Action Event Handler Example

Step Event Handler Example

handleOmniAction(data) {
  // perform logic to handle the Action's response data
}
handleOmniStepLoadData(data) {
  // perform logic to handle the pubsub data from the Step
}
7. (Optional) If different actions or steps require different logic in the code, use a switch statement to determine how to handle the event. For information on switch statements, see [switch](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch).

Action Example

Step Example

Access the action's Element Name using data.name.

handleOmniAction(data) {
  switch(data.name) {
    case 'SomeNameForAction':
      this.handleSomeNameForAction(data);
      break;
    case 'SomeNameForAction2':
      this.handleSomeNameForAction2(data);
      break;
    default:
      // handle default case
  }
}

handleSomeNameForAction(data) {
    // perform some logic specific to SomeNameForAction action
    // that has element name = "SomeNameForAction"
}

handleSomeNameForAction2(data) {
    // perform some logic specific to SomeNameForAction2 action
    // that has element name = "SomeNameForAction2"
}

Access the step's Element Name using data.name.

handleOmniStepLoadData(data) {
  switch(data.name) {
    case 'FirstStep':
      this.handleOmniFirstStepLoadData(data);
      break;
    case 'SecondStep':
      this.handleOmniSecondStepLoadData(data);
      break;
    default:
      // handle default case
  }
}

handleOmniFirstStepLoadData(data) {
    // perform some logic specific when a Step element which name is
    // FirstStep is loaded
}

handleOmniSecondStepLoadData(data) {
    // perform some logic specific when a Step element which name is
    // SecondStep is loaded
}

Access the action's Element Type using data.type.

handleOmniAction(data) {
  switch(data.type) {
    case 'Integration Procedure Action':
      this.handleIPActionPubsubEvents(data);
      break;
    case 'Remote Action':
      this.handleRemoteActionPubsubEvents(data);
      break;
    default:
      // handle default case
  }
}

handleIPActionPubsubEvents(data) {
    // perform some logic specific to Integration Procedure Actions
}

handleRemoteActionPubsubEvents(data) {
    // perform some logic specific to Remote Actions
}

n/a

# Communicate from Omniscript to a Lightning Web Component (Managed Package) For the managed package runtime, send data from Omniscript actions and steps to other Lightning web components using the Publish and Subscribe property. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The Pub/Sub property enables action and step elements to send data in key-value pairs to other Lightning web components. Lightning web components must register the Omniscript component's event name and add code to handle the data sent from the event. Before You Begin Review the documentation on using the `pubsub` module. See [Communicate Between Components](https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.events_pubsub). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note The `pubsub` module doesn’t operate when the Standard Runtime is enabled. Work around this limitation by using `window post message` (wpm) or `session storage message` (ssm). For more information, see [Message with Window Post Messages and Session Storage Messages.](https://help.salesforce.com/s/articleView?id=xcloud.os_message_with_window_post_messages_and_session_storage_messages_11635.htm&type=5&language=en_US) 1. In an Omniscript action or step, in the Properties panel, under Messaging Framework, select **Pub/Sub**. 2. In the Key and Value fields, configure the data to pass to another Lightning web component. 1. For Key, enter a name to store the value. 2. For Value, enter data to pass to the Lightning web component. The field accepts merge syntax.

Action Example

Step Example

Pass data from the action's response in the Value field using merge syntax. For example, to pass the response node "accountId", enter %accountId% for the value.

image

Pass data from an element within the step using merge syntax. For example, to pass a text element named Text1, enter %Text1% for the value.

image
3. Activate the Omniscript. 4. In a Lightning web component that receives data from the action or step, import the `pubsub` module. Using this example, replace `ns` with the namespace of your Vlocity package. ``` import pubsub from 'ns/pubsub'; ``` 5. In the Lightning web component, register the pubsub event using this code without replacing anything. The event must register after the component renders.

Action pubsub Event

Step pubsub Event

pubsub.register('omniscript_action', {
    data: this.handleOmniAction.bind(this),
});
pubsub.register('omniscript_step', {
    data: this.handleOmniStepLoadData.bind(this),
});
6. In the Lightning web component, create a pubsub event handler.

Action Event Handler Example

Step Event Handler Example

handleOmniAction(data) {
  // perform logic to handle the Action's response data
}
handleOmniStepLoadData(data) {
  // perform logic to handle the pubsub data from the Step
}
7. If different actions or steps require different logic, use a switch statement to describe how to handle the event. For information on switch statements, see [switch](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch).

Action Example

Step Example

Access the action's Element Name using data.name.

handleOmniAction(data) {
  switch(data.name) {
    case 'SomeNameForAction':
      this.handleSomeNameForAction(data);
      break;
    case 'SomeNameForAction2':
      this.handleSomeNameForAction2(data);
      break;
    default:
      // handle default case
  }
}

handleSomeNameForAction(data) {
    // perform some logic specific to SomeNameForAction action
    // that has element name = "SomeNameForAction"
}

handleSomeNameForAction2(data) {
    // perform some logic specific to SomeNameForAction2 action
    // that has element name = "SomeNameForAction2"
}

Access the step's Element Name using data.name.

handleOmniStepLoadData(data) {
  switch(data.name) {
    case 'FirstStep':
      this.handleOmniFirstStepLoadData(data);
      break;
    case 'SecondStep':
      this.handleOmniSecondStepLoadData(data);
      break;
    default:
      // handle default case
  }
}

handleOmniFirstStepLoadData(data) {
    // perform some logic specific when a Step element which name is
    // FirstStep is loaded
}

handleOmniSecondStepLoadData(data) {
    // perform some logic specific when a Step element which name is
    // SecondStep is loaded
}

Access the action's Element Type using data.type.

handleOmniAction(data) {
  switch(data.type) {
    case 'Integration Procedure Action':
      this.handleIPActionPubsubEvents(data);
      break;
    case 'Remote Action':
      this.handleRemoteActionPubsubEvents(data);
      break;
    default:
      // handle default case
  }
}

handleIPActionPubsubEvents(data) {
    // perform some logic specific to Integration Procedure Actions
}

handleRemoteActionPubsubEvents(data) {
    // perform some logic specific to Remote Actions
}

n/a

# Communication Security The Salesforce mobile app always uses highest level of secure communications and encryption to safeguard your data. The Salesforce mobile app uses SSL/TLS v1.2 for Over-The-Air (OTA) communication encryption. All Salesforce OAuth authorization endpoints are HTTPS only. Salesforce servers deny communication requests below TLS v1.2. # Compare Classic Rebate Management and Rebate and Accrual Management Advanced Rebate and Accrual Management Advanced builds on Classic Rebate Management. It adds accrual-based liability tracking and runs calculations on Data 360 with the Accrual and Payout Engine, so you can process high transaction volumes and recognize financial liabilities independently of payouts. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
Use this comparison to understand what each option does and what changes when you move to Advanced. | Capability | Classic Rebate Management | Rebate and Accrual Management Advanced | | --- | --- | --- | | What it's for | Calculate rebate payouts when partners meet sales targets | Track financial liabilities (accruals) and calculate payouts | | Program setting | Execution Type set to Classic | Execution Type set to Advanced | | Accrual tracking | Calculates accruals for each payout period, using the calculation basis and accrual rate set on the rebate type | Uses dedicated accrual periods with high-frequency recognition (weekly or monthly) on a Data 360 engine, so you track liabilities ahead of payout. | | Accrual and payout cadence | Accruals follow the same payout-period cadence | Set accrual frequency and logic independently from payout frequency and logic | | Calculation engine | DPE calculation definitions run in your Salesforce org (one calculation definition per rebate type) | Accrual and Payout Engine — six DPE definitions that run in sequence on Data 360 | | Scale and performance | Runs on Salesforce core | Processes millions of records on Data 360 with Batch Transforms, without impacting the core org | | Aggregation dimensions | Rebate Member Product Aggregate (member and product) | Anchors in Data 360 — up to 5 (account, product, and 3 custom such as region, territory, or channel) | | Benefit mapping | Mapped through Rebate Member Product Aggregate | Mapped through the Payout Source Field on benefit mappings | | Transaction input | Transaction Journal | Transaction Journal, or the `AccrualAndPayoutInputDayIngest` data lake object (DLO) directly in Data 360 | | Adjustments | Payout adjustments | Accrual adjustments and payout adjustments | | Key objects | Standard rebate objects | Adds accrual periods, accrual sources, data lake objects (DLOs), and Rule Meta and Input Meta objects | # Compare Lightning Experience and Salesforce Classic Here are some highlights of how Lightning Experience compares with what you’re used to in Salesforce Classic. The list includes features that are available only in Lightning Experience. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note These tables aren’t a complete list of Salesforce Classic-only features, nor do the tables include all of the features that are available only in Lighting Experience. See [Gaps Between Salesforce Classic and Lightning Experience](https://help.salesforce.com/s/articleView?id=xcloud.lex_considerations_intro.htm&release=264.0.0&type=5 "Learn about Salesforce Classic features that aren’t available in Lightning Experience. Because Lightning Experience re-envisions the Salesforce Classic, there are some classic features that have been implemented differently or don’t have a place in the new interface. If your users need features that aren’t in Lightning Experience, they can switch to Salesforce Classic and keep working.") for details about features that aren’t available in Lightning Experience. ## Salesforce Data
Feature Lightning Experience Salesforce Classic

Sales data for:

  • Accounts
  • Campaigns
  • Contacts
  • Contracts
  • Leads
  • Opportunities
  • Orders
  • Person Accounts
  • Price Books
  • Products
  • Quotes
Available Available
Calendar, Events, Tasks Available Available

Service data for:

  • Assets
  • Basic Cases
  • Lightning Knowledge
  • Work Orders
Available Available
Custom objects Available Available
Chatter feeds, groups, and people Available Available
Salesforce Files Available Available
Other Sales and Service objects Not Available Available
## Home | Feature | Lightning Experience | Salesforce Classic | | --- | --- | --- | | Performance chart | Available | Not Available | | Assistant | Available | Not Available | | News | Available | Not Available | | Key deals | Available | Not Available | | Tasks | Available | Available | | Events | Available | Available | | Calendar | Available | Available | | Feed and publisher | Available | Available | | Items to approve | Available | Available | | Customizable dashboards | Available | Available | | Customizable home page components | Available | Available | ## Accounts and Contacts | Feature | Lightning Experience | Salesforce Classic | | --- | --- | --- | | News | Available | Not Available | | Path | Available | Not Available | | Activity timeline | Available | Not Available | | Contacts to Multiple Accounts | Available | Available | | Account Logos | Available | Not Available | | Automated Account Fields | Available | Not Available | | Notes | Available | Not Available | | “Reference” page layout | Available | Not Available | | Related lists | Available | Available | | Integrated email and templates | Available | Available | | Twitter highlights | Available | Available | | Person accounts | Available | Available | | Account teams | Available | Available | | Account hierarchy | Available | Available | | Contact hierarchy | Available | Available | | Find and merge duplicate accounts and contacts | Available | Available | | Matching and duplicate rules for business accounts, person accounts, and contacts | Available | Available | ## Campaigns | Feature | Lightning Experience | Salesforce Classic | | --- | --- | --- | | Campaign member status charts | Available | Not Available | | Import campaign members | Available | Available | | Add individual campaign members | Available | Available | | Campaign member status updates via import | Available | Available | | Clone campaign members | Available | Available | | Add and manage campaign members from a list view | Available | Available | | Add campaign members from reports | Available | Available | ## Leads | Feature | Lightning Experience | Salesforce Classic | | --- | --- | --- | | Workspace page layout | Available | Not Available | | Activity timeline | Available | Not Available | | Path | Available | Not Available | | News | Available | Not Available | | Notes | Available | Not Available | | Change lead owner to a queue | Available | Available | | Integrated email and templates | Available | Available | | Lead conversion customization via the API | Available | Available | | Find and merge duplicate leads | Available | Available | | Matching and duplicate rules for leads | Available | Available | ## Opportunities | Feature | Lightning Experience | Salesforce Classic | | --- | --- | --- | | Workspace page layout | Available | Not Available | | Activity timeline | Available | Not Available | | Path | Available | Not Available | | Notes | Available | Not Available | | Visual view of opportunities (Kanban) | Available | Not Available | | Integrated email and templates | Available | Available | | Opportunity teams | Available | Available | | Opportunity splits | Available | Available | | Similar opportunities | Not Available | Available | | Big Deal Alerts | Available | Available | | Opportunity deal change highlights | Available | Not Available | ## Salesforce Einstein
Feature Lightning Experience Salesforce Classic
Analytics
Einstein Discovery Available Available
Chatter
Einstein Recommendations Available Available
Community
Einstein Related Articles Available Available
Einstein Feed Search Available Available
Customization
Einstein Prediction Builder: Setup Available Not Available
Einstein Prediction Builder: Predictions on Records Available Available
Einstein Next Best Action: Strategy Builder Available Not Available
Einstein Next Best Action: Recommendations Available Available
Development
Einstein Language Available Available
Einstein Vision Available Available
Sales
Einstein Activity Capture Available Not Available
Einstein Lead Scoring Available Available
Einstein Opportunity Scoring Available Available
Einstein Forecasting Available Available
Einstein Opportunity Insights Available Not Available
Einstein Account Insights Available Not Available
Einstein Automated Contacts Available Not Available
Search
Einstein Search Available Not Available
Service
Einstein Bot Builder: Setup Available Not Available
Einstein Bot Builder Available Available
Einstein Case Classification: Setup Available Not Available
Einstein Case Classification: Agent Console Available Available
## Forecasting
Feature Lightning Experience Salesforce Classic

Forecasting on:

  • Opportunity splits
  • Overlay splits
  • Custom currency fields on opportunities
  • Product families
Available Available
Custom measure (currency and number) forecasts on Opportunity, Opportunity Product, Opportunity Split, and Line Item Schedule Available Not Available
Revenue and quantity forecasts Available Available
Product and schedule date forecasts Available Not Available
Territory forecasts Available Not Available
Forecast sharing Available Not Available
Manager and owner adjustments Available Available
Cumulative forecast rollups Available Available
Support for multiple currencies Available Available
Quotas Available Available
Forecast hierarchy Available Available
Choose the product families to forecast on and the order they appear in (from Setup, if the product family forecasts feature is selected) Available Not Available
Forecasts grid organized first by period, product family, and then user to show product family forecast totals Available Not Available
Forecasts grid expansion remains the same during each session Available Not Available
Timestamp showing refresh time and date Available Not Available
All-zero rows hidden for all forecast types Available Not Available
Adjust your own product family forecasts Available Not Available
Opportunity split details in the opportunities list Not Available Available
Adjustable column width Available Available
Quota attainment information Available Available
Jump to the forecasts of users you have access to view Available Available
Forecasts Settings Available Not Available
Most Likely forecast category Available Not Available
## Customer Service
Feature Lightning Experience Salesforce Classic
Assets Available Available
Case Assignment Rules Available Available
Case Comments Available Available
Case Feed Filters Available Available
Case Teams Available Available
Console Available Available
Einstein Bots and Case Classification Available Available
Entitlements Available Available
Field Service Available Available
Knowledge Available Available
Lightning Flow for Service Available Not Available
Chat Available Available
Messaging Available Not Available
Macros Available Available
Conditional expressions in macros Available Not Available
Milestones—Case Available Available
Milestones—Object Available Available
Omni-Channel Available Available
Open CTI Available Available
Products Available Available
Quick Text Available Available
Service Contracts Available Available

Service Set-up Flows for:

  • Experience Cloud sites
  • Email-to-Case
  • Facebook and Twitter
  • Help Center
  • Knowledge
  • Chat
  • Messaging
  • Omni-Channel
Available Not Available
Embedded Service for Web Available Available
Social Customer Service Available Available
Solutions Not Available Available
SOS Not Available Available
## Reports | Feature | Lightning Experience | Salesforce Classic | | --- | --- | --- | | Enhanced report charts | Available | Not Available | | Row-level formulas (beta) | Available | Not Available | | Hide totals and subgroups from report view | Available | Not Available | | Interactive filters when viewing reports | Available | Not Available | | Report Builder | Available | Available | | Currency selector in the Report Builder | Available | Available | | **Product** standard filter for the **Opportunities with Contact Roles and Products** report type in the Report Builder | Not Available | Available | | **Select a campaign** option on the **Show Me** filter for Campaign report types in the Report Builder | Not Available | Available | | Bucket fields | Available | Available | | Custom summary formulas | Available | Available | | Matrix, Summary, Tabular report formats | Available | Available | | Stacked summaries in the Matrix report format | Available | Available | | Column (non-stacked) summaries in the Matrix report format | Available | Not Available | | Role hierarchy filters | Available | Available | | Create report folders and subfolders | Available | Not Available | | Joined reports | Available | Available | | Pie charts | Not Available | Available | | Schedule report refreshes | Available | Available | | Follow reports | Not Available | Available | | Report notifications | Available | Available | | Export reports | Available | Available | | Historical tracking reports | Available | Available | | Conditional formatting | Available | Available | | Favorites | Available | Not Available | ## Dashboards | Feature | Lightning Experience | Salesforce Classic | | --- | --- | --- | | Display more than 3 columns | Available | Not Available | | Tables with up to 10 columns and 200 rows | Available | Not Available | | Dashboard Builder | Available | Available | | Flexible layouts | Available | Not Available | | Themes and palettes | Available | Not Available | | Create dashboard folders and subfolders | Available | Not Available | | Filtered dashboards | Available | Available | | Dynamic dashboards | Available | Available | | Schedule dashboard refreshes | Available | Available | | Post dashboard components to feeds | Available | Available | | Visualforce components | Not Available | Available | | Favorites | Available | Not Available | ## List Views | Feature | Lightning Experience | Salesforce Classic | | --- | --- | --- | | Charts | Available | Not Available | | Create and modify filters | Available | Not Available | | Search for a list view | Available | Not Available | | Find data with the list view search bar | Available | Not Available | | Pin your favorite list view as your default list | Available | Not Available | | View records visually (Kanban) | Available | Not Available | | Create and edit lists | Available | Available | | Sortable columns | Available | Available | | Resizable columns | Available | Available | | Sharing Settings | Available | Available | | Filter logic | Available | Available | | Inline editing | Available | Available | ## Search
Feature Lightning Experience Salesforce Classic
General
Einstein Search (global search default) Available Not Available
Global Search (without Einstein Search) Not Available Available
Advanced Search Not Available Available
Sidebar Search Not Available Available
Search any object from anywhere Available Not Available
Search All button Not Available Available
Search results from external sources Available Available
Search results from external sources on the Top Results page Available Not Available
Instant Results
Instant results appear in a dropdown list when search box is selected (you’ve not started typing) Available Not Available
Shortcuts to recent items Available Available
Matches for recently accessed items as you type your search term Available Available
Matches for items not recently accessed as you type your search term Available Not Available
Search Results
See Top Results from your most frequently used objects on one page Available Available
Pin objects on the search results page Not Available Available
See the number of results for each object searched Available Available
Filter and sort search results Available Available
Adjustable columns Available Not Available
See when spelling correction was done Available Not Available
Value-based lookup Available Available
## Other Features and Products | Feature | Lightning Experience | Salesforce Classic | | --- | --- | --- | | Custom org brand images and colors | Available | Not Available | | Custom branding of Salesforce apps | Available | Not Available | | Personalized Navigation Bar | Available | Available | | Favorites | Available | Not Available | | Activities-related composer windows | Available | Not Available | | Create and edit records | Available | Available | | Inline editing record detail fields | Available | Available | | Inline editing in lists | Available | Available | | Enterprise Territory Management | Available | Available | | Experience Cloud sites | Available | Available | | Partner Portals | Not Available | Available | | WDC | Not Available | Available | # Compare Omniscript and Integration Procedure Versions (Managed Package) For the managed package runtime, the Version Compare dashboard lets you compare two versions of an Omniscript or Integration Procedure in the same Source or Target org. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Click the List Panel icon in the upper left corner, ![The List Panel icon, which looks like three stacked horizontal lines.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/dxlistpanelicon.png). 2. Click **Version Compare**. 3. Select a **Data Source** from the drop-down list. Orgs configured in any project are listed. Data is downloaded immediately. For large orgs, this can take some time. 4. Select a **Component Type**, either **Omniscript** or **IntegrationProcedure**, from the drop-down list. 5. Select a **Component** from the drop-down list. 6. Select a **Base Version** and a **Target Version**. ![On the Version Compare page, the Data Source is Daily Workspace, the Component Type is IntegrationProcedure, the Component is Documentation\_LoopBlock, the Base Version is 1, and the Target Version is 3.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vdxversioncomparecontrols.png) 7. Click **Find Differences**. 8. Click **View Source** to see additional details about the differences. To delete a component from the target version, click **Discard All**. # Compare Segment Verification Methods Compare the three available methods for verifying a member's Data Cloud segments to determine which best fits your business requirements. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
Aspect Query API for Multiple Data Spaces (Recommended) Query API Data Graph
Approach Newer Legacy Newer
Activation and Publishing Doesn't require activation. Segments need to be published. Requires activation and segment publishing. Doesn't require activation. Segments need to be published; data graphs need to be set up.
Member Segment

Loyalty Program Member

Individual

Unified Individual

Loyalty Program Member

Loyalty Program Member

Individual

Data Cloud One Support (Support in Companion org) Yes No Yes
Multi Data Space Support Yes No, only default Yes
Batch Support Yes Yes No
Product Support

Loyalty Management

Global Promotion Management

Referral Marketing

Loyalty Management

Loyalty Management

Global Promotion Management

Referral Marketing

Extra Setup Required No No Install Data Graph data kit and deploy the data graph, or create manually.
# Compare Stepped and Retrospective Calculation Methods (Example) This example contrasts how the same transaction volume produces different financial output and source records depending on whether the rebate type uses the Stepped or Retrospective calculation method. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
## Benefit Tier Structure A volume-based rebate type is configured with these benefit tiers: - **Tier 1 (0 to 100 units):** $2 per unit - **Tier 2 (101 to 300 units):** $4 per unit ## Transaction Data Member **Apex Logistics** records a total transaction quantity of **250 units** in the monthly period. ## Method Comparison | Calculation Method | Tier 1 Portion | Tier 2 Portion | Total Calculated Amount | Accrual / Payout Sources Created | Explanation | | --- | --- | --- | --- | --- | --- | | Retrospective | N/A | 250 units × $4 | $1,000 | 1 | Reaching Tier 2 applies the $4 rate retroactively to all 250 units transacted in the period. | | Stepped | 100 units × $2 = $200 | 150 units × $4 = $600 | $800 | 2 | Each tier rate applies only to units within that tier boundary ($200 for Tier 1 + $600 for Tier 2). | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note The Stepped method generates separate Accrual Source or Payout Source records for each tier threshold crossed during processing, providing granular line-item tracking for audit purposes. # Compare the Supported Capabilities for Each License Understand the capabilities provided in the three Salesforce Feedback Management licenses. Salesforce Feedback Management is available with these licenses. - Survey Response Pack - Feedback Management - Starter - Feedback Management - Growth Use the information in the tables to understand about the features available with each license.
Feature Benefit Survey Response Pack Feedback Management
Starter Growth
Create a standard survey Use a wide range of question types to keep your participants engaged. Yes Yes Yes
Create a basic survey Create a survey and embed in a custom app or on an external website using the Survey Response Connect API (Surveys Business APIs). No Yes Yes
Add an attachment question to the survey Let participants add attachments such as documents, images, and spreadsheets. No Yes Yes
Add a matrix question to the survey Participants select answers from the same set of choices for multiple questions. No Yes Yes
Apply branching logic Decide which page participants view next based on their previous responses. Yes Yes Yes
Embed a question in email Embed a question of the type Like or Dislike, Net Promoter Score (NPS), Rating, or Score in your survey invitation email. Yes Yes Yes
Send survey invitation by using the flow builder Use flows to send survey invitations to leads, contacts, and your Salesforce users. Yes Yes Yes
Configure the supported survey languages Customize the survey based on language preference of the participants. Yes Yes Yes
Receive responses

Receive responses during the entire license agreement period so that you can track the number of responses received by your Salesforce org.

Your Salesforce edition determines the limits on survey responses, survey invitations, and other Survey objects.

1,000 per pack 100,000 responses. Get more responses with additional response packs. Unlimited
Use merge fields Add merge fields in your surveys to provide participants a personalized experience. Merge fields resolve information that's already available in your Salesforce org. No Yes Yes
Create page branching logic based on merge fields Use merge fields to define page branching logic. Create conditions that decide which survey pages participants can view based on the information that a merge field resolves. No Yes Yes
Create or update records based on participant responses Create or update records in your Salesforce org based on participant responses. Configure survey data maps to either map participant responses to object fields or populate fields with custom values. You can also map fields with information from the record associated with the invitation. No Yes Yes
Gather post-chat feedback Lets customers respond to a survey in the chat window at the end of a chat session on a website or on an Experience Cloud site. No Yes, for Experience Cloud sites only Yes
Embed a survey in a webpage Embed a survey in a webpage to allow visitors to respond to the survey. No Yes, for Experience Cloud sites only Yes
Track surveys sent across customer lifecycle Use Customer Lifecycle Maps to define the stages in a customer's lifecycle and add survey questions for each stage. Define whether the map is used to track NPS or the customer's satisfaction score. To gather actionable insights on these scores, use Customer Lifecycle Analytics. No No Yes
Get sentiment insights on responses to text-based survey questions Get insights into the sentiment behind text-based survey responses by using a data map and a Flow action or a Flow template No Yes Yes
Use Customer Lifecycle Analytics Use the Customer Lifecycle Analytics template to create your own apps and analyze the survey responses of your customers and employees. Yes, as an add-on license Yes, five user licenses Yes, five user licenses
Generative AI Surveys Use generative AI to quickly create surveys tailored to diverse needs and translate entire surveys or specific sections accurately. Generate summaries of survey responses with generative AI to extract insights and feedback. Use data maps to automatically create or update records, or send custom notifications whenever a summary is generated. No Yes Yes
Partially Completed Surveys Capture responses from partially completed surveys. No Yes Yes
# Compare Your Backups Identify record changes between two Salesforce backups by comparing them. Quickly spot additions, modifications, and deletions to ensure data accuracy and integrity. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Backup & Recover Data and Backup & Recover Files add-on licenses
User Permissions Needed
To run compare: Run Compare
To view compare reports: View Compare
1. Click the **Activities** tab. 2. Click **Compare**. 3. Select the two backups to compare. By default, the last two backups are selected. 4. Select whether to compare **All Objects** in the backups or **Specific Objects**. If you select Specific Objects, enter the objects to compare. 5. Click **Compare**. The compare begins and is added to the Activities list. When complete, view the final compare report from the Activities list. - **[View Compare Results](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_view_compare.htm&release=264.0.0&type=5)** The compare report shows the record changes, including additions, modifications, and deletions, between objects in two different backups. # Comparing the Differences Between Templates (Managed Package) For the managed package runtime, view two templates or two template versions side by side in the Template Designer to compare the differences between them and make changes to one. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To compare the differences between templates: 1. Go to Vlocity Templates, click to expand a template, and click to open a version of the template to compare with another template. 2. Click **New/Open**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/new_open_template.png) 3. Click the book icon of the template to compare it to the open template. For example, if you have version 2 of the template trng-card-canvas-3x-zones-slds open, click the book icon of version 3 of that template to compare the differences between them. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/template_diff_icon.png) 4. Click **HTML**, **CSS**, or **JS** to view the differences between each and perform these tasks: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/template_diff.png) - In the right **Editable** column, edit the template that you are comparing to the original template. Click **Save** when done. - View the code in the original template in the left **Read Only**. - Click **Activate** for either template. You must activate only one template version at a time. - To see either template in full view, click **Open**. - To return to the original template in full view, click **Go Back**. # Comparison of Connected Apps and External Client Apps Features Connected apps offer a framework to provide external applications with your Salesforce data. However, there are aspects of the framework that make it impossible to define separate user roles and difficult to package connected apps. External client apps were designed to be as useful at connecting external applications with your data as connected apps while addressing these shortcomings. External client apps are the new generation of connected apps. They were designed to improve security and resolve the cumbersome packaging and distribution issues that affect connected apps. External client apps maintain a clean separation between proprietary developer settings and the customizable, admin-defined policies. External client apps support all but a few of the connected apps use cases. Use this table of available features to figure out whether external client apps are the best option to integrate your external application with Salesforce. | Feature | Connected Apps | External Client Apps | | --- | --- | --- | | 2GP Packaging | [Restricted](https://developer.salesforce.com/docs/atlas.en-us.pkg2_dev.meta/pkg2_dev/sfdx_dev_dev2gp_connected_app.htm) (1) | [Available](https://help.salesforce.com/s/articleView?id=xcloud.configure_packageable_external_client_apps.htm&release=264.0.0&type=5 "Determine whether to package and distribute your external client app or keep it local. Only packaged apps can be deployed to other orgs. You can package external client apps with first-generation or second-generation managed packages. Apps that use OAuth can be deployed with their own OAuth settings or they can reference settings on the org where the app was developed.") | | 1GP Packaging | [Available](https://developer.salesforce.com/docs/atlas.en-us.pkg1_dev.meta/pkg1_dev/connected_apps.htm) | [Available](https://help.salesforce.com/s/articleView?id=xcloud.package_external_client_app_with_1gp.htm&release=264.0.0&type=5 "Use first-generation managed packages to distribute external client apps to other orgs. Create an external client app with Packaged distribution state, add it to your managed package, and install the package in subscriber orgs.") | | Distribution state management | Not available | [Available](https://help.salesforce.com/s/articleView?id=xcloud.configure_packageable_external_client_apps.htm&release=264.0.0&type=5 "Determine whether to package and distribute your external client app or keep it local. Only packaged apps can be deployed to other orgs. You can package external client apps with first-generation or second-generation managed packages. Apps that use OAuth can be deployed with their own OAuth settings or they can reference settings on the org where the app was developed.") | | Distinct developer and admin user roles | Not available | [Available](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&release=264.0.0&type=5 "External client apps are packageable frameworks to enable a third-party application to integrate with Salesforce using APIs and security protocols. External client apps provide single sign-on (SSO) and use SAML and OAuth protocols to authorize third-party applications. Third-party applications that are integrated with Salesforce can run on the customer success platform as well as other platforms, devices, or SaaS subscriptions.") | | Subscriber association and disassociation | Not available | [Available](https://help.salesforce.com/s/articleView?id=xcloud.associate_and_disassociate_external_client_apps.htm&release=264.0.0&type=5 "External client apps are designed for second-generation (2GP) packaging, which means that they’re optimized for source-driven development on scratch orgs.") | | Salesforce Setup UI | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_basics.htm&release=264.0.0&type=5 "For all connected apps, define the basics, which include the app’s name, logo, and contact information.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.create_a_local_external_client_app.htm&release=264.0.0&type=5 "Create an external client app in App Manager. Local external client apps are available only on the org where you create them. Packageable external client apps can be packaged for distribution to other orgs.") | | Metadata API | [Restricted](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_connectedapp.htm) (2) | [Available](https://help.salesforce.com/s/articleView?id=xcloud.meta_external_client_apps_creation.htm&release=264.0.0&type=5 "Developers can create external client apps in Salesforce Setup or programmatically using Metadata API. After downloading an external client app, admins can configure Policies specific to the needs of their org.") | | OAuth 2.0 | [Available](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_authenticate.htm&release=264.0.0&type=5 "OAuth is an open protocol that authorizes a client application to access data from a protected resource through the exchange of tokens. OAuth tokens are essentially permissions given to a client application.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps_oauth_flow_config.htm&release=264.0.0&type=5 "External Client Apps support several OAuth flows. These flows allow the third-party application to access protected resources on Salesforce.") (3) | | SAML | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_saml_sso.htm&release=264.0.0&type=5 "To integrate a service provider with your Salesforce org, you can use a connected app that implements SAML 2.0 for user authentication. Salesforce supports SAML single sign-on (SSO) when the service provider or the identity provider initiates the flow. To use this option, configure a connected app with SAML 2.0 enabled for your service provider. Define your Salesforce org as the SAML identity provider.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_saml.htm&release=264.0.0&type=5 "To integrate a service provider with your Salesforce org, you can use an external client app that implements SAML 2.0 for user authentication. Salesforce supports SAML single sign-on (SSO) when the service provider or the identity provider initiates the flow. To use this option, configure an external client app with SAML 2.0 enabled for your service provider. Define your Salesforce org as the SAML identity provider.") | | OpenID Connect | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_openid_connect.htm&type=5&language=en_US) | Available | | OAuth consumer key and consumer secret rotation | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_rotate_consumer_details.htm&release=264.0.0&type=5 "Keep your connected apps secure by periodically changing your consumer key (client ID) and consumer secret (client secret). To make sure that your existing integrations don’t break, generate staged consumer details and share them with your connected app integrations. When you're ready, apply the new consumer details.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.eca_stage_oauth_credentials.htm&release=264.0.0&type=5 "Use the OAuth Staged Credentials Connect REST API endpoint to manage the OAuth key and secret for a local external client app. The API can be used to stage, view, rotate, or delete OAuth credentials.") | | Trusted IP Range for OAuth Web Server Flow | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_edit_ip_ranges.htm&release=264.0.0&type=5 "After you create a connected app, you can specify the trusted IP ranges from which a user can log in. In addition, you can apply IP relaxation to all OAuth client apps, including apps that use OAuth and SAML for single sign-on.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.meta_configure_external_client_app_oauth_settings.htm&release=264.0.0&type=5 "Configure the OAuth settings file, which affects the local instance.") | | Copy when cloning a sandbox | Available | [Available](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&release=264.0.0&type=5 "External client apps are packageable frameworks to enable a third-party application to integrate with Salesforce using APIs and security protocols. External client apps provide single sign-on (SSO) and use SAML and OAuth protocols to authorize third-party applications. Third-party applications that are integrated with Salesforce can run on the customer success platform as well as other platforms, devices, or SaaS subscriptions.") (4) | | API access control | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage.htm&release=264.0.0&type=5 "After a connected app is installed in your org, you can manage access to it. Configure permissions and policies for the app, explicitly defining who can use the connected app and where they can access the app from. These permissions and policies, which include user-access, IP range restrictions, and multi-factor authentication (MFA), provide extra security for your org.") | Not needed (5) | | Custom attribute creation | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_edit_custom_attributes.htm&release=264.0.0&type=5 "After you’ve created the connected app, you can add custom attributes. With custom attributes, you can get more information about a user’s identity like an address or job title. Custom attributes specify SAML metadata or specify OAuth parameters that are read at OAuth runtime.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.configure_custom_attributes_for_external_client_apps.htm&release=264.0.0&type=5 "Create custom attributes to capture useful and unique information. With custom attributes, you can get more information about a user’s identity such as an address or job title. Configure custom attributes for your external client app in the Policies tab.") | | Audit support | [Available](https://help.salesforce.com/s/articleView?id=xcloud.admin_monitorsetup.htm&type=5&language=en_US) | [Available](https://help.salesforce.com/s/articleView?id=xcloud.admin_monitorsetup.htm&type=5&language=en_US) | | Logging support | [Available](https://help.salesforce.com/s/articleView?id=xcloud.admin_monitorsetup.htm&type=5&language=en_US) | [Available](https://help.salesforce.com/s/articleView?id=xcloud.admin_monitorsetup.htm&type=5&language=en_US) | | Start URL management | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_start_url.htm&release=264.0.0&type=5 "A start URL defines the page where users are directed to when they run the connected app. The start URL can be configured by the app owner during the setup process or managed later. If you don’t configure a start URL, users are sent to the app’s default start page after authorization completes. Start URL settings apply to all connected apps, except canvas apps. If your app is a canvas app, the connected app ignores the start URL fields. Instead, it uses the canvas app URL specified when the connected app was created.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.manage_eca_start_url.htm&release=264.0.0&type=5 "A start URL defines the page where users end up when they run an external client app. The admin of an external client app sets an OAuth-specific start URL or a custom start URL from the Policies tab of the External Client App Manager.") | | OAuth access policy management | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_oauth.htm&release=264.0.0&type=5 "Configure OAuth access policies for OAuth-enabled connected apps. These policies include defining which users can access a connected app, what IP restrictions apply to the connected app, and how long a refresh token is valid for.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.manage_external_client_apps.htm&release=264.0.0&type=5 "After creating an external client app and configuring its distribution state, define its specific characteristics.") | | IP relaxation | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_continuous_ip.htm&release=264.0.0&type=5 "For security reasons, if you relax IP restrictions for your connected app, and your org has enabled Enforce login IP ranges on every request, users can’t access the app in some circumstances. This access restriction applies to all OAuth-enabled connected apps, including mobile devices.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.manage_external_client_apps.htm&release=264.0.0&type=5 "After creating an external client app and configuring its distribution state, define its specific characteristics.") | | Session policy management | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_session_policies.htm&release=264.0.0&type=5 "Configure a connected app’s session policies to define how long a user’s session can last before reauthenticating. You can also use session policies to block user access to the connected app, or to require two-factor authentication to access the app.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.manage_external_client_apps.htm&release=264.0.0&type=5 "After creating an external client app and configuring its distribution state, define its specific characteristics.") | | Mobile policy management | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_mobile.htm&release=264.0.0&type=5 "Configure policies for mobile connected apps that enforce PIN protection. These policies include setting the length of the connected app’s PIN, and defining how long a session can be idle before requiring re-entry of the PIN.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_mobile_settings_policies.htm&release=264.0.0&type=5 "The mobile app plugin for an external client app enables mobile-specific features, such as screen lock upon a custom timeout value. Configure the external client app’s mobile app settings and policies in External Client App Manager.") | | Custom handler management | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_custom_handler.htm&release=264.0.0&type=5 "Write a custom connected app handler in Apex to customize how the connected app is invoked. The custom handler can support new protocols or respond to user attributes in a way that benefits a business process.") | [Available](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_class_Auth_ExternalClientAppOauthHandler.htm) | | User provisioning | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_user_provisioning.htm&release=264.0.0&type=5 "You can use a connected app to link your users with a third-party app. User provisioning for a connected app simplifies account creation and links your Salesforce users’ accounts to their third-party accounts. After the accounts are linked, you can configure the App Launcher to display the connected app as a tile. With a single click, users get instant access to the third-party app.") | Not available | | OAuth usage management | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_current_sessions.htm&release=264.0.0&type=5 "The Connected Apps OAuth Usage page displays current OAuth app connections. For apps that aren't installed, it also displays usage attempts that Salesforce automatically denied due to security restrictions. From this page, you can install or uninstall third-party connected apps, revoke an app’s active sessions, and block or unblock org-wide access to the app.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.manage_external_client_app_usage.htm&release=264.0.0&type=5 "The External Client Apps OAuth Usage page displays information about external client apps for the current org, all users for a specific external client app, and all tokens for a specific user. These apps have an active access or refresh token. From this page, you can revoke a specific token, all tokens for a user of a specific external client app, or all tokens of a specific external client app.") | | Profile management | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_additional_settings.htm&release=264.0.0&type=5 "The Connected App Detail page provides an overview of access settings assigned to the connected app, including OAuth policies and session policies. From this page, you can click Edit Policies to manage access to the connected app. You can also manage profiles, permission sets, custom attributes, and custom scopes associated with the connected app.") | [Available](https://help.salesforce.com/s/articleView?id=platform.admin_userprofiles.htm&language=en_US) | | Permission set management | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_additional_settings.htm&release=264.0.0&type=5 "The Connected App Detail page provides an overview of access settings assigned to the connected app, including OAuth policies and session policies. From this page, you can click Edit Policies to manage access to the connected app. You can also manage profiles, permission sets, custom attributes, and custom scopes associated with the connected app.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.manage_external_client_apps.htm&release=264.0.0&type=5 "After creating an external client app and configuring its distribution state, define its specific characteristics.") | | Data access management (OAuth) | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage.htm&release=264.0.0&type=5 "After a connected app is installed in your org, you can manage access to it. Configure permissions and policies for the app, explicitly defining who can use the connected app and where they can access the app from. These permissions and policies, which include user-access, IP range restrictions, and multi-factor authentication (MFA), provide extra security for your org.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.meta_configure_external_client_app_policies.htm&release=264.0.0&type=5 "Salesforce admins can set the policies that control the external client app. All changes are made through the metadata API.") | | Canvas | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_canvas.htm&release=264.0.0&type=5 "You can expose your connected app as a canvas app. Canvas apps are available as apps that your org’s Salesforce admin install or as personal apps that users install across orgs. Users access a canvas personal app from the Chatter tab, and are prompted to allow the app to connect to their Salesforce data. Users can choose to make an app a canvas personal app.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_canvas.htm&release=264.0.0&type=5 "The Canvas plugin for an external client app enables you to integrate a third-party application in Salesforce. Configure the external client app’s Canvas app settings and policies in External Client App Manager.") | | Notifications | [Available](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_notifications.htm&release=264.0.0&type=5 "Keep users of your custom app up to date with timely information and reminders. With the connected app framework, you can use the Notification Builder Platform or Apex Push to send custom notifications.") | [Available](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_notification_settings.htm&release=264.0.0&type=5 "With the notifications plugin for an external client app, you can subscribe the mobile app to custom notification types. Enable the notifications plugin, and subscribe the mobile app to notification types in External Client App Manager.") | 1\. Packaging and distribution are some of the major issues facing connected apps. This challenge was a driving force in the development of external client apps. Connected apps use a reference model for packaging. They can’t be packaged using second-generation (2GP) managed packaging. However, there’s a work-around [method that includes packaging connected apps](https://developer.salesforce.com/docs/atlas.en-us.pkg2_dev.meta/pkg2_dev/sfdx_dev_dev2gp_connected_app.htm) in a first generation (1GP) managed package and referencing that packaged connected app in a 2GP managed package. External client apps were designed with 2GP packaging in mind and feature advanced options for packaging and distribution. External client apps can also be added to 1GP managed packages. 2\. Connected apps can access a subset of features through the [ConnectedApp endpoint in the Metadata API](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_connectedapp.htm). 3\. External client apps use OAuth protocols to authorize third-party apps. However, there are some OAuth features that are available for connected apps but aren’t available for external client apps. For example, [the OAuth username-password flow](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_username_password_flow.htm&language=en_US) won't be made available for external client apps. Also, dynamic client registration is not yet supported for external client apps. 4\. Local external client apps aren’t copied to a new sandbox when you clone or refresh a sandbox. Only packaged external client apps are copied to the sandbox. 5\. External client apps can’t be used without installation, so access control isn't necessary. # Comparison of Rebate Management and Ship and Debit Process Management Rebate Management helps manufacturers proactively incentivize partners to achieve predefined sales targets and drive specific purchasing behaviors. Ship and Debit Process Management helps manufacturers reactively compensate partners for price reductions they offer to win competitive deals and protect partners' margins. Review the uses for Rebate Management and Ship and Debit Process Management.
Parameter Rebate Management Ship and Debit Process Management
Business Requirement Rebate processes are proactive measures established by manufacturers to reward partners when they meet an agreed-upon target. Ship and debit processes are reactive measures established by manufacturers to compensate partners who price products competitively in response to changing market conditions.
Transactions and Claims Processing Rebate programs have fixed periods for processing transactions and payouts. Ship and debit programs process transactions and payouts as and when partners submit claims and proof of sale documents.
Incentive Structure Rebate programs have rebate types to define the incentives that partners receive when they attain an eligibility criteria. Manufacturers can set up benefit tiers, additional benefit criteria, and complex eligibility rules for rebate types. Ship and debit programs have special pricing terms to define the incentives that partners are compensated with when they sell a specified quantity of products. Manufactures can set up tiered benefits with corresponding qualification criteria using special pricing term benefits.
Types of Incentives

A rebate program can have these types of rebates:

  • Volume-Based Rebate Type: Reward members for attaining specific sales volumes.
  • Revenue-Based Rebate Type: Reward members for attaining specific revenue targets.
  • Growth-Based Rebate Type: Reward your partners for annual growth in revenue or volume of sales.
  • Flat Rebates: Reward your partners with a flat rebate for attaining specific thresholds.

A ship and debit program can have these types of special pricing terms and benefits:

  • Compensate partners based on reference prices for each unit of product sold.
  • Compensate partners based on discount percentage or discount amount against the sale price for each unit of product sold.
# Compensate Your Partners for Competitive Pricing with Special Prices and Discounts Rebate program managers can create special pricing terms to define flat discounts and reference prices for partners when partners sell competitively priced products. Rebate program managers can create special pricing term benefits to craft nuanced, tiered incentive structures and differentiate benefits by the product quantity sold, the period the product was sold in, or both. - **[How Do Special Pricing Terms and Benefits Work?](https://help.salesforce.com/s/articleView?id=xcloud.shipdebit_special_pricing_term_fields.htm&release=264.0.0&type=5)** Understand what are special pricing terms and special pricing term benefits and how they work together to create a tiered ship and debit incentive structure. - **[Create a Special Pricing Term](https://help.salesforce.com/s/articleView?id=xcloud.shipdebit_special_pricing_term.htm&release=264.0.0&type=5)** Rebate program managers can create special pricing terms to compensate partners when partners sell competitively priced products to end-customers. Define the products and program members that are eligible for special pricing terms. Specify the maximum quantity of a product that’s eligible for the special pricing term. Specify either the reference price per unit or the discount and discount by percent values for a special pricing term. - **[Create a Special Pricing Term Benefit](https://help.salesforce.com/s/articleView?id=xcloud.shipdebit_special_pricing_term_benefit.htm&release=264.0.0&type=5)** Rebate program managers can create special pricing term benefits for a special pricing term to define a tiered ship and debit incentive structure with qualifying ranges and incentives for each range. Differentiate the reference prices or discounts that partners get by the quantity of products they sell, the period they sell the products in, or both. # Compile Omniscripts or Flexcards Locally (Managed Package) For the managed package runtime, local compilation is supported in package versions Spring ’22 and later. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Set Up a Local Compile (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_local_compile_setup.htm&release=264.0.0&type=5)** For the managed package runtime, to set up a local compile, add credentials and a compiler version if needed. - **[Use Your Salesforce DX CLI to Deploy Omniscripts or Flexcards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_local_compile_sfdx.htm&release=264.0.0&type=5)** For the managed package runtime, you can use your own Salesforce DX CLI to deploy Omniscripts or Flexcards that are compiled locally. # Complete MFA Challenges for Automation Users Salesforce requires multi-factor authentication (MFA) for all UI logins, including logins from automation users. For automation use cases such as Robotic Process Automation (RPA), you can programmatically complete MFA using third-party authenticator apps that generate time-based one-time passwords (TOTPs). ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: All editions
When you connect a third-party authenticator app to a user account, Salesforce shares a secret key that can generate TOTPs. With this key, you can write a script that uses TOTPs to complete MFA without any human interaction. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important Don't use programmatic TOTP challenges for user accounts that have the System Administrator profile or the Modify All Data, View All Data, Customize Application, or Author Apex user permissions. These accounts are [required to use phishing-resistant MFA methods](https://help.salesforce.com/s/articleView?id=005321563&type=1&language=en_US) (passkeys such as built-in authenticators or security keys) starting in June 2026. When the phishing-resistant MFA requirement is enforced, these user accounts can't use authenticator apps. Here’s how to connect a third-party authenticator app and get a key that can generate TOTPs. Getting the key is a manual process that you complete one time. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note These steps aren't supported for Salesforce Authenticator. 1. Log in to the automation user account. 2. Go to the user’s personal settings and click **Advanced User Details**. 3. Find the "App Registration: One-Time Password Authenticator" setting and click **Connect**. ![Advanced User Details page with "App Registration: One-Time Password Authenticator" setting highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/mfa/totp_advanced_user_details.png) 4. On the screen to connect an authenticator app, click **I Can’t Scan the QR Code**. ![Connect an Authenticator App screen with QR code link highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/mfa/totp_qr_code.png) Salesforce directs you to a page to connect the app using a key. 5. Before you connect the authenticator app, copy the key and securely store it. Treat this key as a secret and make sure to follow [Salesforce best practices for storing sensitive data](https://developer.salesforce.com/docs/atlas.en-us.secure_coding_guide.meta/secure_coding_guide/secure_coding_storing_sensitive_data.htm). ![Connect an Authenticator App screen with key highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/mfa/totp_connect_app.png) 6. Follow the instructions on the screen to connect the app to Salesforce. To complete TOTP challenges programmatically, write a script that uses the key to generate TOTPs. Include a method to retrieve the autogenerated TOTPs and complete UI logins. Here’s a JavaScript example that uses the [open-source otplib library from npm](https://www.npmjs.com/package/otplib). In this example, the secret key is stored in the `AUTOMATION_TOTP_SECRET` variable. This code sample is for demonstration only—make sure to write and test your own custom code. ``` // This example assumes the otplib package has been installed ($ npm i otplib) const { authenticator } = require('otplib'); // Store the Base32 secret securely (environment variable, secrets manager, etc.) // This should be the "Key" shown in the UI after clicking "I Can't Scan the QR Code" const TOTP_SECRET = process.env.AUTOMATION_TOTP_SECRET; function getTotpCode() { if (!TOTP_SECRET) { throw new Error('Missing AUTOMATION_TOTP_SECRET'); } // otplib's authenticator expects a Base32 secret by default; // 30s step, 6 digits, SHA1 are the common defaults return authenticator.generate(TOTP_SECRET); } // Example usage in an auth flow: async function completeMfaChallenge({ enterCode }) { const code = getTotpCode(); await enterCode(code); // customer supplies their UI interaction } module.exports = { getTotpCode, completeMfaChallenge }; ``` # Complete Pre-Work for the Email Opt-Out Flow Create one queue, activate two fields, and connect your support email address before building your Flow. ## Create an Unsubscribe Requests Queue for Cases 1. Open **Service Setup**. 2. Search for Queues, and open it. 3. Click **New**. 4. Name your Queue Unsubscribe Requests. 5. Move **Case** to the Selected Objects column. 6. Find the users who need access to the queue, and move them to the Selected Members column. 7. Save your changes. ## Connect Your Support Email Address So Customer Emails Automatically Become Salesforce Cases 1. Open **Setup**. 2. Search for **email-to-case** in Quick Find, and open it. 3. Scroll down to the Routing Addresses, and click **New**. 4. Give your email address a Routing Name like Support Email Address. 5. Enter your email address, and fill in the rest of the fields. 6. Save your changes. 7. Verify your email address via the verification email that's sent to you. 8. Back on the Email-to-Case landing page, click the name of the email address you just added. 9. Look for the yellow banner with a support address that was created for you by Salesforce. Copy and paste that email address into the email forwarding settings for your email client. 10. Click **Edit**. 11. Select **Queue** from the Case Owner dropdown. 12. Search for the **Unsubscribe Requests** queue you just created. 13. Select your desired case priority. 14. Set the Case Origin field to **Email**. 15. Save your changes. ## Add the Email Opt Out Field to Contacts 1. Go to **Object Manager** | **Contact** | **Fields & Relationships** | **Email Opt Out** | **Set Field-Level Security**. 2. Choose which users have visibility into this field. 3. Save your changes. ## Add the Email Opt Out Field to Leads 1. Go to **Object Manager** | **Contact** | **Fields & Relationships** | **Email Opt Out** | **Set Field-Level Security**. 2. Choose which users have visibility into this field. 3. Save your changes. # Complete Prerequisites for Headless Identity Before you get started with a Headless Identity implementation for your off-platform apps, cross off these prerequisites in Salesforce. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
1. To define the right levels of access for yourself and your users, [create a role for yourself and a profile for your end users](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_set_up_profiles.htm&type=5&language=en_US). 2. To store information about your end users, [create an account for them](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_create_account.htm&type=5&language=en_US). 3. If you don’t have one already, set up an Experience Cloud site. Because Headless Identity APIs are exposed for external users through Experience Cloud, you must create an Experience Cloud site even if your users’ don’t interact with it directly. 1. [Enable Digital Experiences](https://help.salesforce.com/s/articleView?id=experience.networks_enable.htm&type=5&language=en_US). 2. [Create an Experience Cloud site](https://help.salesforce.com/s/articleView?id=experience.networks_creating.htm&type=5&language=en_US). 3. [Add the end user profile you created to your Experience Cloud site membership](https://help.salesforce.com/s/articleView?id=platform.networks_customize_members.htm&type=5&language=en_US). 4. [Activate your Experience Cloud site](https://help.salesforce.com/s/articleView?id=experience.networks_publish.htm&type=5&language=en_US). 4. To let your app communicate with Salesforce, configure Cross-Origin Resource Sharing (CORS) settings. 1. [Add your app’s URL pattern to your CORS allowlist](https://help.salesforce.com/s/articleView?id=xcloud.extend_code_cors.htm&type=5&language=en_US). 2. [Enable CORS for OAuth endpoints.](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_endpoints_cors.htm&type=5&language=en_US) 5. Enable the Authorization Code and Credentials Flow at an org-wide level. This flow is the foundation of headless login, registration, passwordless login, and guest user identity. 1. From Setup, in the Quick Find box, enter OAuth, and then select **OAuth and OpenID Connect Settings**. 2. Turn on **Allow Authorization Code and Credentials Flows**. # Complete Prerequisites for SAML Service Provider Integration Before integrating a service provider with Salesforce, enable your org as an identity provider and exchange SAML single sign-on (SSO) information with your service provider. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Developer, Enterprise, Performance, Unlimited, and Database.com Editions
User Permissions Needed
Define and modify identity providers and service providers: Customize Application
Before you start, [enable Salesforce as an identity provider](https://help.salesforce.com/s/articleView?id=xcloud.identity_provider_enable.htm&release=264.0.0&type=5 "You can configure Salesforce as a single sign-on (SSO) SAML identity provider to external service providers. When your org acts as a SAML identity provider, users can access multiple apps with a single login. To get started with this configuration, enable Salesforce as an identity provider and share configuration information with your service provider."). 1. Give your service provider information about your configuration of Salesforce as an identity provider. Depending on what format your service provider supports, you can share this information as metadata in an XML file or as a certificate. To access this information, take these steps. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Identity Provider**. 2. If your service provider supports metadata, click **Download Metadata**. If your service provider supports certificates, click **Download Certificate**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note Salesforce also defines a lifetime for SAML assertions sent to your service provider. A SAML assertion sent by a Salesforce identity provider is valid for 5 minutes after it's issued, with a 30-second buffer to account for clock skew. For example, if the assertion is issued at 12:00:00 GMT, it's valid between 11:59:30 GMT and 12:05:00 GMT. If the service provider receives the SAML response outside of this interval, it typically rejects the assertion. Work with your service provider to ensure that it complies with this requirement. 2. Get this configuration information from your service provider. - Assertion consumer service (ACS) URL—The URL where the identity provider sends SAML responses. - Entity ID—The unique identifier of the service provider. - Subject type—Specifies where the service provider expects Salesforce to send user identity information in SAML assertions. Salesforce can send user information in the subject of the assertion or in a custom attribute. - Security certificate—Required when the service provider is initiating login via Salesforce and signing their SAML requests. 3. To add extra protection for sensitive resources, configure forced authentication on the service provider. With forced authentication, users who are already logged in to Salesforce must reenter their credentials when they try to access the service provider. To configure forced authentication, work with your service provider to add a `ForceAuthn` parameter to the SAML request. You can share this example forced authentication SAML request. During SSO, the service provider uses this parameter to tell Salesforce that the user must reauthenticate. There's no additional setup in your org. When Salesforce acts as the identity provider, forced authentication is automatically supported. Here's an example SAML request that Salesforce accepts for forced authentication. ``` ENTITY_ID ``` After you complete these prerequisites, complete these steps. - [Integrate your service provider as a SAML-enabled app.](https://help.salesforce.com/s/articleView?id=xcloud.service_provider_define.htm&release=264.0.0&type=5 "To configure SAML single sign-on (SSO) with Salesforce as an identity provider, integrate a service provider by using the external client apps framework or the connected apps framework. With this SSO configuration, users log in to the service provider by using the same credentials that they use to log in to your Salesforce org or Experience Cloud site. To change your service provider details, edit your app. Control which users can access your app by managing profiles and permission sets.") - [Map Salesforce users to the service provider.](https://help.salesforce.com/s/articleView?id=xcloud.service_provider_map_users.htm&release=264.0.0&type=5 "To ensure that your SAML service provider can recognize Salesforce users when they log in with single sign-on (SSO), update user information in Salesforce. Provide user identifiers that the service provider recognizes.") #### See Also - [SAML Single Sign-On Flows](https://help.salesforce.com/s/articleView?id=xcloud.identity_provider_about.htm&release=264.0.0&type=5 "When you set up single sign-on (SSO) with Security Assertion Markup Language (SAML), you can initiate login from the service provider or the identity provider. Service provider-initiated login and identity provider-initiated login use different flows, but both result in the user being logged in to the service provider.") # Complete Prerequisites to Connect to a Custom One-Time Password Provider To send a one-time password (OTP) via a custom provider, Salesforce calls an API that's hosted on your provider. To access this API, Salesforce must be able to make authenticated calls to your provider. Get started by retrieving authentication credentials from your provider and registering the provider's callout endpoint with Salesforce. To simplify and secure development, consider creating a named credential that stores the provider's credentials and callout endpoint in a single definition. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: Professional, Enterprise, Unlimited, and Developer Editions
User Permissions Needed
To configure remote site settings: Customize Application or Modify All Data
To view external credentials: View Setup and Configuration
To create, edit, or delete external credentials: Manage Named Credentials or Customize Applications
## Get Authentication Credentials from Your Provider To send a one-time password (OTP) via a custom provider, such as Telesign or Twilio, Salesforce uses your custom OTP delivery Apex handler to call an API that's hosted on your provider. To access this API, you must authenticate using credentials from the provider. 1. If you don't already have an account with the provider you want to use, create one. 2. From your provider, retrieve the credentials required to make an authenticated call to their messaging API. How you do this step depends on your provider. Here's the documentation about how to authenticate for a couple of common OTP providers. - [Twilio](https://www.twilio.com/docs/messaging/api) - [Telesign](https://developer.telesign.com/enterprise/docs/authentication#basic-authentication) ## Add the Provider's Messaging API Endpoint to Your Remote Site Settings To allow your custom OTP delivery handler to send an HTTP POST request to your provider's messaging API, register the provider's messaging endpoint in your remote site settings. 1. Get the URL for your provider's messaging API, including the correct base URL and the endpoint for the resource you want to access. Use an endpoint that can send one-time passwords (OTPs). How you do this step depends on your provider. Here's the documentation for a few common OTP providers. - [Twilio](https://www.twilio.com/docs/messaging/api) - [Telesign](https://developer.telesign.com/enterprise/docs/sms-verify-api-overview) 2. Add the URL to your provider's [remote site settings](https://help.salesforce.com/s/articleView?id=xcloud.configuring_remoteproxy.htm&type=5&language=en_US). ## (Optional) Create a Named Credential To simplify and secure your Apex development, create a named credential. The named credential stores your provider's messaging endpoint along with its authentication credentials in a single definition. How you create the named credential depends on the authentication protocol that your provider uses. 1. To create a named credential, first create an external credential and then link it to a named credential. See [Create Named Credentials and External Credentials](https://help.salesforce.com/s/articleView?id=xcloud.nc_named_creds_and_ext_creds.htm&type=5&language=en_US) and find the steps for the authentication protocol that your provider uses. For example, if your provider uses the Basic authentication protocol, first [create a Basic authentication external credential](https://help.salesforce.com/s/articleView?id=xcloud.nc_create_edit_basic_auth_ext_cred.htm&type=5&language=en_US). Then, [create a named credential that connects to your external credential](https://help.salesforce.com/s/articleView?id=xcloud.nc_create_edit_named_credential.htm&type=5&language=en_US). 2. To make Apex callouts using the named credential, use the Automated Process User, which is a user account that comes with all Salesforce orgs. Make sure that this user can make callouts. 1. [Create a permission set](https://help.salesforce.com/s/articleView?id=platform.perm_sets_create.htm&type=5&language=en_US). 2. [Enable external credential principals for the permission set](https://help.salesforce.com/s/articleView?id=xcloud.nc_enable_ext_cred_principal.htm&type=5&language=en_US). 3. [Enable user external credentials for the permission set](https://help.salesforce.com/s/articleView?id=xcloud.nc_user_external_credentials.htm&type=5&language=en_US). 4. To assign the permission set to the Automated Process User, run this code in the Apex developer console. ```sql insert new PermissionSetAssignment( AssigneeId = [SELECT Id FROM User WHERE alias = 'autoproc'].Id, PermissionSetId = '' ); ``` The Automated Process User can now make callouts by using your named credential. # Complete the OAuth Flow To verify that the external client app is operating correctly, perform an Authorize Endpoint request and a Token Endpoint request. The Token Endpoint request produces an API Access Token that can be used to access any Salesforce API. 1. Copy the consumerKey from the global settings file. This value only exists in the global settings file after you deploy and retrieve the External Client App OAuth settings. 2. Paste the org’s URL and the consumer key into this URL in place of and , and replace with the callbackUrl value listed in the OAuth global settings file. ``` /services/oauth2/authorize?response_type= code&client_id=&redirect_uri= ``` 3. To initiate the request for access, open the URL in a browser. 4. If prompted, log in, and then choose **Allow**. After a redirect, the encoded authorization code is included in the URL. 5. Copy the authorization code from the URL. 6. Decode the authorization code using any URL decoder. 7. Replace these values in the cURL request. - Replace with the org’s URL. - Replace with the decoded authorization code from step 6. - Replace with the consumerKey field value from the global OAuth settings file. - Replace with the consumerSecret field value from the global OAuth settings file. `curl -X POST /services/oauth2/token -d 'grant_type=authorization_code&code=&client_id=&client_secret=&redirect_uri=https://www.example.com' | json_pp` 8. Enter the configured cUrl request into the terminal. A successful request returns an access token. 9. Verify that the access token works using Postman API Platform to access an endpoint like UserInfo. For other endpoints that you can try to access, see the Salesforce REST API Developer Guide. [https://developer.salesforce.com/docs/atlas.en-us.api\_rest.meta/api\_rest/quickstart\_code.htm](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/quickstart_code.htm) # Complete the Quip Connection To use Quip features in Salesforce, users must complete the Salesforce and Quip connection. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Professional, Developer, and Unlimited Editions
There are three ways users can complete the connection: - The Quip banner in Lightning Experience (Recommended for all) - For Quip Advanced and Quip for Customer 360 users. - Tell your users to click **Take the Last Step**. ![Take the Last Step connection banner](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_setup_take_the_last_step.png) - The Connected Salesforce Orgs settings page in Quip (Quip users) - For Quip Advanced and Quip for Customer 360 users. - For users that work primarily in Quip, connecting this way lets them pull Salesforce data into Quip, without giving access to Lightning components in Salesforce. - From your profile, click **Salesforce**, then click **Connect** and log in to Salesforce. - Quip Lightning components - For Quip Advanced and Quip for Customer 360 users. - From a Quip Lightning component, click **Get Started**. After your users complete the connection, they can use Quip Lightning components, Salesforce live apps in Quip, and more. # Complete the Scorecard Wizard Complete the scorecard wizard so that the buying organization gets your sustainability, cost, risk, and procurement data. ### Required Editions
Available in: Lightning Experience
Available with the Supplier Management AddOn license and the External Supplier Management AddOn license, included with Net Zero Cloud and the Manufacturing, Automotive, and Consumer Goods Cloud SKUs (and other industry Cloud SKUs). See required licenses and permissions.
User Permissions Needed
To complete a scorecard External Supplier Management User License permission set license
1. Log in to the supplier portal. 2. From Open Requests, find the scorecard to complete. 3. Select **Complete Request**. 4. Complete Basic Information, and select **Save & Continue**. 5. Complete Emissions Data, and select **Save & Continue**. 6. Upload supporting documents, and select **Save & Continue**. 7. On Review & Submit, review your entries and select **Submit**. The scorecard status changes to Complete, and the buying organization sees the update immediately. # Compliant Data Sharing Control This control enforces the immediate removal of user participant records within the Compliant Data Sharing (CDS) framework whenever a user is deactivated or transitions to a role no longer requiring access. ## Control Name Compliant Data Sharing ## Recommended Configuration Delete Participant Records Before Deactivating a User - Deactivate a Salesforce user who has Compliant Data Sharing participant records. ## Control Overview This control enforces the immediate removal of user participant records within the Compliant Data Sharing (CDS) framework whenever a user is deactivated or transitions to a role no longer requiring access. By systematically clearing these granular sharing assignments, this makes sure sensitive record access is fully revoked, preventing unauthorized data exposure and maintaining strict regulatory compliance. ## Security Risk If Not Configured The lack of systematic removal of access through Compliant Data Sharing creates a significant risk of data overexposure, where users who have been deactivated or transitioned to new roles retain unauthorized visibility into sensitive financial records. This persistence of "stale" permissions increases the likelihood of internal data breaches and can lead to severe regulatory non-compliance with data privacy mandates such as GDPR or GLBA. ## Threat Scenarios An employee transitions to a new role or department but retains "stale" participant records in Compliant Data Sharing because the administrator enabled the setting to retain records upon deactivation rather than purging them. A threat actor—or a malicious insider—who then compromises this account, exploits these lingering idle permissions to silently exfiltrate sensitive financial deals and private client data that the user is no longer authorized to access. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Increase risk dependent upon scope of user access permission. ## Higher Risk When The risk is significantly heightened by a lack of automated de-provisioning workflows, which leaves the cleanup of granular participant records to error-prone manual processes during user offboarding or role changes. Additionally, the absence of periodic access certification reviews for Compliant Data Sharing makes sure that invalid permissions remain undetected, allowing internal transfers to retain visibility into sensitive financial records long after their "need-to-know" has expired. ## Low or No Risk When To minimize the risk of residual access in Compliant Data Sharing, companies should enforce the mandatory deletion of participant and participant group records before user deactivation, which can be strictly governed by enabling the "Delete participant records before deactivating a user" setting in Salesforce General Settings. ## Business and Integration Considerations User roles and permission. ## Recommended Remediation Implement a Compliant Data Sharing framework when removing users. ## Security Health Review Guidance N/A - Currently not inspected by the Security Health Review tool. #### See Also - [Remove Access to Data Granted Through Compliant Data Sharing](https://help.salesforce.com/s/articleView?id=ind.fsc_admin_cds_deactivate_user.htm&type=5&language=en_US) # Component Customization (Beta) FAQ Hide components in home and record pages on a per-app basis. This feature is a Beta Service. Customer may opt to try such Beta Service in its sole discretion. Any use of the Beta Service is subject to the applicable Beta Services Terms provided at [Agreements and Terms](https://www.salesforce.com/company/legal/agreements/) ## How do I use the Component Customization (Beta) feature? Click ![Component customization icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/component_customization_icon.png) on the header to edit a record or home page. To hide a component, select the component you want to hide, and click the **Component Visibility** toggle in the customization panel. ![Component customization screenshot](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/lex_lightning_extension_component_customization.png) #### See Also - [Try New Features with the Lightning Extension for Chrome](https://help.salesforce.com/s/articleView?id=xcloud.lex_lightning_extension.htm&release=264.0.0&type=5 "Are you an early adopter of the latest and greatest technology … or do you want to become one? With the Lightning Extension for your browser, you can gain access to the latest Lightning features and try them before everyone else.") - [_External Link_: Download the Lightning Extension from the Chrome Web Store](https://sfdc.co/bm47Lj) # Components Involved in Deriving Keys Encryption keys are derived with a combination of hardware security modules (HSMs) and key derivation servers. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important Where possible, we changed noninclusive terms to align with our company value of Equality. We maintained certain terms to avoid any effect on customer implementations. Application Servers Servers in production environments that run Salesforce. When a customer attempts to read or write encrypted data or generate a tenant secret, the application server communicates with a regional KMS to process the request. External Key Management Service Service that you use when fully managing your own data encryption keys by using the External Key Management Service or the Cache-Only Key Service. Primary HSM (nShield® Connect HSM model XC) A FIPS 140-2 Level 3 hardware-compliant network appliance that generates per-release secrets and secret-wrapping keys and signs the public keys of regional HSMs. The primary HSM is located in the primary KMS. Access to the HSM is controlled through a High Assurance Virtual Ceremony (HAVC). The primary HSM public signing key is used to sign and verify each regional HSM’s public encryption key. At the start of each release, the primary and regional HSM public encryption keys are used to separately encrypt a per-release primary key wrapping key, which is used to encrypt the remainder of the per-release secrets used to derive data encryption keys. Salesforce Search Index Servers in production environments that manage Salesforce searches. When a user attempts to query encrypted data, the search index processes the request. Shield KMS Server Shield Platform Encryption uses a single primary KMS and multiple regional KMSs. The primary KMS is the first KMS to receive the per-release secrets. It makes those secrets available to regional KMSs, and it services key material requests like any regional KMS server. # Concatenate List Items This Integration Procedure example concatenates values from an array into a single comma-separated string by using a Set Values Action inside a Loop Block, then trimming and returning the output. For this example, use this simple JSON input: ```json { "Items": [ { "Item": "First" }, { "Item": "Second" }, { "Item": "Third" } ] } ``` You create a Loop Block, with `Items` as the Loop List. Inside the Loop Block, you use a Set Values Action to add the value of each `Item` to a string called `ConcatString`. Finally, you trim the extra characters from `ConcatString` by using a Set Values action, then use a Response Action to pass `ConcatString` to the output. Use the following steps to configure the Integration Procedure. 1. Create a Loop Block with `Items` in the Loop List field. 2. Inside the Loop Block, create a Set Values Action to concatenate the current item to `ConcatString`. 3. In the Set Values Action's Element Value Map, add one element, `Concat`, that gets the current value of `ConcatString` and adds Item. - Element Name: `Concat` - Value: `=%ConcatString% + ", " + %Items:Item%` 4. Use the Response JSON to put Concat into ConcatString for the next round. - Response JSON Path: `Concat` - Response JSON Node: `ConcatString` 5. After the Loop Block, the strings are concatenated, but there’s an extra comma and space at the beginning of `ConcatString` from the first execution of the loop. You can trim the output by adding a Set Values component after the Loop Block. - Element Name: `TrimOutput` - Element Value Map: `ConcatString` - Element Name: `TrimmedString` - Value: `=SUBSTRING(ConcatString, 2)` 6. Finally, send the resulting TrimmedString from TrimOutput to the output by using a Response Action. - Send JSON Path: `TrimOutput:TrimmedString` - Send JSON Node: `Output` The output looks like this. ```json { "Output": "First, Second, Third" } ``` # Concatenate Values (Managed Package) For the managed package runtime, create dynamic values by concatenating JSON node values. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Add a Set Values action to the Omniscript. 2. In the Set Values action, click **Add New Element Value**. 3. In the **Element Value Map**, in the **Element Name** field, enter a JSON node or element name. 4. In the **Element Value Map**, in the **Value** field, click **fx** and enter multiple merge fields or a combination of merge fields and literal values. For example:

Element Name Example

Value Syntax Example

FullName

=%FirstName% + " " + %LastName%

FullName

=%FirstName% + " " + "Smith"

WelcomeGreeting

=("Welcome, %FirstName% %LastName%")

5. Preview the Omniscript to test the concatenation. # Conceal Your App’s Snapshot While in a Device’s Background Use Snapshot Prevention to conceal your Mobile Publisher for Experience Cloud app’s information behind a splash screen when in the background. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To modify a Mobile Publisher project: Manage mySalesforce Apps
When an app user switches between apps on their device without quitting apps entirely, a snapshot of each app is visible when the user pulls up all apps running in the background. To enable Snapshot Prevention for your Mobile Publisher for Experience Cloud app and hide your app’s sensitive information, follow these steps. 1. From Setup, in the Quick Find box, enter Mobile Publisher, and then select **Mobile Publisher**. 2. Open your app’s project, and scroll to the Security section. 3. Select **Snapshot Prevention**. 4. Submit your change. After you enable Snapshot Prevention, your app’s information is hidden behind a blank screen (Android) or a splash screen (iOS) when in the background of a device. | Android | iOS | | --- | --- | | ![The app snapshot concealed behind a blank screen on an Android device](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_exp_conceal_snapshot_android.png) | ![The app snapshot concealed behind a splash screen on an iOS device](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_exp_conceal_snapshot.png) | # Concepts, Products, and Services As you get started with Salesforce, it’s helpful to learn some key concepts and terms. They come up frequently when you interact with the product, our documentation, and our service professionals. The concepts and terms here help you understand how Salesforce works. ### Required Editions
Available in: Salesforce Classic (not available in all orgs)
Available in: All Editions
## Concepts
Concept Definition
Cloud A Salesforce name for a loose federation of features that help you accomplish certain types activities, such as selling products or supporting your customers. Two common examples are Service Cloud and Sales Cloud.
Cloud Computing Technology that enables Internet-based services that let you sign up and log in through a browser. Salesforce delivers its service in the cloud. Other familiar cloud computing services include Google Apps and Amazon.com.
Software as a Service (SaaS) Software delivered not by traditional means (such as on disk) but in the cloud, as a service. There’s nothing to download or install, and updates are automatic.
Trust

A Salesforce term for its company-wide commitment to building and delivering the most secure, fast, and reliable cloud-based service available.

trust.salesforce.com is a systems status website that provides Salesforce customers and the community access to real-time and historical system performance information and updates. It also lists incident reports and maintenance schedules across all its key system components.

trust.salesforce.com is free to all members of the Salesforce community.

## Products and Services Salesforce includes these products and services. | Product or Service | Description | | --- | --- | | Salesforce Applications | Salesforce includes prebuilt applications (or “apps”) for customer relationship management (CRM) ranging from sales force automation to partner relationship management, marketing, and customer service. | | Lightning Platform | The Lightning platform is the first platform as a service (PaaS). Developers can create and deliver any kind of business application entirely on demand and without software. The platform also includes easy to use point-and-click customization tools to help you create solutions for your unique business requirements, without any programming experience. | | AppExchange | AppExchange is a marketplace featuring hundreds of cloud applications created by Salesforce customers, developers, and partners. Many of the applications are free and all of them are pre-integrated with Salesforce, enabling you to easily and efficiently add functionality. | | Salesforce.com Community | Salesforce provides training, support, consulting, events, best practices, and discussion boards to help you be successful. Visit [Salesforce.com Community](https://trailhead.salesforce.com/en/trailblazer-community/feed/). | ## Terms
Term Definition
App Short for application. A collection of components such as tabs, reports, dashboards, and Visualforce pages that address specific business needs. Salesforce provides standard apps, which you can customize, such as Sales and Service. You can customize the standard apps to match the way you work.
Edition One of several bundles of Salesforce products and services, each geared toward a different set of business needs. All Salesforce editions share the look and feel, but they vary by feature, functionality, and pricing.
Object

A definition of a specific type of information you can store in Salesforce. For example, the Case object lets you store information about customer inquiries. For each object, your organization has multiple, specific records.

Salesforce comes with lots of standard objects, but you can create custom objects, as well.

Organization A deployment of Salesforce that has a defined set of licensed users. Your organization includes all your data and applications.
Record A collection of fields that store information about a specific item of a specific type. A record is an object, such as a contact, an account, or an opportunity. For example, you can have a contact record to store information about Joe Smith, and a case record store information about his training inquiry.
Release

Salesforce releases new products and features three times per year, and we identify releases by season—Winter, Spring, and Summer—along with the calendar year. Example: Winter ’15.

For every Salesforce release, the Salesforce release notes include new features and products that are generally available or in beta release. They also describe all changes to existing features and products. You can find the release notes when you search for “Release Notes” in the Salesforce Help.

Salesforce The name of the Salesforce cloud computing CRM service and the company name.
# Condition Builder Examples Use these examples to help you convert your own real-world use cases into Condition Builder conditions. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

## Track Report Executions Track when a user views or exports more than 2,000 rows from any report on the Lead object. - Event: Report Event - Condition Logic: All Conditions Are Met - Conditions: - `Rows Processed Greater Than 2,000` - `Queried Entities Contains Lead` - Notes: Use the **Contains** operator, rather than **Equals**, to also include reports that are based on multiple objects, one of which is Lead. ![Condition Builder conditions](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cb_example_one.png) Description of Example: Track when a user views or exports a report that has a column that contains email addresses. - Event: Report Event - Condition Logic: All Conditions Are Met - Conditions: `Name of Columns Contains Email` - Notes: Use the **Contains** operator to include any of these column names: `Email`, `Customer Email`, or `Email of Customer`. ![Condition Builder conditions](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cb_example_seven.png) ## Track User Logins Description of Example: Track when a user logs in from the IP address 12.34.56.78. - Event: Login Event - Condition Logic: All Conditions Are Met - Conditions: `Source IP Equals 12.34.56.78` - Notes: Only the specific IP address 12.34.56.78 triggers the policy. If you want to track logins from any IP addresses that start with 12.34.56, use the condition `Source IP Starts With 12.34.56`. ![Condition Builder conditions](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cb_example_two.png) Description of Example: Track when a user logs in using a Chrome browser. - Event: Login Event - Condition Logic: All Conditions Are Met - Conditions: `Browser Contains Chrome` - Notes: You can also track logins from the Safari and Firefox browsers. ![Condition Builder conditions](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cb_example_five.png) ## Track API Queries and Elapsed Time Description of Example: Track when a user uses any API to query the Lead object and the request takes longer than 1,000 milliseconds. - Event: API Event - Condition Logic: All Conditions Are Met - Conditions: - `Queried Entities Contains Lead` - `Elapsed Time Greater Than 1000` - Notes: Use the **Contains** operator, rather than **Equals**, to also include queries on multiple objects, of which one is Lead. ![Condition Builder conditions](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cb_example_three.png) ## Track API Queries of Any List View Description of Example: Track when a user uses any API to query any list view. - Event: List View Event - Condition Logic: All Conditions Are Met - Conditions: `Event Source Equals API` - Notes: To track when a user uses the UI to query a list view specify `Classic` or `Lightning` instead of `API`. ![Condition Builder conditions](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cb_example_four.png) ## Track User's Session Level Security Description of Example: Track when a user who doesn’t have high assurance session-level security access (not logged in with two-factor authentication) queries any list view. - Event: List View Event - Condition Logic: Any Condition Is Met - Conditions: - `Session Level Equals LOW` - `Session Level Equals STANDARD` - Notes: Track when a user without high assurance executes a report (Report Event) or an API query (API Event) using the same condition in separate transaction security policies. ![Condition Builder conditions](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cb_example_eight.png) ## Track Assignments of Modify All Data Permission Description of Example: Track when a user is assigned the Modify All Data permission. - Event: Permission Set Event Store - Condition Logic: All Conditions Are Met - Conditions: `Permission Type Contains ModifyAllData` - Notes: Use the `Contains` operator, rather than `Equals` for permission set events. The value must be the API name of the permission. ![Condition Builder conditions for a permission set event.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cb_example_permission_event.png) ## Block File Download Description of Example: Detect and block a user from downloading a specific file. - Event: File Event - Condition Logic: Any Condition Is Met - Conditions: - `File Name Equals Asset.pdf` ![Condition Builder conditions](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cb_example_ten.png) ## Use Custom Logic Description of Example: Track when a user with a username in the `@spy.mycompany.com` domain queries all the records in a list view named SuperSecureListView. - Event: List View Event - Condition Logic: Custom Condition Logic is Met - Custom Condition Logic: `(1 OR 2) AND 3` - Conditions: - `Scope Equals Everything` - `Name Equals SuperSecureListView` - `Username Ends With @spy.mycompany.com` - Notes: ![Condition Builder conditions](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cb_example_nine.png) # Conditional Block Use a Conditional Block to group actions and blocks behind a formula without performing a loop or merging a list. The Conditional Block’s only job is to control the Integration Procedure flow. A Conditional Block executes in its entirety if an expression is true, executes one of a set of mutually exclusive conditions defined in the steps it contains, or both.

Property

Description

Execution Conditional Formula

Specifies that the entire Conditional Block runs only if this formula evaluates to true.

Is If Else Block

Specifies that all actions within the block except optionally the last have mutually exclusive Execution Conditional Formula values. If the last action has a blank Execution Conditional Formula, it runs only if the Execution Conditional Formula values of all the other actions evaluate to false.

# Conditional Block Properties (Managed Package) For the managed package runtime, these properties are unique to or function in a unique manner in Conditional Blocks. A Conditional Block executes in its entirety if an expression is true, executes one of a set of mutually exclusive conditions defined in the steps it contains, or both. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US).

Property

Description

Execution Conditional Formula

Specifies that the entire Conditional Block runs only if this formula evaluates to true.

Is If Else Block

Specifies that all actions within the block except optionally the last have mutually exclusive Execution Conditional Formula values. If the last action has a blank Execution Conditional Formula, it runs only if the Execution Conditional Formula values of all the other actions evaluate to false.

# Conditional Steps For Calculation Procedures (Managed Package) For the managed package runtime, for each step in the Calculation Procedure, you can define a condition that must be met in order for the step to be executed. The step is only executed when the condition is met. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To specify a condition, check **Conditional Step** and enter the condition for the step. If the condition compares a variable with a constant, the constant must be defined in the Constant section. For an example that includes a Conditional Step, see [Create the GoodStudentDiscountCalculation Calculation Procedure (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_the_goodstudentdiscountcalculation_calculation_procedure.htm&release=264.0.0&type=5 "For the managed package runtime, the GoodStudentDiscountCalculation calculation procedure calls the GoodStudentDiscountEligibility calculation matrix, which applies a 15% discount to a quoted amount for an Age between 16 and 24 and a GPA of 3.0 or greater."). # Conditionally Display Elements in Saved Omniscripts for Different User Profiles (Managed Package) For the managed package runtime, beginning with Vlocity Spring '18, a user's saved Omniscript instance can be opened by another user. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). When the Omniscript resumes, it uses the profile of the current user. Conditions on elements can determine whether the user has access to the element. For example, an agent may see data that does not display to customers. 1. In an element's Conditional View property, click **Add Condition**. 2. In the first field, enter userProfile. 3. In the second field, enter the name of a User Profile. For example, System Administrator. The following figure shows settings for an element that displays only to call center agents. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/profile_condition.png) # Conditionally Display Omniscript Elements With the Conditional View property, you can hide an element or a group of elements in a block or step based on certain conditions. Every step, block, or element supports at least one conditional view. Elements contain up to three conditional view options depending on the type of element. For example, an action outside of a step doesn’t have a Read-Only option since the action isn’t visible. When you hide an element in an Omniscript, Omnistudio sets the contents of the element to null in the data JSON. Consider this behavior if your Omniscript references the hidden field. For example, suppose a Set Error element assesses whether a Text element is filled before proceeding to the next page. If the Text element is conditionally hidden, the Text element value is null, and the error is set. 1. From an element's properties, expand **Conditional View** section. 2. Select a **Condition Type** from the dropdown menu.

Condition

Description

Show Element if True

The element renders only if the conditional is true. If the conditional is false, the element is hidden from the UI.

For blocks, this condition type is the only one available.

Disable Read Only if True

Disables Read Only on an element if the conditional is true. If the value is false, the element becomes Read Only.

Set Element to Required if True

The element becomes required if the condition is true.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note If a condition type isn't listed for an element, it isn't supported. Adding it using the JSON editor doesn't work. 3. Choose the logical operator for the group (AND or OR). The AND operator requires that all conditions are met. The OR operator requires that at least one condition is met. 4. Click **Add Condition**. 5. In the left operand, enter the name of the element in plain text. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note If the element is repeatable, enter the name of the element followed by |n, where n is the nth repeated element. For example, if Age is repeated, Age|2 refers to the second instance of the repeated element. 6. In the right operand, enter one of these syntax types: - If the element type is Text, enter the string in plain text. - If the element type is Checkbox or Disclosure, enter **true** or **false**. - If the element type is Number, enter a number. - If the element type is Select or Radio, type in the name of the option in plain text—for example, **Yes** or **No**. - If the element type is Multi-Select, enter a semicolon-separated string. For example, **Ind** | **;** | **Small**. - If the element type is Date, Time, or Date/Time, enter a value in **ISO format**: - Date—2014-10-01T07:00:00.000Z (Wed Oct 01 2014 00:00:00 GMT-0700 (PDT) - Date/Time—1970-01-02T06:19:00.000Z (Tue Feb 17 2015 22:20:03 GMT-0800 (PST)) - Time—2015-02-21T00:09:40.270Z (Thu Jan 01 1970 22:19:00 GMT-0800 (PST)) - Date—2014-10-01T07:00:00.000Z (Wed Oct 01 2014 00:00:00 GMT-0700 (PDT) - Date/Time—1970-01-02T06:19:00.000Z (Tue Feb 17 2015 22:20:03 GMT-0800 (PST)) - Time—2015-02-21T00:09:40.270Z (Thu Jan 01 1970 22:19:00 GMT-0800 (PST)) - The right operand supports merge fields, for example `Name = %contactLastName%`. 7. If you're using the designer on a managed package, click the **Hide Conditional Elements** checkbox to hide all of the conditional elements in the Omniscript. The conditional elements are marked with a yellow eye icon. ## Running Validation with onChange Omniscripts run validation when a user clicks out of a field by using the onBlur function. 1. In the Setup properties, click **Edit as JSON**. 2. Add the property "commitOnChange": true. 3. Preview the behavior. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note In LWC Omniscripts, the onChange behavior runs after a half-second delay. # Conditionally Run Embedded Omniscripts (Managed Package) For the managed package runtime, using the Conditional View property in the parent Omniscript, you can run an embedded Omniscript only under certain conditions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Learn how to embed an Omniscript in other Omniscripts. See [Embed an Omniscript in Another Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_embed_an_omniscript_in_another_omniscript.htm&release=264.0.0&type=5 "For the managed package runtime, an Omniscript can be reused in one or more existing Omniscripts. Reusing Omniscripts enables you to build a variety of smaller scripts and then piece them together into one or more parent scripts. Embedded Omniscripts behave just like other Omniscript elements."). 1. From the Properties section of the Reusable Omniscript element of the parent script, expand **Conditional View**. 2. Click the **Show Element If True** link. The Edit Show Hide Rules window opens. 3. Create conditions as described in [Use the Conditional View Property to Conditionally Display Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_conditionally_display_elements_using_the_conditional_view_property.htm&release=264.0.0&type=5 "For the managed package runtime, every step, block, or element supports at least one Conditional View. Conditional Views allow you to hide the element or the group of elements contained in a block or step based on certain conditions. Elements contain up to three conditional view options depending on the type of element. For example, an Action outside of a Step doesn’t have a Read-Only option since the action isn’t visible."). 4. Click **Save**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Elements in the embedded Omniscript run only if the conditions are true for those elements. If the conditions change while the embedded Omniscript is running, subsequent embedded Omniscript elements don't run. If the conditions are false for any embedded Omniscript elements, those elements are skipped. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Make sure that each embedded Omniscript defines unique **Element Name** JSON nodes in its Set Values elements. If two child Omniscripts of the same parent set values for the same JSON nodes, only values from the first child Omniscript are set, even if both children run conditionally. # Conduct a Post-Incident Review Learn how a post-incident review can identify improvements in your recovery plan to avoid extended downtime. After an incident is resolved, take time to reflect on the incident. Conduct a post-incident review to determine the root cause and find where improvements can be made to your recovery plan. A post-incident review is a learning opportunity to better equip your company and team to avoid similar issues in the future. During the review, be positive and focus on how the incident occurred, not who potentially caused it or why it happened. Split the review into two parts, including: - An after action review that looks at how the IT operations team responded to the incident and initiated the recovery process. Review and identify areas of improvement to reduce future incident recovery time. - A root cause analysis that identifies the cause of the incident along with any fixes or remediation that can prevent it from occurring again. Ensure that any fixes identified from the review are incorporated in your software development lifecycle for your development team to evaluate and prioritize in their backlog. # Configurable Business APIs For repetitive and complex loyalty tasks, Loyalty Management comes with process templates that you can run using the configurable business APIs. Each process template contains a set of predefined process parameters and rules. You can clone a process template to create a program process. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
In a cloned process, you can customize the predefined process parameters and rules based on your requirements. For example, after you clone the Update Member Details process template, you can update the predefined rule to also update members’ email addresses. Here are the loyalty program process templates that are provided with Loyalty Management. | Process Template Category | Process Template Name | Description | URL of Business API | | --- | --- | --- | --- | | Tier Processing | Change Member Tier | Upgrades or downgrades members’ tiers. | `/connect/loyalty/programs/DemoProgram/program-processes/updateTier` | | Promotion | Enroll in Promotion | Enrolls members to promotions that are associated with members’ loyalty programs. | `/connect/loyalty/programs/DemoProgram/program-processes/enrollInPromotion` | | Promotion | Get Member Promotions | Gets loyalty promotions based on the member eligibility category. | `/connect/loyalty/programs/DemoProgram/program-processes/GetMemberPromotions` | | Member | Update Member Details | Updates the details of the Member and Contact records. For example, Membership Number, preferences, and custom fields of the Member record. And first name, last name, email ID, and mobile phone number of the Contact record. | `/connect/loyalty/programs/DemoProgram/program-processes/updateMemberDetails` | | Member | Unenroll Member | Changes members’ status to inactive in a loyalty program. | `/connect/loyalty/programs/DemoProgram/program-processes/unenrollMember` | | Transactional | Credit Points to Members | Processes members’ transaction journals and credits points to the points balance. | `/connect/loyalty/programs/DemoProgram/program-processes/creditPoints` | | Transactional | Debit Points from Members | Processes members’ transaction journals and debits points from the points balance. | `/connect/loyalty/programs/DemoProgram/program-processes/debitPoints` | | Voucher | Issue Voucher | Issues vouchers to loyalty program members for transactions. | `/connect/loyalty/programs/DemoProgram/program-processes/issueVoucher` | | Voucher | Cancel Voucher | Cancels the vouchers issued to loyalty program members and updates the voucher status as Canceled. | `/connect/loyalty/programs/DemoProgram/program-processes/cancelVoucher` | ## Explore and Learn Watch this video to understand how to customize a loyalty program process template. If you aren’t able to watch the video in full screen, open the video on a new tab: [![Watch video](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/resources-global/_corporate/images/play_btn.png) Process Member Redemptions Using Promotion Setup in Loyalty Management](https://salesforce.vidyard.com/watch/BwfEPhWYVxujEuebNNcR4o) . - **[Change Member Tier Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_container_change_member_tier_process_template.htm&release=264.0.0&type=5)** To upgrade or downgrade a member’s tier from an external system, you can use the Change Member Tier process template to create processes for changing the tier of the members in the loyalty tier group. - **[Enroll in Promotion Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_container_enroll_in_promotions_process_template.htm&release=264.0.0&type=5)** When loyalty members of a loyalty program enroll in loyalty promotions associated with loyalty program from an external system, you can use the Enroll in Promotion process template to process the enrollment of members for a promotion. - **[Get Member Promotions Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_container_get_member_promotions_process_template.htm&release=264.0.0&type=5)** Use the Get Member Promotions process template to create a process for showing member promotions on an external system. - **[Opt Out of Promotion Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_promotion_opt_out.htm&release=264.0.0&type=5)** Use the Opt Out of Promotion loyalty program process template to let members leave the promotions that they’ve enrolled in. - **[Update Member Details Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_container_update_member_details_process_template.htm&release=264.0.0&type=5)** Use the Update Member Details process template to update an Individual type member’s details in their Loyalty Program Member record and the related Contact record. You can update standard fields, such as member address or custom fields, such as shopping preferences. You can also credit points to members for completing or updating their membership profile. - **[Unenroll Member Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_container_unenroll_member.htm&release=264.0.0&type=5)** If your loyalty members are leaving the loyalty program and when you want to disengage those members from the loyalty program from an external system, you can use the Unenroll Member process template to create processes for inactivating the status of the member in the loyalty program. - **[Credit Points to Members Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_container_credit_points_to_members_process_template.htm&release=264.0.0&type=5)** When loyalty members gain points for transactions in external systems, you can use the Credit Points to Members process template to create processes for crediting the precalculated points to the member. - **[Debit Points from Members Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_container_debit_points_process_template.htm&release=264.0.0&type=5)** If a redemption catalog doesn’t exist in external systems and when loyalty members redeem points for transactions, you want the Loyalty Management application to calculate the points and redeem the points from the member's points balance. Use the Debit Points from Members process template to create a process for processing the member’s transaction journals and debit points from the member’s points balance. - **[Issue Voucher Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_container_issue_voucher_process_template.htm&release=264.0.0&type=5)** To issue vouchers to loyalty program members or contacts, especially from an external system, you can use the Issue Voucher process template to create processes for issuing vouchers as per the specified voucher definition. - **[Cancel Voucher Process Template](https://help.salesforce.com/s/articleView?id=xcloud.bapi_container_cancel_voucher_process_template.htm&release=264.0.0&type=5)** To discard the unused vouchers or to withdraw the issued vouchers, you can cancel the vouchers especially from an external system. You can use the Cancel Voucher process template to create processes for canceling vouchers. #### See Also - [Run Loyalty Program Processes by Using a Flow Action](https://help.salesforce.com/s/articleView?id=xcloud.run_loyalty_program_processes_by_using_a_flow_action.htm&release=264.0.0&type=5 "Loyalty program processes can be created for various transactional, nontransactional, and tier-processing tasks in loyalty management. Processes are run based on defined parameters and rules. After you activate a process and the process's rules, you can find the processes in the Flow Builder actions in the Loyalty category.") - [_Loyalty Management Developer Guide_: Run Program Process](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/connect_resources_issue_voucher.htm) # Configurations Use these configuration steps to collect health verifications to return to work. ## Overview and Prerequisites Use these steps to help set up your health verification process: - Set up a new custom Object with the recommended name, Health Verification. - Enable the Consent Management Objects, including the Individual Object. Go to Setup > Company Information > Data Protection and Privacy. - Check the ‘Make data protection details available in records’ checkbox. - Save the changes. - Create an Authorization Form record and an Authorization Form Text record to capture individuals’ requested consent authorization details for COVID-19 related topics. - Create a dedicated screen flow for the health verification process. - Create an Experience Cloud Digital Experience page to host the screen flow created for the health verification process. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-z_solutionkits-264-0-0-production-enus/1e49f40e-a11c-44f7-b439-8f20b6c66033/images/icon_note.png) Note To make it easier to keep permissions data, consider using a separate Salesforce instance when using this solution kit. ## New Custom Object Setup - New Custom Object - Suggested Label: Health Verification - Suggested Object Name: Health Verification - Data Type: Auto Number - If you plan to collect documentation, check the ‘Add Notes and Attachments related list to default page layout’ checkbox. - Within the Health Verification object, create these fields. - Field Name: Health Verification Method - Description: This field describes the method of COVID-19 health status verification being attested to. - Field Type: Picklist - Proof of Vaccination - Negative COVID-19 Test - Documentation of COVID-19 Recovery - Field Name: Employee (Required) - See the Design Considerations section. - Description: This field connects the Health Verification record to the related Employee record. - Field Type: Lookup Relationship - Field Name: Health Verification Status - Description: This field captures the status of the employee’s health verification status based on the submitted information. - Field Type: Picklist - Not Verified - Pending Approval - Verified - Declined - Field Name: Declined? - Description: This field captures when the employee declines to go through the health verification process. - Checkbox field - Default = False - Field Name: Declination Reason - Description: This field captures the reason the employee declined an available health verification. - Field Type: Picklist ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-z_solutionkits-264-0-0-production-enus/1e49f40e-a11c-44f7-b439-8f20b6c66033/images/icon_note.png) Note When using this picklist, consult with your organization’s HR team and legal counsel. They can help you select the appropriate fields to populate for the Declination Reasons, as determined for your particular use cases. HR and legal counsel can also help to ensure compliance with local privacy and healthcare laws, as well as any other applicable laws or guidance - Field Name: Health Credential Document Date - Description: This field captures the date that the health credential was issued. Verifiers must confirm if this date also reflects the date that the related health event occurred. - Field Type: Date - Field Name: Verification Date - Description: This field captures the date that an organization member verified the end user’s health credential. - Field Type: Date and Time - Field Name: Health Credential Expiration Date (Optional) - Description: This field tracks health verification expirations. For example, how often does an employee require a test? Or, when does a vaccination require a booster based on local health authority guidance? - Field Type: Date ## Create Consent Management Records This solutions kit uses Salesforce Consent Management Objects to capture end-user consent for verification. When users accept terms and conditions, a new Authorization Form Consent record is automatically created. First, manually create an Authorization Form record and an Authorization Form Text record to associate with future Authorization Form Consent records. These records are required before you can configure the Health Verification Lightning Flow. The Authorization Form Text record ID is then passed into the flow as a Field Value. There, it automatically creates the Authorization Form Consent record with the correctly attached Authorization Form Text record. - Create an Authorization Form record to represent capturing the user’s authorization. Don’t populate the Authorization Form Text lookup field at this time. Save this record before you create an Authorization Form Text record. - Required fields: Name - Create New Authorization Form Text record - Required fields: Name, Authorization Form (Lookup) - Recommended fields: Full Authorization Form URL, Summary Auth Form Text, Content Document - Update the Authorization Form record with the newly created Authorization Form Text record - Recommended fields: Default Auth Form Text (Lookup) The Authorization Form Text record ID is inserted into the Lightning Flow Accept Journey’s Create Authorized Form Consent record step. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-z_solutionkits-264-0-0-production-enus/1e49f40e-a11c-44f7-b439-8f20b6c66033/images/icon_note.png) Note When creating the Authorization Form and Authorization Form Text records, consult with your organization’s HR specialist and legal counsel. They can help you include appropriate consent language for your own use cases and ensure compliance with local privacy and healthcare laws. ## Set Up Your Health Verification Screen Flow This Health Verification Lightning Flow consists of three main screen flow steps: 1. Capture consent acknowledgment. 2. Capture health verification information. 3. Capture health verification file upload. To create a flow, from Setup, in the Quick Find box, enter **Flows**, and then select **Flows**. Create a Screen flow from the selection menu. Throughout this section, only some Flow steps contain suggestions for labels. However, admins must name their API convention carefully. - **Flow Step:** Get Records - Flow Step Description: Get the employee’s information from the User ID. To access the Employee.UserId lookup field, you must have object-level access to the field. - Object: Employee, or Person Account, Contact, or other record where employee information is stored - Condition requirements - All Conditions Are Met (AND) - Field: UserId - Operator: Equals - Value: {!$User.Id} - Sort Order - Not sorted - How Many Records to Store - Only the first record - How to Store Record Data - Automatically store all fields - **Flow Step:** Screen Flow (screen properties and steps are described from top to bottom) - Flow Step Description: Create a screen to capture consent acknowledgment - Screen Properties - Configure Frame - Show Footer = True - Control Navigation - Next or Finish = True - Display Text Component - Text: Health Verification Form - Display Text Component - Text: Consent Acknowledgment - Display Text Component - This flow must include obtaining consent from end users for: 1. Collection and processing of their personal data, including personal health information, for verification of their COVID health status. 2. An acknowledgment of relevant information provided to them about the COVID-19 vaccines and their potential risks and benefits. - ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-z_solutionkits-264-0-0-production-enus/1e49f40e-a11c-44f7-b439-8f20b6c66033/images/icon_note.png) Note Consult your organization’s legal counsel to include appropriate consent language for your use cases and to ensure compliance with local privacy and healthcare laws, as well as any other applicable laws or guidance. - Display Text Component - Leave section intentionally blank for spacing - Radio Buttons Component - Create Choice Resources to use in the Radio Button Component that represents the Accept and Decline paths of the Consent Acknowledgment screen. These Choice Resources are used in the component’s Configure Choices section. - Sample Label - I have: 1. Read and understand the Terms and Conditions as well as the Privacy Notice. 2. Acknowledge and consent to the processing of my personal data for the purpose of verifying my COVID-19 health status pursuant thereto. - Required = True - Data Type = True - Default Value = No Default Value - Configure Choices - Let Users Select Multiple Options: No - Component Type: Radio Buttons - Choice: \[Accept Choice Resource\] - Choice: \[Decline Choice Resource\] - **Flow Step:** Decision - Flow Step Description: Create decision based on user’s consent response on previous screen. - Outcome Order - Accept - Label: Accept - Condition Requirements to Execute Outcome - All Conditions Are Met (AND) - Resource: \[Reference the API name of Radio Buttons Component from the Consent Acknowledgment screen\] - Operator: Equals - Value: \[Accept Choice Resource\] - Decline - Label: Decline - Condition Requirements to Execute Outcome - All Conditions Are Met (AND) - Resource: \[Reference the API name of Radio Buttons Component from the Consent Acknowledgment screen\] - Operator: Equals - Value: \[Decline Choice Resources\] ## Accept Journey - **Flow Step:** Screen Flow (from top to bottom of component) - Flow Step Description: Create screen to capture health verification information. - Screen Properties - Configure Frame - Show Footer = True - Control Navigation - Next or Finish = True - Previous = True - Display Text Component - Text: Health Verification Form - Display Text Component - Text: Complete the health verification-related questions below. - Radio Button Component - Create Picklist Choice Resources to use in the Radio Button Component that represents the Health Verification Method picklist field. - Label: Health Verification Method - Required: True - Data Type: Text - Let Users Select Multiple Options: No - Component Type: Radio Buttons - Choice: \[Reference Picklist Choice Set Created for Health Verification Method picklist\] - Display Text Component - Text: Enter the Date of Health Verification. If your health verification process requires more than one step, for example, multiple vaccination dates, submit only the information related to the final step of the process. - Date Component - Configuration - Label: Date of Health Verification - Require = True - Default Value = Blank - Set Component Visibility - When to Display Component = Always - **Flow Step:** Create Records - Flow Step Description: Create Health Verification record - How Many Records to Create - Select ‘One’ - How to Set the Record Fields - Select ‘Use separate resources, and literal values’ - Create a Record of this object - Object: Health Verification - Set Field Values for the Health Verification - Field: Employee\_\_c - Value: \[Reference ‘Get Employee from User ID’ step’s API Name\] - Field: Health\_Verification\_Date\_\_c - Value: \[Reference ‘Date of Health Verification’ screen component’s API Name\] - Field: Health\_Verification\_Status\_\_c - Value: Select picklist value ‘Not Verified’ - Field: Health\_Verification\_Method\_\_c - Value: \[Reference the Health Verification Method Picklist Choice Set value\] - **Flow Step:** Screen Flow (from top to bottom of component) - Flow Step Description: Create screen to capture health verification file upload. - Screen Properties - Configure Name - Show Footer = True - Control Navigation - Next or Finish = True - Previous = True - Display Text Component - Text: Health Verification Form - Display Text Component - Upload a file to provide proof of your health verification. File extensions accepted: .jpeg, .jpg, .png, .pdf. - File Upload Component - File Upload Label: Upload your vaccination card below: - Accepted Formats: .jpeg, .jpg, .png, .pdf - Related Record ID: \[Reference API name from ‘Create Step - Create Health Verification record’\] - Set Component Visibility - When to Display Component - Always - **Flow Step:** Create Records - Flow Step Description: Create Authorized Form Consent record - How Many Record to Create - Select ‘One’ - How to Set the Record Fields - Select ‘Use separate resources, and literal values’ - Create a Record of this Object - Object: Authorization Form Consent - Set Field Values for the Authorized Form Consent ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-z_solutionkits-264-0-0-production-enus/1e49f40e-a11c-44f7-b439-8f20b6c66033/images/icon_note.png) Note Prior to using and implementing this flow, consult with your organization’s legal counsel. Confirm whether your organization is permitted by law to collect proof of COVID vaccination or other health status. - Field: \[AuthorizationFormTextID record ID created in the ‘Create Consent Management Records’ section\] - Field: ConsentCapturedDataTime - Value: {!$Flow.CurrentDate} - Field: ConsentCaptureSource - Value: Health Verification Flow - Field: ConsentCaptureSourceType - Value: Web - Field: ConsentGiverID - Value: \[Reference the Employee’s related Individual ID through the ‘Get Record - Get the Employee’s information from the User ID’ step\] - Field: Name - Value: \[Reference the Employee Name variable through the ‘Get Record - Get the employee’s information from the User ID’ step\] - Field: Status - Value: Select picklist value ‘Seen’ - **Flow Step:** Screen Flow - Flow Step Description: Create screen to display confirmation - Screen Properties - Configure Frame - Show Footer = True - Control Navigation - Next or Finish = True - Previous = True - Display Text Component - Text: Health Verification Form - Display Text Component - Text: Thank you for submitting your heath verification attestation. ## Decline Journey - **Flow Step:** Screen Flow - Flow Step Description: Create screen to capture declination reason. - Screen Properties - Configure Frame - Show Footer = True - Control Navigation - Next or Finish = True - Previous = True - Display Text Component - Text: Health Verification Form - Display Text Component - Text: Indicate your reason for declining: - Picklist Component - Create Picklist Choice Resources to use in the Picklist screen flow component that represents the ‘Declination Reason’ picklist field. - Label: Declination Reason - Data Type: Text - Default Value: No Default Value - Select Choices - Choice: \[Reference Picklist Choice Set Created for Declination Reason picklist\] - Set Component Visibility - When to Display Component: Always - **Flow Step:** Create Records - Flow Step Description: Create Health Verification record for declined health verification - How Many Records to Create - Select ‘One’ - How to Set the Record Fields - Select ‘Use separate resources, and literal values’ - Create a Record of This Object - Object: Health Verification - Set Field Values for the Health Verification - Field: Declination\_Reason\_\_c - Value: \[Reference the Declination Reason Picklist Choice Set value\] - Field: Declined\_\_c - Value: {!$GlobalConstant.True} - Field: Employee\_\_c\*\*\*\* (see Considerations) - Value: \[Reference ‘Get Employee from User ID’ step’s API Name\] - Field: Health\_Verification\_Date\_\_c - Value: {!$Flow.CurrentDate} - Field: Health\_Verification\_Status\_\_c - Value: Select ‘Declined’ picklist value - **Flow Step:** Display Text Component - Flow Step Description: Create screen to display confirmation. - Screen Properties - Configure Frame - Show Footer = True - Control Navigation - Next or Finish = True - Display Text Component - Text: Health Verification Form - Display Text Component - Text: Thank you for submitting your health verification declination. Congratulations! You’ve configured the employee health verification Lightning Flow to help your organization return to work. It’s now time to test your flow. See Design Considerations - Options for Displaying the Health Verification Flow to Employee’s for options on displaying and testing your Lightning Flow. #### See Also - [Salesforce Help: How Does Flow Security Work?](https://help.salesforce.com/articleView?id=flow_distribute_security.htm&type=0&language=en_US) - [Salesforce Help: Track Object Field History](https://help.salesforce.com/articleView?id=xcloud.tracking_field_history_for_custom_objects.htm&type=5&language=en_US) - [Salesforce Help: Create Object-Specific Quick Actions](https://help.salesforce.com/articleView?id=platform.creating_object_specific_actions.htm&type=5&language=en_US) - [Salesforce Help: Employee Workspace](https://help.salesforce.com/articleView?id=service.employee_workspace.htm&type=5&language=en_US) - [Salesforce Help: Understand the Work.com Data Model](https://help.salesforce.com/articleView?id=service.wcc_setup_understand_data_model.htm&type=5&language=en_US) - [Salesforce Help: Lightning Page Types](https://help.salesforce.com/articleView?id=platform.lightning_page_types.htm&type=5&language=en_US) - [Salesforce Help: Custom Login Flows](https://help.salesforce.com/articleView?id=xcloud.security_login_flow.htm&type=5&language=en_US) - [Salesforce Help: General Flow Limits](https://help.salesforce.com/articleView?id=platform.flow_considerations_limit.htm&type=5&language=en_US) # Configurations Follow these configuration steps to use the Salesforce Consent Data Model to manage and respect consent preferences in Marketing Cloud Engagement. ## Connect Consent Data to Engagement - [Synchronize consent related objects](https://help.salesforce.com/s/articleView?id=mktg.mc_cab_data_integration_for_your_account_with_synchronized_data_sources.htm&type=5&language=en_US) to Engagement via Marketing Cloud Connect. To ensure correct data extension mapping, synchronize objects in this order. - Contact and User - Business Brand, Data Use Purpose, and Individual - Contact Point Email, Contact Point Phone, and Contact Point Address - Contact Point Consent and Contact Point Type Consent ![Synchronized objects in Marketing Cloud](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-consent_data_model_marketing_cloud-264-0-0-production-enus/97f3c6f5-3ec6-44f0-9e6d-b63f2fbbf136/consent_data_model_marketing_cloud/images/consent_data_model_synchronize.png) ![Object mapping after synchronization](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-consent_data_model_marketing_cloud-264-0-0-production-enus/97f3c6f5-3ec6-44f0-9e6d-b63f2fbbf136/consent_data_model_marketing_cloud/images/consent_data_model_mc_object_mapping.png) Your synchronized data appears in your local Synchronized Data Extension folder. ![Synchronized Data Extension folder in the Subscribers directory](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-consent_data_model_marketing_cloud-264-0-0-production-enus/97f3c6f5-3ec6-44f0-9e6d-b63f2fbbf136/consent_data_model_marketing_cloud/images/consent_data_model_extension_folder.png) ## Connecting Consent Data to Subscribers in Engagement - Create a query that joins the subscriber’s contact ID with contact point consent records using Brand as a filter. For example: ``` Select c.Id, c.Email, cp.EmailAddress, cpc.Name, cpc.PrivacyConsentStatus From Contact_Salesforce c Join Individual_Salesforce i On c.IndividualId = i.Id Join ContactPointEmail_Salesforce cp On i.Id = cp.ParentId Join ContactPointConsent_Salesforce cpc On cp.Id = cpc.ContactPointId ``` - After the query is created, determine how to make the information available according to your business requirements for marketing use cases. For example: - Update or create an automation in Automation Studio, and run these queries on a schedule. - Write query results to a data extension in a shared folder, and make the folder available to the required child Business Units for marketing activities. - If necessary, write additional queries or parameters that include the Data Use Purpose record. ## Retrieving Changes to Subscriber Status in Engagement ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-consent_data_model_marketing_cloud-264-0-0-production-enus/97f3c6f5-3ec6-44f0-9e6d-b63f2fbbf136/images/icon_note.png) Note Retrieving changes to subscriber status is only intended to account for changes that happen natively in the Engagement [feedback loop](https://help.salesforce.com/s/articleView?id=000353531&type=1&language=en_US) and [reply mail management](https://help.salesforce.com/s/articleView?id=mktg.mc_es_reply_mail_management.htm&type=5&language=en_US) processes. This solution assumes that any profile or preference center updates are written directly to Sales Cloud or Service Cloud for customer-initiated changes. Identify related consent objects in core and update privacy preferences. The specific consent objects affected vary depending on how the unsubscribe was received and how the customer manages consent. If a customer only manages consent by contact point type consent, then that is the only object impacted by the unsubscribe action in Engagement. - Use `ReasonUnsub` to determine the consent object impacted. The default values are: - Spam Complaint - Unsubscribed from list details on subscriber properties dialog - Unsubscribed by ExactTarget RMM service based on subscriber Leave or Reply email - Unsubscribed by the Engagement RMM service based on subscriber Leave or Reply email - Unsubscribed by subscriber edit API call - Unsubscribed from the Subscription Center - Unsubscribed via Import - Create an [invocable action](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_actions_invocable.htm) that executes the API to [retrieve the SubscriberStatusEvent](https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/retrieving_the_subscriberstatusevent.html). [Use complex filter parts](https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/using_complex_filter_parts.html), and include the date since the last batch execution. For example: ``` CurrentStatus equals Unsubscribed AND CreatedDate greaterThan 2011-04-07T19:58:33.434707Z ``` To filter on a specific ReasonUnsub value, change the filter to use a different [SimpleOperators](https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/simpleoperators.html). For example: ``` ReasonUnsub like Unsubscribed AND CreatedDate greaterThan 2022-01-01T19:58:33.434707Z ``` - To retrieve unsubscribe events from Engagement for the last 24 hours using an API call, create a schedule-triggered flow. - Pick a date and time for the first run of the flow. - To run the flow every 24 hours, schedule the flow to run daily. - Create a scheduled-triggered flow to perform weekly refreshes that review all subscribers with an unsubscribed status in the All Subscribers list. An invocable action can perform the work for both executions by allowing the primary invocable method to accept multiple dates to act as a date range using a filter. For example: ``` CurrentStatus equals Held AND CreatedDate between 2009-01-01T19:58:33.434707Z 2010-04-07T19:58:33.434707Z ``` ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-consent_data_model_marketing_cloud-264-0-0-production-enus/97f3c6f5-3ec6-44f0-9e6d-b63f2fbbf136/images/icon_note.png) Note If a subscriber resubscribes in the future, resubscribe them in Engagement as a separate action from updates to the Salesforce Consent Data Model.
Icon of an arrow that points left.

Review earlier steps in this solution.

#### See Also - [_Marketing Cloud Engagement APIs and SDKs_: Retrieve the SubscriberStatusEvent](https://developer.salesforce.com/docs/marketing/marketing-cloud/guide/retrieving_the_subscriberstatusevent.html) - [_Automate Your Business Processes_: Schedule-Triggered Flow Considerations](https://help.salesforce.com/s/articleView?id=platform.flow_considerations_trigger_schedule.htm&type=5&language=en_US) # Configurations Use these configurations to create a custom preference center. ## Define Your Source of Truth - Third party central: Any third-party system external to Salesforce is the touchpoint for customers with a defined strategy for replication or synchronization. - Lightning Platform: Use the Individual object. - Marketing Cloud Engagement: Use Preference Center. ## Set Up the Individual Object The Salesforce Individual object includes some standards that create individual records for existing Leads and Contacts. Checkbox fields track user preferences such as Don’t Process and Forget this individual. ## Implement the Salesforce Individual Object Set up data privacy records then encrypt the Individual Name field with the type of tenant secret and encryption scheme of your choice. These actions let your users track and store certain Data Privacy preferences. - Enable Data Privacy and Protection. - Create a new Individual record from a Lead or Contact or create an Individual record without linking it to Lead or Contact records. - After the New button appears, you can create a record and associate it to a specific Lead or Contact if necessary. ## Manually Update or Automate Individual Records Salesforce Core uses the Individual object on Reports, Workflows, Process Builder, Flow, and Apex to maintain your business process. As a customer’s preferences change, you can update the Individual records and honor the new preferences manually, or via APEX or AppExchange. In Engagement, use AMPscript to apply your customer options on email templates. ## Filter Audiences Profile center and subscription center work with List, but Journeys and Automations require these extra actions. - Create a support data extension that holds your customer summarized preferences. - To filter and mix your customer preferences with your journey intake, use Automation Studio's SSJS Activity and Query Activity. - Create an Attribute Group on Contact Builder that stores customer preferences about journey subjects. As a workaround, you can use Automation Studio. Update the custom profile center attributes for Salesforce contacts added by journeys for the first time, on a regular basis, or triggered by the journey. Use the function RetrieveSalesforceObject() if the journey contains an email with AMPscript. ## Receive and Store Consent - Collect compliance requests outside of Engagement functionality. Determine the best process for your business to receive and store this information as part of your data protection and privacy regulation review. - Make sure that your consent language corresponds to your privacy notices and policies. - Consent must be specific, informed, and unambiguous. Collect positive consent, and avoid automatically selected checkboxes. - The process for obtaining consent regarding messaging to children is stricter. - Contacts must be able to withdraw consent at any time. - Contacts must freely give consent, and you can’t base usage of your website on provision of consent. - Consent to use data must be specific for each purpose that you use data for. ## Determine Permission Across Message Types - Explicit Permission: The person actively and knowingly shares their contact information with the expectation of receiving commercial emails. This type of permission is the safest method. - Implicit Permission: Assumes permission based on a variety of factors. If expectations aren’t set, then deliverability issues and high attrition can result. This type of permission often results in poor compliance with regulations such as CAN-SPAM, CASL, and GDPR. Review your permission types with your legal counsel. ## Set Rules to Prioritize Messages and Types by Brand and Channel - Brand Model: The brand with the most recent activity takes priority. The first brand to gain permission takes priority. - Email Engagement Model: Ranks by average message KPIs (open and click rates). Set rules to prioritize messages and types by brand and by channel. - Customer Model: Prioritizes the value of the customer, including purchase amounts, frequency, and time on file. Uses personas based on account type, vehicle class, website, and email engagement. - Revenue and Return Model: Uses the message with the highest estimated revenue or return per message for each subscriber. ## Synchronize Profile Center - Configure Marketing Cloud Connect to synchronize the Individual object in a Data Extension. - Create Automation Filters. - Configure SQL and SSJS. SQL and SSJS Examples: ``` SELECT sub.SubscriberKey "Subscriber Key", sub.EmailAddress "Email Address", sent.OYBAccountID "BusinessUnitID" FROM _Subscribers sub inner join _Sent sent on sub.SubscriberKey = sent.SubscriberKey inner join _EnterpriseAttribute ea on sub.SubscriberID = ea._SubscriberID WHERE sent.OYBAccountID <> ea.BusinessUnitID ``` ``` ``` ## Related Content
Icon of an arrow that points right.

Review earlier steps in this solution.

#### See Also - [Create a record for standard Individual object](https://help.salesforce.com/s/articleView?id=000319699&type=1&language=en_US) - [The Profile Center and Subscription Center in Distributed Sending](https://help.salesforce.com/s/articleView?id=sf.mc_ds_profile_center_and_subscription_center.htm&type=5&language=en_US) - [Trailhead - Identify Preferences](https://trailhead.salesforce.com/en/content/learn/modules/personalized-email-marketing/identify-preferences) # Configurations Use these configurations to manage vaccine communications with Marketing Cloud Engagement. ## Account Setup - Spend 4–6 weeks creating the business unit and email authentication such as SAP, SPF, DKIM, and SSL for the best deliverability. Set up the sender authentication package (SAP) to include sender policy framework (SPF), DKIM, private domains, image URLs, SSL security, and so on. This time period includes limited sending (<=100 K) for IP address warming unless you’re using an existing SAP subdomain and warmed IP address. - Spend 1 day setting up the administration user for cross-cloud integration in Marketing Cloud Connect. Set up design users for email creative tools. ## Integration Spend 1–2 days setting up Marketing Cloud Connect to integrate your Engagement app with the Sales and Service Cloud organization. This setup allows Journey Builder to listen to changes in CRM objects and send messages. Synchronize the sales and service Health Cloud raw object data to bulk campaigns in Engagement. ## Data Model Spend 1–2 days configuring data extensions and tables for Journey Builder entry sources. ## Journeys - Spend 1–2 days creating Journey Builder entry sources in Engagement. Listen to Sales Cloud and Service Cloud object changes and trigger the injection into a journey. - Spend 2–3 days configuring journeys. Configure journeys to use the entry source and create associated email activity and creative aspects. ## Quality Assurance Spend 2–3 days testing. Activate the journey. Validate changes to Sales Cloud and Service Cloud objects that place contacts and patients on the appropriate journey in Engagement. ## Go-Live and Validation To track engagement, validate that you’re properly capturing tracking details like opens and clicks. Optionally, you can continually update key milestone data back to Sales Cloud and Service Cloud objects. ## Related Content
Icon of an arrow that points left.

Review earlier steps in this solution.

#### See Also - [Manage Customer Journeys](https://help.salesforce.com/s/articleView?id=mktg.mc_jb_journey_types.htm&type=5&language=en_US) - [Multi-Step Journeys](https://help.salesforce.com/s/articleView?id=mktg.mc_jb_multistep_journeys.htm&type=5&language=en_US) - [Transactional Send Journeys](https://help.salesforce.com/s/articleView?id=mktg.mc_jb_transactional_send_journeys.htm&type=5&language=en_US) - [Entry Sources](https://help.salesforce.com/s/articleView?id=mktg.mc_jb_entry_sources.htm&type=5&language=en_US) - [The Salesforce Data Event](https://help.salesforce.com/s/articleView?id=mktg.mc_jb_salesforce_data_event.htm&type=5&language=en_US) - [Marketing Cloud Connect](https://help.salesforce.com/s/articleView?id=mktg.mc_co_marketing_cloud_connect.htm&type=5&language=en_US) - [Marketing Cloud Connect Frequently Asked Questions](https://help.salesforce.com/s/articleView?id=mktg.mc_co_faq.htm&type=5&language=en_US) - [Synchronized Data Sources in Contact Builder](https://help.salesforce.com/s/articleView?id=mktg.mc_cab_data_integration_for_your_account_with_synchronized_data_sources.htm&type=5&language=en_US) - [Create Synchronized Data Sources in Contact Builder](https://help.salesforce.com/s/articleView?id=mktg.mc_cab_creating_and_interacting_with_synchronized_data_sources.htm&type=5&language=en_US) - [Synchronized Object Relationship Priority](https://help.salesforce.com/s/articleView?id=mktg.mc_cab_synch_object_relationship_priority.htm&type=5&language=en_US) - [Synchronized Data Extensions: Limit of 250 Fields](https://help.salesforce.com/s/articleView?id=release-notes.rn_marketing_engagement_archive.htm&type=5&language=en_US) - [Intro to Marketing Cloud Engagement APIs](https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/index-api.htm) # Configurations Use these configurations to personalize Experience Cloud websites using Marketing Cloud Personalization (formerly Interaction Studio). ## Add the Marketing Cloud Personalization Beacon and Supporting Scripts to the Experience Cloud Website 1. [Add your Experience Cloud domains to the allowed domains list](https://help.salesforce.com/s/articleView?id=mktg.mc_pers_web_campaign_visual_editor_allowlist.htm&type=5&language=en_US) in Marketing Cloud Personalization. 2. Locate and [copy the integration code for the Marketing Cloud Personalization JavaScript beacon](https://developer.salesforce.com/docs/marketing/personalization/guide/web-integration.html). 3. Make sure that your integration code looks similar to this code, where {account} is your Marketing Cloud Personalization account name and {dataset} is the name of your Marketing Cloud Personalization dataset: ``` ``` 4. In Experience Builder, click **Settings**, **Advanced**, and then **Edit Head Markup** to add markup to the head of every page. [Paste the Marketing Cloud Personalization JavaScript beacon code](https://help.salesforce.com/articleView?id=experience.community_builder_page_head.htm&type=5&language=en_US) into the head markup. 5. [Paste supporting inline scripts from the GitHub source code](https://github.com/salesforce-experiencecloud/interaction-studio-content-personalization/blob/master/interactionstudio/supporting-scripts.html) into the head markup after the Marketing Cloud Personalization JavaScript beacon code. 6. In Experience Builder, click **Settings**, then **Security & Privacy**. Under Content Security Policy (CSP), find Security Level. Click the dropdown, and then select **Relaxed CSP: Permit Access to Inline Scripts and Allowed Hosts**. 7. In Experience Builder, click **Settings**, then **Security & Privacy**. Under Content Security Policy (CSP), find Trusted Sites for Scripts. Click **Add Trusted Site**, and then add these three URLs. 1. Copy the URL in the Marketing Cloud Personalization JavaScript beacon code as in step 2. For example, https://cdn.evgnet.com/beacon/{account}/{dataset}/scripts/evergage.min.js 2. https://cdn.evgnet.com/ 3. Your Marketing Cloud Personalization account Base URL. Click **Gears** in the main menu of Marketing Cloud Personalization. Copy the URL in your browser’s address bar. For example, https://companyname.us-1.evergage.com/ 8. Follow instructions from [this article](https://help.salesforce.com/articleView?id=experience.networks_security_csp_allow.htm&type=5&language=en_US) to add these three trusted URLs in Setup. - https://cdn.evgnet.com/ - https://cdn.evergage.com/ - Your Marketing Cloud Personalization account Base URL. Click **Gears** in the main menu of Marketing Cloud Personalization. Copy the URL in your browser’s address bar. For example, https://companyname.us-1.evergage.com/ ## Use the Examples Provided To Build Your Own Personalization Components and Deploy Them To Your Org Refer to the instructions in:View and edit the source code using Workbench or the Visual Studio Code editor. - [GitHub source code](https://github.com/salesforce-experiencecloud/interaction-studio-content-personalization) - [LWC documentation](https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.get_started_introduction) ## Add and Configure Marketing Cloud Personalization Components on Your Target Pages 1. After installing the custom components, open [Experience Builder](https://help.salesforce.com/articleView?id=community_designer_overview.htm&type=0&language=en_US) on the site you want to enable Marketing Cloud Personalization. 2. In Experience Builder, click the Lightning Components icon to expand the components panel. If your installation was successful, you see two new components towards the bottom of the components panel, under the Custom Components section. The names of these two components differ depending on whether you installed them via managed package, source code from Github, or updates to your own existing custom components. Look for two components named IS Data Capture and IS Personalization Block. 3. Drag and drop each of those components onto the page you want to serve your Marketing Cloud Personalization campaign from. You can use them on multiple pages. Also, you can drop multiple instances of the IS Personalization Block component onto a single page. Only add the IS Data Capture component one time to a page. You can include it in the page header or footer section. A green box in some components indicates what the component does. These green boxes only display in Experience Builder and aren’t visible to your end user. 4. To display the component’s configuration panel, click the **IS Personalization Block** component. In the Content Zone text box, enter the name of the content zone used in the Marketing Cloud Personalization selector. 5. Set the Content Zone property for every personalization component. The Content Zone is an ID attribute of the virtual placeholder DIV tag and only includes latin characters in lower case, digits, underscores, or hyphens. 6. Preview and then publish your Experience Cloud site. ## Configure the Marketing Cloud Personalization Sitemap 1. Create a standard Marketing Cloud Personalization sitemap. 2. Add content zones for all personalization components used on your Experience Cloud Website in the Marketing Cloud Personalization sitemap. Enter a name for the Content Zone and this pattern for the selector: where {CONTENT\_ZONE\_PROPERTY} is the value of the Content Zone property of the corresponding Personalization Component: #{CONTENT\_ZONE\_PROPERTY}. For example, if you set the Content Zone property of a Personalization component to **product-recs**, set the Content Zone selector in the Marketing Cloud Personalization sitemap to **#product-recs**. 3. Wrap the standard initialization code of the sitemap with an event listener from the Data Collection Component, and then add supporting methods. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-z_solutionkits-264-0-0-production-enus/1e49f40e-a11c-44f7-b439-8f20b6c66033/images/icon_note.png) Note These code snippets are examples. Customer-specific implementations require additional adjustments. For example, replace this code: ``` Evergage.initSitemap(config); ``` With this code: ``` var currentUrl = window.location.href; var isSitemapInitialized = false; document.addEventListener('lwc_onuserdataready', (e) => { if(isSitemapInitialized) return; isSitemapInitialized = true; interactionStudioExperienceCloudHelpers.catchBuilderContext(); interactionStudioExperienceCloudHelpers.userData = e && e.detail && e.detail.userData; Evergage.initSitemap(config); setInterval(() => { if(currentUrl !== window.location.href){ currentUrl = window.location.href; Evergage.reinit(); } }, 1000); }); ``` 4. To capture known user data, add a global onActionEvent to your sitemap. ``` onActionEvent: (event) => { if(userData){ event.user = event.user || {}; event.user.attributes = event.user.attributes || {}; event.user.attributes.userName = ((userData?.fields?.FirstName?.value || '') + ' ' + (userData?.fields?.LastName?.value || '')).trim(); event.user.attributes.experienceCloudUserId = userData?.id; event.user.attributes.emailAddress = userData?.fields?.Email?.value; event.user.attributes.companyName = userData?.fields?.CompanyName?.value; } return event; } ``` 5. [Review this example sitemap in GitHub](https://github.com/salesforce-experiencecloud/interaction-studio-content-personalization/blob/master/interactionstudio/sitemap-example.js). ## Modify Marketing Cloud Personalization Web Templates 1. Modify only those web templates that require real content zone elements or that replace original content of the website, for example Banner with Call-To-Action or Einstein Product Recommendations. Web templates that automatically append content to the body of the page like Exit Intent Pop-Up with Email Capture don’t require any modifications. 2. Open a web template, and proceed with the Client Side tab. 3. Locate this line of code: ``` Evergage.cashDom(element).html(html); ``` 4. Replace it with this code: ``` document.dispatchEvent( new CustomEvent('interactionstudio_oncontentforcomponentready', { detail: { selector: contentZoneSelector, html: html }, } )); ``` 5. Save and publish this web template. ## Related Content
Icon of an arrow that points right.

Review earlier steps in this solution.

#### See Also - [Marketing Cloud Personalization Sitemap Development](https://developer.salesforce.com/docs/marketing/personalization/guide/personalization-sitemap.html) - [Marketing Cloud Personalization Web Templates](https://developer.salesforce.com/docs/marketing/personalization/guide/get-started-global-web-templates.html) # Configure a Calculation Procedure for Looping (Managed Package) For the managed package runtime, make sure that your calculation procedure UI is set up for looping calculations, then configure looping variables. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From the App Launcher, go to the Vlocity Calculation Procedures tab. 2. Select your calculation procedure from the list. On the record page, click the **Related** tab. 3. Click the name of the Calculation Procedure Version you're using. 4. Click the gear icon and select **Edit Object**. A new browser tab opens and you are in Setup, in the Object Manager, and on the Vlocity Calculation Procedure Version page. 5. Select **Page Layouts**, then select the page layout you're using. 6. Drag the following items from Fields onto the Vlocity Calculation Procedure Version Detail section: - **Enable Looping** - **Loop Specification** 7. Click **Save**. 8. Return to the browser tab for the Calculation Procedure Version you're using and refresh the browser. 9. Click the pencil icon for the **Enable Looping** field and check the **Enable Looping** box. 10. In the **Loop Specification** field, type a JSON value in this format: ``` {"loopingStart":"StartVariableName","loopingEnd":"TermVariableName","loopingInterval":"IntervalVariableName"} ``` The values must match the names of the variables you will set in the calculation procedure in the next step. For example: ![Enable Looping is checked, and Loop Specification is {"loopingStart":"StartVariableName","loopingEnd":"TermVariableName","loopingInterval":"IntervalVariableName"}.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/calcprocedure_loopingspec.jpg) 11. Click **Save**. 12. In your calculation procedure, create three variables with a Data Type of **Number** and a Precision of 0. The names must match the variables you set in the **Loop Specification** in the previous step. For example: ![Term is a Number variable with a Precision of 0.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/calcprocedure_loopingvariables.jpg) 13. Click **Save Calculation Procedure**. After looping is configured, you can create calculation steps using the `index` variable and the `PREVIOUS` function. See [The Looping Feature in Calculation Procedures (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_the_looping_feature_in_calculation_procedures.htm&release=264.0.0&type=5 "For the managed package runtime, looping calculations take a starting point, an endpoint, and an interval. At run time, the calculation procedure runs in a loop from start to end per interval. Each run uses the same input variables, plus an index variable that you can use in the calculation."). # Configure a Client Credentials Flow To share information between two applications without any input from a user, use the OAuth 2.0 client credentials flow. In this flow, the client app exchanges its client credentials that are defined in the external client app for an access token. For this flow, you must specify an integration user to run the integration. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure an external client app for OAuth 2.0 Client Credentials flow Create, edit, and delete External Client Apps
To enable or disable an external client app plugin, you must first create or install an external client app on your Salesforce org. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Before you set up the Client Credentials flow, it’s important to understand its security risks. With this flow enabled, any person or app that has access to your external client app’s consumer key and consumer secret can get an access token. Maintain security by periodically changing your consumer secret, and if it becomes compromised, change it immediately. See [Stage, Rotate, and Delete OAuth Credentials for a Local External Client App](https://help.salesforce.com/s/articleView?id=xcloud.eca_stage_oauth_credentials.htm&release=264.0.0&type=5 "Use the OAuth Staged Credentials Connect REST API endpoint to manage the OAuth key and secret for a local external client app. The API can be used to stage, view, rotate, or delete OAuth credentials."). 1. From Setup, in the Quick Find box, enter External Client Apps Manager, and then select **External Client Apps Manager**. 2. From the actions dropdown list, select **Edit Settings** for the external client app. 3. In the OAuth Settings section, select **Enable OAuth**. 4. Configure [basic OAuth settings](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_oauth_settings.htm&release=264.0.0&type=5 "Configure the OAuth settings to set the structure of the local external client app."). 5. Select **Enable Client Credentials Flow**. 6. Save the settings. # Configure a Code and Credentials Flow The Code and Credentials Flow is the foundation of headless login, registration, passwordless login, and guest user identity. Before setting up these features, enable the Code and Credentials Flow at an org-wide level and configure these required settings and access policies for your external client app. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure an External Client App for OAuth 2.0 Code and Credentials Flows Create, edit, and delete External Client Apps
1. To access the Code and Credentials Flow settings, allow external client apps to access the flow. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note By default, the Code and Credentials Flow is blocked for all external client apps. 1. From Setup, in the Quick Find box, enter OAuth, and then select **OAuth and OpenID Connect Settings**. 2. Turn on **Allow Authorization Code and Credentials Flows**. 2. Create your external client app and complete its [basic information](https://help.salesforce.com/s/articleView?id=xcloud.create_a_local_external_client_app.htm&release=264.0.0&type=5 "Create an external client app in App Manager. Local external client apps are available only on the org where you create them. Packageable external client apps can be packaged for distribution to other orgs."). 3. Set up the basic [OAuth settings](https://help.salesforce.com/s/articleView?id=xcloud.enable_oauth_plugin.htm&release=264.0.0&type=5 "In an external client app, configurations are divided between settings and policies for each plugin. To add an external client app plugin, enable the plugin and configure the settings.") for the app, including these settings. 1. Enable OAuth. 2. Enter a callback URL. 3. Assign scopes to the app. 4. Configure these specific settings for the Authorization Code and Credentials Flow. 1. (Optional) To require the Proof Key for Code Exchange (PKCE) extension for your flow, select **Require Proof Key for Code Exchange (PKCE) Extension for Supported Authorization Flows**. With this setting selected, you must implement PKCE when you build your flow. We strongly recommend PKCE for public clients, because these apps can’t use the consumer secret to protect the code exchange. We also recommend it for private clients, but it’s less critical. 2. Select **Enable Authorization Code and Credentials Flow**. 3. (Optional) To require your third-party client app to send the user’s credentials in the body of HTTP POST requests to the authorization endpoint, select **Require user credentials in the POST body for Authorization Code and Credentials Flow**. With this setting enabled, you can’t use the GET method for the authorization request, and you can’t include user credentials in a Basic authorization header. 4. If you’re using a client backend to implement this flow for a private client, select **Require Secret For Web Server Flow** and **Require Secret for Refresh Token Flow**. Ensure that your client back end can keep the consumer secret secure. 5. If you’re using this flow for a public client, deselect **Require Secret For Web Server Flow** and **Require Secret for Refresh Token Flow** to avoid exposing the consumer secret to the browser. 6. Save your settings. # Configure a Connected App for the Authorization Code and Credentials Flow The Authorization Code and Credentials Flow is the foundation of headless login, registration, passwordless login, and guest user identity. Before setting up these features, enable the Authorization Code and Credentials Flow at an org-wide level and configure required settings and access policies for your connected app. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
User Permissions Needed
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage Connected Apps

For connected apps installed as part of a package, keep these considerations in mind. - If you installed an app with the Authorization Code and Credentials Flow enabled in a subscriber org, you can skip to step 4. The app developer in the publishing org already completed steps 1 through 3 for you. - If the Authorization Code and Credentials Flow isn’t enabled for a connected app in the publishing org, you can’t use the flow for your installed app in the subscriber org. If you plan to use the guest flow to pass UVID values into a named user flow, your connected app must also be configured to issue JSON Web Token (JWT)-based access tokens. For steps, see [Configure a Connected App to Issue JWT-Based Access Tokens](https://help.salesforce.com/s/articleView?id=xcloud.jwt_connectedapp_enable.htm&language=en_US). 1. To access Authorization Code and Credentials Flow settings, allow connected apps to access the flow from the OAuth and OpenID Connect Settings page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note By default, the Authorization Code and Credentials Flow is blocked for all connected apps. 1. From Setup, in the Quick Find box, enter OAuth, and then select **OAuth and OpenID Connect Settings**. 2. Turn on **Allow Authorization Code and Credentials Flows**. You can now access connected app settings for the Authorization Code and Credentials Flow. 2. Create your connected app and complete its basic information. 3. Set up the basic OAuth settings for the app, including these settings. 1. Enable OAuth. 2. Enter a callback URL. 3. Assign scopes to the app. 4. Configure these specific settings for the Authorization Code and Credentials Flow. 1. (Optional) To require the Proof Key for Code Exchange (PKCE) extension for your flow, select **Require Proof Key for Code Exchange (PKCE) Extension for Supported Authorization Flows**. With this setting selected, you must implement PKCE when you build your flow. We strongly recommend PKCE for public clients because these apps can’t use the consumer secret to protect the code exchange. We also recommend it for private clients, but it’s less critical. 2. Select **Enable Authorization Code and Credentials Flow**. 3. (Optional) To require your third-party client app to send the user’s credentials in the body of HTTP POST requests to the authorization endpoint, select **Require user credentials in the POST body for Authorization Code and Credentials Flow**. With this setting enabled, you can’t use the GET method for the authorization request, and you can’t include user credentials in a Basic authorization header. 4. If you’re using a client backend to implement this flow for a private client, select **Require Secret For Web Server Flow** and **Require Secret for Refresh Token Flow**. Ensure that your client backend can keep the consumer secret secure. 5. If you’re using this flow for a public client, deselect **Require Secret For Web Server Flow** and **Require Secret for Refresh Token Flow** to avoid exposing the consumer secret to the browser. 6. Save your settings. 5. Configure access policies for your connected app. 1. From the connected app detail page, click **Manage**, then click **Edit Policies**. 2. Under OAuth Policies, for Permitted Users, select **Admin-approved users are pre-authorized** from the dropdown. 3. To define which users are admin-approved, manage profiles for the app by editing each profile’s Connected App Access list. Or manage permission sets by editing each permission set’s Assigned Connected App list. For more information on editing profiles and permission sets, see [Manage Other Access Settings for a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_additional_settings.htm&language=en_US). If you’re configuring the connected app for headless login, registration, or passwordless login, your app is ready to go. Save your changes and stop here. If you’re building the guest flow, go to the next step. 6. Configure policies for the guest user flow. 1. Under Authorization Code and Credentials Flow, select **Enable for Guest Users**. 2. Select an option for the guest user token timeout. | Timeout Option | Description | | --- | --- | | Use the Experience Cloud guest user timeout | Salesforce uses the timeout defined in the [guest user's profile session settings](https://help.salesforce.com/s/articleView?id=platform.rss_config_guest_user_profile.htm&language=en_US) in the Session Times Out After field. If there's no profile session timeout for the user, Salesforce uses the value from the Timeout Value field from your [org session settings](https://help.salesforce.com/s/articleView?id=xcloud.admin_sessions.htm&language=en_US). If both are defined, Salesforce defaults to the profile session timeout. | | Set app-specific token timeout | Select a timeout value that applies only to this app. | 3. Save your changes. You can now configure all variations of the Authorization Code and Credentials Flow between your app and a Salesforce Experience Cloud site. To disable the Authorization Code and Credentials Flow on a connected app, deselect **Enable Authorization Code and Credentials Flow** from your connected app settings. Deselecting this setting prevents your third-party app from getting new access tokens, but it doesn’t revoke existing ones. To revoke access tokens, see [Manage Current OAuth Connected App Sessions](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_current_sessions.htm&language=en_US). You can also block all connected apps from using the flow from the OAuth and OpenID Connect Settings page. # Configure a Connected App for the OAuth 2.0 Client Credentials Flow With the OAuth 2.0 client credentials flow, your client app exchanges its client credentials defined in the connected app—its consumer key and consumer secret—for an access token. Before you implement the client credentials flow, configure these settings and access policies for your connected app. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

User Permissions Needed
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage Connected Apps

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_warning.png) Warning Before you set up the client credentials flow, it’s important to understand its security risks. With this flow enabled, any person or app that has access to your connected app’s consumer key and consumer secret can get an access token. Maintain security by periodically changing your consumer secret, and change it immediately if it becomes compromised. See [Rotate the Consumer Key and Consumer Secret of a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_rotate_consumer_details.htm&type=5&language=en_US). For connected apps installed as part of a managed package, keep these considerations in mind. - The developer that set up the connected app in the publishing org can get an access token for subscriber orgs. - When the client credentials flow is enabled on a connected app in the publishing org, it isn’t automatically enabled in the subscriber org. Subscribers must explicitly opt in to use the flow. - When the client credentials flow isn’t enabled in the publishing org, subscribers can’t enable it for their installed app. 1. Create your connected app, and complete its [basic information](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_basics.htm&release=264.0.0&type=5 "For all connected apps, define the basics, which include the app’s name, logo, and contact information."). 2. Configure the necessary [OAuth settings](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&release=264.0.0&type=5 "You can use a connected app to request access to Salesforce data on the behalf of an external application. For a connected app to request access, it must be integrated with the Salesforce API using the OAuth 2.0 protocol. OAuth 2.0 is an open protocol that authorizes secure data sharing between applications through the exchange of tokens. When developers or independent software vendors (ISV) want to integrate their app with Salesforce, they use OAuth APIs. These OAuth APIs enable a user to work in one app but see the data from another.") for the connected app. 3. Enable the client credentials flow for your connected app. 1. From Setup, in the Quick Find box, enter Apps, and then select **App Manager**. 2. Find your connected app, click ![Action dropdown](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/dropdown.png), and then select **Edit**. 3. Under API (Enable OAuth Settings), select **Enable Client Credentials Flow**. 4. When you understand the security risks, accept the warning. 5. Save your changes. 4. Select an execution user for the flow. Although there’s no user interaction in the client credentials flow, Salesforce still requires you to specify an execution user. By selecting an execution user, you allow Salesforce to return access tokens on behalf of this user. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Permitted Users policies, such as **All users may self-authorize** and **Admin approved users are pre-authorized**, don’t apply to the execution user. 1. From the connected app detail page, click **Manage**. 2. Click **Edit Policies**. 3. Under Client Credentials Flow, for Run As, click ![Magnifying glass icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/play_btn.png), and find the user that you want to assign the client credentials flow. For Enterprise Edition orgs, we recommend that you select an execution user who has the API Only User permission. 4. Save your changes. To disable the client credentials flow on a connected app, deselect **Enable Client Credentials Flow**. Deselecting this setting prevents the client app from getting new access tokens, but it doesn’t revoke existing ones. To revoke access tokens, see [Manage Current OAuth Connected App Sessions](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_current_sessions.htm&type=5&language=en_US). # Configure a Connected App to Issue JWT-Based Access Tokens Enable JWT-based access tokens for an existing connected app that you either created or installed from a managed package. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: All Editions
User Permissions Needed
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage Connected Apps

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. If you use a JWT-based access token for session authentication, you can’t use `$Api.Session_ID` or `GETSESSIONID()` to return the user’s session ID. 1. If you’re an app developer, edit the connected app OAuth settings. If you’re a subscriber admin, the app developer completes this step for you. 1. From Setup, in the Quick Find box, enter App, and then select **App Manager**. 2. Next to your app, click ![Dropdown arrow](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/connectedappdropdown.png), and then select **Edit**. 3. Under API (Enable OAuth Settings), select **Issue JSON Web Token (JWT)-based access tokens for named users**. 4. Save the change. The app now issues JWT-based access tokens instead of opaque access tokens. When you enable this setting, you expose a policy to set the token timeout. Subscriber admins can access this policy in installed apps. 2. In the connected app policies, set the token timeout for named users. If you're a subscriber admin, you control this value for installed apps. 1. From Setup, in the Quick Find box, enter App, and then select **App Manager**. Next to your app, click ![Dropdown arrow](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/connectedappdropdown.png), and then select **Manage**. Or, if you’re on the connected app page already, click **Manage**. 2. Click **Edit Policies**. 3. Under Session Policies, in the Named User JWT-Based Access Token Timeout section, select an option for the token timeout. This value defines the amount of time before the user's session expires. The timeout for a JWT-based access token is fixed and doesn’t change based on when the token was last active. - Use the user's default session timeout—With this option, Salesforce uses the timeout defined in the [user's profile session settings](https://help.salesforce.com/s/articleView?id=platform.users_profiles_session.htm&language=en_US) in the Session Times Out After field. If there's no profile session timeout for the user, Salesforce uses the value from the Timeout Value field from your [org session settings](https://help.salesforce.com/s/articleView?id=xcloud.admin_sessions.htm&language=en_US). If both are defined, Salesforce defaults to the profile session timeout. - Set app-specific token timeout—With this option, select a timeout value that applies only to this app. 3. If you use the app for the headless guest user flow, set a token timeout value for guest users. If you use the app only for named user flows, skip this step. 1. In the connected app policies page, find Authorization Code and Credentials Flow. 2. Select an option for the guest user token timeout. - Use the Experience Cloud guest user timeout—With this option, Salesforce uses the timeout defined in the [guest user's profile session settings](https://help.salesforce.com/s/articleView?id=platform.rss_config_guest_user_profile.htm&language=en_US) in the Session Times Out After field. If there's no profile session timeout for the user, Salesforce uses the value from the Timeout Value field from your [org session settings](https://help.salesforce.com/s/articleView?id=xcloud.admin_sessions.htm&language=en_US). If both are defined, Salesforce defaults to the profile session timeout. - Set app-specific token timeout—With this option, select a timeout value that applies only to this app. 4. Save your changes. Now, when your app successfully completes an OAuth flow, it issues JWT-based access tokens with the token timeout values that you configured. # Configure a Custom Attribute for External Client Apps Create custom attributes to capture useful and unique information. With custom attributes, you can get more information about a user’s identity such as an address or job title. Configure custom attributes for your external client app in the Policies tab. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure custom attributes View all External Client Apps, view their settings, and edit their policies
You can add up to 128 attributes. Each new attribute must have a unique key and must use an available field. Each custom attribute must have a unique key and must use an existing field. For example, assign a key name, such as country and insert the field $Organization.Country. When using OAuth, attributes are available as a `custom_attributes` object in the user’s Identity URL. 1. From Setup, in the Quick Find box, enter External Client Apps Manager, and then select **External Client Apps Manager**. 2. From the actions list for the external client app, select **Edit Policies**. 3. In the Custom Attribute section of the Policies page, click the add icon. 4. In the cell beneath Key, select the edit icon, and then enter a unique key. 5. In the cell beneath Value, select the edit icon, and then enter an available field. 6. Save your changes. # Configure a Custom Attribute for External Client Apps Edit the settings file to add a custom attribute. Each new attribute in the settings file creates a related attribute in the policies file at runtime. You can add up to 128 attributes, and each new attribute must have a unique key and must use an available field. 1. Open [the settings file](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_oauth_settings.htm&type=5&language=en_US). 2. Add a custom attribute that includes a unique key and an available field. ```markup userattribute $User.Country ``` 3. [Deploy the external client app](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_oauth_plugin.htm&type=5&language=en_US) to incorporate the new attribute. The new attribute appears in the policies file when the local or subscriber admin deploys the external client app. # Configure a Custom Data Source on a Flexcard (Managed Package) For the managed package runtime, embed custom JSON data directly into Flexcard without depending on any external data source. Configure the Custom data source for testing with temporary static data. For example, when you're waiting for access to an API, or if you want to quickly test a concept. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. To configure the data source when [creating a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."), navigate to the **Select Data Source Type** step, select **Custom**, and click **Next**. 2. To configure the data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **Custom** from the **Data Source Type** dropdown. 3. Enter custom JSON in the **Custom JSON** field. **Sample Custom JSON** ``` [ { "attributes": { "type": "Contact", "url": "/services/data/v49.0/sobjects/Contact/0033700000TOF0eAAH" }, "Name": "Perry", "Id": "0033700000TOF0eAAH", "Phone": "(734) 489-5851", "AccountId": "0013700000NVVLvAAP", "Email": "perry@vlocity.com", "MailingAddress": { "city": "Concord", "country": "US", "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": "53813", "state": "WI", "street": "856 4th Avenue #76" }, "CreatedDate": "2017-06-14T18:53:11.000+0000" }, { "attributes": { "type": "Contact", "url": "/services/data/v49.0/sobjects/Contact/0033700000TOB6mAAH" }, "Name": "Robert0 Taylor", "Id": "0033700000TOB6mAAH", "Phone": "(888) 888-8888", "AccountId": "00137000007D63JAAS", "MailingAddress": { "city": "SF", "country": "US", "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": "99999", "state": "CA", "street": "50 Santa Rita St" }, "CreatedDate": "2017-06-13T21:08:25.000+0000" }, { "attributes": { "type": "Contact", "url": "/services/data/v49.0/sobjects/Contact/0033700000TNvK0AAL" }, "Name": "c1", "Id": "0033700000TNvK0AAL", "AccountId": "0013700000NVE4tAAH", "MailingAddress": null, "CreatedDate": "2017-06-08T20:13:41.000+0000" }, { "attributes": { "type": "Contact", "url": "/services/data/v49.0/sobjects/Contact/0033700000TNvKKAA1" }, "Name": "c2", "Id": "0033700000TNvKKAA1", "AccountId": "0013700000NVE4tAAH", "MailingAddress": null, "CreatedDate": "2017-06-08T20:13:50.000+0000" }, { "attributes": { "type": "Contact", "url": "/services/data/v49.0/sobjects/Contact/0033700000Vs6RzAAJ" }, "Name": "Smith", "Id": "0033700000Vs6RzAAJ", "Phone": "(300) 333-3763", "AccountId": "001370000098i8mAAA", "MailingAddress": { "city": "SF", "country": "US", "geocodeAccuracy": null, "latitude": null, "longitude": null, "postalCode": "99999", "state": "CA", "street": "50 Fremont St" }, "CreatedDate": "2017-08-16T20:26:07.000+0000" } ] ``` 4. (Optional) To configure other options common among all data sources, see [Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database."). 5. To test data source settings, add test variables that the query can use to return live data, see [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure a Data Mapper Turbo Extract To configure a Data Mapper Turbo Extract, specify the object type, filters, fields to extract, and options. 1. From the App Launcher, find and select **Data Mappers**. 2. Select the Data Mapper Turbo Extract that you want to configure. 3. Search and select an extraction object. 4. Enter an extraction object path. 5. Add required filters that determine the data to be read. To filter for null values, use the `$Vlocity.NULL` variable. The most basic filter is `Id = Id`, which sets the ID of the object to an input parameter ID. The `INCLUDES` and `EXCLUDES` operators apply only to multiselect picklist fields. See [Querying Multi-Select Picklists](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_querying_multiselect_picklists.htm) in Salesforce Help. Turbo Extract has an additional operator option `IN`. The `IN` operator lets you match values to items in an array. For example, if the filter is `LastName IN Names`, and the JSON input is `{"Names": ["Miller", "Torres"]}`, it retrieves all records with Miller or Torres in their LastName fields. Data Mapper Turbo Extract doesn't support multiple input fields with single quotation marks in the field values. Use a Data Mapper Extract instead. For instance, adding one input called FirstName with the value T’an, and another input called LastName with the value C’os, isn’t supported on a Data Mapper Turbo Extract. 6. To configure additional filters, click the down arrow:
AND Add another filter and specify that both filters must be true
OR Add another filter and specify that either filter can be true.
LIMIT Specify the maximum number of records returned. Valid values are 1 through 50000; the default is 50000.
OFFSET

To implement paging logic, add a filter to specify where record retrieval starts. Choose OFFSET from the dropdown list and specify the name of a node in the input payload where the caller maintains a dynamic offset (for example, offsetValue).

Use OFFSET with LIMIT to specify the first record to appear on a page in a multi-page retrieval. The offset must be an integer. For example, if the LIMIT is 5, the offsets for successive pages are 0, 5, 10, and so on.

Note
Note Salesforce imposes a 2000-record limit on queries that use OFFSET. Allowed OFFSET values are from 0 to 2000. See Workaround for offset 2000 limit on SOQL query.
ORDER BY

Sort the results by the specified field. To sort by multiple fields, specify a comma-separated list of field names in order of precedence, for example LastName,FirstName

You can optionally specify ASC for ascending sort or DESC for descending sort. You can optionally specify NULLS FIRST or NULLS LAST to place blank values at the beginning or end. For example, you can sort Accounts by the number of employees, listing the companies of unknown size first and the largest employers last. Specify the ORDER BY value NumberOfEmployees ASC NULLS FIRST.

DELETE Remove a filter.
7. To retrieve data from a parent of the primary object, select related objects. For example, `Contact.Account`. For information about the notation, see [Relationship Notation versus Multiple Extract Steps](https://help.salesforce.com/s/articleView?id=xcloud.os_relationship_notation_versus_multiple_extract_steps_45995.htm&release=264.0.0&type=5 "Using relationship notation improves the performance of Omnistudio Data Mappers that retrieve data from a parent of the primary object. Use this notation in the Extract JSON Paths for the parent object's fields instead of adding a second object in the Data Mapper's Extract tab."). After you select a relationship with another object, its fields appear in Available Fields. Clicking these fields reveals second-level relationships, enabling navigation through five levels. To go back a level, simply click the list and select the previous level. 8. In Field Mapping, search for the available fields. This option isn’t available if you’re using the designer on a managed package. 9. Select the fields that you want to extract, and move them from Available to Selected Fields. The Id field is always included in Selected Fields. 10. Click **Options**, and configure additional settings: 1. Specify the number of minutes that the cached value is retained in the org cache or session cache, if data caching is enabled. The minimum value is 5 minutes. 2. To enable data caching, choose a cache type from the Salesforce Platform Cache Type picklist. See [Improving Data Mapper Performance with Caching](https://help.salesforce.com/s/articleView?id=xcloud.os_cache_for_dataraptors_and_integration_procedures_48057.htm&release=264.0.0&type=5 "Omnistudio offers multiple caching options to improve performance and minimize unnecessary data processing in Data Mappers. The two primary user-configurable caching types are Org Cache and Session Cache, which are available in the Data Mapper designer. These caching mechanisms are part of the Salesforce Platform Cache and are implemented through Scale Cache in Omnistudio with standard runtime. Each serves a distinct purpose and comes with specific configuration considerations."). **None** - Disables data caching for this Data Mapper. **Session Cache** - Data related to users and their login sessions. **Org Cache** - All other types of data. 3. To check the user's access permissions for the fields before executing the Data Mapper, select **Check field level security before execution**. Selecting this option disables the Org Cache, but not the Session Cache. 4. To include null values in the Data Mapper response, select **Include null values in the response**. 5. Save your changes. 11. To observe the effects of caching when testing the Data Mapper Turbo Extract, deselect **Ignore Cache**. See [Improving Data Mapper Performance with Caching](https://help.salesforce.com/s/articleView?id=xcloud.os_cache_for_dataraptors_and_integration_procedures_48057.htm&release=264.0.0&type=5 "Omnistudio offers multiple caching options to improve performance and minimize unnecessary data processing in Data Mappers. The two primary user-configurable caching types are Org Cache and Session Cache, which are available in the Data Mapper designer. These caching mechanisms are part of the Salesforce Platform Cache and are implemented through Scale Cache in Omnistudio with standard runtime. Each serves a distinct purpose and comes with specific configuration considerations."). ## Related Object Fields in Omnistudio Data Mapper Turbo Extracts Although a Data Mapper Turbo Extract retrieves from a single object type, you can select specific fields in related objects. For more information about relationship names and other relevant topics, see [Relationship Queries](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_relationships.htm) in Salesforce Help. Data Mappers support only child-to-parent relationship queries. When you click the Related Objects dropdown list, relationships to other objects appear, for example: ![Selecting Account lists Account relationships.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/ro_level1.png) If you select one of those relationships and click the list again, second-level relationships to other objects appear, for example: ![Selecting Account.CreatedBy lists relationships to objects that represent people who create Accounts.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/ro_level2.png) You can traverse up to five relationship levels. To back up a level, click the list and select the previous level, for example: ![Select Account again to return to the list of Account relationships.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/ro_uplevel.png) After you’ve selected a relationship with another object, fields in that object appear in the left field-selection list. You can enter a search value and move the fields to the right list as you would the base object fields. # Configure a Data Source on a Flexcard (Managed Package) For the managed package runtime, configure a data source on a Flexcard to retrieve data from a Salesforce object or an external database. A Child Flexcard can have a data source independent of the parent Flexcard or use the data source from the parent Flexcard. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Configure a data source when creating a Flexcard by using the configuration wizard. Or, configure a data source from the Setup panel in the Flexcard Designer. See [Set Up a Flexcard in the Flexcard Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_set_up_a_flexcard_in_the_flexcard_designer.htm&release=264.0.0&type=5 "For the managed package runtime, configure optional settings for your Flexcard in the Setup panel of the Flexcard Designer. For example, update a data source, create an event listener, add session variables, and so on."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. See [Configure an Integration Procedure Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_integration_procedure_data_source_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call. For example, as a Systems Admin, you want your customer service reps to view the weather forecast of policy holders when on a call. You can use an Integration Procedure with an Omnistudio Data Mapper Extract that returns an account's ZIP code, and a REST API call that uses the ZIP code to get the current forecast for the Account's region."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Administrators can enable or disable data sources for an org, profile, and user level. See [Enable and Disable Data Sources (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_enable_and_disable_data_sources.htm&release=264.0.0&type=5 "For the managed package runtime, enable and disable data source types for an org, profile, or user level from the Card Framework Configuration custom setting. For example, disable Apex REST, Apex Remote, and other complex data sources for your entire org, or prevent system admins with limited permissions from using these data sources."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note To prevent the Flexcard Designer from freezing up in Preview, don't use a large data source. Using a Custom data source for testing is recommended. See [Configure a Custom Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_a_custom_data_source_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, embed custom JSON data directly into Flexcard without depending on any external data source. Configure the Custom data source for testing with temporary static data. For example, when you're waiting for access to an API, or if you want to quickly test a concept."). You can use a larger data source in production. - **[Flexcards Data Source Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_reference.htm&release=264.0.0&type=5)** For the managed package runtime, select from multiple data source types to retrieve data from a Salesforce object or an external database. Select a data source from the Setup panel in the Flexcard Designer, or when creating a Flexcard. - **[Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database. - **[Configure an Omnistudio Data Mapper Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_a_dataraptor_data_source_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, configure a Data Mapper data source to fetch data from a Data Mapper Extract. Data Mapper is a mapping tool that enables you to read, transform, and write Salesforce data. - **[Configure an Integration Procedure Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_integration_procedure_data_source_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call. For example, as a Systems Admin, you want your customer service reps to view the weather forecast of policy holders when on a call. You can use an Integration Procedure with an Omnistudio Data Mapper Extract that returns an account's ZIP code, and a REST API call that uses the ZIP code to get the current forecast for the Account's region. - **[Configure a REST Data Source Using Named Credentials on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_a_rest_data_source_using_named_credentials_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, use Named Credentials to authenticate Apex callouts when configuring a REST data source. A named credential specifies the URL of a callout endpoint and its required authentication parameters in one definition. - **[Configure a SOSL Search Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_a_sosl_search_data_source_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, construct text-based search queries against the search index with Salesforce Object Search Language (SOSL). You can search text, email, and phone fields for multiple objects to which you have access, including custom objects, in a single query. The SOSL queries are encrypted so that Flexcards don’t display query information on the client-side. - **[Configure a SOQL Query Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_a_soql_query_data_source_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, configure a data source to use a Salesforce Object Query Language (SOQL) query to search an org's data for specific information. The SOQL queries are encrypted so that Flexcards don’t display query information on the client-side. If security is a concern, use an Omnistudio Data Mapper instead of a SOQL query, because Data Mappers provide field-level security. - **[Configure a REST Web Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_a_rest_web_data_source_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, configure a REST Web data source to get or post data from or to a public API. For example, pull in weather data from a weather API based on a policy holder's postal code. - **[Configure a Custom Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_a_custom_data_source_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, embed custom JSON data directly into Flexcard without depending on any external data source. Configure the Custom data source for testing with temporary static data. For example, when you're waiting for access to an API, or if you want to quickly test a concept. - **[Configure an Apex Remote Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_apex_remote_data_source_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, configure a data source to invoke an Apex Class and method that fetches data to populate a Flexcard. Apex remote data sources can run asynchronously through Apex, which increases the CPU time but ensures that long-running transactions aren’t timed-out. - **[Configure an Apex REST Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_apex_rest_data_source_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, configure a data source to use an Apex REST call to fetch data to populate fields on a Flexcard with the `Get` method. Use the `Post` method to post data back to the server. - **[Vlocity Streaming API Data Sources (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_vlocity_streaming_api_data_sources.htm&release=264.0.0&type=5)** For the managed package runtime, streaming API lets you push a stream of notifications from Salesforce to client apps based on criteria that you define. It has a persistent connection that continues to deliver new data as it becomes available, rather than using client polling. - **[Flexcard SDK Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcard_sdk_data_source.htm&release=264.0.0&type=5)** For the managed package runtime, you can use a SDK, such as the Salesforce Industries Digital Commerce SDK, which contains all the business logic necessary for your application and reuse that business logic in other applications. This allows you to focus on creating the UI for an application without needing to call an API and process the API response. You only need to call the method of the SDK and the SDK calls the API. The SDK gets the API response, parses that response, then gives it back to the client. The client then consumes the SDK response in the UI so you can design your Flexcard based on the response you receive. - **[Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account. # Configure a Device Flow To integrate apps that run on devices with limited input or display capabilities, such as smart TVs, appliances, and other internet of things (IoT) devices, configure the Global OAuth Settings to include a device code, and enable the OAuth 2.0 device flow. Command-line apps can use this flow as well. Users can connect these apps to Salesforce by accessing a browser on a device with more advanced input capabilities, such as a desktop or mobile device. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure an External Client App for OAuth 2.0 Device Flows View all External Client Apps, view their settings, and edit their policies
To enable or disable an external client app plugin, you must have an external client app on your Salesforce org. See [Deploy an External Client App That References the Source Org’s Global OAuth Settings File](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_that_references_the_source_org.htm&release=264.0.0&type=5 "Deploy an external client app on a new org, and have it reference the source org’s credentials. To configure this relationship, edit the OAuth link in the OAuth settings file and remove the reference to the global OAuth settings file in the package.xml manifest file of the new org."). This process is similar to the [OAuth 2.0 Device Flow for IoT Integration](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_device_flow.htm&release=264.0.0&type=5 "To integrate apps that run on devices with limited input or display capabilities, such as Smart TVs, appliances, and other IoT devices, use the OAuth 2.0 device flow. Command-line apps can also use this flow. Users can connect these apps to Salesforce by accessing a browser on a device with more advanced input capabilities, such as a desktop or mobile device."). 1. Open the **External Client App Manager**. 2. From the actions dropdown list for the external client app that you want to configure, select **Edit Settings**. 3. In the OAuth Settings section, select **Enable OAuth** in the OAuth Settings section. 4. Configure [basic OAuth settings](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_oauth_settings.htm&release=264.0.0&type=5 "Configure the OAuth settings to set the structure of the local external client app."). 5. Select **Enable Device Flow**. 6. Save the settings. # Configure a Facebook Authentication Provider Configure a Facebook authentication provider so your users can log in to Salesforce using their Facebook credentials. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

To configure Facebook as an authentication provider, complete these tasks. - Set up a registration handler. - Set up a Facebook app, making Salesforce the app domain. - Define a Facebook authentication provider in Salesforce. - Update your Facebook app to use the callback URL generated by Salesforce as the Facebook website URL. - Test the connection. - Add the Facebook provider to your login page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note For sandbox use cases, you can skip some of these steps and [Configure a Salesforce-Managed Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_global_auth.htm&release=264.0.0&type=5 "To simplify authentication provider setup for sandbox use cases, use Salesforce-managed third-party apps. This process saves you the time and effort of creating your own third-party app and managing its credentials. Salesforce provides third-party apps for several common providers, such as Google, Microsoft, and Slack."). For production use cases, always create your own Facebook app and use its credentials for your authentication provider. The Salesforce-managed app can experience downtime and isn't recommended for production. #### See Also - [Add Functionality to an Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params.htm&release=264.0.0&type=5 "After you set up single sign-on (SSO) with an authentication provider, Salesforce generates several client configuration URLs, such as the Single Sign-On Initialization URL. These client configuration URLs support request parameters, which you can use to add functions to your authentication provider. For example, use these parameters to get customized permissions from the third party or direct users to a specific location after authenticating.") - [Authentication Provider SSO](https://help.salesforce.com/s/articleView?id=xcloud.sso_authentication_providers.htm&release=264.0.0&type=5 "With authentication providers, your users can log in to your Salesforce org or Experience Cloud site with single sign-on (SSO) using credentials from a third party. Authentication providers also give your users access to protected third-party data. Salesforce offers several ways to configure authentication providers, such as with OpenID Connect or with a custom OAuth 2.0 configuration. Which protocol you can use depends on the third party.") ## Set Up a Registration Handler To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). ## Set Up a Facebook App Before you can configure Facebook for Salesforce, you must set up an app in Facebook. 1. Create an app in [Facebook](https://developers.facebook.com/docs/development/create-an-app/). 2. Modify the app settings and set the Application Domain to Salesforce. 3. Note the app ID and the app secret. ## Define a Facebook Provider in Salesforce To set up a Facebook provider, you need the Facebook app ID and app secret. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. For the provider type, select **Facebook**. 4. Enter a name for the provider. 5. Enter the URL suffix, which is used in the client configuration URLs. For example, if the URL suffix of your provider is MyFacebookProvider, your single sign-on (SSO) URL is similar to https://mydomain\_url or site\_url/services/auth/sso/MyFacebookProvider. 6. For Consumer Key, use the Facebook app ID. 7. For Consumer Secret, use the Facebook app secret. 8. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 9. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 10. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 11. Optionally, set these fields. - For Authorize Endpoint URL, enter the base URL from Facebook. For example, https://www.facebook.com/v2.2/dialog/oauth. If you leave this field blank, Salesforce uses the version of the Facebook API that your app uses. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_tip.png) Tip You can add query string parameters to the base URL, if necessary. For example, to get a refresh token from Facebook for offline access, use https://accounts.facebook.com/o/oauth2/auth?access\_type=offline&approval\_prompt=force. You need the approval\_prompt parameter to ask the user to accept the refresh action so that Facebook continues to provide refresh tokens after the first one. - For Token Endpoint URL, enter the URL from Facebook. For example, https://www.facebook.com/v2.2/dialog/oauth. If you leave this field blank, Salesforce uses the version of the Facebook API that your app uses. - To change the values requested from the Facebook profile API, enter the User Info Endpoint URL. For more information, see [https://developers.facebook.com/docs/facebook-login/permissions/v2.0#reference-public\_profile](https://developers.facebook.com/docs/facebook-login/permissions/v2.0#reference-public_profile). The requested fields must correspond to the requested scopes. If you leave this field blank, Salesforce uses the version of the Facebook API that your app uses. - To automatically enable the OAuth 2.0 Proof Key for Code Exchange (PKCE) extension, which improves security, select **Use Proof Key for Code Exchange (PKCE) Extension**. For more information on how this setting helps secure your provider, see [Proof Key for Code Exchange (PKCE) Extension](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_pkce.htm&type=5&language=en_US). - For Default Scopes, enter the scopes to send along with the request to the authorization endpoint. Otherwise, the hard-coded defaults for the provider type are used. See [Facebook’s developer documentation](https://developers.facebook.com/) for these defaults. For more information, see [Use the Scope URL Parameter](https://help.salesforce.com/articleView?id=sso_provider_addl_params_scope.htm&language=en_US). - If you enter a consumer key and consumer secret, the consumer secret is included in SOAP API responses by default. To hide the secret in SOAP API responses, deselect **Include Consumer Secret in SOAP API Responses**. Starting in November 2022, the secret is always replaced in Metadata API responses with a placeholder value. On deployment, replace the placeholder with your consumer secret as plain text, or modify the value later through the UI. - For Custom Error URL, enter the URL for the provider to use to report any errors. - For Custom Logout URL, enter a URL to provide a specific destination for users after they log out, if they authenticated using the SSO flow. Use this field to direct users to a branded logout page or destination other than the default Salesforce logout page. The URL must be fully qualified with an http or https prefix, such as https://acme.my.salesforce.com. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_tip.png) Tip Configure [single logout](https://help.salesforce.com/articleView?id=slo_about.htm&language=en_US) (SLO) to automatically log out a user from Salesforce and the identity provider. As the relying party, Salesforce supports OpenID Connect SLO when the user logs out from the identity provider or Salesforce. - To use a portal with your provider, select the portal from the Portal dropdown list. - For Icon URL, add a path to an icon to display as a button on the login page for a site. This icon applies to an Experience Cloud site only. It doesn’t appear on your Salesforce login page or My Domain login URL. Users click the button to log in with the associated authentication provider for the site. Specify a path to your own image, or copy the URL for one of our sample icons into the field. - To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). After you define the authentication provider, note the generated Auth. Provider ID value. You use it with the `Auth.AuthToken` Apex class. Salesforce also generates several client configuration URLs. - Test-Only Initialization URL—Salesforce admins use this URL to ensure that the third-party provider is set up correctly. The admin opens this URL in a browser, signs in to the third party, and is redirected to Salesforce with a map of attributes. - Single Sign-On Initialization URL—Use this URL to perform SSO into Salesforce from a third party using its third-party credentials. The user opens this URL in a browser and logs in to the third party. The third party creates a user or updates an existing user. Then the third party signs the user into Salesforce as that user. - Existing User Linking URL—Use this URL to link existing Salesforce users to a third-party account. The user opens this URL in a browser, signs in to the third party, signs in to Salesforce, and approves the link. - OAuth-Only Initialization URL—Use this URL to obtain OAuth access tokens for a third party. Users must authenticate with Salesforce for the third-party service to get a token. This flow doesn’t provide for future SSO functionality. - Callback URL—Use this URL for the endpoint that the authentication provider calls back to for configuration. The authentication provider must redirect to the callback URL with information for each client configuration URL. Client configuration URLs support additional request parameters that enable you to direct users to log in to specific sites, obtain customized permissions from the third party, or go to a specific location after authenticating. ## Update Your Facebook App After defining the Facebook authentication provider in Salesforce, go back to Facebook and update your app to use the callback URL as the Facebook Website Site URL. ## Test the SSO Connection In a browser, open the Test-Only Initialization URL on the Auth. Provider detail page. It redirects you to Facebook and asks you to sign in. You’re then asked to authorize your app. After you authorize, you’re redirected to Salesforce. ## Add the Authentication Provider to Your Login Page Configure your login page to show the authentication provider as a login option. Depending on whether you’re configuring SSO for an org or Experience Cloud site, this step is different. - For orgs, see [Add an Authentication Provider to Your Org's Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_org_login_page.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for your employees to use it by adding it to your org’s login page."). - For Experience Cloud sites, see [Add an Authentication Provider to Your Experience Cloud Site’s Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_customer_add_login_option.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for customers and partners to use it by adding it to your Experience Cloud site’s login page."). # Configure a Google Authentication Provider Configure Google as an authentication provider so your users can log in to Salesforce using their Google credentials. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

To configure Google as an authentication provider, complete these steps. - Set up a registration handler. - Set up a Google app, making Salesforce the application domain. - Define a Google authentication provider in Salesforce. - Update your Google app to use the callback URL generated by Salesforce as the Google website site URL. - Test the connection. - Add the authentication provider to your login page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note For sandbox use cases, you can skip some of these steps and [Configure a Salesforce-Managed Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_global_auth.htm&release=264.0.0&type=5 "To simplify authentication provider setup for sandbox use cases, use Salesforce-managed third-party apps. This process saves you the time and effort of creating your own third-party app and managing its credentials. Salesforce provides third-party apps for several common providers, such as Google, Microsoft, and Slack."). For production use cases, always create your own Google app and use its credentials for your authentication provider. The Salesforce-managed app can experience downtime and isn't recommended for production. ## Set Up a Registration Handler To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). ## Set Up a Google App Before you define a Google authentication provider in Salesforce, set up an app in Google. 1. Create a client in [Google](https://developers.google.com/identity/gsi/web/guides/get-google-api-clientid). 2. Modify the app settings, and set the application domain to Salesforce. 3. Note the client ID and client secret. You use them to create a Google provider in Salesforce. ## Define a Google Provider in Salesforce To set up a Google provider in Salesforce, you need the Google app ID and app secret. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. For the provider type, select **Google**. 4. Enter a name for the provider. 5. Enter the URL suffix, which is used in the client configuration URLs. For example, if the URL suffix of your provider is MyGoogleProvider, your single sign-on (SSO) URL is similar to https://mydomain\_url or site\_url /services/auth/sso/MyGoogleProvider. 6. For the Consumer Key, use the Google app ID. 7. For the Consumer Secret, use the Google app secret. 8. Optionally, set these fields: - Authorize Endpoint URL—Specify the base authorization URL from Google. For example, https://accounts.google.com/o/oauth2/authorize. The URL must start with https://accounts.google.com/o/oauth2. You can add query string parameters to the base URL, if necessary. For example, to get a refresh token from Google for offline access, use https://accounts.google.com/o/oauth2/auth?access\_type=offline&approval\_prompt=force. You need the approval\_prompt parameter to ask the user to accept the refresh action so that Google continues to provide refresh tokens after the first one. - Token Endpoint URL—Specify the OAuth token URL from Google. For example, https://accounts.google.com/o/oauth2/accessToken. The URL must start with https://accounts.google.com/o/oauth2. - User Info Endpoint URL—Change the values requested from Google’s profile API. The URL must start with https://www.googleapis.com/oauth2/. - To automatically enable the OAuth 2.0 Proof Key for Code Exchange (PKCE) extension, which improves security, select **Use Proof Key for Code Exchange (PKCE) Extension**. For more information on how this setting helps secure your provider, see [Proof Key for Code Exchange (PKCE) Extension](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_pkce.htm&type=5&language=en_US). - Default Scopes—Enter the default scopes to send along with the request to the authorization endpoint. Otherwise, the hard-coded defaults for the provider type are used. For the defaults, see [Google’s developer documentation](https://developers.google.com/). For more information, see [Customize Relying Party Data Requests](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_scope.htm&release=264.0.0&type=5 "When you set up single sign-on (SSO) with an authentication provider, use the scope parameter to customize data requests to a third party, like Facebook. For example, request access to the email address listed on a user’s Facebook profile. You can use this parameter with every authentication provider except Janrain."). - If you enter a consumer key and consumer secret, the consumer secret is included in SOAP API responses by default. To hide the secret in SOAP API responses, deselect **Include Consumer Secret in SOAP API Responses**. Starting in November 2022, the secret is always replaced in Metadata API responses with a placeholder value. On deployment, replace the placeholder with your consumer secret as plain text, or modify the value later through the UI. - Custom Error URL—Specify a URL for the provider to report errors. - For Icon URL, add a path to an icon to display as a button on the login page for a site. This icon applies to an Experience Cloud site only. It doesn’t appear on your Salesforce login page or My Domain login URL. Users click the button to log in with the associated authentication provider for the site. Specify a path to your own image, or copy the URL for one of our sample icons into the field. - To use a portal with your provider, select the portal from the Portal list. 9. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 10. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 11. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 12. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 13. Save your work. After you define the provider, note the generated Auth. Provider ID value. You use it with the `Auth.AuthToken` Apex class. Salesforce also generates these client configuration URLs. - Test-Only Initialization URL—Admins use this URL to ensure that the third-party provider is set up correctly. The admin opens this URL in a browser, signs in to the third party, and is redirected to Salesforce with a map of attributes. - Single Sign-On Initialization URL—Use this URL to perform SSO into Salesforce from a third party using its third-party credentials. The user opens this URL in a browser and signs in to the third party. The third party creates a user or updates an existing user. Then the third party signs the user into Salesforce as that user. - Existing User Linking URL—Use this URL to link existing Salesforce users to a third-party account. The user opens this URL in a browser, signs in to the third party, signs in to Salesforce, and approves the link. - OAuth-Only Initialization URL—Use this URL to obtain OAuth access tokens for a third party. Users must authenticate with Salesforce for the third-party service to get a token. This flow doesn’t provide for future SSO functionality. - Callback URL—Use this URL for the endpoint that the authentication provider calls back to for configuration. The authentication provider redirects to the callback URL with information for each client configuration URL. Client configuration URLs support other request parameters that enable you to direct users to log in to specific sites, obtain customized permissions from a third party, or go to a location after authenticating. ## Update Your Google App After defining the Google authentication provider in Salesforce, go back to your Google app. Update your app to use the callback URL as the Google website site URL. ## Test the SSO Connection In a browser, open the Test-Only Initialization URL on the Auth. Provider Setup page. It redirects you to Google and asks you to sign in. You’re then asked to authorize your app. After you authorize, you’re redirected to Salesforce. ## Add the Authentication Provider to Your Login Page Configure your login page to show the authentication provider as a login option. Depending on whether you’re configuring SSO for an org or Experience Cloud site, this step is different. - For orgs, see [Add an Authentication Provider to Your Org's Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_org_login_page.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for your employees to use it by adding it to your org’s login page."). - For Experience Cloud sites, see [Add an Authentication Provider to Your Experience Cloud Site’s Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_customer_add_login_option.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for customers and partners to use it by adding it to your Experience Cloud site’s login page."). # Configure a Janrain Authentication Provider Configure Janrain as an authentication provider so your users can log in to Salesforce using their Janrain credentials. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

Setting up a Janrain authentication provider is slightly different from setting up other providers. You don’t use the single sign-on (SSO) URL that you obtain after registering your provider with Salesforce to start the flow. Instead, you use Janrain’s login widget deployed on your site. To set up your Janrain provider, follow these steps. - Set up a registration handler. - Register a Janrain app. - Define the Janrain provider in Salesforce. - Get the login widget code from Janrain. - Create a site to call the login widget. #### See Also - [Add Functionality to an Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params.htm&release=264.0.0&type=5 "After you set up single sign-on (SSO) with an authentication provider, Salesforce generates several client configuration URLs, such as the Single Sign-On Initialization URL. These client configuration URLs support request parameters, which you can use to add functions to your authentication provider. For example, use these parameters to get customized permissions from the third party or direct users to a specific location after authenticating.") - [Authentication Provider SSO](https://help.salesforce.com/s/articleView?id=xcloud.sso_authentication_providers.htm&release=264.0.0&type=5 "With authentication providers, your users can log in to your Salesforce org or Experience Cloud site with single sign-on (SSO) using credentials from a third party. Authentication providers also give your users access to protected third-party data. Salesforce offers several ways to configure authentication providers, such as with OpenID Connect or with a custom OAuth 2.0 configuration. Which protocol you can use depends on the third party.") ## Set Up a Registration Handler To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). ## Register a Janrain App Sign up for a Janrain account from the [Janrain website](http://www.janrain.com). After you have your Janrain account, you need the `apiKey`. 1. Select **Deployment** | **Sign-in for Web** | **Handle Tokens**. 2. Copy the `apiKey`. You need the key later when creating the Janrain provider in Salesforce. 3. Add `Salesforce` to the Janrain domain allowlist in your Janrain account at **Deployment** | **Application Settings** | **Domain Whitelist**. ## Define the Janrain Provider in Salesforce To create a Janrain provider in Salesforce, you need the Janrain API key. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. For the provider type, select **Janrain**. 4. Enter a name for the provider. 5. Enter the URL suffix, which is used in the callback URL. For example, if the URL suffix of your provider is MyJanrainProvider, your SSO URL is similar to https://mydomain\_login\_url or site\_url /services/auth/sso/JanrainProvider. 6. For Consumer Secret, use the Janrain `apiKey` value. 7. If you enter a consumer key and consumer secret, the consumer secret is included in SOAP API responses by default. To hide the secret in SOAP API responses, deselect **Include Consumer Secret in SOAP API Responses**. Starting in November 2022, the secret is always replaced in Metadata API responses with a placeholder value. On deployment, replace the placeholder with your consumer secret as plain text, or modify the value later through the UI. 8. Optionally, enter a custom error URL for the provider to use to report errors. 9. Optionally, enter a custom logout URL to provide a destination for users after they log out if they authenticated using the SSO flow. Use this field to direct users to a branded logout page or destination other than the default Salesforce logout page. The URL must be fully qualified with an http or https prefix, such as https://acme.my.salesforce.com. 10. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 11. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 12. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 13. To use a portal with your provider, select the portal from the Portal dropdown list. 14. For Icon URL, add a path to an icon to display as a button on the login page for a site. This icon applies to an Experience Cloud site only. It doesn’t appear on your Salesforce login page or My Domain login URL. Users click the button to log in with the associated authentication provider for the site. Specify a path to your own image, or copy the URL for one of our sample icons into the field. 15. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 16. Save your work. Write down the value of the generated callback URL. You need this URL to complete the Janrain setup. Several client configuration parameters are available after configuring Janrain as the authentication provider. Use them for the `flowtype` value in the callback URL with your Janrain login widget. - `test`—Make sure that the third-party provider is set up correctly. The admin configures a Janrain widget to use flowtype=test, signs in to the third party, and is redirected to Salesforce with a map of attributes. - `link`—Link existing Salesforce users to a third-party account. The user goes to a page with a Janrain widget configured to use flowtype=link, signs in to the third party, signs in to Salesforce, and approves the link. - `sso`—Perform SSO into Salesforce from a third party using third-party credentials. The user goes to a page with a Janrain widget configured to use `flowtype=sso` and signs in to the third party. The third party creates a user or updates an existing user. Then the third party signs the user into Salesforce as that user. Client configuration URLs support additional request parameters that enable you to direct users to log in to specific sites, obtain customized permissions from the third party, or go to a specific location after authenticating. ## Get the Login Widget Code from Janrain Get the login widget code from Janrain for your Salesforce org. 1. From your Janrain account, select **Application** | **Sign-in for Web** | **Get the Code**. 2. Enter the callback URL value from your Janrain provider information in Salesforce along with the query parameter `flowtype=sso` as the token URL. For example: ``` https://acme.my.salesforce.com/services/authcallback/00DD##############/JanrainApp?flowtype=sso ``` For an Experience Cloud site, add the `community` parameter, and pass it to the login widget as the token URL. For example: ``` janrain.settings.tokenUrl='https://acme.my.salesforce.com/services/authcallback/00DD##############/JanrainApp'​+'?flowtype=sso&community='+encodeURIComponent('https://acme.my.site.com/customers'); ``` ## Create a Site to Call the Login Widget 1. Enable Sites. 2. Create a page, and copy the login widget code to the page. 3. Create a site, and specify the page that you created as the home page for the site. # Configure a JWT Bearer Flow External client apps can support OAuth 2.0 JSON Web Token (JWT) bearer flows using the certificate field in the global OAuth settings file. A JWT flow authorizes servers to access data without interactively logging in each time the servers exchange information. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure an external client app for OAuth 2.0 JWT Bearer Flows View all External Client Apps, view their settings, and edit their policies
To configure a JWT bearer flow, you must first have an external client app on your Salesforce org. See [Create an External Client App](https://help.salesforce.com/s/articleView?id=xcloud.create_a_local_external_client_app.htm&release=264.0.0&type=5 "Create an external client app in App Manager. Local external client apps are available only on the org where you create them. Packageable external client apps can be packaged for distribution to other orgs."). 1. To create an X.509 certificate, follow the steps in [OAuth 2.0 JWT Bearer Flow for Server-to-Server Integration](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_jwt_flow.htm&release=264.0.0&type=5 "Sometimes you want to authorize servers to access data without interactively logging in each time the servers exchange information. For these cases, you can use the OAuth 2.0 JSON Web Token (JWT) bearer flow. This flow uses a certificate to sign the JWT request and doesn’t require explicit user interaction. However, this flow does require prior approval of the client app."). 2. From Setup, in the Quick Find box, enter External Client Apps Manager, and then select **External Client Apps Manager**. 3. From the actions dropdown list for the external client app that you want to configure, select **Edit Settings**. 4. In the OAuth Settings section, select **Enable OAuth**. 5. Configure [basic OAuth settings](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_oauth_settings.htm&release=264.0.0&type=5 "Configure the OAuth settings to set the structure of the local external client app."). 6. Select **Enable JWT Bearer Flow**. 7. Select **Upload Files** and then choose the X.509 certificate. 8. Save the settings. 9. Create a JWT by following the steps in [OAuth 2.0 JWT Bearer Flow for Server-to-Server Integration](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_jwt_flow.htm&release=264.0.0&type=5 "Sometimes you want to authorize servers to access data without interactively logging in each time the servers exchange information. For these cases, you can use the OAuth 2.0 JSON Web Token (JWT) bearer flow. This flow uses a certificate to sign the JWT request and doesn’t require explicit user interaction. However, this flow does require prior approval of the client app."). # Configure a LinkedIn Authentication Provider Configure LinkedIn as an authentication provider so your users can log in to Salesforce using their LinkedIn credentials. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

To configure LinkedIn as an authentication provider, complete these tasks. - Set up a registration handler. - View LinkedIn scopes. - Set up a LinkedIn app. - Define a LinkedIn provider in Salesforce. - Update your LinkedIn app to use the callback URL generated by Salesforce as an entry in the LinkedIn OAuth 2.0 Redirect URLs. - Test the single sign-on (SSO) connection. - Add the LinkedIn authentication provider to your login page. For sandbox use cases, you can skip some of these steps and [Configure a Salesforce-Managed Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_global_auth.htm&release=264.0.0&type=5 "To simplify authentication provider setup for sandbox use cases, use Salesforce-managed third-party apps. This process saves you the time and effort of creating your own third-party app and managing its credentials. Salesforce provides third-party apps for several common providers, such as Google, Microsoft, and Slack."). For production use cases, always create your own LinkedIn app and use its credentials for your authentication provider. The Salesforce-managed app can experience downtime and isn't recommended for production. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note LinkedIn authentication providers created in Spring ’26 and later use LinkedIn API v2. Older authentication providers use LinkedIn API v1. Also, all authentication providers that use the Salesforce-managed LinkedIn app use LinkedIn API v1. ## Set Up a Registration Handler To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). Here's an example Apex registration handler for the LinkedIn authentication provider. This registration handler assumes that the requested scopes include `r_liteprofile` and `r_emailaddress`. It also assumes that the users are logging in to a customer portal. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note The default registration handler requires email. Use this request to retrieve the currently authenticated member's email address. `GET https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))`. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_example.png) Example ```java //TODO:This auto-generated class includes the basics for a Registration //Handler class. You will need to customize it to ensure it meets your needs and //the data provided by the third party. global class LinkedInRegHandler implements Auth.RegistrationHandler { //Creates a Standard salesforce or a community user global User createUser(Id portalId, Auth.UserData data) { if (data.attributeMap.containsKey('sfdc_networkid')) { //We have a community id, so create a user with community access //TODO: Get an actual account Account a =[SELECT Id FROM account WHERE name = 'LinkedIn Account']; Contact c = new Contact(); c.accountId = a.Id; c.email = data.email; c.firstName = data.firstName; c.lastName = data.lastName; insert(c); //TODO: Customize the username and profile. Also check that the username //doesn't already exist and possibly ensure there are enough org licenses //to create a user. Must be 80 characters or less. User u = new User(); Profile p =[SELECT Id FROM profile WHERE name = 'Customer Portal Manager']; u.username = data.firstName + '@sfdc.linkedin.com'; u.email = data.email; u.lastName = data.lastName; u.firstName = data.firstName; String alias = data.firstName; //Alias must be 8 characters or less if (alias.length() > 8) { alias = alias.substring(0, 8); } u.alias = alias; u.languagelocalekey = UserInfo.getLocale(); u.localesidkey = UserInfo.getLocale(); u.emailEncodingKey = 'UTF-8'; u.timeZoneSidKey = 'America/Los_Angeles'; u.profileId = p.Id; u.contactId = c.Id; return u; } else { //This is not a community, so create a regular standard user User u = new User(); Profile p =[SELECT Id FROM profile WHERE name = 'Standard User']; //TODO: Customize the username. Also check that the username doesn't //already exist and possibly ensure there are enough org licenses //to create a user. Must be 80 characters or less u.username = data.firstName + '@salesforce.com'; u.email = data.email; u.lastName = data.lastName; u.firstName = data.firstName; String alias = data.firstName; //Alias must be 8 characters or less if (alias.length() > 8) { alias = alias.substring(0, 8); } u.alias = alias; u.languagelocalekey = UserInfo.getLocale(); u.localesidkey = UserInfo.getLocale(); u.emailEncodingKey = 'UTF-8'; u.timeZoneSidKey = 'America/Los_Angeles'; u.profileId = p.Id; return u; } } //Updates the user's first and last name global void updateUser(Id userId, Id portalId, Auth.UserData data) { User u = new User(id = userId); u.lastName = data.lastName; u.firstName = data.firstName; update(u); } } ``` ## View LinkedIn Scopes A scope determines the information you get from LinkedIn about a user during the authorization process. Due to privacy concerns, LinkedIn updated its API to v2 to reduce the amount of member information returned to developer apps when members sign in. In v2, LinkedIn returns only the critical pieces of member data necessary for identification. The LinkedIn v2 [Lite Profile](https://docs.microsoft.com/en-us/linkedin/shared/references/v2/profile/lite-profile) replaces the v1 Basic Profile. The Lite Profiles consists of a member’s ID, first name, family name, maiden name, and profile picture. As in v1, a user must first give LinkedIn approval to share the information. When you set up LinkedIn as an authentication provider, you can view the scopes in the LinkedIn app settings and the Salesforce Auth. Provider settings. You can also view the scopes in a query to LinkedIn’s user info endpoint using field selectors. - You can leave the scope value blank in the LinkedIn and Salesforce settings. Salesforce contains r\_basicprofile, which provides only the most basic user information. It also supplies r\_emailaddress, which contains the user’s email address. - Here’s a request to retrieve the member’s profile in LinkedIn v2: `GET` https://api.linkedin.com/v2/me. - Salesforce requires a user’s email address. You can make a separate request to retrieve the user’s email address using r\_emailaddress. Here’s a request to retrieve the member's email address. `GET https://api.linkedin.com/v2/emailAddress?q=members&projection=(elements*(handle~))` ## Set Up a LinkedIn App Before you can configure LinkedIn for Salesforce, set up an app in LinkedIn. 1. Sign in to your developer account on [LinkedIn](https://developer.linkedin.com/#docs-and-tools). 2. From LinkedIn, click your profile picture at the top, and select **My Apps**. 3. Click **Create App**. 4. Enter the app settings. 5. Note the client ID and client secret. ## Define a LinkedIn Provider in Your Salesforce Org To set up a LinkedIn provider, you need the LinkedIn client ID and client secret. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. For the provider type, select **LinkedIn**. 4. Enter a name for the provider. 5. Enter the URL suffix, which is used in the client configuration URLs. For example, if the URL suffix of your provider is MyLinkedInProvider, your SSO URL is similar to https://mydomain\_url or community\_url /services/auth/sso/MyLinkedInProvider. 6. For Consumer Secret, use the LinkedIn client secret. 7. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 8. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 9. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 10. Optionally, set these fields: - For Authorize Endpoint URL, enter https://www.linkedin.com/oauth/v2/authorization. - For Token Endpoint URL, enter the OAuth token URL from LinkedIn. For example, https://www.linked.com/oauth/v2/accessToken. For more information, see [Authenticating with OAuth 2.0 Overview](https://docs.microsoft.com/en-us/linkedin/shared/authentication/authentication?context=linkedin/consumer/context). - To change the values requested from LinkedIn’s profile API, enter the User Info Endpoint URL. For more information, see [Profile API](https://docs.microsoft.com/en-us/linkedin/shared/integrations/people/profile-api?context=linkedin/consumer/context). The URL must start with https://api.linkedin.com/v2/me, and the requested fields must correspond to the requested scopes. - For Default Scopes, enter a supported value or space-separated values that represent the information you get from LinkedIn. - If you enter a consumer key and consumer secret, the consumer secret is included in SOAP API responses by default. To hide the secret in SOAP API responses, deselect **Include Consumer Secret in SOAP API Responses**. Starting in November 2022, the secret is always replaced in Metadata API responses with a placeholder value. On deployment, replace the placeholder with your consumer secret as plain text, or modify the value later through the UI. - For Custom Error URL, enter the URL for the provider to use to report any errors. - For Icon URL, add a path to an icon to display as a button on the login page for a site. This icon applies to an Experience Cloud site only. It doesn’t appear on your Salesforce login page or My Domain login URL. Users click the button to log in with the associated authentication provider for the site. Specify a path to your own image, or copy the URL for one of our sample icons into the field. - To use a portal for LinkedIn users, select the portal from the Portal dropdown list. 11. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 12. Save your work. After you define the authentication provider, Salesforce generates these client configuration URLs. - Test-Only Initialization URL—Use this URL to ensure that the third-party provider is set up correctly. The admin opens this URL in a browser, signs in to the third party, and is redirected to Salesforce with a map of attributes. - Single Sign-On Initialization URL—Use this URL to perform SSO into Salesforce from a third party using third-party credentials. The user opens this URL in a browser and signs in to the third party. The third party creates a user or updates an existing user. Then the third party signs the user into Salesforce as that user. - Existing User Linking URL—Use this URL to link existing Salesforce users to a third-party account. The user opens this URL in a browser, signs in to the third party, signs in to Salesforce, and approves the link. - OAuth-Only Initialization URL—Use this URL to obtain OAuth access tokens for a third party. Users must authenticate with Salesforce for the third-party service to get a token. This flow doesn’t provide for future SSO functionality. - Callback URL—Use this URL for the endpoint that the authentication provider calls back to for configuration. The authentication provider must redirect to the callback URL with information for each client configuration URL. Client configuration URLs support more request parameters that enable you to: - Direct users to log in to specific sites. - Obtain customized permissions from the third party. - Go to a specific location after authenticating. ## Update Your LinkedIn App After you define the LinkedIn authentication provider in Salesforce, go back to LinkedIn. Update your app to use the Salesforce-generated callback URL as the LinkedIn OAuth 2.0 Redirect URLs value. ## Test the SSO Connection In a browser, open the Test-Only Initialization URL on the Auth. Provider Setup page. It redirects you to LinkedIn and asks you to sign in. You’re then asked to authorize your app. After you authorize, you’re redirected to Salesforce. ## Add the Authentication Provider to Your Login Page Configure your login page to show the authentication provider as a login option. Depending on whether you’re configuring SSO for an org or Experience Cloud site, this step is different. - For orgs, see [Add an Authentication Provider to Your Org's Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_org_login_page.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for your employees to use it by adding it to your org’s login page."). - For Experience Cloud sites, see [Add an Authentication Provider to Your Experience Cloud Site’s Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_customer_add_login_option.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for customers and partners to use it by adding it to your Experience Cloud site’s login page."). # Configure a Microsoft Authentication Provider Set up a Microsoft authentication provider so your users can log in to Salesforce with their Microsoft credentials. This provider supports authentication with all services provided by Microsoft Azure Active Directory (AD). ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

To configure Microsoft as an authentication provider, complete these steps. - Set up a registration handler. - Set up an app in Microsoft Azure AD. - Define a Microsoft authentication provider in Salesforce. - Update your Microsoft app to use the callback URL generated by Salesforce as the redirect URI in Microsoft. - Test the single sign-on (SSO) connection. - Add the Microsoft authentication provider to your login page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note For sandbox use cases, you can skip some of these steps and [Configure a Salesforce-Managed Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_global_auth.htm&release=264.0.0&type=5 "To simplify authentication provider setup for sandbox use cases, use Salesforce-managed third-party apps. This process saves you the time and effort of creating your own third-party app and managing its credentials. Salesforce provides third-party apps for several common providers, such as Google, Microsoft, and Slack."). For production use cases, always create your own Microsoft app and use its credentials for your authentication provider. The Salesforce-managed app can experience downtime and isn't recommended for production. ## Set Up a Registration Handler To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). ## Set Up a Microsoft App 1. Log in to [Microsoft Azure](https://azure.microsoft.com/en-us/), and go to Azure AD. 2. Create an app, and generate a client secret. For more information, see the [Microsoft documentation](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app). 3. Modify the app settings as needed, including [scopes](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-configure-app-access-web-apis). 4. Note the application ID and client secret. ## Define a Microsoft Provider in Salesforce To set up a Microsoft provider in Salesforce, you need the Microsoft application ID and client secret. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. For the provider type, select **Microsoft**. 4. Enter a name for the provider. 5. Enter the URL suffix, which is used in client configuration URLs. For example, if the URL suffix of your provider is MyMicrosoftProvider, your SSO URL is similar to https://mydomain\_url or site\_url/services/auth/sso/MyMicrosoftProvider. 6. For Consumer Key, use the Microsoft application ID. 7. For Consumer Secret, use the Microsoft client secret. 8. Optionally, set these fields. - For Authorize Endpoint URL, enter the base URL from Microsoft. For example, `https://login.microsoftonline.com/common/oauth2/v2.0/authorize`. If you leave this field blank, Salesforce uses the version of the Microsoft API that your app uses. - For Token Endpoint URL, enter the URL from Microsoft. For example, `https://login.microsoftonline.com/common/oauth2/v2.0/token`. If you leave this field blank, Salesforce uses the version of the Microsoft API that your app uses. - To change the values requested from the Microsoft profile API, enter the User Info Endpoint URL. For example, `https://graph.microsoft.com/oidc/userinfo`. The requested fields must correspond to the requested scopes. If you leave this field blank, Salesforce uses the version of the Microsoft API that your app uses. - To automatically enable the OAuth 2.0 Proof Key for Code Exchange (PKCE) extension, which improves security, select **Use Proof Key for Code Exchange (PKCE) Extension**. For more information on how this setting helps secure your provider, see [Proof Key for Code Exchange (PKCE) Extension](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_pkce.htm&type=5&language=en_US). - For Token Issuer, enter the source of the authentication token in the form `https://URL`. For an OAuth 2.0 web server authentication flow, the provider must include an ID token in the response from the token endpoint. Optionally, the provider can include an ID token in the response for a refresh token flow. The ID token is validated against the Token Issuer value and information in the User Info endpoint. The signature of the ID token isn’t validated. The audience for the ID token is the consumer key registered with your authentication provider. Don’t include any other audience values. - For Default Scopes, enter the scopes to send along with the request to the authorization endpoint. Otherwise, the hard-coded defaults for the provider type are used. - If you enter a consumer key and consumer secret, the consumer secret is included in SOAP API responses by default. To hide the secret in SOAP API responses, deselect **Include Consumer Secret in SOAP API Responses**. Starting in November 2022, the secret is always replaced in Metadata API responses with a placeholder value. On deployment, replace the placeholder with your consumer secret as plain text, or modify the value later through the UI. - For Custom Error URL, enter the URL for the provider to use to report errors. - For Custom Logout URL, enter a URL to provide a specific destination for users after they log out, if they authenticated using the SSO flow. Use this field to direct users to a branded logout page or destination other than the default Salesforce logout page. The URL must be fully qualified with an http or https prefix, such as https://acme.my.salesforce.com.Configure [single logout](https://help.salesforce.com/s/articleView?id=xcloud.slo_about.htm&release=264.0.0&type=5 "With single logout (SLO), users can log out from the identity provider and the service provider by logging out from either of them. Whether Salesforce is the service provider or identity provider, you can enable SLO with SAML or OpenID Connect. SLO can increase security and save users time by removing manual logout from every individual application.") (SLO) to automatically log out a user from Salesforce and the identity provider. As the relying party, Salesforce supports OpenID Connect SLO when the user logs out from the identity provider or Salesforce. 9. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 10. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 11. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 12. To use a portal with your provider, select the portal from the Portal dropdown list. 13. For Icon URL, add a path to an icon to display as a button on the login page for a site. This icon applies to an Experience Cloud site only. It doesn’t appear on your Salesforce login page or My Domain login URL. Users click the button to log in with the associated authentication provider for the site. Specify a path to your own image, or copy the URL for one of our sample icons into the field. 14. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 15. Save your provider. 16. Note the generated Auth. Provider ID value. You use it with the `Auth.AuthToken` Apex class. After you define the authentication provider, Salesforce generates these client configuration URLs. - Test-Only Initialization URL—Salesforce admins use this URL to check that the third-party provider is set up correctly. The admin opens this URL in a browser, signs in to the third party, and is redirected to Salesforce with a map of attributes. - Single Sign-On Initialization URL—Use this URL to perform SSO into Salesforce from a third party using its third-party credentials. The user opens this URL in a browser and logs in to the third party. The third party creates or updates a user. Then the third party signs the user in to Salesforce as that user. - Existing User Linking URL—Use this URL to link Salesforce users to a third-party account. The user opens this URL in a browser, signs in to the third party, signs in to Salesforce, and approves the link. - OAuth-Only Initialization URL—Use this URL to obtain OAuth access tokens for a third party. Users must authenticate with Salesforce for the third-party service to get a token. This flow doesn’t provide for future SSO functionality. - Callback URL—Use this URL for the endpoint that the authentication provider calls back to for configuration. The authentication provider must redirect to the callback URL with information for each client configuration URL. - Single Logout URL—Use this URL to log users out from multiple apps with a single logout. For example, the user logs out of Salesforce and is logged out of the third-party provider. Client configuration URLs support additional request parameters that enable you to direct users to log in to specific sites, obtain customized permissions from the third party, or go to a specific location after authenticating. ## Update Your Microsoft App with the Callback URL Go back to Microsoft and [update the Redirect URI](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app#add-a-redirect-uri) to use the callback URL generated by Salesforce. ## Test the Single Sign-On Configuration In a browser, open the Test-Only Initialization URL on the Auth. Provider detail page. It redirects you to Microsoft and asks you to sign in. You’re then asked to authorize your Microsoft app. After you authorize, you’re redirected to Salesforce. ## Add the Authentication Provider to Your Login Page Configure your login page to show the authentication provider as a login option. Depending on whether you’re configuring SSO for an org or Experience Cloud site, this step is different. - For orgs, see [Add an Authentication Provider to Your Org's Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_org_login_page.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for your employees to use it by adding it to your org’s login page."). - For Experience Cloud sites, see [Add an Authentication Provider to Your Experience Cloud Site’s Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_customer_add_login_option.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for customers and partners to use it by adding it to your Experience Cloud site’s login page."). # Configure a Microsoft® Access Control Service Authentication Provider You can use Microsoft Access Control Service as an authentication provider using the OAuth protocol. Typically, a Microsoft Office 365 service like SharePoint® Online handles authorization. SSO authentication from a Microsoft authentication provider isn’t supported. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

To configure a Microsoft Access Control Service authentication provider, complete these steps. - Define a Microsoft Access Control Service authentication provider in Salesforce. - Register your app with Microsoft, making Salesforce the application domain. - Edit your Microsoft Access Control Service authentication provider details in Salesforce to use the consumer key and consumer secret generated when you registered your app with Microsoft. - Test the connection. ## Define a Microsoft Access Control Service Authentication Provider in Salesforce Before you can register an app in SharePoint Online or the Microsoft Seller Dashboard, you need the callback URL that redirects the authorized user to Salesforce. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. For the provider type, select **Microsoft Access Control Service**. 4. Enter a name for the provider. 5. Enter the URL suffix, which is used in the client configuration URLs. For example, if the URL suffix of your provider is MyMicrosoftACSProvider, your SSO URL is similar to https://mydomain\_url or site\_url /services/auth/sso/MicrosoftACSProvider. 6. For Consumer Key, enter a placeholder value. You can edit this value after your app is registered with Microsoft. 7. For Consumer Secret, enter a placeholder value. You can edit this value after your app is registered with Microsoft. 8. For Authorize Endpoint URL, enter the base URL from your provider for the Authorize Endpoint URL. For example, SharePoint Online uses this form: https:///\_layouts/15/OAuthAuthorize.aspx 9. For Token Endpoint URL, enter the URL in this form: https://accounts.accesscontrol.windows.net//tokens/OAuth/2?resource=/@ - is the Office 365 tenant name ending with .onmicrosoft.com or the corresponding tenant globally unique identifier (GUID). - is the identifier for the sender of the token. For example, SharePoint uses `00000003-0000-0ff1-ce00-000000000000`. 10. Optionally, set these fields: - For Default Scopes, enter the scopes to send along with the request to the authorization endpoint. For more information about scopes for SharePoint Online, see [http://msdn.microsoft.com/en-us/library/jj687470.aspx#Scope](http://msdn.microsoft.com/en-us/library/jj687470.aspx#Scope). For more information about using scopes with Salesforce, see [Customize Relying Party Data Requests](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_scope.htm&release=264.0.0&type=5 "When you set up single sign-on (SSO) with an authentication provider, use the scope parameter to customize data requests to a third party, like Facebook. For example, request access to the email address listed on a user’s Facebook profile. You can use this parameter with every authentication provider except Janrain."). - If you enter a consumer key and consumer secret, the consumer secret is included in SOAP API responses by default. To hide the secret in SOAP API responses, deselect **Include Consumer Secret in SOAP API Responses**. Starting in November 2022, the secret is always replaced in Metadata API responses with a placeholder value. On deployment, replace the placeholder with your consumer secret as plain text, or modify the value later through the UI. - For Custom Error URL, enter the URL for the provider to use to report any errors. - For Custom Logout URL, enter a URL to provide a specific destination for users after they log out, if they authenticated using the SSO flow. Use this field to direct users to a branded logout page or destination other than the default Salesforce logout page. The URL must be fully qualified with an http or https prefix, such as https://acme.my.salesforce.com. Configure [single logout](https://help.salesforce.com/s/articleView?id=xcloud.slo_about.htm&release=264.0.0&type=5 "With single logout (SLO), users can log out from the identity provider and the service provider by logging out from either of them. Whether Salesforce is the service provider or identity provider, you can enable SLO with SAML or OpenID Connect. SLO can increase security and save users time by removing manual logout from every individual application.") (SLO) to automatically log out a user from Salesforce and the identity provider. As the relying party, Salesforce supports OpenID Connect SLO when the user logs out from the identity provider or Salesforce. - To use a portal with your provider, select the portal from the Portal dropdown list. If you have a portal set up, this option can redirect the login request to the portal login page. Otherwise, leave as None. - For Icon URL, add a path to an icon to display as a button on the login page for a site. This icon applies to an Experience Cloud site only. It doesn’t appear on your Salesforce login page for or My Domain login URL. Users click the button to log in with the associated authentication provider for the site. Specify a path to your own image, or copy the URL for one of our sample icons into the field. 11. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 12. Save your work. Note the generated Auth. Provider ID value. You can use it with the [`Auth.AuthToken` Apex class](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_class_Auth_AuthToken.htm). Several client configuration URLs are generated after defining the authentication provider. - Test-Only Initialization URL—Admins use this URL to ensure that the third-party provider is set up correctly. The admin opens this URL in a browser, signs in to the third party, and is redirected to Salesforce with a map of attributes. - OAuth-Only Initialization URL—Use this URL to obtain OAuth access tokens for a third party. Users must authenticate with Salesforce for the third-party service to get a token. This flow doesn’t provide for future SSO functionality. - Callback URL—Use this URL for the endpoint that the authentication provider calls back to for configuration. The authentication provider has to redirect to the callback URL with information for each client configuration URL. Client configuration URLs support additional request parameters that enable you to direct users to log in to specific sites, obtain customized permissions from the third party, or go to a specific location after authenticating. ## Register Your App with Microsoft Before you can configure an app for Salesforce, you must get an app identity using one of the options provided by Microsoft. For details about registering a remote app for SharePoint, see [Guidelines for registering apps for SharePoint 2013](http://msdn.microsoft.com/en-us/library/office/jj687469.aspx). 1. Register your app using one of the options provided by Microsoft. 2. Modify the app settings, and set the redirect URI to the authentication provider’s callback URL. 3. Note the client ID and client secret. 4. Save your work. ## Edit Your Microsoft Access Control Service Authentication Provider Details After registering your app with Microsoft, go back to your Microsoft Access Control Service authentication provider details. Update the consumer key and consumer secret with the values provided by Microsoft. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Next to the name of your Microsoft Access Control Service authentication provider, click **Edit**. 3. For Consumer Key, enter the Microsoft client ID. 4. For Consumer Secret, enter the Microsoft client secret. ## Test the Connection In a browser, open the Test-Only Initialization URL on the Auth. Provider Setup page. It redirects you to Microsoft and asks you to sign in. You’re then asked to authorize your app. After you authorize, you’re redirected to Salesforce. # Configure a Platform Event Data Source on a Flexcard (Managed Package) For the managed package runtime, configure a Platform Event data source to enable apps to communicate inside and outside of Salesforce. Platform Events are part of Salesforce’s enterprise messaging platform. A Platform Event combines PushTopic and Streaming Channel. Instead of working with an sObject, Platform Events work with custom objects. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). See [Platform Event Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_platform_event_data_source.htm&release=264.0.0&type=5 "For the managed package runtime, platform Events are part of Salesforce’s enterprise messaging platform. A Platform Event combines PushTopic and Streaming Channel to enable apps to communicate inside and outside of Salesforce. Instead of working with an sObject, Platform Events work with custom objects."). Before You Begin - Create a Platform Event. See [Delivering Custom Notifications with Platform Events](https://developer.salesforce.com/docs/atlas.en-us.platform_events.meta/platform_events/platform_events_overview.htm). 1. To configure a data source from the Flexcard configuration wizard, navigate to the **Select Data Source Type** step, select **Streaming API**, and click **Next**. 2. To configure a data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **Streaming API** from the **Data Source Type** dropdown. 3. Select **Platform Event** from the **Type** dropdown. 4. In the **Channel** field, enter the URL of the Platform Event that you created. 5. From the **Operation** picklist, select **Replace** or **Append**. - Select **Replace** to overwrite the Card with new data. - Select **Append** to add new data to the Card. 6. From the **Get All Messages** picklist, select **True** or **False**. - Select **True** to get all data from the last 24 hours. - Select **False** to get the latest data update. 7. (Optional) To configure other options common among all data sources, see [Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database."). 8. To test data source settings, add test variables that the query can use to return live data, see [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure a Project Object (Managed Package) For the managed package runtime, after creating a Project object, configure the object. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Configure the Source and Target. See steps 1 through 9 of [Configure for Deployment Between Orgs (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_for_deployment_between_orgs.htm&release=264.0.0&type=5 "For the managed package runtime, you must configure a source org and a target org. Both orgs should have the same Omnistudio runtime."). 2. From the Project drop-down list, select **Load Projects from Source**. This retrieves active Project objects in the Source org that have a Status of Released. 3. When the Project objects finish loading, select a Project object. 4. To refresh comparison data whenever you save the workspace, make sure the **Force refresh of data from orgs** box is checked. !["Force refresh of data from orgs" checkbox and Save button.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/forcerefresh.png) 5. Click **Save**. # Configure a PushTopic Data Source on a Flexcard (Managed Package) For the managed package runtime, configure a PushTopic data source to run a SOQL query that returns a result that notifies listeners of changes to records in a Salesforce organization. The PushTopic defines a Streaming API channel. For example, get notified when a case is created for a particular type or status or both. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). See [PushTopic Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_pushtopic_data_source.htm&release=264.0.0&type=5 "For the managed package runtime, the Streaming Channel API type uses the Streaming API to send notifications of general events that are not tied to Salesforce data changes. Use the Streaming Channel API when you want to send and receive notifications based on custom events that you specify. You can use Streaming Channel API for any application that sends custom notifications, such as a Chat application."). Before You Begin - Create a PushTopic. See [Creating a PushTopic](https://developer.salesforce.com/docs/atlas.en-us.api_streaming.meta/api_streaming/pushtopic_events_intro.htm). 1. To configure a data source from the Flexcard configuration wizard, navigate to the **Select Data Source Type** step, select **Streaming API**, and click **Next**. 2. To configure a data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **Streaming API** from the **Data Source Type** dropdown. 3. Select **PushTopic** from the **Type** dropdown. 4. In the **Channel** field, enter the URL of the PushTopic that you created. 5. From the **Operation** picklist, select **Replace** or **Append**. - Select **Replace** to overwrite the Card with new data. - Select **Append** to add new data to the Card. 6. From the **Get All Messages** picklist, select **True** or **False**. - Select **True** to get all data from the last 24 hours. - Select **False** to get the latest data update. 7. (Optional) To configure other options common among all data sources, see [Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database."). 8. To test data source settings, add test variables that the query can use to return live data, see [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure a REST Data Source Using Named Credentials on a Flexcard (Managed Package) For the managed package runtime, use Named Credentials to authenticate Apex callouts when configuring a REST data source. A named credential specifies the URL of a callout endpoint and its required authentication parameters in one definition. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To create a named credential, see [Named Credentials as Callout Endpoints](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_callouts_named_credentials.htm). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. See [Configure an Integration Procedure Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_integration_procedure_data_source_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call. For example, as a Systems Admin, you want your customer service reps to view the weather forecast of policy holders when on a call. You can use an Integration Procedure with an Omnistudio Data Mapper Extract that returns an account's ZIP code, and a REST API call that uses the ZIP code to get the current forecast for the Account's region."). Before You Begin - Create a Named Credential. See [Define a Named Credential](https://help.salesforce.com/articleView?id=named_credentials_define.htm&type=5&language=en_US). 1. To configure the data source when [creating a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."), navigate to the **Select Data Source Type** step, select **REST**, and click **Next**. 2. To configure the data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **REST** from the **Data Source Type** dropdown. 3. Select **Named Credential** from the **REST type** dropdown. 4. From the **Named Credential** dropdown, select a Named Credential created from [Setup > Named Credential](https://help.salesforce.com/articleView?id=named_credentials_define.htm&type=5&language=en_US) in your org. 5. Enter a relative path in the **Endpoint** field to get what you need from the API, such as `My_Payroll_System/paystubs?format=json`. 6. Select a method type from the **Method** dropdown: - Select **GET** to requests data specified by the parameters of the URL. - Select **POST** to send JSON data. - Enter the JSON data to send in the **JSON Payload** field. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You can use Context Variables to pass inherited values with either method. See [Flexcards Context Variables (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, global and local context variables are available to a Flexcard to provide context to data sources, actions, and other components. All variables are case sensitive."). 7. (Optional) To add any request headers, click **\+ Add New** next to **Headers** to add any request headers. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Most third-party APIs expect various headers such as tokens, public keys, and content-type. 8. (Optional) To configure other options common among all data sources, see [Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database."). 9. To test data source settings, add test variables that the query can use to return live data, see [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure a REST Web Data Source on a Flexcard (Managed Package) For the managed package runtime, configure a REST Web data source to get or post data from or to a public API. For example, pull in weather data from a weather API based on a policy holder's postal code. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To configure a REST data source with Named Credentials to authenticate Apex callouts, see [Configure a REST Data Source Using Named Credentials on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_a_rest_data_source_using_named_credentials_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, use Named Credentials to authenticate Apex callouts when configuring a REST data source. A named credential specifies the URL of a callout endpoint and its required authentication parameters in one definition."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. See [Configure an Integration Procedure Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_integration_procedure_data_source_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call. For example, as a Systems Admin, you want your customer service reps to view the weather forecast of policy holders when on a call. You can use an Integration Procedure with an Omnistudio Data Mapper Extract that returns an account's ZIP code, and a REST API call that uses the ZIP code to get the current forecast for the Account's region."). 1. To configure the data source when [creating a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."), navigate to the **Select Data Source Type** step, select **REST**, and click **Next**. 2. To configure the data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **REST** from the **Data Source Type** dropdown. 3. Select **Web** from the **REST type** dropdown. 4. In the **Endpoint** field, enter the REST endpoint URL. For example: ``` http://api.weatherstack.com/current?access_key={Session.weatherAPIkey}&query={BillingCity} ``` 5. Select a method type from the **Method** dropdown: - Select **GET** to requests data specified by the parameters of the URL. - Select **POST** to send JSON data. - Enter the JSON data to send in the **JSON Payload** field. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You can use Context Variables to pass inherited values with either method. See [Flexcards Context Variables (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, global and local context variables are available to a Flexcard to provide context to data sources, actions, and other components. All variables are case sensitive."). 6. (Optional) To add any request headers, click **\+ Add New** next to **Headers** to add any request headers. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Most third-party APIs expect various headers such as tokens, public keys, and content-type. 7. (Optional) To configure other options common among all data sources, see [Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database."). 8. To test data source settings, add test variables that the query can use to return live data, see [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure a Salesforce Authentication Provider To set up single sign-on (SSO) between two Salesforce orgs, configure a Salesforce authentication provider. Your users can log in to one org, the relying party, by using credentials from an identity provider org. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

To configure a Salesforce authentication provider, complete these high-level tasks. - Set up a registration handler. - In the identity provider org, create an external client app. - In the relying party org, define the Salesforce authentication provider. - Test the connection. - Add the authentication provider to your login page for the relying party org. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note For sandbox use cases, you can skip some of these steps and [Configure a Salesforce-Managed Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_global_auth.htm&release=264.0.0&type=5 "To simplify authentication provider setup for sandbox use cases, use Salesforce-managed third-party apps. This process saves you the time and effort of creating your own third-party app and managing its credentials. Salesforce provides third-party apps for several common providers, such as Google, Microsoft, and Slack."). For production use cases, always create your own Salesforce external client app and use its credentials for your authentication provider. The Salesforce-managed app can experience downtime and isn't recommended for production. #### See Also - [Add Functionality to an Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params.htm&release=264.0.0&type=5 "After you set up single sign-on (SSO) with an authentication provider, Salesforce generates several client configuration URLs, such as the Single Sign-On Initialization URL. These client configuration URLs support request parameters, which you can use to add functions to your authentication provider. For example, use these parameters to get customized permissions from the third party or direct users to a specific location after authenticating.") - [Authentication Provider SSO](https://help.salesforce.com/s/articleView?id=xcloud.sso_authentication_providers.htm&release=264.0.0&type=5 "With authentication providers, your users can log in to your Salesforce org or Experience Cloud site with single sign-on (SSO) using credentials from a third party. Authentication providers also give your users access to protected third-party data. Salesforce offers several ways to configure authentication providers, such as with OpenID Connect or with a custom OAuth 2.0 configuration. Which protocol you can use depends on the third party.") ## Set Up a Registration Handler To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). ## Create an App in the Identity Provider Org To integrate the identity provider org with the relying party, you need credentials, a consumer key and consumer secret, that represent the identity provider org. To generate these credentials, [create an external client app](https://help.salesforce.com/s/articleView?id=xcloud.create_a_local_external_client_app.htm&language=en_US). ## Define the Salesforce Authentication Provider in the Relying Party Org To set up the authentication provider in your org, you need the values from the Consumer Key and Consumer Secret fields of the external client app definition. 1. In the relying party org, from [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. For the provider type, select **Salesforce**. 4. Enter a name for the provider. 5. Enter the URL suffix, which is used in the client configuration URLs. For example, if the URL suffix of your provider is MySFDCProvider, your SSO URL is similar to https://mydomain\_url or site\_url /services/auth/sso/MySFDCProvider. 6. Paste the consumer key value from the external client app definition into the Consumer Key field. 7. Paste the consumer secret value from the external client app definition into the Consumer Secret field. 8. Optionally, set the following fields. - For Authorize Endpoint URL, specify an OAuth authorization URL. For Authorize Endpoint URL, we recommend that you use the org's My Domain login URL, which you can find on the My Domain page in Setup. The URL must end in `.salesforce.com`, and the path must end in `/services/oauth2/authorize`. For example, `https://MyDomainName.my.salesforce.com/services/oauth2/authorize`. - For Token Endpoint URL, specify an OAuth token URL. For Token Endpoint URL, the host name can include a sandbox or custom domain name. The URL must end in `.salesforce.com`, and the path must end in `/services/oauth2/token`. For example, `https://login.salesforce.com/services/oauth2/token`. - To automatically enable the OAuth 2.0 Proof Key for Code Exchange (PKCE) extension, which improves security, select **Use Proof Key for Code Exchange (PKCE) Extension**. For more information on how this setting helps secure your provider, see [Proof Key for Code Exchange (PKCE) Extension](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_pkce.htm&type=5&language=en_US). - For Default Scopes, enter the scopes to send along with the request to the authorization endpoint. Otherwise, the hard-coded default is used. For more information, see [Customize Relying Party Data Requests](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params_scope.htm&release=264.0.0&type=5 "When you set up single sign-on (SSO) with an authentication provider, use the scope parameter to customize data requests to a third party, like Facebook. For example, request access to the email address listed on a user’s Facebook profile. You can use this parameter with every authentication provider except Janrain."). - If the authentication provider was created after the Winter ’15 release, the **Include identity organization’s organization ID for third-party account linkage** option no longer appears. Before Winter ’15, the destination org couldn’t differentiate between users with the same user ID on different orgs. For example, two users with the same user ID in different orgs were seen as the same user. As of Winter ’15, user identities contain the org ID, so this option isn’t needed. For older authentication providers, enable this option to keep identities separate in the destination org. When you enable this option, your users must reapprove all third-party links. The links are listed in the Third-Party Account Links section of a user’s detail page. - If you enter a consumer key and consumer secret, the consumer secret is included in SOAP API responses by default. To hide the secret in SOAP API responses, deselect **Include Consumer Secret in SOAP API Responses**. Starting in November 2022, the secret is always replaced in Metadata API responses with a placeholder value. On deployment, replace the placeholder with your consumer secret as plain text, or modify the value later through the UI. - For Custom Error URL, enter the URL for the provider to use to report any errors. - For Custom Logout URL, enter a URL to provide a specific destination for users after they log out, if they authenticated using the SSO flow. Use this field to direct users to a branded logout page or destination other than the default Salesforce logout page. The URL must be fully qualified with an http or https prefix, such as https://acme.my.salesforce.com. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_tip.png) Tip Configure [single logout](https://help.salesforce.com/s/articleView?id=xcloud.slo_about.htm&release=264.0.0&type=5 "With single logout (SLO), users can log out from the identity provider and the service provider by logging out from either of them. Whether Salesforce is the service provider or identity provider, you can enable SLO with SAML or OpenID Connect. SLO can increase security and save users time by removing manual logout from every individual application.") (SLO) to automatically log out a user from Salesforce and the identity provider. As the relying party, Salesforce supports OpenID Connect SLO when the user logs out from the identity provider or Salesforce. 9. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 10. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 11. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 12. To use a portal with your provider, select the portal from the Portal dropdown list. 13. For Icon URL, add a path to an icon to display as a button on the login page for a site. This icon applies to an Experience Cloud site only. It doesn’t appear on your Salesforce login page or My Domain login URL. Users click the button to log in with the associated authentication provider for the site. Specify a path to your own image, or copy the URL for one of our sample icons into the field. 14. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 15. Click **Save**. Note the value of the Client Configuration URLs. You need the callback URL to complete the last step. Use the Test-Only initialization URL to check your configuration. Also note the Auth. Provider ID value because you use it with the `Auth.AuthToken` Apex class. 16. In the identity provider org, return to the external client app definition that you created earlier from Setup. Paste the callback URL value from the authentication provider into the Callback URL field. Several client configuration URLs are generated after defining the authentication provider. Client configuration URLs support additional request parameters that enable you to direct users to log in to specific sites, obtain customized permissions from the third party, or go to a specific location after authenticating. ## Test the SSO Connection In a browser, open the Test-Only Initialization URL on the Auth. Provider detail page. It redirects you to the authentication provider and asks you to sign in. You’re then asked to authorize your app. After you authorize, you’re redirected to Salesforce. ## Add the Authentication Provider to Your Login Page - For orgs, see [Add an Authentication Provider to Your Org's Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_org_login_page.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for your employees to use it by adding it to your org’s login page."). - For Experience Cloud sites, see [Add an Authentication Provider to Your Experience Cloud Site’s Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_customer_add_login_option.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for customers and partners to use it by adding it to your Experience Cloud site’s login page."). # Configure a Salesforce DX Project for External Client Apps Prepare your org and create a Salesforce DX project to develop external client apps. Set up a Salesforce DX project before creating your external client app. 1. [Install Visual Studio and Salesforce CLI](https://developer.salesforce.com/tools/vscode/en/vscode-desktop/install). 2. Create a Salesforce CLI connected app in your developer org by following these [instructions](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_auth_connected_app.htm). 3. Create a Salesforce DX project by following these [instructions](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_ws_create_new.htm). # Configure a Salesforce Org for DocuSign Integration Enable Omnistudio to use DocuSign templates by configuring authentication providers, named credentials, and Omni Interaction Configurations. You can also enable sending or signing DocuSign documents on behalf of other users. 1. **[Create an Authentication Provider to Connect to DocuSign](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_auth_provider_for_docusign_23564.htm&release=264.0.0&type=5)** Add an authentication provider for Salesforce to create a secure connection to your DocuSign account. Omnistudio uses these credentials to fetch document templates from DocuSign. 2. **[Create an OAuth 2.0 Named Credential to Connect to DocuSign](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_named_credential_for_docusign_23641.htm&release=264.0.0&type=5)** Add a Named Credential using authentication provider information to create a secure connection. Omniscripts and Integration Procedures use these credentials to connect with DocuSign. Create a named credential for the admin who manages templates and your DocuSign account. You can also create a Send on Behalf named credential to send or sign DocuSign forms on behalf of other users. 3. **[Add the DocuSign Login Page as a Trusted URL](https://help.salesforce.com/s/articleView?id=xcloud.os_add_the_docusign_login_page_as_a_trusted_url.htm&release=264.0.0&type=5)** DocuSign runs on an iFrame. To allow the content to show on Experience Cloud sites, add the DocuSign login page as a trusted URL and allow iFrame content. 4. **[Add Omni Interaction Configuration Settings for DocuSign](https://help.salesforce.com/s/articleView?id=xcloud.os_add_omni_interaction_configuration_settings_for_docusign_23704.htm&release=264.0.0&type=5)** Provide DocuSign authorization by adding two Omni Interaction Configuration entries for DocuSign. 5. **[Set Up Send on Behalf of Another User for Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_setup_send_on_behalf_of_another_user.htm&release=264.0.0&type=5)** To send or sign DocuSign on behalf of another user, create a Send On Behalf field in the User object and assign the Send on Behalf named credential from that field in the user’s page. If you want multiple users to send or sign on behalf of another user, assign the named credential to each user. When you log in, Salesforce checks whether a Send On Behalf setup exists. If it doesn’t, Salesforce sends or signs DocuSign using the default admin user. # Configure a Salesforce Org for DocuSign Integration (Managed Package) For the managed package runtime, enable Omnistudio to use DocuSign templates by configuring authentication providers, named credentials, and Omni Interaction Configurations. You can also enable sending or signing DocuSign documents on behalf of other users. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Enable OAuth 2.0 With Custom Settings In Omnistudio for Managed Packages (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_custom_implementation_for_oath_2_0_for_docusign.htm&release=264.0.0&type=5)** For the managed package runtime, salesforce recommends the more secure OAuth 2.0 for DocuSign. We've introduced a custom implementation for you to switch from OAuth 1.0 to OAuth 2.0 authentication for Omniscripts using custom objects (OmniScript\_\_c). If you’re setting up DocuSign for the first time, you don't need to change the custom settings. If OAuth 2.0 authentication isn’t loading or you’re still using OAuth 1.0, enable OAuth 2.0 with the custom settings. - **[Create an Authentication Provider to Connect to DocuSign (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_auth_provider_for_docusign_vlocity.htm&release=264.0.0&type=5)** For the managed package runtime, add an authentication provider for Salesforce to create a secure connection to your DocuSign account. Omnistudio uses these credentials to fetch document templates from DocuSign. - **[Create an OAuth 2.0 Named Credential to Connect to DocuSign (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_named_credential_for_docusign_vlocity.htm&release=264.0.0&type=5)** For the managed package runtime, add a Named Credential using authentication provider information to create a secure connection. Omniscripts and Integration Procedures use these credentials to connect with DocuSign. Create a named credential for the admin who manages templates and your DocuSign account. You can also create a Send on Behalf named credential to send or sign DocuSign forms on behalf of other users. - **[Link Your Salesforce Org to Your DocuSign Account (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_link_your_salesforce_org_to_your_docusign_account.htm&release=264.0.0&type=5)** For the managed package runtime, configure the DocuSign Admin page and create a Remote Site Setting for DocuSign so you can retrieve the templates from your DocuSign account. - **[Set Up Send on Behalf of Another User (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_setup_send_on_behalf_of_another_user_vlocity.htm&release=264.0.0&type=5)** For the managed package runtime, to send or sign DocuSign on behalf of another user, create a Send On Behalf field in the User object and assign the Send on Behalf named credential from that field in the user’s page. If you want multiple users to send or sign on behalf of another user, assign the named credential to each user. When you log in, Salesforce checks whether a Send On Behalf setup exists. If it doesn’t, Salesforce sends or signs DocuSign using the default admin user. # Configure a Salesforce-Managed Authentication Provider To simplify authentication provider setup for sandbox use cases, use Salesforce-managed third-party apps. This process saves you the time and effort of creating your own third-party app and managing its credentials. Salesforce provides third-party apps for several common providers, such as Google, Microsoft, and Slack. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

Salesforce-managed apps make single sign-on (SSO) setup fast and easy, but they can experience downtime that disrupts SSO service. For production use cases, always create your own third-party apps. Salesforce manages third-party apps for these providers. - Facebook - GitHub - Google - LinkedIn - Microsoft - Salesforce - Slack To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. Choose the type of authentication provider. 4. Name your provider. 5. Leave these fields blank so Salesforce can manage the values: - Consumer Key - Consumer Secret - Authorize Endpoint URL - Token Endpoint URL - User Info Endpoint URL - Default Scopes ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note Specifying a value for any of these fields implies that you’re creating your own authentication provider. If you provide a value for one of these fields, you must also provide a value for the consumer key and consumer secret. 6. If you enter a consumer key and consumer secret, the consumer secret is included in SOAP API responses by default. To hide the secret in SOAP API responses, deselect **Include Consumer Secret in SOAP API Responses**. Starting in November 2022, the secret is always replaced in Metadata API responses with a placeholder value. On deployment, replace the placeholder with your consumer secret as plain text, or modify the value later through the UI. 7. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 8. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 9. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 10. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. See [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 11. Save your work. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_example.png) Example Suppose that you want to set up single sign-on (SSO) for a sandbox using a LinkedIn authentication provider. On the Auth. Provider Setup page, leave the fields blank so Salesforce can manage these values. You can skip creating a LinkedIn app. Next, you define the LinkedIn authentication provider in your org and test the connection by using the procedure in [Configure a LinkedIn Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_linkedin.htm&release=264.0.0&type=5 "Configure LinkedIn as an authentication provider so your users can log in to Salesforce using their LinkedIn credentials."). After you configure an authentication provider, Salesforce generates these client configuration URLs. - Test-Only Initialization URL—Use this URL to test whether you set up the third party correctly. Open the URL, and log in to the third party. Then you’re redirected back to your Salesforce org with a map of attributes. - Single Sign-On Initialization URL—Use this URL to direct users to perform SSO into your org from the third party. The user opens the URL and logs in to the third party. The third party creates or updates a user account and then logs the user into Salesforce with that account. - Existing User Linking URL—Use this URL to link users in your org to an existing account in the third party. The user opens this URL, logs in to the third party, and logs in to Salesforce, creating a link between accounts. - OAuth-Only Initialization URL—Use this URL to obtain OAuth access tokens after the user authenticates. This flow provides for third-party data access but not SSO. - Callback URL— For each of the other client configuration URLs, the authentication provider sends information back to the callback URL. You can test your SSO connection by opening the Test-Only Initialization URL in a browser. The URL redirects you to your OpenID provider and asks you to sign in. You’re then asked to authorize your app. After you authorize, you’re redirected to Salesforce. Configure your login page to show the authentication provider as a login option. Depending on whether you’re configuring SSO for an org or for an Experience Cloud site, this step is different. # Configure a Searchable Object for Inventory Batch Search Create a searchable object configuration to define the object that's the basis of the search experience. This configuration determines how the object's data is updated, parsed, aggregated, and displayed in both search criteria and results. You can reuse a searchable object configuration across multiple search criteria configurations. For Inventory Batch Search, use the Product Inventory Batch Searchable Field object. Use an activated copy of the Update Product Inventory Batch Searchable Field Values data processing engine (DPE) definition template to automatically sync the data. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To configure the searchable object:

Use Criteria-Based Search and Filter system permission

AND

Manage Inventory Search system permission

Before you begin, activate a copy of the Update Product Inventory Batch Searchable Field Values DPE template and assign the Inventory Search and Transfer permission set to the Integration User. 1. From Setup, in the Quick Find box, enter Criteria-Based Search and Filter, and then select **Criteria-Based Search and Filter**. 2. On the Searchable Object Configuration tab, click **New**. 3. Enter a name for the configuration. For example, enter Product Inventory Batch Search. The API name is automatically populated. 4. For Searchable Object, search for and select **Product Inventory Batch Searchable Field**. 5. For Data Synchronization Job, search for and select your activated copy of the Update Product Inventory Batch Searchable Field Values DPE definition template. 6. Enter a description. 7. Save your changes. If necessary, set up criteria field mapping, filter field display format, result field mapping, and filter field parsing for the searchable object configuration. You select your searchable object configuration in the search criteria configuration that you create for Inventory Batch Search. # Configure a Searchable Object for Inventory Search Create a searchable object configuration to define the object that's the basis of the search experience, how the object's data is updated, and how the object's data is used in the search experience. You can also define how the object's data is aggregated, parsed, and shown in the search criteria and results. You can use a searchable object configuration in multiple search criteria configurations. For your inventory search experience, use the Product Inventory Searchable Field as the searchable object and use an activated copy of the Update Product Inventory Searchable Field Values data processing engine (DPE) definition template to update the object's data. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To configure the searchable object:

Use Criteria-Based Search and Filter system permission

AND

Manage Inventory Search system permission

Ensure that you activate a copy of the Update Product Inventory Searchable Field Values DPE template. 1. From Setup, in the Quick Find box, enter Criteria-Based Search and Filter, and then select **Criteria-Based Search and Filter**. 2. On the Searchable Object Configuration tab, click **New**. 3. Enter a name for the configuration. For example, enter Product Inventory Search. The API name is automatically populated. 4. For Searchable Object, search for and select **Product Inventory Searchable Field**. 5. For Data Synchronization Job, search for and select your activated copy of the Update Product Inventory Searchable Field Values DPE definition template. 6. Enter a description. 7. Save your changes. If necessary, set up criteria field mapping, filter field display format, result field mapping, and filter field parsing for the searchable object configuration. You select your searchable object configuration in the search criteria configuration that you create for Inventory Search. #### See Also - [Configure a Searchable Object](https://help.salesforce.com/s/articleView?id=ind.criteria_based_search_filter_object.htm&type=5&language=en_US) # Configure a Slack Authentication Provider Configure a Slack authentication provider so your users can log in to Salesforce using their Slack credentials. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

To configure Slack as an authentication provider, follow these steps. 1. Set up a registration handler. 2. Set up a Slack app. 3. Define a Slack authentication provider in Salesforce. 4. Update your Slack app to use the Callback URL generated by Salesforce as the redirect URL in Slack. 5. Test the single sign-on (SSO) connection. 6. Add the Slack authentication provider to your login page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note For sandbox use cases, you can skip some of these steps and [Configure a Salesforce-Managed Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_global_auth.htm&release=264.0.0&type=5 "To simplify authentication provider setup for sandbox use cases, use Salesforce-managed third-party apps. This process saves you the time and effort of creating your own third-party app and managing its credentials. Salesforce provides third-party apps for several common providers, such as Google, Microsoft, and Slack."). For production use cases, always create your own Slack app and use its credentials for your authentication provider. The Salesforce-managed app can experience downtime and isn't recommended for production. ## Set Up a Registration Handler To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). ## Set Up a Slack App Before you can configure Slack for Salesforce, set up an app in Slack. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note You can skip this step by allowing Salesforce to use its own default app. For more information, see [Configure a Salesforce-Managed Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_global_auth.htm&release=264.0.0&type=5 "To simplify authentication provider setup for sandbox use cases, use Salesforce-managed third-party apps. This process saves you the time and effort of creating your own third-party app and managing its credentials. Salesforce provides third-party apps for several common providers, such as Google, Microsoft, and Slack."). 1. Go to the [Slack developer website](https://api.slack.com/) and create an app. 2. Modify the app settings as needed. 3. Note the App ID and Client Secret. ## Define a Slack Provider in Salesforce To set up a Slack provider in Salesforce, you need the Slack App ID and Client Secret. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. For the provider type, select **Slack**. 4. Enter a name for the provider. 5. Enter the URL suffix, which is used in client configuration URLs. For example, if the URL suffix of your provider is MySlackProvider, your SSO URL is similar to `https://mydomain_url or site_url/services/auth/sso/MySlackProvider`. 6. For Consumer Key, use the Slack App ID. 7. For Consumer Secret, use the Slack Client Secret. 8. Optionally, set these fields. - For Authorize Endpoint URL, enter the base URL from Slack. For example, `https://slack.com/openid/connect/authorize`. If you leave this field blank, Salesforce uses the version of the Slack API that your app uses. - For Token Endpoint URL, enter the URL from Slack. For example, `https://slack.com/api/openid.connect.token`. If you leave this field blank, Salesforce uses the version of the Slack API that your app uses. - To change the values requested from Slack’s profile API, enter the User Info Endpoint URL. For example, `https://slack.com/api/openid.connect.userInfo`. The requested fields must correspond to the requested scopes. If you leave this field blank, Salesforce uses the version of the Slack API that your app uses. - For Default Scopes, enter the scopes to send along with the request to the authorization endpoint. Otherwise, the hard-coded defaults for the provider type are used. - If you enter a consumer key and consumer secret, the consumer secret is included in SOAP API responses by default. To hide the secret in SOAP API responses, deselect **Include Consumer Secret in SOAP API Responses**. Starting in November 2022, the secret is always replaced in Metadata API responses with a placeholder value. On deployment, replace the placeholder with your consumer secret as plain text, or modify the value later through the UI. - For Custom Error URL, enter the URL for the provider to use to report errors. - For Icon URL, add a path to an icon to display as a button on the login page for a site. This icon applies to an Experience Cloud site only. It doesn’t appear on your Salesforce login page or My Domain login URL. Users click the button to log in with the associated authentication provider for the site. Specify a path to your own image, or copy the URL for one of our sample icons into the field. 9. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 10. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 11. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 12. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 13. Save your provider. 14. Note the generated Auth. Provider ID value. You use it with the `Auth.AuthToken` Apex class. Several client configuration URLs are generated after defining the authentication provider. - Test-Only Initialization URL—Salesforce admins use this URL to ensure that the third-party provider is set up correctly. The admin opens this URL in a browser, signs in to the third party, and is redirected to Salesforce with a map of attributes. - Single Sign-On Initialization URL—Use this URL to perform SSO into Salesforce from a third party using its third-party credentials. The user opens this URL in a browser and logs in to the third party. The third party creates a user or updates an existing user. Then the third party signs the user into Salesforce as that user. - Existing User Linking URL—Use this URL to link existing Salesforce users to a third-party account. The user opens this URL in a browser, signs in to the third party, signs in to Salesforce, and approves the link. - OAuth-Only Initialization URL—Use this URL to obtain OAuth access tokens for a third party. Users must authenticate with Salesforce for the third-party service to get a token. This flow doesn’t provide for future SSO functionality. - Callback URL—Use this URL for the endpoint that the authentication provider calls back to for configuration. The authentication provider must redirect to the callback URL with information for each client configuration URL. - Single Logout URL—Use this URL to log users out from multiple apps with a single logout. For example, the user logs out of Salesforce and is automatically logged out of the third-party provider. Client configuration URLs support additional request parameters that enable you to direct users to log in to specific sites, obtain customized permissions from the third party, or go to a specific location after authenticating. ## Update Your Slack App After defining the authentication provider in Salesforce, go back to Slack and update your app to use the callback URL from Salesforce as the redirect URL in Slack. ## Add the Authentication Provider to Your Login Page Configure your login page to show the authentication provider as a login option. Depending on whether you’re configuring SSO for an org or Experience Cloud site, this step is different. - For orgs, see [Add an Authentication Provider to Your Org's Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_org_login_page.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for your employees to use it by adding it to your org’s login page."). - For Experience Cloud sites, see [Add an Authentication Provider to Your Experience Cloud Site’s Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_customer_add_login_option.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for customers and partners to use it by adding it to your Experience Cloud site’s login page."). # Configure a SOQL Query Data Source on a Flexcard (Managed Package) For the managed package runtime, configure a data source to use a Salesforce Object Query Language (SOQL) query to search an org's data for specific information. The SOQL queries are encrypted so that Flexcards don’t display query information on the client-side. If security is a concern, use an Omnistudio Data Mapper instead of a SOQL query, because Data Mappers provide field-level security. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note When mapping fields, only fields in the field picker that have non-null values for the specific record in the test query are visible. Use a test record that you know has non-null values for all the fields you want to map. Or use custom fields if the test record doesn't have the fields that you want to map. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. See [Configure an Integration Procedure Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_integration_procedure_data_source_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call. For example, as a Systems Admin, you want your customer service reps to view the weather forecast of policy holders when on a call. You can use an Integration Procedure with an Omnistudio Data Mapper Extract that returns an account's ZIP code, and a REST API call that uses the ZIP code to get the current forecast for the Account's region."). 1. To configure the data source when [creating a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."), navigate to the **Select Data Source Type** step, select **SOQL Query**, and click **Next**. 2. To configure the data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **SOQL Query** from the **Data Source Type** dropdown. 3. Enter a SOQL expression in the **Query** field. For example, enter the following to get fields from the Contact object, limit it to 10 and return only records that have an email address: ``` SELECT Id, Name, Email, Phone, Title FROM Contact WHERE Email != Null LIMIT 10 ``` 4. (Optional) To configure other options common among all data sources, see [Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database."). 5. To test data source settings, add test variables that the query can use to return live data, see [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure a SOSL Search Data Source on a Flexcard (Managed Package) For the managed package runtime, construct text-based search queries against the search index with Salesforce Object Search Language (SOSL). You can search text, email, and phone fields for multiple objects to which you have access, including custom objects, in a single query. The SOSL queries are encrypted so that Flexcards don’t display query information on the client-side. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). See [SOSL and SOQL Reference](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_sosl_intro.htm) 1. To configure the data source when [creating a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."), navigate to the **Select Data Source Type** step, select **SOSL Search**, and click **Next**. 2. To configure the data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **SOSL Search** from the **Data Source Type** dropdown. 3. Enter the search term in the **Search For** field. 4. Select which fields to search in from the **In** dropdown. 5. From the **Returning sObject & Fields** section, select at least one sObject to search: 1. Click into the **sObject** field and select an object, such as Account. 2. Select one or more data fields from the **Field** dropdown. 3. (Optional) To add additional objects and fields, click **\+ Add sObject**. 6. (Optional) To limit the maximum number of rows to return, enter a number in the **Limit to** field. 7. (Optional) To configure other options common among all data sources, see [Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database."). 8. To test data source settings, add test variables that the query can use to return live data, see [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure a Streaming Channel Data Source on a Flexcard (Managed Package) For the managed package runtime, enable the Streaming Channel data source to send and receive notifications based on custom events that you specify. The Streaming Channel API type enables the Streaming API to send notifications of general events that aren’t tied to Salesforce data changes. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). See [Streaming Channel Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_streaming_channel_data_source.htm&release=264.0.0&type=5 "For the managed package runtime, the Streaming Channel API type uses the Streaming API to send notifications of general events that aren’t tied to Salesforce data changes. Use the Streaming Channel API when you want to send and receive notifications based on custom events that you specify. You can use Streaming Channel API for any application that sends custom notifications, such as a Chat application."). Before You Begin - Create the app that sends and receives notifications. See [Generic Streaming](https://developer.salesforce.com/docs/atlas.en-us.api_streaming.meta/api_streaming/generic_streaming_intro.htm#generic_streaming_intro). 1. To configure a data source from the Flexcard configuration wizard, navigate to the **Select Data Source Type** step, select **Streaming API**, and click **Next**. 2. To configure a data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **Streaming API** from the **Data Source Type** dropdown. 3. Select **Streaming Channel** from the **Type** dropdown. 4. In the **Channel** field, enter the URL of the app that you created. 5. From the **Operation** picklist, select **Replace** or **Append**. - Select **Replace** to overwrite the Card with new data. - Select **Append** to add new data to the Card. 6. From the **Get All Messages** picklist, select **True** or **False**. - Select **True** to get all data from the last 24 hours. - Select **False** to get the latest data update. 7. (Optional) To configure other options common among all data sources, see [Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database."). 8. To test data source settings, add test variables that the query can use to return live data, see [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure a Tier Assessment Process Loyalty program managers can define the minimum point balance that members require to be eligible for each tier in a tier group. A loyalty program process is automatically created based on the eligible point balance that the loyalty program manager has specified for each tier. The loyalty program process assesses and changes member tier based on the current qualifying point balance of members. If a member’s tier expiration date has passed, the process reassigns the member to the applicable tier based on their current point balance. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
User Permissions Needed
To add minimum eligible points for each tier: Loyalty Management permission set
You can specify the minimum eligible point balance for one qualifying currency. To change member tier based on members’ point balance for two or more currencies, set up a custom process. If your loyalty program has multiple tier groups, generate a process for each tier group. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The loyalty program process that’s generated for tier assessment is visible only in orgs where either the Loyalty Management - Growth or the Loyalty Management -Advanced license is enabled. Before you add the eligible point balance for the tiers and generate the loyalty program process, review these considerations: - You must regenerate the process if you: - Change the eligible point balance for any tier. - Change the name of any tier. - Add another tier to the tier group. - You must generate a new process if you change the name of your tier group. You can deactivate and delete the process that was generated with the old tier group name. 1. On a loyalty program record, click **Setup**. 2. From the Loyalty Tier Groups related list, open the tier group for whose tiers you want to specify minimum eligible balances. 3. On the Loyalty Tiers related list, click **Manage Tier Eligibility**. 4. Enter the minimum eligible balances for the tiers. Ensure that the tier names only use alphanumeric characters. 5. Click **Generate Rules**. The loyalty program process, Change Tier, is generated and activated. The process contains the Change Tier of Eligible Members Based on Qualifying Point Balance rule. The rule consists of conditions and actions that get the details of the member’s current tier and current qualifying point balance. Next, the rule checks whether the member’s current qualifying point balance is eligible for a tier higher than their current tier. If the member is eligible for a higher tier and their tier expiration date isn’t in the past, the rule upgrades the member’s tier. If the member’s tier expiration date is in the past, the rule moves the member to the tier that they’re eligible for based on their current qualifying point balance. After the process is generated, you can’t edit or delete it from the loyalty program process record. You can delete the process from the Manage tier eligibility window. To change the eligible point balance for a tier, edit the value on the Manage tier eligibility window and regenerate the process. To help you identify the process for each tier group, the process name consists of the name of the tier group that the process belongs to. You won’t be able to deactivate the process if the name of process is more than 50 characters. The generated process can be run in real time as a child process of a TransactionJournal type process. To run the process in batches, set up a Batch Management job. In the batch job, filter members eligible for tier upgrade by checking whether the Eligible for Tier Assessment checkbox is selected in the member’s Loyalty Program Member record. In the batch job, use the Tier Expiration Date field from the Loyalty Member Tier object to find members whose tier expiration date is in the past. The batch job reassess and move members whose tier expiration date is in the past, to a tier that they’re eligible for based on their current point balance. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip To automatically select members for tier upgrade when their point balance changes, your admin can turn on Select Members for Tier Assessment Automatically. After the setting is turned on, the Eligible for Tier Assessment checkbox is selected in the member’s Loyalty Program Member record when their qualifying point balance changes. After the loyalty program process assesses a member’s tier, the Eligible for Tier Assessment checkbox is automatically deselected. # Configure a Vlocity Action (Managed Package) For the managed package runtime, configure a Vlocity Action to launch Vlocity Omniscripts, Vlocity Cards components, web pages, or external applications. Actions are typically specific to a given object type, such as Account, Contact, Policy, or Asset. Before you begin, from Setup, in the user profile, provide Read and View All Records permissions to the ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). `vlocity_ins__VlocityAction__c` object. 1. Go to the Vlocity Actions tab. 2. Click **New** or select an action and click **Edit**. 3. On the New Vlocity Action page or Details page in edit mode, enter or update the values for these fields: ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If a field is missing, confirm that the field is available in the **Vlocity Action Layout** page layout for the **Vlocity Action** object. ![Vlocity Action Object Layout](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_action_object_layout.png)

Field Name

Description

Vlocity Actions Name

Required. Enter a name for the action no longer than 80 characters.

Description

Beginning with Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20, Vlocity Actions support entering a description for the action.

Applicable Type

Required. Select the objects from which you want the action to launch. Default value is All. Vlocity recommends selecting specific objects because the action attempts to invoke every Applicable Type, which reduces performance.

To add values to the Applicable Type picklist, use the API name of the object, such as Household__c. The value can be an sObject name or any string. If the action has a Filter, the Applicable Type must be the sObject name, such as Policy__c, which is used in an SOQL query.

Applicable User Profile

To choose what action to display for a user profile, select an option from the list. Default value is All. An admin can add other user profiles to the picklist. For example, if the current login user's profile is Vlocity Health, only the actions where Applicable User Profile is set to All or Vlocity Health displays.

Active

To make the action visible, check this option.

Display Label

Required. Enter a visible label for the action.

Display Sequence

Required. Enter the sequence in which the action displays on a sub-tab or component. Lowest number in the sequence displays first.

Display On

Required. To filter where the action displays, select All, Web Client, or Mobile from the list. To enable users to search for this action in an Interaction Wrapper, select All.

Vlocity Icon

To display an icon for this action, view the available Vlocity Icons and their associated class names in the Vlocity Icons section of the action details page. Enter the class name of the icon to display for this action. Vlocity Icons aren’t viewable when creating a new action on the New Vlocity Action page.

Upload a custom icon as an attachment from the Related tab. The latest attached image loaded (with a size less than 50 KB) is used as the custom image. If both the Vlocity icon and the custom icon (attachment) are set, the custom icon is used. When the custom icon isn’t uploaded, the Vlocity icon is used.

Open URL In

To set how to open the Target URL, select Current Window or New Tab/Window. Default is Current Window.

Link Type

Required. To specify where the action is launched from, select one of these options:

  • CommunityURL: Launches a Salesforce Community page.

  • Omniscript: Launches an Omniscript.

  • Other: Launches a specific URL.

  • ConsoleCards: Launches a Salesforce Classic card.

  • LEXConsoleCards: Launches a Lightning Experience Console card in a sub-tab.

  • Document: Launches a Contracts Document.

  • Layout: Launches a Card Layout page.

Is Seed Action

Select this checkbox if the action is a Contracts Document action provided out-of-the-box. Do not check this for a custom action. . Defining Vlocity Actions for Contracts Seed actions are seed data that the Vlocity Actions require for certain functionality to work. An error message displays when you delete a seed action. A user cannot delete a seed action or clear the Is Seed Action checkbox, but can set as inactive.

An error message displays when you delete a seed action. A user can’t delete a seed action or clear the Is Seed Action checkbox, but can set it as inactive.

Target URL

Required. The URL to which the action navigates. Enter a URL, such as /apex/<pageName>, or a URL with parameters. For example:

/apex/TestPolicyOmniPage?id={0}#/OmniScriptType/Policy/OmniScriptSubType/Auto/OmniScriptLang/English/ContextId/{0}/PrefillDataRaptorBundle/true.

For out-of-the-box Vlocity Actions, such as View Record, the Target URL /{0} doesn’t work outside of Salesforce Classic. To navigate to a page in Salesforce Lightning Experience, update the URL to /lightning/r/[ObjectName]/{0}/view, where ObjectName is the API name of the sObject such as Account.

The {0} in the target URL represents the indexed position of a parameter in the list of parameters in the URL Parameter field. See the URL Parameter field description.

To navigate to a Lightning or Lightning Community Page, prefix the relative URL with ltngpage:. For example, ltngpage:/Home redirects to your community home page.

To open a Visualforce page from Salesforce's Lightning container, prefix the relative URL with ltng. For example, ltng:/apex/CustomVFPage, redirects to the CustomVFPage.

Example Target URLs:

  • /apex/NameSpace__OmniScriptUniversalPageConsole?id={0}&OmniScriptType=VPL&OmniScriptSubType=GetPolicyAccountAgentDetails&OmniScriptLang=English&scriptMode=vertical&layout=lightning&ContextId={0}&InteractionId={1}&Role={2}

  • /apex/NameSpace__OmniScriptUniversalPageWHeader?id={0}#/OmniScriptType/Policy/OmniScriptSubType/Auto/OmniScriptLang/English/ContextId/{0}/PrefillDataRaptorBundle/true

  • /apex/NameSpace__ConsoleCards?id={0}&layout=lex-layout

  • /apex/NameSpace__ConsoleCards?id={0}&layout=Sample-GetObjectFromInteraction

You can't add Javascript in the Target URL field. If you do, when the Vlocity action runs, a validation check detects the Javascript, and instead of executing it, loads a blank page.

See Target URL and URL Parameters (Managed Package).

URL Parameter

If the Target URL requires parameters, enter them here. The URL parameter represents the attribute name from the Applicable Type object, such as AccountId in Contact. In the sequence that you want to replace the parameters in the Target URL, specify parameters in a comma separated list with no spaces.

For example, when you enter AssetId,CustomerInteractionId,Role in this field, AssetId replaces {0}, CustomerInteractionId replaces {1}, and Role replaces {2} in a Target URL.

Vlocity Actions URL Parameters

See Target URL and URL Parameters (Managed Package).

Applicable Permission Name

For Vlocity Winter '18 minor release 900.85.3 and later. To specify what actions display based on whether permission is granted to the user's profile or one or more of the user's permission sets, enter the name of a standard Custom Permission object. Use Applicable Permission Name along with Applicable User Profile, not instead of it. For more information about permission sets, see Control Who Sees What in Salesforce Help.

Filter

To specify what action displays for each instance of the object, create a filter using AND or OR conditions with attributes from the Applicable Type. For example:

Applicable Type=Policy__c, Filter=PolicyType__c='Auto' AND Status__c='Active'

This example specifies that the action shows only for active Policies where policy type is 'Auto'. The filter condition is applicable for valid Salesforce standard and custom objects. Filter by any field on the object. Maximum length is 255 characters.

Additional Filter

Enter a filter longer than 255 characters.

State Model

For contracts, specify the Contract State Model that defines the contract life cycle associated with this action.

To State

For contracts, specify the state associated with this action.

Invocation Class Name

Invocation Method Name

Enter Apex invocation class name and method name. The class must implement VlocityOpenInterface/VlocityOpenInterface2 and Implementations.

Validation Class Name

Validation Method Name

Enter the validation class name and method name. The class must implement VlocityOpenInterface/VlocityOpenInterface2. It’s used in the Contract Document Management UI Action toolbar to display a warning message.

4. Click **Save**. # Configure a Vlocity Card on a Community Page (Managed Package) For the managed package runtime, configure a Vlocity Cards Lightning component on a Community page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In your org, go to Setup > All Communities. Click the **New Community** button to create a new community. Or, choose an existing community to open by clicking **Builder** next to its name. For information on the Community Builder, see [Community Builder Overview](https://help.salesforce.com/articleView?id=community_designer_overview.htm&type=5&language=en_US). 2. Click the blue and white lightning icon to open the Components pane. From the list of Custom Components, select **Vlocity Cards** and drag it to the canvas area. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_cards_lightning_component_community_canvas.png) 3. In the properties pane that pops up, select a Card Layout from the **Layout Name** dropdown list. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/vlocity_cards_lightning_component_community_layoutname.png) 4. (Optional) Enter values for these properties: ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important **Record ID**: The record Id for the object on the community page is automatically passed into the Record Id field as the {!recordId} parameter. - **Custom Community Page URL**: If the Card component uses Omniscripts, add the relative URL of the community page created to display Omniscripts, such as "/omnipage". - **Disable Cache**: Select this checkbox to prevent the Layout, Cards and Templates from being read from the offline cache. - **Max Height(px)**: To restrict the height and make the component scrollable, add a height in pixels, such as 600. - **Custom Visualforce Page**: To override the default Visualforce page used to render Cards, select a custom Visualforce page from the dropdown list. - **Background**: To override the default #FFFFFF background color, enter a hex color code such as #000000. - **Theme**: To set the CSS style sheet, select **slds** or **newport** from the dropdown list. # Configure a Web Server Flow To integrate an external web app with the Salesforce API, configure an external client app to use the OAuth 2.0 web server flow, which implements the OAuth 2.0 authorization code grant type. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure an external client app for OAuth 2.0 Client Credentials flow Create, edit, and delete External Client Apps
1. From Setup, in the Quick Find box, enter External Client Apps Manager, and then select **External Client Apps Manager**. 2. From the actions dropdown list, select **Edit Settings** for the external client app. 3. In the OAuth Settings section, select **Enable OAuth**. 4. Configure [basic OAuth settings](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_oauth_settings.htm&release=264.0.0&type=5 "Configure the OAuth settings to set the structure of the local external client app."). 5. Save the settings. # Configure Account Roles for Orderer Validation Configure account roles to set the allowed orderer type (Direct or Indirect) for customer accounts. This setup ensures that telesales reps can select only order specifications that match the customer's authorized orderer type. ### Required Editions

View supported editions

User Permissions Needed
To configure account roles: Order Capture for Manufacturing
1. From the App Launcher, find and select **Account Roles**. 2. Click **New**, or open an existing Account Role record. 3. Enter a name for the account role. 4. For **Allowed Orderer Type**, select the ordering classification. - **Direct**: The customer places orders directly with the manufacturer. - **Indirect**: The customer places orders that are fulfilled through a third-party wholesaler or broker. 5. Save your changes. 6. Assign the AccountRole record to the customer account. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-advanced_orders-264-0-0-production-enus/3f520262-6313-4d80-b68f-bf760562aa0b/images/icon_note.png) Note During order creation, the system matches AccountRole.AllowedOrdererType against the AllowedOrdererTypes field on the selected order specification. If the orderer types don't match, the system prevents the order save and displays a validation error. # Configure Action Consent Options Select which Global Consent Definitions appear on the Action Consent layout, and select up to three attributes to identify each consent record. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires the Privacy Center license.
User Permissions Needed
To configure action consent options: Manage Global Consent
The Action Consent layout controls how action consent records appear in the Global Consent component. This layout applies to consent related to data processing activities, such as sharing data with third parties or training AI models. Configuring its options controls which consent records appear on the layout and how they're identified. You can add only published definitions, and each definition links to only one layout. 1. From the App Launcher, find and select **Privacy Center**, and then select the **Global Consent** tab. 2. Under **Configuration**, select **Guided Consent Management Layouts**. 3. Open the **Action Consent** layout. 4. In the **Included Consents** section, select the Global Consent Definitions to include on the layout. 5. For each definition, select up to three attributes to help identify each consent record. 6. Select how to label consent records on the layout. 7. Save your changes. #### See Also - [Create and Configure Lightning Record or Home Pages](https://help.salesforce.com/s/articleView?id=platform.lightning_app_builder_customize_lex_pages.htm&type=5&language=en_US) - [Configure Action Consent Records](https://help.salesforce.com/s/articleView?id=xcloud.global_consent_action_records.htm&type=5&language=en_US) # Configure Action Consent Records Select which attributes appear on the individual consent record page for Action Consent. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires the Privacy Center license.
User Permissions Needed
To configure action consent records: Manage Global Consent
This setting controls the individual record view for Action Consent. Any custom attributes you configured earlier are available to include. 1. From the App Launcher, find and select **Privacy Center**, and then select the **Global Consent** tab. 2. Under **Configuration**, select **Guided Consent Management Layouts**. 3. Open the **Action Consent** layout. 4. Go to the **Record Configuration** section. 5. Under **Fields and Values Displayed**, select the attributes to appear on the individual consent record page, including any custom attributes. 6. Save your changes. #### See Also - [Configure Consent Export Settings](https://help.salesforce.com/s/articleView?id=xcloud.global_consent_export.htm&type=5&language=en_US) # Configure Add-ons Enable and place features such as Agentforce, notifications, and calendar. 1. In the designer, open the Add-Ons tab. 2. Select an add-on. 3. Drag the add-on to the screen. 4. If available, choose a valid entry point, such as the toolbar or a floating action button. 5. Set the configurable properties. 6. Review the read-only list of device permissions requested from users. End users grant these permissions on their devices when they use the feature. 7. Save your changes. - **[Available add-ons](https://help.salesforce.com/s/articleView?id=xcloud.mobile_ama_available_addons.htm&release=264.0.0&type=5)** Each add-on defines its valid entry points and user device permissions. # Configure Additional Attributes Add custom fields to consent records for business-specific data, such as product lines, division IDs, or delivery frequencies. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires the Privacy Center license.
User Permissions Needed
To configure additional attributes: Manage Global Consent
Additional Attributes extend consent records beyond the standard fields. Each attribute has a role that controls how it's used in consent processing. For example, a role can uniquely identify a record, define a rule, or carry an informational preference for a downstream system. 1. From the App Launcher, find and select **Privacy Center**, and then select the **Global Consent** tab. 2. Under **Configuration**, select **Attribute Management**. 3. In the **Additional Attributes** section, add attributes for each piece of business-specific data you want to track. 4. Select an **Attribute Type** that controls how the attribute is used in consent processing. - Select **Additional Partition ID** for an attribute that uniquely identifies a consent record, such as a business division. - Select **Additional Consent Parameters** for an attribute that defines a rule or segments records, such as a product line. - Select **Additional Consent Options** for an attribute that carries an informational preference for a downstream system, such as delivery frequency. 5. Save your changes. #### See Also - [Create a Global Consent Definition](https://help.salesforce.com/s/articleView?id=xcloud.global_consent_definitions.htm&type=5&language=en_US) # Configure Advanced Rebate and Accrual Post-Processing - Source Generation DPE Write accrual calculation results back to Salesforce Core, aggregated by your custom dimension. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
1. Create New Field on Program Rebate Type Accrual Sources: 1. Create a custom field for your anchor value (e.g., Region\_\_c) 2. This field will store the dimension value on each Accrual Source record 2. Select Field as Input in Data Source Node: 1. Open the Program Rebate Type Accrual Sources data source node 2. Select your newly created anchor field 3. Pass Through Join Node: 1. Ensure the field flows through: Enrich with Rebate Type Accrual Reference Numbers 4. Create AnchorString Formula: 1. Add a formula field on the appropriate node 2. Name it Anchor1String (or Anchor2String, Anchor3String) 3. Formula: IF(CONTAINS({AggregationCriteria}, "Region\_\_c")==true, {Anchor1}, "\_") Replace "Region\_\_c" with your field name as it appears in the Program Rebate Type, and {Anchor1} with the anchor field from the DLO. This formula returns the anchor value if configured, or "\_" if not used. 5. Update uniqueRefKey Formula: 1. Navigate to: Build Unique Key for Existing Sources 2. Locate the uniqueRefKey formula 3. Add your AnchorString to the concatenation For example, Include {Anchor1String} in the CONCAT function 6. Select Anchor1String Across Period Processing Nodes. Select the Anchor1String field in these six nodes: - Populate Rebate Type and Period Details - Combine Period Type and Output Data - Remove Unnecessary Fields - Add Latest Tier Information - Add Prior Period Totals - Add Current Period Totals 7. Select Anchor1String for Both Sources: 1. Navigate to: Combine Current and Prior Period Amounts 2. This node has two input sources. Select Anchor1String from both sources 8. Add Merge Period Formula: 1. Navigate to: Merge Period values 2. Create a formula field: IF(ISBLANK({AccruedAnchor1String}),{PriorAnchor1String},{AccruedAnchor1String} ) This ensures the anchor value carries forward correctly when combining current and prior period data. 9. Select Anchor1 Across Four Nodes. - Enrich with Program Member Details - Check for Existing Member Accruals - Check for Existing Rebate Type Accruals - Add Tier Values to Records 10. Update UniqueRefKey on New Sources Node: 1. Navigate to: Build Unique Key for New Sources 2. Update the UniqueRefKey formula to include Anchor1: CONCAT({ProgramRebateTypeAccrualRef},"\_",{MemberAccrualReferenceNumber},"\_",{BenefitString},"\_",{Member},"\_",{Product},"\_",{Anchor1}) This ensures each unique combination of member, product, and custom dimension gets its own Accrual Source record. 11. Select Anchor1 in Filter Node: 1. Navigate to: Filter Unique Records For Sources Generation 2. In the Match node configuration, select Anchor1 from this source 12. Select Anchor from Other Source: 1. In the same Match node, select Anchor1 from the other input source. This ensures matching occurs on the anchor dimension 13. Create Calculate Accrual Source Fields Formula: 1. Navigate to: Calculate Accrual Source Fields 2. Create a formula for your anchor field: IF(ISBLANK({Id}),IF(({Anchor1String}=="\_")==true,NULL,{Anchor1String}),{ExistingAnchor1}) Logic: For new records: Uses the anchor value if configured, otherwise NULL. For existing records: Preserves the existing anchor value. 14. Map Anchor1 in Writeback Node: 1. Navigate to: Create or Update Accrual Source Details 2. Map your calculated anchor field to the Anchor1 field on Program Rebate Type Accrual Sources. This writes the final aggregated results back to Salesforce Core # Configure Advanced Rebate and Accrual Pre-Processing - Data Preparation DPE Map your custom dimension values through the pre-processing workflow so Data Cloud can use them during calculation. Activating an anchor in the Rule Configuration DPE tells the engine a custom dimension exists. This DPE populates that anchor with actual field values from your Transaction Journal so the engine has data to process. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
1. Configure Transaction Journal Input Mapping 1. Select Custom Fields in Transaction Journal Source Node. - Open the Transaction Journal data source node. - Select your custom field (e.g., Region\_\_c), in addition to standard fields (Account, Activity Date, etc.). 2. Pass Fields Through Join Nodes. Ensure your custom field flows through these join nodes in sequence: - Journal by Member ID - Journal by Account ID - Journal with Rebate Products - Input and Meta Verification 3. Map to Anchor1 in Writeback Node. - Navigate to: Writeback to Accrual and Payout Input Ingest DLO - Map your custom field to the Anchor1 field. This writes your dimension value to the Input Ingest Data Lake Object 2. Configure Benefit Mapping for Custom Dimension 1. Create Custom Field in Program Rebate Type Benefit. - Add a custom field on the Program Rebate Type Benefit object that matches your Transaction Journal field. For example, if Transaction Journal has Region\_\_c, create Region\_\_c on Program Rebate Type Benefit 2. Add Benefit Mapping Record: - Create a new record in Program Rebate Type Benefit Mappings - Map your custom field from Transaction Journal (Source Field) to the matching field on Program Rebate Type Benefit (Benefit Field). - Select the corresponding field on the Payout Source (Payout Source Field). This ensures payout calculation paths and embedded components (like the Program Rebate Types Panel) can map payout source attributes directly to benefit criteria. 3. Select Fields in Program Rebate Type Benefit Node: - Open the Program Rebate Type Benefit data source node - Select your custom benefit field along with standard fields (Applied Benefit, Benefit Type, etc.) 4. Pass Fields Through Join Nodes. Ensure your custom field flows through: - Program Configuration and Tiers - Rules and Accrual Periods After you map the custom field into the input data (step 1) and link it to your benefit criteria (step 2), update the rule and tier metadata formulas so tier qualification is tracked per custom dimension. 3. Add Formulas for Rule and Tier Metadata 1. Add Formula on Accrual Windows and Period ID Node: - Navigate to: Accrual windows and Period ID - Create a formula field similar to the existing BenefitProductId formula. Example formula structure: CONCAT({YourCustomField}, "\_", {OtherIdentifier}) 2. Update RuleId and TierId Formulas: - Navigate to: Rule and Tier Metadata Stage - Locate the RuleId and TierId formula fields - Update both formulas to include anchor details by concatenating your custom dimension This ensures tier qualification tracking includes your custom dimension 3. Pass Fields Through Final Join Nodes. Ensure your custom field flows through: - Finding Mapping fields with Accrual and Payout Rule ingest fields - Final Rule Meta Verification 4. Map to Anchor1 in Rule DLO Writeback Node: - Navigate to: Writeback to Accrual and Payout Rule DLO - Map your custom field to the Anchor1 field - This writes your dimension value to the Rule Data Lake Object for high-performance calculation # Configure Advanced Rebate and Accrual Pre-Processing - Rule Configuration DPE This stage tells the system which custom field(s) to use for aggregation. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
1. Create Custom Fields: Ensure the field you want to aggregate by (e.g., Region\_\_c) exists on the Transaction Journal object. 2. Define Aggregate Fields: 1. Create a new Program Rebate Type Aggregate record. 2. Select your custom field as the source. 3. Associate it with the relevant Program Rebate Type. 3. Update the Input Anchor Formula: 1. Open your cloned Advanced Rebate and Accrual Pre-Processing - Rule Configuration DPE. 2. Navigate to the node: Calculate Accrual and Payout Input Anchor. 3. Locate the formula for Anchor1 (set to "false" by default). 4. Update it to check for your custom field: IF(CONTAINS({PRT\_AggregationCriteria}, "Product\_\_c"), "true", "false") ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note You can use Anchor2 and Anchor3 for additional dimensions by updating their respective formulas. # Configure AI Relationship Research Configure AI Relationship Research by selecting the Salesforce objects to research, the data sources to use, and the relationship types to prioritize. | Permission | Required for | | --- | --- | | AI Relationship Research Admin | Access and complete setup flows | 1. Open AI Relationship Research setup: 1. From Setup, in the Quick Find box, enter AI Relationship Research, then select **AI Relationship Research Setup**. 2. On the setup landing page, click **New AI Relationship Research Configuration** or select an existing configuration to edit. 2. Configure AI Relationship Research. Select the configuration type, enter a configuration label, enter a configuration description, and then click **Save and Continue**. 3. Configure research anchor objects. Select which anchor objects AI Relationship Research searches when generating insights. 1. Click **Set Up**. 2. Select an object to research: Account, Contact, Lead, or Opportunity. 3. Click **Save and Continue**. 4. Configure data sources. Select which data sources AI Relationship Research searches when generating insights. 1. Click **Set Up**. 2. From the data sources dropdown, select the data sources for relationship insights: Web, CRM, or Data 360. - Web: Searches public web content. When Data Cloud is enabled, the web search retriever is available by default, so no extra setup is needed. - CRM: Searches your Account and Contact records. CRM is included by default and needs no extra setup. - Data 360: Searches your Data 360 objects and documents. 5. If you selected Web, review and accept the web search authorization statement. 6. If you selected Data 360, then set the access context and configure retrievers: 1. Under **Set the Access Context**, select the user who runs data retrieval. 2. Make sure that the selected user is assigned the **AIRR Prompt Execution**, **AIRR CRM Access**, and **AIRR DataCloud Access** permission sets. To assign these permission sets, click **Configure Users** to open the user's detail page, then use the **Permission Set Assignments** related list. For more information, see [Manage Permission Set Assignments](https://help.salesforce.com/s/articleView?id=platform.perm_sets_manage_assignments.htm&type=5\)&language=en_US). 3. After you assign the permission sets, click **Refresh** to update the user list. 4. In the Data 360 Retrievers section, select one or more retrievers from the list, or click **Configure Retrievers** to add new ones. 5. To update the retriever list, click **Refresh**. 6. To validate a retriever, expand **Advanced Settings**, enter a custom validation term, and then click **Verify Retriever**. For more information about data retrievers, see [Retrieve Data](https://help.salesforce.com/s/articleView?id=data.c360_a_ai_retriever.htm&type=5&language=en_US) and [Manage Retrievers](https://help.salesforce.com/s/articleView?id=data.c360_a_ai_retriever_version.htm&type=5&language=en_US). 7. Prioritise the relationship types: 1. Click **Set Up**. 2. Click the down arrow that appears against each of the relationship categories, and reorder them based on the priority. 3. Click **Save and Continue**. Your AI Relationship Research configuration summary is displayed. 8. Click **Activate**. You can now start using this AI Relationship Research setup to extract relationships for your research object page. For example, Account. # Configure AI Relationship Research Subagent Add the AI Relationship Research Subagent to an agent so users can retrieve relationship insights about accounts, contacts, leads, and opportunities in Agentforce conversations. | Permission | Required for | | --- | --- | | AI Relationship Research Admin | AI Relationship Research setup and configuration flows | 1. From Setup, in the Quick Find box, enter Agentforce Agents, and then select **Agentforce Agents**. 2. Select an existing agent, or create an agent. - To create an agent: 1. Click **New Agent**, and then click **Create Agent**. 2. On the Agentforce Builder page, select **Agentforce Employee Agent**. 3. Enter the agent name and developer name, and then click **Let's Go**. - For an existing agent: - If the agent is active, click **Deactivate**. In the confirmation dialog, click **Deactivate**, and then click **New Version**. - If the agent is inactive, click **New Version**. This action creates a new version in which you can add a subagent. 3. In the left panel, hover over **Subagents**, click **"+"** icon, and select **Add from Asset Library**. 4. Search for and select **AI Relationship Research Sub Agent**, and then click **Add to Agent**. 5. Open the Preview tab, go to the Live Test section, and ask the agent to generate or retrieve relationship insights for a record. 6. After the test is complete, save your work, and then click **Commit Version**. In the confirmation dialog, click **Commit**. 7. To make the committed agent version available to your users, click **Activate**. # Configure Alerts Configure Scale Center alerts to monitor critical org metrics and receive notifications when thresholds are breached. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-scalability-264-0-0-production-enus/18f3af65-f4ea-4406-9c30-319b9afa03cd/images/icon_important.png) Important Only system administrators can access the Alerts page and configure alert settings. **Considerations** - This feature is only available for non-Signature customers. Signature customers will continue to receive the full experience and support of [Proactive Monitoring (ProM)](https://help.salesforce.com/s/articleView?id=000382042&type=1&language=en_US) through Signature Success Plan. - Enter one email address to receive notifications. To notify multiple recipients, use a group email address. - When an alert reaches its threshold, Scale Center emails recipients with a direct link to run a detailed analysis. The investigation type and time window are prepopulated based on the alert. - To view alert change history, click **See Change History** from the alerts settings page. To configure your alerts: 1. From Setup, in the Quick Find box, enter Scale Center, then click **Alerts**. 2. Click **Set Up Alerts**. 3. Select the alerts you want to monitor. 4. In the **Recipient Email Address** field, enter an email address. 5. Click **Save**. Your alerts are saved. They can take a few minutes to become active. ![Alert Types](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-scalability-264-0-0-production-enus/18f3af65-f4ea-4406-9c30-319b9afa03cd/images/icon_example.png) Alert Types | Alert Type | Description | | --- | --- | | Row Lock Timeout Errors | Multiple processes attempt to simultaneously update the same record, exceeding the timeout limit. Common causes include parent-child data skew, failing API or Apex triggers, and concurrent Email-to-Case updates. | | Asynchronous Apex Executions Limit | Background tasks queued for processing reach their limit. Common causes include inefficient Apex or poor API call setup. Unlike synchronous code, these tasks run when resources become available rather than executing immediately. | | Database CPU Consumption Throttles | Database requests execute slower than the threshold, excluding time spent on code compilation or external callouts. | # Configure an Apex Remote Data Source on a Flexcard (Managed Package) For the managed package runtime, configure a data source to invoke an Apex Class and method that fetches data to populate a Flexcard. Apex remote data sources can run asynchronously through Apex, which increases the CPU time but ensures that long-running transactions aren’t timed-out. Before You Begin: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. 1. Know the Apex remote class and method you need to invoke before you can configure a remote data source. Managed packages can include Apex remote classes and methods. Too see existing Apex classes, from Setup, in the Quick Find box, enter Apex, and then select **Apex Classes**. 2. Beginning with Vlocity Health and Insurance Spring '21, add an Apex class permissions checker to ensure only authorized users can access [VlocityOpenInterface](https://help.salesforce.com/s/articleView?id=ind.v_dev_t_vlocityopeninterface_657706.htm&language=en_US) classes (APIs) from a remote action on a card. See [Add an Apex Class Permissions Checker (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_an_apex_class_permissions_checker_1.htm&release=264.0.0&type=5 "For the managed package runtime, enable specific access to the VlocityOpenInterface Apex class used by remote action APIs for each user or profile, permission set, or permission set group. Use the Apex class check setting to enable users with permission sets or permission set groups to call allowlisted Apex classes remotely. Configure an Apex class permissions checker to ensure that users require explicit access to the Apex class that administers the remote action called from an Omniscript, Integration Procedure, Flexcard, Classic Card, or REST API."). 1. To configure the data source when creating a Flexcard, navigate to the **Select Data Source Type** step, select **Apex Remote**, and click **Next**. 2. To configure the data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **Apex Remote** from the **Data Source Type** dropdown. 3. Enter the name of the remote class in the **Remote Class** field. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important The Apex Class must implement the Vlocity Open Interface otherwise an error message displays. 4. Enter the name of the remote method in the **Remote Method** field. For example, you can access the remote Apex method getStories from the remote Apex class StoryListHandler. 5. (Optional) To pass a variable from the Flexcard to the remote class method, click **\+ Add New** next to **Input Map** and perform the following tasks: 1. In the Key field, enter the variable to pass. For example, pass the ContextId AccountId. 2. In the Value field, enter the value of the variable. For example, enter a merge field, such as {recordId} or a static value, such as the alpha-numeric Account Id found in the URL of an Account record page. 6. (Optional) To send additional key/value pairs to the **Input Map** passed to the remote method, click **+Add New** next to **Options Map**. Enter a key in the first field, and its value in the second field. The value supports merge field syntax such as {Name}. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note By default the `NS.IntegrationProcedureService` continuation object is set for you to use asynchronous callouts to make long-running requests from a Visualforce page to an external Web service and process responses in callback methods. `NS` represents your org's Namespace, such as `vlocity_ins` or `vlocity_cmt`, as in `vlocity_ins.IntegrationProcedureService`. 7. (Optional) To run asynchronously through Apex, select **Is Asynchronous**. 8. (Optional) To specify the polling interval to check the response status, enter the time in milliseconds in the **Poll Interval** field. 9. (Optional) Configure other options common among all data sources. 10. Test data source settings, add test variables that the query can use to return live data. What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure an Apex REST Data Source on a Flexcard (Managed Package) For the managed package runtime, configure a data source to use an Apex REST call to fetch data to populate fields on a Flexcard with the `Get` method. Use the `Post` method to post data back to the server. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. See [Configure an Integration Procedure Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_integration_procedure_data_source_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call. For example, as a Systems Admin, you want your customer service reps to view the weather forecast of policy holders when on a call. You can use an Integration Procedure with an Omnistudio Data Mapper Extract that returns an account's ZIP code, and a REST API call that uses the ZIP code to get the current forecast for the Account's region."). 1. To configure the data source when [creating a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."), navigate to the **Select Data Source Type** step, select **Apex Rest**, and click **Next**. 2. To configure the data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **Apex Rest** from the **Data Source Type** dropdown. 3. Enter the endpoint URL in the **Endpoint** field. For example, /services/apexrest/{namespace}/CardTestApexRestResource/{recordId} 4. Select a method type from the **Method** dropdown: - Select **GET** to requests data specified by the parameters of the URL. - Select **POST** to send JSON data. - Enter the JSON data to send in the **JSON Payload** field. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You can use Context Variables to pass inherited values with either method. See [Flexcards Context Variables (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, global and local context variables are available to a Flexcard to provide context to data sources, actions, and other components. All variables are case sensitive."). 5. (Optional) To configure other options common among all data sources, see [Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database."). 6. To test data source settings, add test variables that the query can use to return live data, see [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure an Apple Auth. Provider for Mobile Publisher Configure Apple as an authentication provider to allow users to log in to their branded Salesforce app or Experience Cloud app using their Apple ID. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

Keep both your Salesforce Setup page and Apple configuration page open so that you can easily switch between them. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_important.png) Important If a user selects to anonymize their Apple ID, Apple sends an anonymized User ID to your org. 1. **[Configure Your Branded App with Apple](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_apple_id_config.htm&release=264.0.0&type=5)** Configure Sign In with Apple from your Apple developer account. 2. **[Create an Apple Auth. Provider in Salesforce for a Mobile Publisher App](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_apple_id_auth_provider.htm&release=264.0.0&type=5)** Configure your org to recognize Apple as the external authentication provider. 3. **[Auth. Provider Client Configuration URLs for Mobile Publisher Apps](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_apple_id_config_urls.htm&release=264.0.0&type=5)** When you create an Apple Auth. Provider in Salesforce for your Mobile Publisher app, Salesforce generates important client configuration URLs. 4. **[Create a Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_apple_id_handler.htm&release=264.0.0&type=5)** A registration handler is an Apex class that handles the heavy lifting of creating Salesforce users, updating users, and linking to existing users, accounts, and contacts. 5. **[Enable Advanced Authentication for a Mobile Publisher App](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_apple_id_advanced_auth.htm&release=264.0.0&type=5)** Advanced Authentication (browser-based authentication) allows authentication from an in-app browser instead of an in-app webview. Enable Advanced Authentication in Setup. 6. **[Create a Support Case to Use Advanced Authentication for a Mobile Publisher App](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_apple_id_create_case.htm&release=264.0.0&type=5)** After you’ve tested your Mobile Publisher app’s SSO configuration with Apple ID, create a case for Salesforce support to enable the Apple ID sign-in feature. 7. **[Test Your Mobile Publisher App’s Single Sign-On with Apple ID](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_apple_id_test_sso.htm&release=264.0.0&type=5)** Test your Mobile Publisher app’s SSO configuration. # Configure an Apple Authentication Provider Configure Apple as an authentication provider to allow users to log in to Salesforce or Experience Cloud using their Apple ID. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

Complete these steps to configure Apple as an authentication provider. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note Keep your Salesforce Setup page and Apple configuration page open so that you can easily switch between them. - Set up a registration handler. - Configure your app with Apple. - Create an Apple auth. provider in Salesforce, and establish a registration handler. - Update the Apple configuration with the callback URL generated after creating the Apple auth. provider in Salesforce. - Test the connection. - Test Salesforce SSO with Apple. - **[Manage Apple Auth. Provider and Private Key](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_apple_manage_key.htm&release=264.0.0&type=5)** After you create your Apple Auth. Provider, you can edit it to change settings or upload a new Apple key. Upload a new Apple key, for example, if you suspect that the key is compromised. After uploading the new Apple key, revoke the old one. ## Set Up a Registration Handler To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). ## Configure Your App with Apple Configure Sign In with Apple from your Apple developer account. Keep in mind that the Apple API sends the user’s name and email to your app the first time that the user logs in only. 1. Sign in to your Apple developer account. 2. Register an App ID for your app according to [Register an Apple ID](https://help.apple.com/developer-account/#/dev1b35d6f83) in Apple Help. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note From your App ID configuration page, notice that the Team ID is the same as the App ID Prefix. You need the Team ID later. 3. Associate your website to your app according to [Configure Sign In with Apple for the web](https://help.apple.com/developer-account/#/dev1c0e25352) in Apple Help. You’re prompted to supply these values: - Website name - Unique identifier for your website, which becomes the Apple Services ID - The domain associated with your app - You can get the fully qualified domain name from the Domains Setup page in Salesforce. For employees, specify your My Domain login URL. For customers and partners, specify your site URL. - Return URLs - For now, enter a placeholder. Later, you populate this field with the Salesforce callback URL. ## Create an Apple Auth. Provider in Salesforce 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. For Provider Type, select **Apple**. 4. Enter a name for your Auth. Provider. 5. Enter a URL suffix, which is used in the client configuration URLs. For example, if the URL suffix of your provider is MyAppleProvider, your SSO URL is similar to https://mydomain\_login\_url or site\_url/services/auth/sso/MyAppleProvider. 6. Enter the Team ID from Apple. It appears on the Apple App ID configuration page. 7. Enter your Services ID from Apple. It appears on the Services ID configuration page under the Identifier field. 8. Create Key ID and Key according to [Create a private key to access a capability](https://help.apple.com/developer-account/#/devcdfbb56a3) in Apple Help. 1. From Apple, create a private key, choosing Sign In with Apple capability. Apple generates a Key ID, which appears on Apple’s Key Details page. 2. From Apple’s Key Details page, download an Apple-generated file to your computer. This file, which ends in .p8, contains a private key used to sign your JSON authentication tokens. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note Download the key. Apple’s instructions suggest downloading the key is optional, but Salesforce requires the key. 3. Return to your Salesforce Auth. Provider Setup page. Click **Upload Key**, and select the .p8 file. 9. For Default Scopes, enter the scopes to send along with the request to the authorization endpoint. See Apple Developer Help for Apple’s default scopes. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note If you don’t supply default scopes, Salesforce uses `email name`. 10. To direct callbacks to your subdomain instead of login.salesforce.com, select **Use subdomain in callback URLs**. 11. For Custom Error URL, enter the URL for the Apple provider to use to report any errors. 12. For Custom Logout URL, enter a URL to provide a specific destination for authenticated users after they log out. 13. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 14. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 15. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 16. To use a portal with your provider, select the portal from the Portal dropdown. 17. For Icon URL, select **Choose one of our sample icons** to open a list of available icons. Select an Apple icon, copy the URL, and then enter it under Icon URL. This icon shows up on your site’s login page. Users click it to log in with their Apple ID. 18. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 19. Save your work. Salesforce displays the Auth. Provider details page, which lists the client configuration URLs generated after creating the Apple auth. provider. ![Apple auth. provider return URLs](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/apple_authprovider_return_urls.png) - Test-Only Initialization URL—Use this URL to ensure that the third-party provider is set up correctly. The admin opens this URL in a browser, signs in to Apple, and is redirected back to Salesforce with a map of attributes. - Single Sign-On Initialization URL—Use this URL to perform single sign-on (SSO) into Salesforce from Apple using Apple credentials. The user opens this URL in a browser and signs in to the third party. Apple either creates a user or updates an existing user. Then Apple signs the user into Salesforce as that user. - Existing User Linking URL—Use this URL to link existing Salesforce users to their Apple account. The user opens this URL in a browser, signs in to Apple, logs in to Salesforce, and approves the link. - OAuth-Only Initialization URL—Use this URL to obtain OAuth access tokens for Apple. Users must authenticate with Salesforce for the Apple service to get a token. This flow doesn’t provide for future SSO functionality. - Callback URL—Use this URL for the endpoint that the Sign In with Apple service uses to call back to Salesforce. Apple redirects to the callback URL with information for each client configuration URL. ## Update the Apple Configuration with the Callback URL After creating the Apple authentication provider in Salesforce, return to your Services ID configuration page in Apple. Update the Return URL to use the Callback URL from the Apple auth. provider generated in Salesforce. ## Test the SSO Connection In a browser, open the Test-Only Initialization URL on the Auth. Provider detail page. It redirects you to Apple and asks you to sign in. You’re then asked to authorize your app. After you authorize, you’re redirected to Salesforce. ## Test Single Sign-On with Apple ID Now it’s time to test the SSO configuration and log in to Salesforce. 1. Test SSO into Salesforce. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **My Domain**. 2. Under Authentication Configuration, click **Edit**. 3. Select Apple as your authentication service, and save the settings. ![select the authentication service](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/apple_authprovider_login_settings.png) 4. Log out, and then go to the Salesforce login page for your subdomain. 5. Choose the Apple authentication service, and enter your Apple credentials. 2. Test SSO into your Experience Cloud site. 1. If you haven’t done so already, create the Apple authentication service account. 2. Make sure that you have enough licenses for site users. 3. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **All Sites**. 4. Next to your site, select **Workspaces**. 5. Select **Administration**, and then select **Login & Registration**. ![Configure login with Apple ID for the community](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/apple_authprovider_community_setting.png) 6. Under Login, select the option to display your Apple auth. provider, and save the settings. 7. Log out, and open your site login page. 8. Click the Apple icon, and log in with your Apple credentials. ![Sample community login page with Apple ID](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/apple_authprovider_community_login.png) # Configure an Authentication Provider Using OpenID Connect To configure single sign-on (SSO) with Salesforce as the relying party for a third-party OpenID provider, set up an authentication provider that implements OpenID Connect. With this configuration, your users can log in to Salesforce from the OpenID provider and authorize Salesforce to access protected data. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_tip.png) Tip Instead of completing this task manually, get help from Setup with Agentforce. For example, tell the Setup agent, “Create an OpenID Connect authentication provider.” For more information, see [Identity Management in Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_identity.htm&language=en_US). You can configure an authentication provider for any third party that implements the server side of the OpenID Connect protocol. Here are some common OpenID providers. - [Amazon](https://images-na.ssl-images-amazon.com/images/G/01/lwa/dev/docs/website-developer-guide._TTH_.pdf) - [Google](https://developers.google.com/accounts/docs/OAuth2Login#sendauthrequest) - [PayPal](https://developer.paypal.com/webapps/developer/docs/api/#api-endpoints) To configure Salesforce as the relying party for your OpenID provider, complete these steps. - Set up a registration handler. - Register your app with the third party, making Salesforce the app domain. - Define an OpenID Connect authentication provider in Salesforce. - Update your app to use the callback URL generated by Salesforce. - Test the connection. - Add the authentication provider to your login page. ## Set Up a Registration Handler To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). ## Register an App in the OpenID Provider Before you can define your authentication provider in Salesforce, you must register a web app with your OpenID provider. The process varies depending on the OpenID provider. For example, to register a Google app, [Create an OAuth 2.0 Client ID](https://code.google.com/apis/console/#project:85766057405:access). 1. Register your app on your OpenID provider’s website. 2. Modify the app settings and set the app domain, or Home Page URL, to Salesforce. 3. From the OpenID provider’s documentation, get these configuration values: - Client ID - Client Secret - Authorization Endpoint URL - Token Endpoint URL - User Info Endpoint URL ## Define an Authentication Provider in Salesforce Be sure to note the generated Auth. Provider ID value. Use it with the `Auth.AuthToken` Apex class. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. For the provider type, select **OpenID Connect**. 4. Enter a name for the provider. 5. Enter the URL suffix, which is used in the client configuration URLs. For example, if the URL suffix of your authentication provider is MyOpenIDConnectProvider, your SSO URL is similar to https://mydomain\_url or site\_url /services/auth/sso/OpenIDConnectProvider. 6. For Consumer Key, use the client ID from your OpenID provider. 7. For Consumer Secret, use the client secret from your OpenID provider. 8. For Authorize Endpoint URL, enter the base URL from your OpenID provider. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_tip.png) Tip You can add query string parameters to the base URL, if necessary. For example, to get a refresh token from Google for offline access, use https://accounts.google.com/o/oauth2/auth?access\_type=offline&approval\_prompt=force. You need the approval\_prompt parameter to ask the user to accept the refresh action so that Google continues to provide refresh tokens after the first one. 9. Enter the token endpoint URL from your OpenID provider. 10. Enter the User Info Endpoint URL from your OpenID provider. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note If you want to integrate the provider with your API using OAuth, a User Info endpoint isn’t required. 11. To automatically enable the OAuth 2.0 Proof Key for Code Exchange (PKCE) extension, which improves security, select **Use Proof Key for Code Exchange (PKCE) Extension**. For more information on how this setting helps secure your provider, see [Proof Key for Code Exchange (PKCE) Extension](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_pkce.htm&type=5&language=en_US). 12. Optionally, set these fields. - The Token Issuer field identifies the source of the authentication token in the form `https://URL`. For an OAuth 2.0 web server authentication flow, the provider must include an ID token in the response from the token endpoint. Optionally, the provider can include an ID token in the response for a refresh token flow. The ID token is validated against the Token Issuer value and information in the UserInfo endpoint. The signature of the ID token isn’t validated. The audience for the ID token is the consumer key registered with your authentication provider. Don’t include any other audience values. - For Default Scopes, enter the scopes to send along with the request to the authorization endpoint. Otherwise, the hard-coded defaults for the authentication provider type are used. See the [OpenID Connect developer documentation](http://openid.net/connect/) for these defaults. For Default Scopes, enter the scopes to send along with the request to the authorization endpoint. Otherwise, the hard-coded defaults for the authentication provider type are used. See the [OpenID Connect developer documentation](http://openid.net/connect/) for these defaults. - If you enter a consumer key and consumer secret, the consumer secret is included in SOAP API responses by default. To hide the secret in SOAP API responses, deselect **Include Consumer Secret in SOAP API Responses**. Starting in November 2022, the secret is always replaced in Metadata API responses with a placeholder value. On deployment, replace the placeholder with your consumer secret as plain text, or modify the value later through the UI. 13. Optionally, to have the token sent in a header instead of a query string, select **Send access token in header**. 14. Optionally, to send the consumer key and secret in a Basic header instead of in the request body, select **Send client credentials in header**. 15. Optionally, set these fields. - For Custom Error URL, enter the URL for the provider to use to report any errors. - For Custom Logout URL, enter a URL to provide a specific destination for users after they log out, if they authenticated using the SSO flow. Use this field to direct users to a branded logout page or destination other than the default Salesforce logout page. The URL must be fully qualified with an http or https prefix, such as https://acme.my.salesforce.com. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_tip.png) Tip Configure [single logout](https://help.salesforce.com/s/articleView?id=xcloud.slo_about.htm&release=264.0.0&type=5 "With single logout (SLO), users can log out from the identity provider and the service provider by logging out from either of them. Whether Salesforce is the service provider or identity provider, you can enable SLO with SAML or OpenID Connect. SLO can increase security and save users time by removing manual logout from every individual application.") (SLO) to automatically log out a user from Salesforce and the identity provider. As the relying party, Salesforce supports OpenID Connect SLO when the user logs out from the identity provider or Salesforce. 16. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 17. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 18. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 19. To use a portal with your provider, select the portal from the Portal dropdown list. 20. For Icon URL, add a path to an icon to display as a button on the login page for a site. This icon applies to an Experience Cloud site only. It doesn’t appear on your Salesforce login page or My Domain login URL. Users click the button to log in with the associated authentication provider for the site. Specify a path to your own image, or copy the URL for one of our sample icons into the field. 21. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 22. Save the settings. Several client configuration URLs are generated after defining the authentication provider. Client configuration URLs support additional request parameters that enable you to direct users to log in to specific sites, obtain customized permissions from the third party, or go to a specific location after authenticating. ## Update Your OpenID Connect App After defining the authentication provider in Salesforce, go back to your OpenID provider and update your app’s callback URL. For Google apps, the callback URL is called the Authorized Redirect URI. For PayPal, it’s called the Return URL. ## Test the SSO Connection In a browser, open the Test-Only Initialization URL on the Auth. Provider Setup page. It redirects you to your OpenID provider and asks you to sign in. You’re then asked to authorize your app. After you authorize, you’re redirected to Salesforce. ## Add the Authentication Provider to Your Login Page Configure your login page to show the authentication provider as a login option. Depending on whether you’re configuring SSO for an org or Experience Cloud site, this step is different. - For orgs, see [Add an Authentication Provider to Your Org's Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_org_login_page.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for your employees to use it by adding it to your org’s login page."). - For Experience Cloud sites, see [Add an Authentication Provider to Your Experience Cloud Site’s Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_customer_add_login_option.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for customers and partners to use it by adding it to your Experience Cloud site’s login page."). # Configure an Edit Block (Managed Package) For the managed package runtime, Edit Blocks enable a user to add and edit multiple entries in a single array. For example, you can use an Edit Block to list and edit an Account's list of Contacts. Edit Blocks are repeatable blocks by default. You can prefill repeatable blocks with data by using an array format. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Displaying Elements in an Edit Block Edit Block displays three elements in the Edit Block's default view and can display additional elements in the edit view. It's possible to hide elements from the edit view. - To display an element in the Edit Block's default view, check the **checkbox** next to the element in the structure panel. The element also appears when editing an entry. Example Default View: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/owc_edit_block_default_view.png) - To display elements only when a user edits an entry, leave the **checkbox** next to the element in the structure panel unchecked. Example Edit View: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/owc_edit_block_edit_view.png) - To hide an element in the Edit Block, click **Edit as JSON** in the element and set Hide equal to true. For more information, see [Hide Omniscript Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_hide_omniscript_elements.htm&release=264.0.0&type=5 "For the managed package runtime, hide elements and child elements using the Hide property."). - To display an element only in the Edit Block's default view, check the **checkbox** next to the element in the structure panel. Then click **Edit as JSON** in the element and set **Hide** equal to **true**. The element displays in the entry's default view and is hidden when editing the entry. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You can't nest Edit Blocks within other Edit Blocks, and you can add only one level of Block inside an Edit Block. Also, Edit Blocks don’t support the Custom LWC Element. ## Setting Display Modes and Templates Enable LWC Omniscripts and Angular Omniscripts to display different Edit Block user interfaces by using LWC Modes and Angular Templates. ## LWC Modes Select a Mode in the Edit Block's **Edit Block Mode** field to change the display and functionality of the Edit Block.

Mode

Configuration Notes

Lightning Example

Newport Example

Inline

n/a

image
image

Table

The maximum number of elements that you can display as columns is 6.

Currently, edit blocks configured in table mode in Omniscripts aren't compatible with screen readers. If you use a screen reader, we recommend that you use Flexcards instead of Omniscripts. In Flexcards, you can use data tables or Lightning datatables that are compatible with screen readers. See Show Data in a Table on a Flexcard and Lightning Web Component – Datatable.

image
image

Financial Statement (FS)

  • The total combined width of the elements must be less than or equal to 12.

  • Vlocity recommends displaying fewer than twelve elements.

  • Hidden elements don't affect the total display width.

image
image

Cards

n/a

image
image

LongCards

The width of LongCards must be set to 12.

image
image
## Angular Templates Add a template to the EditBlock's **HTML Template Id** field to modify the display and functionality of the Edit Block.

Template Name

Lightning Example

Newport Example

Responsive table - vlcEditBlock.html

image
image

Cards - vlcEditBlockCards.html

image
image

Financial Statement - vlcEditBlockFS.html

image
image

Inline - vlcEditBlockInline.html

image
image

Long cards - vlcEditBlockLongCards.html

image
image
## Compatible Elements The following elements are compatible with Edit Block: - Aggregate - Checkbox - Currency - Date - Date/Time - Disclosure - Email - File - Formula - Headline - HTTP Action - Image - Integration Procedure Action - Line Break - Lookup - Matrix Action - Multi-select - Number - Password - Radio - Radio Group - Range - Remote Action - Select - Signature - Telephone - Text - Text Area - Text Block - Type Ahead Block - Time - URL ## What's Next Add actions to an Edit Block or use sObject mapping to create, edit, and delete records. See [Add, Edit, and Delete Records with Edit Block Actions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_addeditand_delete_records_with_edit_block_actions.htm&release=264.0.0&type=5 "For the managed package runtime, enable users to add, edit, and delete records by using Edit Block's default remote actions. Add custom functionality by configuring additional actions."). # Configure an Edit Block in Omniscripts Edit Blocks enable a user to add and edit multiple entries in a single array. For example, you can use an Edit Block to list and edit an Account's list of Contacts. Edit Blocks are repeatable blocks by default. Prefilling repeatable blocks with data is possible using an array format. ## Setting Display Modes and Templates Enable Omniscripts to display different Edit Block user interfaces by using Modes. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note You can't nest Edit Blocks within other Edit Blocks, and you can add only one level of Block inside an Edit Block. Also, Edit Blocks don’t support the Custom LWC Element. ## Edit Block Modes Select the mode of the Edit Block to change its display and functionality. Inline Lightning example: ![Entering text in an inline Edit Block](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/owc_editblock_inline_lightning.gif) Newport example: ![Entering text in an inline Edit Block](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/owc_editblock_inline_newport.gif) Table The maximum number of elements that you can show as columns is 6. Currently, edit blocks configured in table mode in Omniscripts aren't compatible with screen readers. If you use a screen reader, we recommend that you use Flexcards instead of Omniscripts. In Flexcards, you can use data tables or Lightning datatables that are compatible with screen readers. See [Show Data in a Table on a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_datatable_to_a_flexcard_29717.htm&type=5&language=en_US) and [Lightning Web Component – Datatable](https://developer.salesforce.com/docs/component-library/bundle/lightning-datatable/documentation). Lightning example: ![Entering text in a table Edit Block](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/owc_editblock_table_lightning.gif) Newport example: ![Entering text in a table Edit Block](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/owc_editblock_table_newport.gif) Finance Statement The total combined width of the elements must be less than or equal to 12. Salesforce recommends displaying fewer than twelve elements. Hidden elements don't affect the total display width Lightning example: ![Entering text in a Finance Statement Edit Block](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/owc_editblock_fs_lightning.gif) Newport example: ![Entering text in a Finance Statement Edit Block](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/owc_editblock_fs_newport.gif) Cards The maximum number of elements that you can display in Cards mode varies by element type. For example, you can display up to three Text Elements. Visually inspect the Edit Block to ensure that elements are rendered correctly. To add more than the maximum number of elements, set the `height` attribute of the Edit Block to `auto` in Omniscripts, for example: `.omni-edit-block-card.omni-edit-block-short-cards[omnistudio-omniscriptEditBlock_omniscriptEditBlockCards] { height: auto !important }` Lightning example: ![Entering text in a Cards Edit Block](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/lwc_edit_block_short.gif) Newport example: ![Entering text in a Cards Edit Block](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/lwc_edit_block_short_card_newport.gif) LongCards The width of LongCards must be set to 12. The maximum number of elements that you can display in LongCards mode varies by element type. For example, you can display up to four Text Elements. Visually inspect the Edit Block to ensure that elements are rendered correctly. To add more than the maximum number of elements, set the `height` attribute of the Edit Block to `auto` in Omniscripts, for example: `div.slds-grid.slds-grid_vertical.slds-grid_align-center.slds-p-left_small.slds-max-small-size_5-of-12.slds-small-size_8-of-12 { height: auto !important; }` Lightning example: ![Entering text in a Long cards Edit Block](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/owc_editblock_longcards_lightning.gif) Newport example: ![Entering text in a Long cards Edit Block](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/owc_editblock_longcards_newport.gif) ## Compatible Elements The following elements are compatible with Edit Block: - Aggregate - Checkbox - Currency - Date - Date/Time - Disclosure - Email - File - Formula - Headline - HTTP Action - Image - Integration Procedure Action - Line Break - Lookup - Matrix Action - Multi-select - Number - Password - Radio - Radio Group - Range - Remote Action - Select - Signature - Telephone - Text - Text Area - Text Block - Type Ahead Block - Time - URL ## What’s Next Add actions to an Edit Block or use sObject mapping to create, edit, and delete records. See [Add, Edit, and Delete Records with Edit Block Actions](https://help.salesforce.com/s/articleView?id=xcloud.os_addeditand_delete_records_with_edit_block_actions_14582.htm&release=264.0.0&type=5 "Enable users to add, edit, and delete records by using Edit Block's default remote actions. To add custom functionality, configure additional actions."). #### See Also - [Custom Styles for Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_style_omniscripts_18959.htm&release=264.0.0&type=5 "Add custom styling to Omniscripts by using static resources, overriding global stylesheets, or using SLDS design tokens. View the behavior of each customization option in this page's table, and choose the solution that meets your requirements.") - [Access to Data Within and Outside a Repeatable Block](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks_21869.htm&release=264.0.0&type=5 "Suppose you place an element in a repeatable block (a Block or an Edit Block) and you want to access data that is calculated in a different element. The method that you use to access the data depends on whether the element containing the data is within or outside the same repeatable block in the Omniscript. Review guidelines and examples for the Formula element and for the Select element, which is used to add a dependent picklist to an Omniscript.") # Configure an External Client App for OAuth 2.0 Client Credentials Flow Use the OAuth 2.0 client credentials flow to share information between two applications without any input from a user. In this flow, the client app exchanges its client credentials defined in the external client app—its consumer key and consumer secret—for an access token. This flow requires you to specify an integration user to run the integration. ### Required Editions
User Permissions Needed
To view all external client apps, view their settings, and edit their OAuth policies file View all External Client Apps, view their settings, and edit their policies
To enable or disable an external client app plugin, you must first deploy an external client app on your Salesforce org. [Create an External Client App](https://help.salesforce.com/s/articleView?id=xcloud.create_a_local_external_client_app.htm&release=264.0.0&type=5 "Create an external client app in App Manager. Local external client apps are available only on the org where you create them. Packageable external client apps can be packaged for distribution to other orgs."), or [Deploy an External Client App with a New Global OAuth Settings File](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_with_global_settings_file.htm&release=264.0.0&type=5 "Deploy the source org’s metadata on an org with its own OAuth consumer. To configure the app, remove the OAuth link in the OAuth settings file and add a reference to the global OAuth settings file in the package.xml manifest file on the new org."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Before you set up the client credentials flow, it’s important to understand its security risks. With this flow enabled, any person or app that has access to your external client app’s consumer key and consumer secret can get an access token. Maintain security by periodically changing your consumer secret, and if it becomes compromised, change it immediately. See [Stage, Rotate, and Delete OAuth Credentials for a Local External Client App](https://help.salesforce.com/s/articleView?id=xcloud.eca_stage_oauth_credentials.htm&release=264.0.0&type=5 "Use the OAuth Staged Credentials Connect REST API endpoint to manage the OAuth key and secret for a local external client app. The API can be used to stage, view, rotate, or delete OAuth credentials."). 1. Open the ExtlClntAppGlobalOauthSettings file on your org. 2. Set the isClientCredentialsFlowEnabled field value to true, and save the file. 3. Open the ExtlClntAppConfigurablePolicies file. 4. Set the isClientCredentialsFlowEnabled field value to true. 5. Add the clientCredentialsFlowUser field, and enter the execution user’s username. 6. Save the ExtlClntAppConfigurablePolicies file. 7. Deploy these changes. ``` sf project deploy start --manifest package.xml --target-org johndoe@example.com ``` # Configure an External Client App to Issue JWT-Based Access Tokens Enable JWT-based access tokens for an existing external client app that you either created as a developer or installed from a managed package as an admin. Use the External Client Apps Manager in Setup. Or configure your external client app via Metadata API. ### Required Editions
Available in: Lightning Experience
Available in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure both settings and policies as an external client app developer: Create, edit, and delete External Client Apps
To manage external client app policies as an external client app admin: View all External Client Apps, view their settings, and edit their policies
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. If you use a JWT-based access token for session authentication, you can’t use `$Api.Session_ID` or `GETSESSIONID()` to return the user’s session ID. - **[Use the External Client App Manager](https://help.salesforce.com/s/articleView?id=xcloud.jwt_eca_configuration.htm&release=264.0.0&type=5)** In the External Client App Manager in Setup, enable an app to issue JWT-based access tokens instead of opaque access tokens. - **[Use Metadata API](https://help.salesforce.com/s/articleView?id=xcloud.jwt_eca_configuration.htm&release=264.0.0&type=5)** Use Metadata API to enable an external client app to issue JWT-based access tokens. ## Use the External Client App Manager In the External Client App Manager in Setup, enable an app to issue JWT-based access tokens instead of opaque access tokens. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. The external client app must be OAuth-enabled. 1. If you’re a developer, enable JWT-based access tokens in the external client app settings. If you’re a subscriber admin, your developer enables this setting for you, so you can skip this step. 1. From Setup, in the Quick Find box, enter External Client Apps, and then select **External Client App Manager**. Next to your app, click ![Dropdown arrow](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/connectedappdropdown.png) and select **Edit Settings**. 2. In OAuth Settings, in the Security section, select **Issue JSON Web Token (JWT)-based access tokens for named users**. 3. Save the change. The app now issues JWT-based access tokens instead of opaque access tokens. For installed apps, when you enable this setting, you expose a policy to set the token timeout. 2. In the external client app policies, set the token timeout for named users. If you're a subscriber admin, you control this value for installed apps. 1. From Setup, in the Quick Find box, enter External Client Apps, and then select **External Client App Manager**. Or, if you're already on the Settings tab, click **Policies**. 2. If you're in the External Client App Manager, next to your app, click ![Dropdown arrow](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/connectedappdropdown.png) and select **Edit Policies**. If you're already on the Policies page for the app, click **Edit Policies**. 3. In the App Authorization section, under Named User JWT-Based Access Token Settings, select an option for the token timeout. This value defines the amount of time before a user's session expires. The timeout for a JWT-based access token is fixed and doesn’t change based on when the token was last active. - Use the user's default session timeout—With this option, Salesforce uses the timeout defined in the [user's profile session settings](https://help.salesforce.com/s/articleView?id=platform.users_profiles_session.htm&language=en_US) in the Session Times Out After field. If there's no profile session timeout for the user, Salesforce uses the value from the Timeout Value field from your [org session settings](https://help.salesforce.com/s/articleView?id=xcloud.admin_sessions.htm&language=en_US). If both are defined, Salesforce defaults to the profile session timeout. - Set app-specific token timeout—With this option, select a timeout value that applies only to this app. 3. If you use the app for the headless guest user flow, set a token timeout value for guest users. If you use the app only for named user flows, skip this step. 1. In the external client app policies page, find OAuth Flows and External Client App Enhancements. 2. For Guest User JWT-Based Access Token Timeout, select an option for the token timeout. - Use the Experience Cloud guest user timeout—With this option, Salesforce uses the timeout defined in the [guest user's profile session settings](https://help.salesforce.com/s/articleView?id=platform.rss_config_guest_user_profile.htm&language=en_US) in the Session Times Out After field. If there's no profile session timeout for the user, Salesforce uses the value from the Timeout Value field from your [org session settings](https://help.salesforce.com/s/articleView?id=xcloud.admin_sessions.htm&language=en_US). If both are defined, Salesforce defaults to the profile session timeout. - Set app-specific token timeout—With this option, select a timeout value that applies only to this app. 4. Save your changes. Now, when your app successfully completes an OAuth flow, it issues JWT-based access tokens with the token timeout values that you configured. ## Use Metadata API Use Metadata API to enable an external client app to issue JWT-based access tokens. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. To use JWT-based access tokens, the OAuth plugin must be enabled for your external client app. For more information, see these resources. - [Create a Local External Client App](https://help.salesforce.com/s/articleView?id=xcloud.meta_create_a_local_external_client_app.htm&language=en_US) - [OAuth Plugin Enablement](https://help.salesforce.com/s/articleView?id=xcloud.meta_enable_oauth_plugin.htm&language=en_US) - [Configure Packageable External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.meta_configure_packageable_external_client_apps.htm&language=en_US) 1. (Developers only) Edit the JWT-based access tokens in the external client app’s [global OAuth settings file](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_extlclntappglobaloauthsettings.htm). See [Configure the External Client App Global OAuth Settings](https://help.salesforce.com/s/articleView?id=xcloud.meta_configure_external_client_app_global_oauth_settings.htm&language=en_US). 1. Set the isNamedUserJwtEnabled field to `true`. 2. Deploy your changes. 2. (Developers and subscribers) Set the token timeout value for named users in the [configurable OAuth policies](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_extlclntappoauthconfigurablepolicies.htm). This value defines the amount of time before the user's session expires. The timeout for a JWT-based access token is fixed and doesn’t change based on when the token was last active. There are two ways to configure the token timeout.
Named User token Timeout Option Configuration
Use the user's default session timeout. With this option, Salesforce uses the timeout defined in the user's profile session settings in the Session Times Out After field. If there's no profile session timeout for the user, Salesforce uses the value from the Timeout Value field from your org session settings. If both are defined, Salesforce defaults to the profile session timeout. Set the namedUserJwtSessionTimeoutType field to UserSession.
Set a timeout value that applies only to this app.
  • Set the namedUserJwtSessionTimeoutType field to Custom.
  • For the namedUserJwtTimeout field, set a timeout value in minutes. For a list of valid values, see ExtlClntAppOauthConfigurablePolicies in the Metadata API Developer Guide.
3. If you use the app for the headless guest user flow, set a token timeout value for guest users. If you use the app only for named user flows, skip this step.
Guest User token Timeout Option Configuration
Use the Experience Cloud guest user timeout—With this option, Salesforce uses the timeout defined in the guest user's profile session settings in the Session Times Out After field. If there's no profile session timeout for the user, Salesforce uses the value from the Timeout Value field from your org session settings. If both are defined, Salesforce defaults to the profile session timeout. Set the guestJwtSessionTimeoutType field to UserSession.
Set a timeout value that applies only to this app.
  • Set the guestJwtSessionTimeoutType field to Custom.
  • For the guestJwtTimeout field, set a timeout value in minutes. For a list of valid values, see ExtlClntAppOauthConfigurablePolicies in the Metadata API Developer Guide.
4. Deploy your changes. # Configure an External Client App to Show in the App Launcher To configure your external client app so that it shows up in App Launcher, mark it as visible in the App Menu page in Setup. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure the start URL (if necessary) View all External Client Apps, view their settings, and edit their policies
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Even if the external client app is configured properly, it shows up only for the users who are authorized to see it. 1. From Setup, in the Quick Find box, enter External Client Apps Manager, and then select **External Client Apps Manager**. 2. Select the external client app to add to the App Launcher. 3. If the developer of the external client app didn’t configure a start URL, set one now. Only external client apps configured with a start URL can be made visible in App Launcher. - To configure an external client app that uses an OAuth plugin, set the start URL as part of the [Set Up OAuth Flows](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps_oauth_flow_config.htm&release=264.0.0&type=5 "External Client Apps support several OAuth flows. These flows allow the third-party application to access protected resources on Salesforce."). - To configure an external client app that doesn't use an OAuth plugin, [set the start URL as a custom start page](https://help.salesforce.com/s/articleView?id=xcloud.manage_eca_start_url.htm&release=264.0.0&type=5 "A start URL defines the page where users end up when they run an external client app. The admin of an external client app sets an OAuth-specific start URL or a custom start URL from the Policies tab of the External Client App Manager."). 4. If the external client app uses an OAuth plugin, configure the OAuth policy for the external client app. - To make the external client app visible to all users, set the OAuth policy to **All users may self-authorize**. - To control the visibility of the external client app, change the OAuth policy to **Admin-approved users are pre-authorized** and specify which profiles and permission sets are authorized to see the app. 5. Save the external client app. 6. From Setup, in the Quick Find box, enter App Menu, and then select **App Menu**. 7. Locate the external client app in the list, and then select **Visible in App Launcher**. # Configure an Integration Procedure Data Source on a Flexcard (Managed Package) For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call. For example, as a Systems Admin, you want your customer service reps to view the weather forecast of policy holders when on a call. You can use an Integration Procedure with an Omnistudio Data Mapper Extract that returns an account's ZIP code, and a REST API call that uses the ZIP code to get the current forecast for the Account's region. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before you begin, create an Integration Procedure. See [Create an Integration Procedure (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_integration_procedure.htm&release=264.0.0&type=5 "For the managed package runtime, to create an Integration Procedure, you must name it, configure it, define its logic, and preview how it runs. You can also view debugging information and set options that apply only to previews."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Depending on the Flexcard design, an Integration Procedure data source must return a single object record or a list of object records. For example, the [Append Record](https://help.salesforce.com/s/articleView?id=xcloud.os_append_a_record_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, reduce the time to render a large list of records using the Append Record action. Instead of using the Update Datasource action to update a record, which renders the whole card again, use Append Record to add additional data tp the end of the record.") Card action requires a single record, while the [Update Datasource](https://help.salesforce.com/s/articleView?id=xcloud.os_update_a_data_source_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, with a Card Action, create an action that changes the data source, or updates parameters of an existing data source. For example, create an action that updates the pagination limits on a list of returned records.") Card action requires a list of records. An Integration Procedure doesn’t support the following data sources: - Salesforce Object Search Language (SOSL) - Streaming API - Off-Platform 1. To configure the data source when creating a Flexcard, navigate to the **Select Data Source Type** step, select **Integration Procedures**, and click **Next**. 2. To configure the data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **Integration Procedures** from the **Data Source Type** dropdown. 3. Click into the **Name** field and select an Integration Procedure to use. 4. To pass a variable to the Integration Procedure, click **\+ Add New** next to **Input Map**. **Pass the ContextId** For example, to use the **recordId** context variable as a merge field to dynamically get the ContextId of a Flexcard: 1. In a new tab, go to the Vlocity Integration Procedures tab, open the Integration Procedure selected from the **Name**, and click the Preview tab to view the _Input Parameters_. 2. In the **Key** field of the **Input Map**, enter the variable representing the ContextId, such as `AccountId`. 3. In the **Value** field of the **Input Map**, enter `{recordId}` as the value. 5. (Optional) Configure other options common among all data sources. 6. Test data source settings, add test variables that the query can use to return live data. 7. To add dummy data, perform the following tasks: 1. In a current or new Integration Procedure add a **Response Action** step. ![Card IP DummyData ResponseAction](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_ip_dummydata_responseaction.png) 2. To add a small dataset: 1. In the Properties tab, click **ADDITIONAL OUTPUT RESPONSE**. 2. For each key/value pair, click the **Add Key/Value Pair** button and add your data. ![Card ­IP ­DummyData ­Additional ­Ouput ­Response](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_ip_dummydata_additional_ouput_response.png) 3. To add a large dataset: 1. Click the **Edit as JSON** link at the top right of the Properties tab. 2. In the **additionalOutput** node, enter your full JSON data as an object. ![Card IP DummyData additionalOutput node](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_ip_dummydata_additionaloutput_node.png) 4. (Optional) If the Integration Procedure has other data sources, to return only the dummy data, select the checkbox next to the **Return Only Additional Output** label. ![Card ­IP ­DummyData ­return ­only](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_ip_dummydata_return_only.png) 5. In your Flexcard's Setup panel, confirm that the Integration Procedure with the dummy data is chosen in the **Name** field. 6. To view your dummy data, click **Save & Fetch**. What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure an OAuth 2.0 Device Flow for External Client Apps Configure the Global OAuth Settings to include a device code, and enable the OAuth 2.0 device flow. OAuth 2.0 device flows integrate apps that run on devices with limited input or display capabilities, such as smart TVs, appliances, and other internet of things (IoT) devices. Command-line apps can also use this flow. Users can connect these apps to Salesforce by accessing a browser on a device with more advanced input capabilities, such as a desktop or mobile device. ### Required Editions
User Permissions Needed
To view all external client apps, view their settings, and edit their OAuth policies file View all External Client Apps, view their settings, and edit their policies
To enable or disable an external client app plugin, you must first deploy an external client app on your Salesforce org. [Deploy an External Client App That References the Source Org’s Global OAuth Settings File](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_that_references_the_source_org.htm&release=264.0.0&type=5 "Deploy an external client app on a new org, and have it reference the source org’s credentials. To configure this relationship, edit the OAuth link in the OAuth settings file and remove the reference to the global OAuth settings file in the package.xml manifest file of the new org."), or [Deploy an External Client App with a New Global OAuth Settings File](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_with_global_settings_file.htm&release=264.0.0&type=5 "Deploy the source org’s metadata on an org with its own OAuth consumer. To configure the app, remove the OAuth link in the OAuth settings file and add a reference to the global OAuth settings file in the package.xml manifest file on the new org."). This process is similar to the [OAuth 2.0 Device Flow for IoT Integration](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_device_flow.htm&release=264.0.0&type=5 "To integrate apps that run on devices with limited input or display capabilities, such as Smart TVs, appliances, and other IoT devices, use the OAuth 2.0 device flow. Command-line apps can also use this flow. Users can connect these apps to Salesforce by accessing a browser on a device with more advanced input capabilities, such as a desktop or mobile device."). 1. Open the external client app global OAuth settings file. 2. Set the isDeviceFlowEnabled field to true, and save the file. 3. Use a cURL request to get a device code. ``` curl -X POST /services/oauth2/token -d 'response_type=device_code&client_id=3MVG9AOp4kbriZOLTqSCO6pgdL3iEegchEYYc74zsqfvJuyTC1xy4IQiPAv_mU0rtwXKJt73Seybuvhj8Jrws&redirect_uri=https://www.example.com' | json_pp ``` This call returns a verification URL, a user code, and a device code. 4. Visit the verification URL on a computer or mobile device, and enter the user code. 5. Use the device code to complete the flow using a cURL request. ``` curl -X POST /services/oauth2/token -d 'grant_type=device&client_id=3MVG9AOp4kbriZOLTqSCO6pgdL3iEegchEYYc74zsqfvJuyTC1xy4IQiPAv_mU0rtwXKJt73Seybuvhj8Jrws&code=' | json_pp ``` The response includes a bearer token. Use this token to authorize in other flows. # Configure an Omniscript's Currency Code Override an org's default currency in an Omniscript by setting the Omniscript's Currency Code. By default, Omniscript uses an org's default currency in single currency orgs and a user's currency in multi-currency orgs. Use one of the options in this table to override the default Currency Code.

Org Currency

Option

Example

Single Currency

From Omniscript Setup, click Currency Code and select a Currency from the dropdown list.

Currency Code = JPY

Multi-Currency

Dynamically pass in the Currency Code from a URL using the OmniScriptCurrencyCode parameter.

&c__OmniScriptCurrencyCode=JPY

# Configure an Omnistudio Data Mapper Data Source on a Flexcard (Managed Package) For the managed package runtime, configure a Data Mapper data source to fetch data from a Data Mapper Extract. Data Mapper is a mapping tool that enables you to read, transform, and write Salesforce data. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). See [Data Mapper Overview](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptors.htm&release=264.0.0&type=5 "For the managed package runtime, a Data Mapper is a mapping tool that enables you to read, transform, and write Salesforce data. There are four types of Data Mapper: Turbo Extract, Extract, Transform, and Load."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. See [Configure an Integration Procedure Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_integration_procedure_data_source_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call. For example, as a Systems Admin, you want your customer service reps to view the weather forecast of policy holders when on a call. You can use an Integration Procedure with an Omnistudio Data Mapper Extract that returns an account's ZIP code, and a REST API call that uses the ZIP code to get the current forecast for the Account's region."). Before You Begin - Create a Data Mapper Extract that has an input parameter that corresponds to the Flexcard's ContextId, such as `AccountId`. See [Create an Omnistudio Data Mapper Extract (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_dataraptor_extract.htm&release=264.0.0&type=5 "For the managed package runtime, to create a Data Mapper Extract, specify its name, input and output types, and permissions."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Depending on the Flexcard design, a Data Mapper Extract data source must return a single object record or a list of object records. For example, the [Append Record](https://help.salesforce.com/s/articleView?id=xcloud.os_append_a_record_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, reduce the time to render a large list of records using the Append Record action. Instead of using the Update Datasource action to update a record, which renders the whole card again, use Append Record to add additional data tp the end of the record.") Card action requires a single record, while the [Update Datasource](https://help.salesforce.com/s/articleView?id=xcloud.os_update_a_data_source_from_an_action_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, with a Card Action, create an action that changes the data source, or updates parameters of an existing data source. For example, create an action that updates the pagination limits on a list of returned records.") Card action requires a list of records. 1. To configure the data source when [creating a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."), navigate to the **Select Data Source Type** step, select **Data Mapper**, and click **Next**. 2. To configure the data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **Data Mapper** from the **Data Source Type** dropdown. 3. Click into the **Interface Name** field, and select the Data Mapper Extract you created. 4. To pass values from the Flexcard to the Data Mapper's input parameters, click **\+ Add New** next to **Input Map**. **Pass the ContextId** For example, to use the **recordId** [context variable](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, global and local context variables are available to a Flexcard to provide context to data sources, actions, and other components. All variables are case sensitive.") to dynamically pass the ContextId of the Flexcard to the Data Mapper: 1. In the **Key** field of the **Input Map**, enter the Data Mapper's input parameter that corresponds to the ContextId, such as `AccountId`. 2. In the **Value** field of the **Input Map**, enter `{recordId}` as the value. 5. (Optional) To configure other options common among all data sources, see [Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database."). 6. To test data source settings, add test variables that the query can use to return live data, see [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). What’s next: Add elements to the Flexcard. See [Add Elements to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_elements_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add data fields, states, actions, and other elements to your Flexcard. Style an element and configure its properties in the Flexcard Designer."). # Configure an Omnistudio Data Mapper Extract Configure a Data Mapper Extract by specifying the object and filters. To enhance the performance of the Data Mapper Extract, you can define formulas, add fields to write data to, create mappings, and configure additional properties. 1. From the App Launcher, find and select **Data Mappers**. 2. Select the Data Mapper Extract that you want to configure. 3. Click **Extract**, and complete these steps: 1. To add an object, click **+**. If you’re using the designer on a managed package, click **Add Object**. 2. Search and select an extraction object. 3. Enter an extraction object path. 4. Add required filters that determine the data to be read. To filter for null values, use the `$Vlocity.NULL` variable. The most basic filter is `Id = Id`, which sets the Id of the object to an input parameter named Id. Data Mapper Extract also supports case-sensitive filter queries using `Equals`, and case-insensitive filter queries using `Not Equal To`. The INCLUDES and EXCLUDES operators apply only to multi-select picklist fields. See [Querying Multi-Select Picklists](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_querying_multiselect_picklists.htm) in Salesforce Help. Turbo Extract has an additional operator option, IN. The IN operator lets you match values to items in an array. For example, if the filter is `LastName IN Names`, and the JSON input is `{"Names": ["Miller", "Torres"]}`, records with Miller or Torres in their LastName fields are retrieved. When you use the `Equals` filter (=) with a null value, the filtering doesn't function correctly due to a known limitation. To prevent this issue, add an additional `Not Equal To` (!=) filter. For example, to filter for null account values that have a phone number associated with them, use `accountId = null AND phone != null`. 5. To configure additional filters, click ![Down Arrow](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/down_60.png) and choose filters: - **AND**: Add another filter and specify that both filters must be true. - **OR**: Add another filter and specify that either filter can be true. - **LIMIT**: Valid values are 1 through 50000; the default is 50000. - **OFFSET**: To implement paging logic, add a filter to specify where record retrieval starts. The OFFSET must be a dynamic, not a static, value. Choose OFFSET from the dropdown list and specify the name of a node in the input payload where the caller maintains the offset (for example, `offsetValue`). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note The Data Mapper Extract designer adjusts filter logic when a new OR filter is inserted between existing filters. For more information, see [this Salesforce Knowledge Article](https://help.salesforce.com/s/articleView?id=005197693&type=1&language=en_US). Use OFFSET with LIMIT to specify the first record to appear on a page in a multi-page retrieval. The offset must be an integer. For example, if the LIMIT is 5, the offsets for successive pages are 0, 5, 10, and so on. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Salesforce imposes a 2000-record limit on queries that use OFFSET. Allowed OFFSET values are from 0 to 2000. See [Workaround for offset 2000 limit on SOQL query](https://help.salesforce.com/s/articleView?id=000387840&type=1&language=en_US). - **ORDER BY**: Sort the results by the specified field. To sort by multiple fields, specify a comma-separated list of field names in order of precedence, for example `LastName,FirstName`. You can optionally specify ASC or DESC for an ascending or descending sort. You can optionally specify NULLS FIRST or NULLS LAST to place blank values at the beginning or end. For example, you can sort Accounts by the number of employees, listing the companies of unknown size first and the largest employers last. Specify the ORDER BY value `NumberOfEmployees ASC NULLS FIRST`. - **DELETE**: Remove a filter. 6. To add options to the Value list of Filter, click **Data**, and then click **Edit Input Data**. Add and define input values. For example, "BillingCountry": "USA". 7. To view extraction step data and object fields, click **Data**, and then click **View Extraction Step JSON**. To view all objects, select **Show all sObject Fields**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Salesforce enforces a limit of 100 SOQL queries per Apex transaction. If you exceed this limit while extracting objects, the Data Mapper execution fails, and an error message is displayed. See [Per-Transaction Apex Limits](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm#in_topic_per_transaction_section). 4. Click **Formula**, add a formula, and define it for the Data Mapper Extract. See [Use Formulas in Omnistudio Data Mappers](https://help.salesforce.com/s/articleView?id=xcloud.os_use_formulas_in_dataraptors_47540.htm&release=264.0.0&type=5 "To add data to the output of a Data Mapper, define formulas. Several types of Data Mappers (Extract, Transform, and Load) support formulas. When you define a formula, you map its output to the output JSON (for extracts and transforms) or Salesforce object field (for loads)."). 1. To add a Formula block, click **+**. If you’re using the designer on a managed package, click **Add Formula**. 2. In the Formula field, enter the desired logic. 3. In the Formula Result Path field, specify a JSON node in which you want to store the formula result. 4. If you’re using this Data Mapper for testing purposes, disable the formula. Click ![Three Dots](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/threedots_60.png), and then click **Disable**. If you’re using the designer on a managed package, select the **Disabled** checkbox. 5. Click **Mapping**, and then click **Create Mapping**. If you’re using the designer on a managed package, click **Output** and then click **+**. Configure these settings for mapping: 1. From the extraction step data, choose the source field. 2. Specify the desired data output path. 3. If you want to ensure the data is interpreted correctly, choose an output data type from the list. 4. If needed, add a default value. 5. To define a data transformation, add key-value pairs. This step replaces the defined key with the value in the output. 6. Save your changes. If you want to add more mappings, click **Save & New**. If you’re using the designer on a managed package, click **+**. To make mapping easier for a large number of fields, paste the data from the calling Omniscript or Integration Procedure into the Expected Output pane. This populates the data output path list. 6. To quickly match an input field to an output data path, click **Quick Match**, and use one of these options: - Drag and drop: This option is available only if you’re using the designer on a managed package. Drag the source sObject field from the input field to the output field, or vice versa. For an output that has no source sObject input field, drag the output mapping from the output field to the Matched Mappings column. - Pair: Manually select an input field and an output field, and click **Pair**. - Auto Match: Click **Auto Match**. Fields with matching names are matched automatically. 7. To create a data output path and add it to the output path list for mapping, click **Data > More > Edit Expected Output Data**, and then add the expected output path. 8. To view the current data output path, click **Data > More > View Current Output Data**. 9. To view extraction step data and object fields, click **Data > View Extraction Step JSON**. To view all objects, select **Show all sObject Fields**. 10. To configure additional properties, click **Options** and configure these properties: - Specify the number of minutes that the cached value is retained in the org cache or session cache, if data caching is enabled. - To enable data caching, choose a cache type from the Salesforce Platform Cache Type list: - None: Disables data caching for this Data Mapper. - Session Cache: Data related to users and their login sessions. - Org Cache: All other types of data. See [Improving Data Mapper Performance with Caching](https://help.salesforce.com/s/articleView?id=xcloud.os_cache_for_dataraptors_and_integration_procedures_48057.htm&release=264.0.0&type=5 "Omnistudio offers multiple caching options to improve performance and minimize unnecessary data processing in Data Mappers. The two primary user-configurable caching types are Org Cache and Session Cache, which are available in the Data Mapper designer. These caching mechanisms are part of the Salesforce Platform Cache and are implemented through Scale Cache in Omnistudio with standard runtime. Each serves a distinct purpose and comes with specific configuration considerations."). - To check the user's access permissions for the fields before executing the Data Mapper, select **Check field level security before execution**. Selecting this option disables the Org Cache, but not the Session Cache. - To include null values in the Data Mapper response, select **Include null values in the response**. 11. Save your changes. - **[When to Use Multiple Extract Steps](https://help.salesforce.com/s/articleView?id=xcloud.os_when_to_use_multiple_extract_steps_45967.htm&release=264.0.0&type=5)** The number of extract steps that you need depends on how the object types that you’re extracting from are related. There are three basic scenarios: single, single with relationship notation, and multiple. - **[Relationship Notation versus Multiple Extract Steps](https://help.salesforce.com/s/articleView?id=xcloud.os_relationship_notation_versus_multiple_extract_steps_45995.htm&release=264.0.0&type=5)** Using relationship notation improves the performance of Omnistudio Data Mappers that retrieve data from a parent of the primary object. Use this notation in the Extract JSON Paths for the parent object's fields instead of adding a second object in the Data Mapper's Extract tab. # Configure an Omnistudio Data Mapper Load Configure a Data Mapper Load by specifying the object type and filters. To enhance the performance of the Data Mapper Load, you can define formulas, add fields to write data to, and configure additional properties. 1. From the App Launcher, find and select **Data Mappers**. 2. Select the Data Mapper Load that you want to configure. 3. Click **Objects**, and add a Data Mapper Load Object: - To add an object, click **+**. If you’re using the designer on a managed package, click **Add Object**. - From the Load Object list, search, and select an object. 4. Click **Formula**, add a formula, and define it for the Data Mapper Load. See [Use Formulas in Omnistudio Data Mappers](https://help.salesforce.com/s/articleView?id=xcloud.os_use_formulas_in_dataraptors_47540.htm&release=264.0.0&type=5 "To add data to the output of a Data Mapper, define formulas. Several types of Data Mappers (Extract, Transform, and Load) support formulas. When you define a formula, you map its output to the output JSON (for extracts and transforms) or Salesforce object field (for loads)."). 1. To add a Formula block, click **+**. If you’re using the designer on a managed package, click **Add Formula**. 2. In the Formula field, enter the desired logic. 3. In the Formula Result Path field, specify a JSON node in which you want to store the formula result. 4. If you’re using this Data Mapper for testing purposes, disable the formula. Click ![Three Dots](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/threedots_60.png), and then click **Disable**. If you’re using the designer on a managed package, select the **Disabled** checkbox. 5. Click **Mapping**, and then click **Create Mapping**. If you’re using the designer on a managed package, click **Fields** and then click **+**. You can also use the Quick Match option to quickly match an input field to an output object field. You can match fields either manually using the Pair option or automatically using the Auto Match option. 1. Configure these settings for mapping: - **Input JSON Path**: The key of the JSON node containing the data you want to write to Salesforce. - **Domain Object**: The Salesforce object that you want to map to. - **Domain Object Field**: The field in the Salesforce object that you want to update. In fields that contain JSON data, you can't map JSON nodes individually. Stringify all JSON nodes that have values to ensure that no JSON data is lost. For example: `"JsonField": "{"JsonNode1":"Text", "JsonNode2":100, "JsonNode3":true}"` If you’re updating multiple Salesforce objects, the designer displays a separate tab for the mappings of each target object. See [Multiple Related Object Loads (Link Mappings)](https://help.salesforce.com/s/articleView?id=xcloud.os_multiple_related_object_loadslink_mappings_47183.htm&release=264.0.0&type=5 "When loading data into a sequence of objects, you can propagate data directly from one object to another related object. For example, you can use an Omnistudio Data Mapper Load to support an Omniscript that creates an Account and a Contact for the Account."). - **Add Key-Value Pair**: These mapping settings copy the value to a top-level JSON node specified as a key. 2. To control how the mapping is performed, you can configure these optional settings. If you’re using the designer on a managed package, click **All**, and configure these settings: - **Output Data Type**: Must be compatible with the data type of the target field. The Output Data Type setting must be compatible with the target field in Salesforce. If you configure incompatible types, the load operation can fail. For a list of valid output types, see [Omnistudio Data Mapper Output Data Types](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_output_data_types_47661.htm&release=264.0.0&type=5 "Many data types can be assigned to data in the Output JSON, including boolean, currency, string, various number and list types, and date formats."). - **Default Value**: Value to be loaded if the field in the Data Mapper output JSON is null. To specify an empty string for string fields that are null, enter a pair of double quotes (""). Omit if **Required for Upsert** is enabled. - **Disabled**: Prevents the field from being loaded. - **Upsert Key**: Specifies that the field is a key for the Salesforce object being loaded. The Data Mapper uses the value to determine whether it updates an existing record or inserts a new one. If the **Upsert** property is enabled for multiple field mappings, the result is a multi-field upsert key. The Data Mapper uses this key to check the object for unique values to determine whether to create or update an object. Don’t use an ID as the upsert key. If the input contains an ID, the Data Mapper updates the record. If the input doesn’t contain an ID, Data Mapper creates a record. - **Required for Upsert**: If this field is null, it prevents an object record from being updated. - **Lookup**: Uses the field value to query for the specified Salesforce data, and writes the result to the output field. 3. Save your changes. If you want to add more mappings, click **Save & New**. If you’re using the designer on a managed package, click **+**. 6. To configure additional properties, click **Options** and configure these properties: - **Ignore Errors**: Execute the Data Mapper even if errors occur, skipping only the steps that are having errors. This option is useful when you know a record will fail with limited data and future steps don't rely on previous steps. - **Rollback On Error**: Don't create or update the sObjects if errors occur. For more information, see [Apex Transactions](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_transaction.htm) and [Transaction Control](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_transaction_control.htm). - **Use Assignment Rules**: Use assignment rules for sObjects such as Cases that have user assignment fields. For more information, see [Set Up Assignment Rules](https://help.salesforce.com/articleView?id=creating_assignment_rules.htm&type=5&language=en_US). Unauthenticated guest users can’t trigger assignment rules. If emails are configured in Case assignment rules, checking this option automatically sends emails to users when Cases are assigned. - **Include null values in the response**: Include fields with null values in the Data Mapper response output. - **Delete On Success**: When the input type ‌is sObject, use this option to automatically delete bulk records after successfully bulk-loading data. - **Is Default For Interface**: When the input type ‌is sObject, specify this Data Mapper as the default bundle for the specified interface object. - **[Create Interface Objects for a Data Mapper Load](https://help.salesforce.com/s/articleView?id=xcloud.os_standard_create_interface_objects_for_a_data_mapper_load.htm&release=264.0.0&type=5)** Provide external data, such as a CSV file, as an input to a Data Mapper Load. The external data can be imported into an interface object, which is a custom Salesforce object using a data import tool. Then, map the fields from the custom object to the target Salesforce records using a Data Mapper Load. When you load data to a Salesforce custom object, it fires an Apex trigger that calls a Data Mapper Load. The Data Mapper takes data from the interface object and writes the resulting data to other Salesforce record objects. - **[Multiple Related Object Loads (Link Mappings)](https://help.salesforce.com/s/articleView?id=xcloud.os_multiple_related_object_loadslink_mappings_47183.htm&release=264.0.0&type=5)** When loading data into a sequence of objects, you can propagate data directly from one object to another related object. For example, you can use an Omnistudio Data Mapper Load to support an Omniscript that creates an Account and a Contact for the Account. # Configure an Omnistudio Data Mapper Turbo Extract (Managed Package) For the managed package runtime, to configure a Data Mapper Turbo Extract, specify the object type, filters, fields to extract, and options. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Custom objects must have unique names and shouldn't use API names that already exist for custom objects in a managed package. Custom objects are accessed in the managed package namespace and not as an object without a namespace. For example, in the vlocity\_ins\_\_ namespace, a custom object named Policy\_\_c is the same as the existing vlocity\_ins\_\_Policy\_\_c. 1. On the Extract tab, in the topmost field, select the source Salesforce object type, for example, Contact. The FeedComment and IdeaComment objects aren't selectable. 2. In the next field, specify the **Extract Output Path**. This value is typically the same as the source object name. It specifies the top-level JSON node in the output. 3. Specify at least one **Filter**, which determines the data to be read. The item on the left is a field of the source object type. The item in the middle is a comparison operator. The item on the right can be a quoted literal value, an input parameter, or another field of the same source object. To filter for null values, use the $Vlocity.NULL variable. You can use fields in related objects in filters, such as `Parent.Name`, but you have to enter them manually. For details about the notation, see [Relationship Notation versus Multiple Extract Steps (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_relationship_notation_versus_multiple_extract_steps.htm&release=264.0.0&type=5 "For the managed package runtime, using relationship notation improves the performance of Omnistudio Data Mappers that retrieve data from a parent of the primary sObject. You use this notation in the Extract JSON Paths for the parent sObject's fields instead of adding a second sObject in the Data Mapper's Extract tab. Two examples illustrate how to use relationship notation."). The most basic filter is `Id = Id`, which sets the Id of the object to an input parameter named Id. The INCLUDES and EXCLUDES operators apply only to multi-select picklist fields. See [Querying Multi-Select Picklists](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_querying_multiselect_picklists.htm) in Salesforce Help. Turbo extracts have an operator option no other Data Mappers have: IN. The IN operator lets you match values to items in an array. For example, if the filter is `Name IN Names`, and the JSON input is `{"Names": ["Miller", "Torres"]}`, records with Miller or Torres in their Name fields are retrieved. To download a data pack of this example for either Omnistudio for Managed Packages, click [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m0000005uNk/FPXQRTqvbyr8TB6SyheK6ri2.bIRp6L2yzjU_0cKVmE). 4. Configure optional additional filter settings by clicking the down arrow to the right of the first filter: - AND - Add another filter and specify that both filters must be true. - OR - Add another filter and specify that either filter can be true. - LIMIT - Specify the maximum number of records returned. Valid values are 1 through 50000; the default is 50000. - OFFSET - To implement paging logic, add a filter to specify where record retrieval starts. Choose OFFSET from the dropdown list and specify the name of a node in the input payload where the caller maintains a dynamic offset (for example, `offsetValue`). Use OFFSET with LIMIT to specify the first record to appear on a page in a multi-page retrieval. The offset must be an integer. For example, if the LIMIT is 5, the offsets for successive pages are 0, 5, 10, and so on. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Salesforce imposes a 2000-record limit on queries that use OFFSET. Allowed OFFSET values are from 0 to 2000. See [Workaround for offset 2000 limit on SOQL query](https://help.salesforce.com/s/articleView?id=000387840&type=1&language=en_US). - ORDER BY - Sort the results by the specified field. To sort by multiple fields, specify a comma-separated list of field names in order of precedence, for example `LastName,FirstName`. You can optionally specify ASC or DESC for an ascending or descending sort. You can optionally specify NULLS FIRST or NULLS LAST to place blank values at the beginning or end. For example, you can sort Accounts by the number of employees, listing the companies of unknown size first and the largest employers last. Specify the ORDER BY value `NumberOfEmployees ASC NULLS FIRST`. 5. Select the fields to extract by moving them from the left list to the right list. You can enter a search value to filter the left list. The Id field is always included in the output. To select fields in related objects, see the next section. 6. Configure optional additional settings on the Options tab: - **Check Field Level Security**: Checks the user's access permissions for the fields before executing the Data Mapper. Enabling this setting disables the Org Cache but not the Session Cache. - **Time To Live In Minutes**: If data caching is enabled, determines how long data remains in the cache. The minimum value is 5. - **Salesforce Platform Cache Type**: Enables data caching. Set to **Session Cache** for data related to users and their login sessions, or to **Org Cache** for all other types of data. See [Cache for Omnistudio Data Mappers (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cache_for_dataraptors_and_integration_procedures.htm&release=264.0.0&type=5 "For the managed package runtime, Omnistudio offers multiple caching options to improve performance and minimize unnecessary data processing in Data Mappers. The two primary user-configurable caching types are Org Cache and Session Cache, which are available in the Data Mapper designer. These caching mechanisms are part of the Salesforce Platform Cache and are implemented through Vlocity Cache in Omnistudio with managed package runtime. Each serves a distinct purpose and comes with specific configuration considerations."). 7. To observe the effects of caching when testing the Data Mapper Turbo Extract, go to the Preview tab and deselect the **Ignore Cache** checkbox. See [Cache for Omnistudio Data Mappers (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cache_for_dataraptors_and_integration_procedures.htm&release=264.0.0&type=5 "For the managed package runtime, Omnistudio offers multiple caching options to improve performance and minimize unnecessary data processing in Data Mappers. The two primary user-configurable caching types are Org Cache and Session Cache, which are available in the Data Mapper designer. These caching mechanisms are part of the Salesforce Platform Cache and are implemented through Vlocity Cache in Omnistudio with managed package runtime. Each serves a distinct purpose and comes with specific configuration considerations."). # Configure an Org Using a Community User Login (Managed Package) For the managed package runtime, when you configure an org for running Test Procedures, you can specify a Salesforce Community and authenticate as a Community user. This is especially useful for running Test Procedures in which user access affects the results. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). You must set up the Community user to have access to all Integration Procedure related objects, the [Tracking Service](https://help.salesforce.com/s/articleView?id=xcloud.os_vlocity_tracking_service.htm&release=264.0.0&type=5 "For the managed package runtime, the Tracking Service in Omnistudio for Managed Packages is an event-tracking service that captures details of actions that users perform. You can use the service to track any type of event. For example, you can track the time it takes to complete the steps in an Omniscript to identify process improvements."), and the Apex class ProcedureTestFramework. Before You Begin For assistance with these tasks, see [Set Up and Manage Salesforce Communities](https://help.salesforce.com/articleView?id=networks_overview.htm&type=5&language=en_US). 1. Set up a Salesforce Community. 2. Create a Community user with the required Permission Sets. 3. Know the username and password for this user. 1. In the org, go to Setup. 2. In Setup, in the Quick Find box, type communities, then select **All Communities**. 3. Copy the **URL** of the Community you want to use. 4. In IDX Workbench, select **New Environment** from the Source, Target, or Test User drop-down list. 5. Specify the **Name** of the user or another descriptive name. 6. Click the **+** to the right of the **Organization Type** field. 7. Paste the URL of the Community into the **Enter a new Login URL** field. 8. Click **Log in using OAuth**. The Salesforce login window appears. Log in to the org using the user's username and password. If the Allow Access window appears, click **Allow**. # Configure an SDK Data Source on a Flexcard (Managed Package) For the managed package runtime, configure a data source to use methods from an SDK to provide the data for a Flexcard. An SDK allows you to call multiple data sources, reuse business logic, and control which fields appear on your Flexcard. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). See [Flexcard SDK Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcard_sdk_data_source.htm&release=264.0.0&type=5 "For the managed package runtime, you can use a SDK, such as the Salesforce Industries Digital Commerce SDK, which contains all the business logic necessary for your application and reuse that business logic in other applications. This allows you to focus on creating the UI for an application without needing to call an API and process the API response. You only need to call the method of the SDK and the SDK calls the API. The SDK gets the API response, parses that response, then gives it back to the client. The client then consumes the SDK response in the UI so you can design your Flexcard based on the response you receive.").

Required Versions

Available beginning Summer '21.

Before You Begin Create the static resource for the SDK. See [Create the Static Resource for an SDK Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_the_static_resource_for_an_sdk_data_source_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, before you configure an SDK as a data source for your Flexcard, you need to add or create a static resource named OmniStudioActionRegistry that contains the configuration of the SDK that you want to use as a datasource in the Flexcard. The Flexcard looks for a file with that name in the static resource."). 1. To configure the data source when [creating a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience."), navigate to the **Select Data Source Type** step, select **SDK**, and click **Next**. 2. To configure the data source from the SetUp Panel in the Flexcard Designer, click **Setup**, and select **SDK** from the **Data Source Type** dropdown. 3. From the **SDK** dropdown, select the SDK from the drop list. This should be the name of the SDK as given in the static resource file, such as `Digitalcommerce JS SDK`. Once you select that name, the **Description** field populates. The Flexcard finds the static resource name and loads the file specified in `sdkPath`. 4. From the **SDK Method** dropdown, select from a list of functions available from your chosen SDK, such as getOffers method. For a list of Digital Commerce SDK methods, see the SDK Core Class Structure and Methods documentation. 5. (Optional) To pass data from the Flexcard to the SDK method, from the **Input Parameters** section select from one of these options: - Click **\+ Add New**: 1. In the **Key** field enter the name of a variable to pass to the method. Or, if a list of available parameters appears when you click into the Key field, select one, such as catalogCode. 2. In the **Value** field, enter the value of the variable as a merge field, such as Phones. - Click **Edit as JSON** to add variables as JSON, such as {"catalogCode":"Phones"}. ![FlexCard SDK Data Source Configuration](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcard_sdk_data_source_configuration.png) 6. (Optional) To configure other options common among all data sources, see [Flexcards Data Source Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties.htm&release=264.0.0&type=5 "For the managed package runtime, Flexcard Data Source properties are configurable for each data source type in the Setup panel of the Flexcard Designer. Retrieve data from a Salesforce object or an external database."). 7. (Optional) If an input parameter has merge fields, such as {recordId}, add test variables in the **Test Parameters** section so that the query returns live data. See [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). 8. Click Save + Fetch. The Flexcard Designer makes the API call and returns a response. You can test the response in the **Test Response** field. See [Test Data Source Settings on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account."). What’s next: Add elements to the Flexcard. # Configure an X (Formerly Twitter) Authentication Provider Configure an X (formerly known as Twitter) authentication provider so that your users can log in to Salesforce from their X account. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

To configure this authentication provider, complete these steps. - Set up a registration handler. - Set up an X app. - Define an X authentication provider in Salesforce. - Update your X app to use the callback URL generated by Salesforce as an entry in the X app settings. - Test the single sign-on (SSO) connection. - Add the authentication provider to your login page. ## Set Up a Registration Handler To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). ## Set Up an X App To set up an X app, see [Authentication](https://developer.twitter.com/en/docs/authentication/oauth-1-0a/api-key-and-secret) in the X Developer Platform documentation. ## Define an X Authentication Provider in Salesforce To set up an X authentication provider, you need the API key and API key secret from your X app. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click **New**. 3. For the provider type, select **Twitter**. 4. Enter a name for the provider. 5. Enter the URL suffix, which is used in the client configuration URLs. For example, if the URL suffix of your provider is MyXProvider, your SSO URL is similar to https://mydomain\_url or site\_url /services/auth/sso/MyXProvider. 6. For Consumer Key, use the API key from your X app. 7. For Consumer Secret, use the API secret from your X app. 8. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 9. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 10. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 11. Optionally, set these fields: 1. If you enter a consumer key and consumer secret, the consumer secret is included in SOAP API responses by default. To hide the secret in SOAP API responses, deselect **Include Consumer Secret in SOAP API Responses**. Starting in November 2022, the secret is always replaced in Metadata API responses with a placeholder value. On deployment, replace the placeholder with your consumer secret as plain text, or modify the value later through the UI. 2. For Custom Error URL, enter a URL for the provider to use to report any errors. 3. For Custom Logout URL, enter a URL to provide a specific destination for users after they log out, if they authenticated using the SSO flow. Use this field to direct users to a branded logout page or destination other than the default Salesforce logout page. The URL must be fully qualified with an http or https prefix, such as https://acme.my.salesforce.com. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_tip.png) Tip Configure [single logout](https://help.salesforce.com/articleView?id=slo_about.htm&type=5&language=en_US) (SLO) to automatically log out a user from Salesforce and the identity provider. As the relying party, Salesforce supports OpenID Connect SLO when the user logs out from the identity provider or Salesforce. 4. To use a portal for X users, select the portal from the Portal dropdown list. 5. For Icon URL, add a path to an icon to display as a button on the login page for a site. This icon applies to an Experience Cloud site only. It doesn’t appear on your Salesforce login page or My Domain login URL. Users click the button to log in with the associated authentication provider for the site. Specify a path to your own image, or copy the URL for one of our sample icons into the field. 6. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 12. Save your work. Several client configuration URLs are generated after defining the authentication provider. - Test-Only Initialization URL—Admins use this URL to ensure that the third-party provider is set up correctly. The admin opens this URL in a browser, signs in to the third party, and is redirected to Salesforce with a map of attributes. - Single Sign-On Initialization URL—Use this URL to perform SSO into Salesforce from a third-party using third-party credentials. The user opens this URL in a browser and signs in to the third party. The third party creates a user or updates an existing user. Then the third party signs the user into Salesforce as that user. - Existing User Linking URL—Use this URL to link existing Salesforce users to a third-party account. The user opens this URL in a browser, signs in to the third party, signs in to Salesforce, and approves the link. - Callback URL—Use this URL for the endpoint that the authentication provider calls back to for configuration. The authentication provider has to redirect to the callback URL with information for each client configuration URL. Client configuration URLs support additional request parameters that enable you to direct users to log in to specific sites, obtain customized permissions from the third party, or go to a specific location after authenticating. ## Update Your X App After you define the X authentication provider in Salesforce, return to your X app. Update your app to use the Salesforce-generated callback URL as the callback URL value in your X app settings. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note In your X app, make sure that you set up user authentication. ## Add the Authentication Provider to Your Login Page Configure your login page to show the authentication provider as a login option. Depending on whether you’re configuring SSO for an org or Experience Cloud site, this step is different. - For orgs, see [Add an Authentication Provider to Your Org's Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_org_login_page.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for your employees to use it by adding it to your org’s login page."). - For Experience Cloud sites, see [Add an Authentication Provider to Your Experience Cloud Site’s Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_customer_add_login_option.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for customers and partners to use it by adding it to your Experience Cloud site’s login page."). # Configure and Activate the Consumption Threshold Alerts Flow Quickly configure consumption thresholds alerts using the provided Consumption Threshold Alerts template. Alerts trigger only for consumption cards with active entitlements. Before you begin: - Confirm the Default Workflow User isn't set to the Integration User. Be sure to select an active user who has a verified email address. See Salesforce Help: [Identify Your Salesforce Org’s Default Workflow User](https://help.salesforce.com/s/articleView?id=platform.workflow_defaultuser.htm&language=en_US&type=5) for details. - Be sure to activate the flow in only a production org with Digital Wallet. You can't activate or run the flow in a sandbox because Digital Wallet invocable actions aren't supported in sandbox environments. The template is pre-configured to send notifications to users who are assigned the **System Administrator** profile. It also comes with a set of recommended threshold values that trigger the alerts. However, you have options to modify the behavior of the consumption alerts flow. See “Understand the Flow Logic” in [Manage Consumption Threshold Alerts and Notifications](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_alerts_manage.htm&release=264.0.0&type=5 "Configure Digital Wallet Consumption Threshold Alerts flow to get a usage notification when your org’s usage exceeds specified thresholds.") for more information about the flow’s default behaviors. - To change the recipients, see [Change Who Gets Consumption Threshold Alerts](https://help.salesforce.com/s/articleView?id=xcloud.wallet_change_who_gets_threshold_alerts.htm&release=264.0.0&type=5 "By default, the Digital Wallet Consumption Threshold Alerts flow sends notifications to all users who are assigned the System Administrator profile. However, you can change the flow behavior to send notifications to users who belong to a public group or are assigned a specific permission set."). - To change thresholds for all cards, see [Change a Percentage Threshold for all Cards](https://help.salesforce.com/s/articleView?id=xcloud.wallet_change_percentage_threshold_all_cards.htm&release=264.0.0&type=5 "Learn how to change a usage threshold your org has to reach before the Consumption Threshold Alerts flow sends notifications."). - To change thresholds for one specific card, see [Change a Consumption Threshold for a Specific Card](https://help.salesforce.com/s/articleView?id=xcloud.wallet_change_threshold_specific_card.htm&release=264.0.0&type=5 "Learn how to configure the Digital Wallet Consumption Threshold Alerts flow to only send notifications when a specific card reach a certain usage threshold."). - To add Slack notifications, see [Configure Slack Notifications about Consumption Thresholds](https://help.salesforce.com/s/articleView?id=xcloud.wallet_enable_slack_notifications.htm&release=264.0.0&type=5 "Configure Digital Wallet Consumption Threshold Alerts flow to send notifications about your org's usage to Slack."). You can make some minor modification to the flow in the default template. If the default behavior works for you, no further configuration is necessary, and you can just save and activate the flow. 1. In Setup, find and select **Flows**. 2. Click **New Flow**, then find and select Consumption Threshold Alerts template. 3. (Optional) Change the schedule when the flow runs. If you leave the default schedule, the flows runs at the next available scheduled interval. ![The Consumption Alerts flow with the Schedule action highlighted.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-alerts-schedule-change.png) If the default behavior works for you, save and activate the flow. Skip to step [6](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_alerts_create.htm&release=264.0.0&type=5). 4. (Optional) Change the profile in which to send notifications. By default, the Consumption Threshold Alerts flow sends notifications to users who are assigned the out-of-the-box System Administrator profile. 1. Select the Get System Administrator Profile element. 2. Delete the System Administrator value, then enter the name of the profile to use. In this example, users who are assigned the Financial Operations profile receive notifications when thresholds are crossed. ![The Get System Administrator action selected and the name value changed to Financial Operations.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-alerts-profile-change.png) 5. (Optional) Modify the thresholds that trigger alerts. The template indicates to trigger an alert whenever usage crosses 50%, 70%, 80%, 85%, 90%, 95%, or 100% of a consumption card’s purchased entitlement. Delete or add thresholds as desired. In this example, alerts are triggered when the usage for all consumption cards crosses 75%, 90%, and 100%. ![The Assign Thresholds action highlighted with the values for the thresholds changed.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-alerts-thresholds-change.png) 6. Click **Save**, then **Activate**. # Configure and Activate the Procedure Plan for Qualification Associate the qualification procedure with its procedure plan and activate the plan so that it runs at order capture. ### Required Editions

View supported editions

1. From Setup, in the Quick Find box, enter Procedure Plan, and then select **Procedure Plan Definition Template**. 2. Select **Default\_CG\_Qualification\_Procedure\_Plan\_Definition\_Template**. 3. Verify the context mapping. - ContextDefinition: `MACZProductDiscoveryContext__stdctx` - DefaultReadContextMapping: ProductDiscoveryMapping - DefaultSaveContextMapping: ProductDiscoveryMapping 4. In the procedure plan sections, set these values. - Phase: Qualification - Resolution Type: Default - ReadContextMapping and SaveContextMapping: ProductDiscoveryMapping - Procedure: Select the procedure you created. 5. Click **Save As**, and then activate the Procedure Plan Definition version. When a telesales rep launches the order entry interface, order capture populates the specific context to run runtime product qualification and search indexing. When the rep selects **Calculate** or enables **Instant Pricing**, the system passes the transaction payload through the AdvSalesTxn context definition directly into the Penny Perfect Pricing procedure to calculate net unit prices, volume tiers, and taxes in real time. # Configure and Deploy the External Client App Review generated app details, configure policies, and deploy the External Client App. The app name, contact email, description, and app icon are generated from existing information. Push configuration is off by default. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mobile_ama-264-0-0-production-enus/07b30a64-6461-4c63-9451-e94162994712/images/icon_note.png) Note Because this flow reuses the Mobile Publisher setup process, each step links to the related Salesforce Help article where you need more detail. 1. Review and adjust the generated base information. 2. Configure mobile app policies. 3. Configure OAuth policies. 4. Configure custom attributes. 5. Deploy the External Client App to the production org. # Configure and Deploy the Mobile, Push Notification, or Notification Plugin with Metadata API Create settings or policies files for your external client app, then deploy the files to your external client app. 1. For each [metadata type](https://help.salesforce.com/s/articleView?id=xcloud.meta_mobile_notifications_push_plugins_list.htm&release=264.0.0&type=5 "Learn the metadata types available to configure an external client app’s mobile, push notification, and notification plugins with Metadata API.") that you want to create for your external client app, create an XML file with the required file suffix in the required directory location. See the Metadata API documentation for each metadata type. 2. Configure each XML file with the fields for the [metadata type](https://help.salesforce.com/s/articleView?id=xcloud.meta_mobile_notifications_push_plugins_list.htm&release=264.0.0&type=5 "Learn the metadata types available to configure an external client app’s mobile, push notification, and notification plugins with Metadata API."). 3. After you create the relevant metadata types, configure the package.xml manifest file in the project directory to reference the metadata types that you created. For example, this package.xml file references the ExtlClntAppMobileSettings and ExtlClntAppMobileConfigurablePolicies metadata types. ```xml * ExtlClntAppMobileSettings * ExtlClntAppMobileConfigurablePolicies 64.0 ``` 4. To deploy the new metadata types, run this command. ``` sf project deploy start --manifest package.xml --target-org example@example.com ``` 5. To retrieve the deployed package.xml file, run this command. ``` sf project retrieve start --manifest package.xml --target-org example@example.com ``` # Configure and Manage Custom Consumption Tags After you determine your tagging strategy, you’re ready to begin creating custom tags and assigning them to resources. Prerequisites: - Make sure you have the appropriate Custom Tagging permission. See Salesforce Help: [Digital Wallet Permissions](https://help.salesforce.com/s/articleView?id=xcloud.wallet_permissions.htm&release=264.0.0&type=5 "To access Digital Wallet and its features, users require a combination of user permissions, permission sets, and licenses. To access Digital Wallet, you must have a Data 360 license and not a Customer Data Platform (CDP) license.") for details. - When you’re ready to create Data 360 reports or Tableau Next visualizations based on your custom tags, install the Consumption Tagging app. See Salesforce Help: [Install the Consumption Tagging App](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_tagging_app_install.htm&release=264.0.0&type=5 "The Consumption Tagging app contains the required metadata and objects (data lake objects and semantic data models) for consumption tags and the Tableau Next assets for the Consumption Analytics dashboard. This Tableau Next dashboard uses billing data and standard consumption tags to provide you with granular insights, interactive visualizations, and usage forecasts.") for instructions. To access Consumption Tags: 1. From the App Launcher, find and select **Digital Wallet**. 2. Select **Consumption Tags**. Alternatively, you can search for and find **Consumption Tags** directly in the App Launcher. ## Get Started with Custom Tagging The Consumption Tags feature gives you flexibility regarding how you want to begin, and enables you to define any dependencies as you go. However, you must assign a tag to a tag group. If you begin defining tags first, you must select a tag group or create one when defining before you can save the tag. After you have your list of tags, you can assign them to resources. Consumption Tags contains two pages: Tags and Tagged Resources. The Tags page is where you manage and create custom tags and tag groups. ![The Consumption Tagging Tag page, whose list view shows the tag name and its associated tag group, tag description, and date created. From here, you can view or manage tag groups, or create a tag.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-ct-all-tags.png) The Tagged Resources page shows you a list of all resources that are tagged. From here, you can manage assignments and assign a tag to a resource. ![The Tagged Resources page, whose list view lists tagged resources, and shows the associated tag, tag group, resource type, and assigned date.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-ct-tagged-resources.png) ## Tag and Tag Group Naming Conventions Follow these conventions when specifying tag and tag group names. Avoid naming tags or tag groups with personally identifiable information (PII) or company-sensitive names. - Don’t use greater than (>) or less than (<) symbols for the tag or tag group name. - Tags and tag group names are case-insensitive, so you can’t create `Department` if `department` already exists. - Tag and tag group names are limited to 30 characters. - Tag group names must be unique. - Tags must have unique names within the same tag group. - API names for tags and tag groups must be unique. ## Tag and Tag Group Limits - You can create only 30 tag groups. - You can create up to 255 tags per tag group. ## Create a Custom Tag When you first access Consumption Tags, you see the All Tags list, which is empty. Click **New Tag** to define a tag. Remember that you must also define or select the tag group at the same time. Be sure to follow the tag and tag group naming conventions. ## View or Manage Tag Groups From the All Tags list, click **View Tag Groups**. From here, you can create tag groups, or edit or delete existing ones. You can edit a tag group if none of its tags are assigned to a resource. Deleting a tag group deletes all associated tags and unassigns them from any resources. ## Assign Tags to Resources You can assign multiple tags to a resource but only one tag from a tag group. For example, if a resource is assigned the tag Department: Sales, you can’t also assign the tag Department: Marketing to it. In the left navigation panel, click **Tagged Resources**, then click **Assign Tag to Resource**. See Salesforce Help: [Manage and Report on Business-Specific Custom Tags](https://help.salesforce.com/s/articleView?id=xcloud.wallet_custom_tags_intro.htm&release=264.0.0&type=5 "Track and optimize your consumption through your specific business lens. Custom consumption tags empower you to gain deeper, business-specific insights by creating and managing your own tags to track consumption based on unique categories, such as department and cost center.") for a list of resources you can assign to your custom tags. ## Unassign a Tag from a Resource From the Tagged Resources page, select **Unassign Tag** from the row action menu. If you unassign a tag from a resource, you still see past usage events for the resource. This change affects only future events. ## Edit a Tag From the Tags page, select **Edit** from the row action menu. If the tag is assigned to a resource, you can edit its name and description. If the tag isn’t assigned to a resource, you can edit its name, description, and tag group. Future consumption is tagged with the new name while historical consumption uses the former name. ## Edit a Tag Group From the Tag page, click **View Tag Groups**. From the Tag groups page, select **Edit** from the row action menu. If the tag group contains a tag that’s assigned to a resource, you can't edit the tag group. If all the tags that belong to the tag group aren’t assigned to resources, then you can edit the tag group name and description. Future consumption is tagged with the new name while historical consumption uses the former name. ## Delete a Tag or Tag Group To delete a tag or tag group, select **Delete** from the row action menu. Deleting a tag unassigns it from all tagged resources. Deleting a tag group deletes all of its tags and unassigns all associated resources. You can still view historical consumption data for the deleted tag or tag group. If you delete a tag, there’s no way to recover it, for example, in a Recycle Bin. Instead, recreate it. After deletion, you’ll still see historical data for it. If you recreate a tag with the same name, you can see two versions of it: the old one with historical data, and the new one. # Configure and Personalize Survey Questions and Responses Personalize welcome messages, survey questions, and thank you messages by inserting field values in Salesforce records, participant details, company information, and custom values. Let participants upload documents in responses to attachment questions and respond to surveys in the email invitation itself. Validate participants’ responses to short text questions.
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
- **[Use Merge Fields to Personalize Surveys](https://help.salesforce.com/s/articleView?id=xcloud.concept_merge_fields.htm&release=264.0.0&type=5)** Define and insert variables for merge fields in welcome messages, survey questions, and thank you messages. Inserted merge fields resolve to field values in Salesforce records, participant details, company information, and custom values. - **[Configure Attachment Questions](https://help.salesforce.com/s/articleView?id=xcloud.concept_upload_attachments_in_surveys.htm&release=264.0.0&type=5)** Allow participants to upload documents such as receipts for warranty claims by including attachment questions in your survey. - **[Create Surveys That Participants Can Complete from the Email Invitation](https://help.salesforce.com/s/articleView?id=xcloud.task_respond_within_email.htm&release=264.0.0&type=5)** Create a one-question survey that participants can complete with a single click from within the email invitation. - **[Validate Short-Text Responses](https://help.salesforce.com/s/articleView?id=xcloud.task_validate_short_text_responses.htm&release=264.0.0&type=5)** Validate responses to short-text questions to help ensure the quality of feedback you receive. - **[Create Survey Data Maps to Create or Update Records](https://help.salesforce.com/s/articleView?id=xcloud.task_create_data_map.htm&release=264.0.0&type=5)** Incorporate feedback into your Salesforce org by creating data maps that automatically create or update case or other records based on a participant's responses. - **[Create Data Maps to Send Custom Notifications Based on Survey Responses](https://help.salesforce.com/s/articleView?id=xcloud.task_send_custom_notifications.htm&release=264.0.0&type=5)** Send custom notifications to alert your agents about survey responses. You can send custom notifications for every response or define response conditions to send notifications. - **[Show Survey Progress to Participants](https://help.salesforce.com/s/articleView?id=xcloud.task_display_the_progress_bar.htm&release=264.0.0&type=5)** Show a progress bar on surveys so that participants can see how far along they are. - **[Customize the Thank You Message](https://help.salesforce.com/s/articleView?id=xcloud.task_customize_thank_you_page.htm&release=264.0.0&type=5)** Customize the message that participants see when they finish the survey. Write multiple messages and then create the logic that determines which message participants view. - **[Link to Webpages from the Thank You Page](https://help.salesforce.com/s/articleView?id=xcloud.task_thank_you_page_webpages.htm&release=264.0.0&type=5)** Keep your customers engaged after they respond to surveys by adding links or redirects to your company website, social media pages, or other webpages on the Thank You page. # Configure Android Push Notifications To support push notifications for Android versions of your mobile app, collect information from a Google Firebase project. Then, create a separate connected app for the Android platform. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

User Permissions Needed
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage Connected Apps

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. If you have an existing Firebase project associated with your app, log in to the [Google Cloud Console](https://console.developers.google.com/apis/dashboard?project=_) and select the project for your app. In the Enabled APIs & services page, confirm that the Firebase Cloud Messaging API is enabled for the project. 1. If you have an existing Firebase project associated with your app, open the existing project. If not, create a project for your app in the [Google Firebase Console](https://console.firebase.google.com/). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_important.png) Important If you previously set up notifications for your Android app, make sure that you proceed with the next steps using the existing Firebase project associated with your app. To avoid any disruption in your app’s notifications, confirm that the sender ID in the Firebase project matches your app’s existing sender ID. 2. In the Firebase project, click the cog icon next to Project Overview, and then click **Project settings**. 3. Collect the Firebase project ID. 1. Click the **General** tab. 2. Record the value in the Project ID field. You need the project ID for a later step. 4. Generate an Admin SDK private key for your Firebase service account. 1. Select the **Service accounts** tab, and then click **Generate new private key**. 2. Download the JSON file that contains the private key. Note the location of the downloaded file, because you need it later. The file name format for this private key is similar to Pc-api-1234567890123456789-123-firebase-adminsdk-a1bcd-a1234bc5678.json. 5. Create your [mobile connected app](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_mobile.htm&release=264.0.0&type=5 "A connected app is a primary means by which a mobile app connects to Salesforce. Although not required, you can use Salesforce Mobile SDK to build mobile applications as connected apps. These connected apps can access Salesforce OAuth services and call Salesforce REST APIs.") in App Manager. 6. In the Mobile App Settings section of your mobile connected app, complete these fields. 1. In the **App Platform** field, select **Android**. 2. Select **Push Messaging**. 3. In the **Platform** field, select **Android**. 4. In the **Firebase Admin SDK Private Key** field, upload the JSON file that contains the private key that you generated for your Firebase service account. 5. In the **Project ID** field, enter the project ID that you collected from the Firebase project. 7. Save your changes. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note If you update the push messaging fields for an existing mobile connected app, and the app is distributed to other Salesforce orgs in a managed package, make sure to distribute the push messaging update to all orgs that use the app. To distribute the push messaging update, upload a new managed package version, and then install the new package in all orgs that use the app. See [Installed Packages](https://help.salesforce.com/s/articleView?id=xcloud.distribution_installed_packages.htm&type=5&language=en_US) for more information. # Configure Apex Class Access (Managed Package) For the managed package runtime, configure Apex Class access to ensure that users see Vlocity Card Layouts on Experience pages. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From Setup, type Users in the Quick Find box and click **Profiles**. 2. Find the profile for the users who will be accessing the community and click the profile name. If you click **Edit**, you won't see the Enabled Apex Class Access settings. 3. Scroll to the Enabled Apex Class Access section and click **Edit**. 4. Make sure that namespace.CardCanvasController is in the Enabled Apex Classes list. 5. Click **Save**. # Configure App Navigation Users can navigate your branded mobile Experience Cloud app through various methods, depending on how you configure app navigation. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
To create and modify a site: Create and Set Up Experiences
To navigate your mobile Experience Cloud app, your users can use: ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note In Experience Builder, the features in the Additional Navigation Options section (**Settings** | **Mobile Publisher** | **Navigation**) are available only for Aura sites on the Customer Account Portal, Partner Central, Customer Service, and Help Center templates. The additional navigation options are visible in the settings for LWR sites, but aren’t yet supported in apps created with Mobile Publisher for the LWR platform. - Navigation tab bar ![bottom navigation tab bar](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/nav_tab_bar.png). Shows navigation tabs across the bottom of the screen. - Hamburger menu ![hamburger menu for navigation](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/hamburger_menu.png). The default navigation method. - The menu items of the hamburger menu are inherited from the Navigation Menu component. - If you implement the navigation tab bar, you can hide the hamburger menu so that the navigation tab bar is the main method of navigation. - Back button ![back button.png](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/back_button.png). The back button is an iOS-specific feature. Android apps have their own standard back button, provided by the Android operating system. - The iOS back button is available only for standard Experience Builder themes. Custom themes don't display the back button. - By default, the iOS back button replaces the hamburger menu on all pages except the home page. But you can configure your iOS app to show both the hamburger menu and the back button on all pages. To configure the navigation in your mobile Experience Cloud app: 1. In Experience Builder, go to **Settings** > **Mobile Publisher**. 2. Click **Navigation**. ![Navigation Tab](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_nav_configuration.png) 3. To include the navigation tab bar, set up and style the navigation tabs. 4. If you want to hide the hamburger menu when using the navigation tab, for iOS and Android, unselect **Show hamburger menu**. 5. For iOS only, select 1. **Show only back button** to show only the back button in your app. 2. **Show both hamburger menu and back button** to show both the hamburger menu and the back button on all pages. 6. Publish your site. #### See Also - [Set Up the Navigation Tab Bar](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_mobile_tab_bar_commun.htm&release=264.0.0&type=5 "In your branded Experience Cloud mobile app, the navigation tab bar is fixed at the bottom of the screen, with two pre-configured tabs: Home and User Settings. Customize the navigation tab bar by adding more tabs, and adjust the look and feel of the tabs to match your branding. And if you don't want the navigation tab bar, you can disable it.") - [_Experience Cloud Help_: Navigation Menu](https://help.salesforce.com/s/articleView?id=experience.rss_setup_nav_menu.htm&type=5&language=en_US) # Configure Archive Settings Configure settings to archive, unarchive, purge, search, display, and export records in the Archive app. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Users must have the Archive Admin or Archive Settings permission set assigned. ## View Organization Information To review org details such as Organization ID, Organization Type, and Region, go to Org Information. If your Archive is in a Hyperforce region, the Region field shows only **Hyperforce**. If your Archive is in a non-Hyperforce region, the field shows the specific region name. With a Salesforce Shield or Shield Platform Encryption add-on license, Org Information also shows your encryption key status. - **Active**: Archive can access your encryption key, and your archived data is encrypted. - **Encrypting**: Archive is encrypting your data. A progress percentage shows the operation's progress. - **Decrypting**: Archive is decrypting your data. A progress percentage shows the operation's progress. - **Key Inactive**: Archive can't access your encryption key. Restore access in Shield Platform Encryption to keep your archived data accessible. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Shield Platform Encryption integration is available only in a Hyperforce archive region. Key activation and management happen in Shield Platform Encryption, not in Archive Settings. For Hyperforce availability details, see [Hyperforce Infrastructure in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_hyperforce_infrastructure.htm&release=264.0.0&type=5 "Your Archive region—not your Salesforce org's Hyperforce status—determines whether Archive uses an authenticated user or the Platform Integration User (PIU), and which setup, security, and import and export options you see."). For more information about Shield Platform Encryption, see [_Salesforce Help_: Strengthen Your Data's Security with Shield Platform Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_overview.htm&type=5&language=en_US). ## Validate or Change the Authenticated User To view the username, email, user ID, or to change the Authenticated User, go to the Authenticated User tab. ## Archive Settings - Configure Salesforce Data Protection Period: Set a default protection period of up to 365 days based on `LastModifiedDate`. Unless you set custom values, Salesforce Data Protection Period prevents the archiving of recently modified records. - Bypass Data Protection for Integration User Updates: Bypass protection for records updated by the Integration User. - Use Hard-Delete During Archive: Permanently delete records instead of sending them to the Recycle Bin. This setting requires the Bulk API Hard Delete user permission. If a record has lookup children, it’s sent to the Recycle Bin even if this setting is enabled. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This setting requires Bulk API permissions. For more information, see [Salesforce Bulk API Hard Delete Permissions](https://help.salesforce.com/s/articleView?id=000385694&type=1&language=en_US). - Archive Accounts with Closed-Won Opportunities: Archive accounts with Closed-Won opportunities, overriding Salesforce's default data protection. - Exclude Specific Objects from Archiving: Exclude object types, such as Feed, History, Share, or objects with formula fields, from all archiving processes. These objects are deleted from Salesforce and excluded from Archive. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Skipped fields appear empty in Archive Search. - Configure Person Account Settings: View a Person Contact child records for Person Accounts. This feature is available only if enabled in your org. - Same Root & Child Filter: Archive an object by filtering out root IDs where a child record is the same type as the root record. - Exclude Records with External Files: Prevent the archiving of files that are linked to external references. - Exclude ContentDocuments with Non-Archived Parents: Exclude ContentDocuments related to root records that remain unarchived. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note A ContentDocument is only archived if the archived root record is the last or sole relation to the ContentDocument. - Retry Bulk Delete: When Hard-Delete is active, the Bulk Delete API handles parent records without lookup child records. If a delete operation fails, the operation is retried in smaller batches to improve success rates. - Archive EmailMessages with Related Tasks: Archive an EmailMessage and all its related Task records. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Enhanced Email must be enabled. - Archive Digital Signatures: Archive digital signature records collected in Salesforce Field Service when their related root records are archived. - Enable Archiving of Objects with Missing Relationship Names: Add cascade-delete support for objects without a defined relationship name in their schema. ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_warning.png) Warning Objects archived with this setting turned on can't be unarchived later because the system has no relationship path to follow for restoration. - Unsupported Child Object Handling: Controls how archive policies handle child objects that can't be archived. When enabled, policies skip unsupported child objects instead of failing. When disabled (default), policies fail when they encounter an unsupported child object, requiring manual adjustment. Archive excludes non-creatable objects from policies because archived data can't be unarchived if the object doesn't support record creation. ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_warning.png) Warning When this setting is on, policies skip child objects, which can cause data loss or orphaned relationships when you archive root records. - Import data from a Heroku source to Salesforce: Enable unarchive record from archived Format and import data from a Heroku source to Salesforce. ## Unarchive Settings - Unarchive Retention Period: Specify the retention period, in days, to prevent recently unarchived records from being rearchived. - Preserve Original Case Number: When unarchiving a Case record, create a custom field to preserve the original Case Number. - Nullify EmailMessage Created By ID Pre-Insertion: Clear the original Created By ID for email messages. - Automatically Retry Email Address Validation Errors: Retries unarchiving if Salesforce address restrictions cause a failure. The `ValidatedFromAddress` field is cleared and the operation is retried using the `FromAddress` to restore the record. - Unarchive History Records: Restore history records to a copy of the original history object. To restore history records, create a custom object with a Copy suffix, such as Account History Copy. Then verify that all the fields of the new history object match the fields of the original history object. - Handle Private Libraries During Unarchive: Automatically clears or adjusts ContentVersion fields that reference a user's private library during unarchive. This setting prevents errors during unarchive operations or when unarchiving content from former users whose private libraries no longer exist. - Unarchive Related References Management: Select one of these options for related references during unarchiving. - Ignore Related References: Unarchive only the selected item without affecting other records. This value is the default value. - Nullify Related Reference Links: Remove references to other records outside the archive process. - Unarchive with Related References: Unarchive related records and maintain relationships. - Integration User for Inactive Owners: When the original record owner is inactive, Archive assigns the record to the Integration User and retries the unarchive operation. ## Purge Settings - Archived Data Protected from Purge: Define the number of days archived data is protected from purge policies, which permanently remove data. ## Search and Display Options - Archive Search Layout: Select up to 15 fields for the layout. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Non-indexed fields can take longer to retrieve. - Archive Component Search Layout: Select up to 15 fields for the layout. - Index Fields Setup: Archive automatically indexes up to 1,000 fields per org, and then automatic indexing stops. To index more fields that matter for your searches, select them here. Identify non-indexed fields and verify how many fields remain in your quota. For more information, see [Manage Index Fields in the Archive App](https://help.salesforce.com/s/articleView?id=xcloud.archive_manage_index_fields.htm&release=264.0.0&type=5 "Efficient management of index fields in the Archive app is essential for optimizing search and query performance. Archive automatically indexes certain fields based on internal algorithms. However, some fields can't be indexed at all, and you configure others manually. The Index Fields Setup feature shows admins which fields are indexable so that they can manually select fields to improve search performance."). - Archive Component Restriction Rules: Create rules to restrict the data visible in the Archive Component. You can restrict up to 5 objects. Users can only see child records that follow your org's sharing settings. For more information, see [Archive Component Restriction Rules](https://help.salesforce.com/s/articleView?id=xcloud.archive_widget_restriction_rules.htm&release=264.0.0&type=5 "Control end-user visibility in Salesforce of specific archived records according to object sharing tables in the Archive app. Applicable to Archive Single Objects and Archive Multiple Objects components."). ## Export Settings - By default, to test the connection to your external target, Archive writes a small test file and then immediately deletes it. This standard test verifies that the app has both write (PUT) and DELETE permissions. To skip the delete step of this test, select **Check Connection via PUT Only**. When enabled, the connection test only writes the file and confirms a successful write. - By default, the Archive App automatically filters out and excludes objects with standard suffixes, as they typically contain auto-generated system data or auditing information. To turn off this filter and include these object types in your export, select **Suffixes Included**. This setting applies to objects with these suffixes. - `Share` - `Feed` - `History` - `Relation` - `Role` - Similar to the standard suffix objects, `LiveChatTranscriptEvent` objects are automatically excluded from exports by default. To include this specific object type in your archive, select **LiveChatTranscriptEvent Included**. - Some storage endpoints, such as AWS S3, require a Server-Side Encryption (SSE) header to be explicitly present to accept the connection and enforce server-side encryption. To include the SSE header in all export requests, select **Send SSE Header Explicitly**. #### See Also - [Same Root and Child Filter](https://help.salesforce.com/s/articleView?id=xcloud.archive_create_policies.htm&release=264.0.0&type=5 "To select specific records for archiving, define filters, schedule a process, and set data retention periods, create a policy in the Archive app.") - [Manage Archive Component Controls and Layout](https://help.salesforce.com/s/articleView?id=xcloud.archive_manage_widget_controls_and_layout.htm&release=264.0.0&type=5 "Manage the display and configuration of objects within the Archive component, defining both root and child objects that end users can query. Also, the layout provides insights into root-child object relationships via the Is Root identifier.") - [Archive Component Restriction Rules](https://help.salesforce.com/s/articleView?id=xcloud.archive_widget_restriction_rules.htm&release=264.0.0&type=5 "Control end-user visibility in Salesforce of specific archived records according to object sharing tables in the Archive app. Applicable to Archive Single Objects and Archive Multiple Objects components.") - [Manage Index Fields in Archive](https://help.salesforce.com/s/articleView?id=xcloud.archive_manage_index_fields.htm&release=264.0.0&type=5 "Efficient management of index fields in the Archive app is essential for optimizing search and query performance. Archive automatically indexes certain fields based on internal algorithms. However, some fields can't be indexed at all, and you configure others manually. The Index Fields Setup feature shows admins which fields are indexable so that they can manually select fields to improve search performance.") - [Retention vs Purge Policies in Archive](https://help.salesforce.com/s/articleView?id=xcloud.archive_retention_vs_purge_policies_in_archive.htm&release=264.0.0&type=5 "Retention sets how long Archive keeps records. A purge policy deletes records before that period ends, such as for Right to Be Forgotten requests.") - [Purge Policies](https://help.salesforce.com/s/articleView?id=xcloud.archive_purge_policies.htm&release=264.0.0&type=5 "Define data removal policies for archived records in the Archive app. Purge policies override the original data retention expiration set at the time of archiving. When designated to do so, purge policies permanently delete data.") - [Manage Related Records During Unarchive](https://help.salesforce.com/s/articleView?id=xcloud.archive_unarchive_from_archive_search_or_widget.htm&release=264.0.0&type=5 "Restore archived records with Archive Search or the Archive component in the Archive app.") - [Exclude Records with External References When Archiving](https://help.salesforce.com/s/articleView?id=xcloud.archive_unarchive_from_archive_search_or_widget.htm&release=264.0.0&type=5 "Restore archived records with Archive Search or the Archive component in the Archive app.") - [Use Enhanced Email for More Email Functionality](https://help.salesforce.com/s/articleView?id=sales.emailadmin_enhanced_email_overview.htm&type=5&language=en_US) # Configure Attachment Questions Allow participants to upload documents such as receipts for warranty claims by including attachment questions in your survey. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Feedback Management - Starter and Feedback Management - Growth licenses
User Permissions Needed
To upload supporting documents in survey responses: Permissions to create surveys
Select the file types of attachments, the maximum number of attachments, and the maximum size of each file that a participant can upload in survey responses. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_important.png) Important You can’t create a survey with attachment questions for anonymous users or generate a public invitation for surveys with attachment questions. To let guest users upload files, select Allow site guest users to upload files in the General Settings page for Salesforce Files, and then define the sizes and types of files that they can upload. Add the lightning:fileUpload lightning component for guest users to upload files. 1. Create a survey or open an existing survey. 2. On a new or existing page, click **Add Question**, and then select **Attachment**. 3. To allow participants to upload attachments in a specific file format, click **Allow Only Specified File Types** and then select one or more attachment types. You can select PDF, Spreadsheet, Document, or Graphic. | File Type | Supported File Extensions | | --- | --- | | PDF | .pdf | | Spreadsheet | .csv, .ods, .xls, .xlsx | | Document | .doc, .docx, .odt, .txt | | Graphic | .jpg, .jpeg, .gif, .png | To let participants upload any type of attachment, leave Allow Only Specific File Types disabled. 4. For Maximum Attachments to Upload, select the maximum number of attachments that a participant can upload. 5. For Maximum File Size, select the maximum size of each file that a participant can upload. 6. Save and activate the survey. Participants can upload a maximum of 20 files for a single survey. These attachments can ‌either be assigned to a single attachment question or distributed across multiple attachment questions within the survey. Uploaded files are available from Files home. View uploaded files in related survey records by adding the Files related list to page layouts. - To view files uploaded for a survey that hasn’t been submitted, add the Files related list to the page layout of survey invitations. - To view uploaded files of a submitted survey, add the Files related list to the page layouts of survey responses, survey question responses, or the contacts or leads related to the participant. They don’t appear in the Files related lists of survey invitations. # Configure Authentication Server Certificate Pin Provide domain name and certificate fingerprint to configure authentication server certificate pin. ### Required Editions
User Permissions Needed
To create and modify Enhanced Mobile App Security settings:

Manage Enhanced Mobile App Security

AND

Modify Metadata

1. In the Mobile Security Setup UI, enable **Authentication Server Certificate Pinning**. ![Authentication Server Certificate Pin](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mobile_security-264-0-0-production-enus/aa5de880-f40d-4478-acb7-729eee2b5d4e/mobile_security/images/mobile_security_auth_server_cert_pin.png) 2. Enter the domain name for the server that you want to pin the certificate for in the **Domain Name** field. For example, `https://login.salesforce.com`. 3. For the **Certificate Fingerprint**, you have two options to obtain the value. You can obtain the Certificate Fingerprint value from your org’s internal team that owns the certificate. You can use a third-party application such as [www.ssllabs.com](https://www.ssllabs.com/) to obtain the Certificate Fingerprint value. ![Certificate Fingerpring Value](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mobile_security-264-0-0-production-enus/aa5de880-f40d-4478-acb7-729eee2b5d4e/mobile_security/images/mobile_security_auth_server_cert_pin_ssl.png) 4. Copy and paste the value into the **Certificate Fingerprint** field. ![Certificate Fingerprint](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mobile_security-264-0-0-production-enus/aa5de880-f40d-4478-acb7-729eee2b5d4e/mobile_security/images/mobile_security_auth_server_cert_pin_hash.png) 5. Click **Save**. Here are a few things to keep in mind about authentication server certificate pins. - The test of the server certificate happens when the user logs in. This policy doesn’t replace the Man-in-the-Middle security policy. - The certificate is set after the user logs in for the first time, and is enforced for subsequent logins on that server. If the policy is updated or removed, then the updated policy is picked up by the app the next time the user logs in. - The authentication server pins aren’t enforced if the user is using advanced authentication in Safari. - If the pinned server certificate is rotated, but the app isn’t updated, then the user can’t log in because of the mismatched pins. A workaround is to ask the user to reinstall the app to obtain the new certificate pin value. - It’s recommended that you use the pin of the intermediate certificate, since that provides a good balance between how frequently it expires and security value. # Configure Authentication Server Certificate Pin Provide domain name and certificate fingerprint to configure authentication server certificate pin. ### Required Editions
User Permissions Needed
To create and modify Enhanced Mobile App Security settings:

Manage Enhanced Mobile App Security

AND

Modify Metadata

1. In the Mobile Security Setup UI, enable **Authentication Server Certificate Pinning**. ![Authentication Server Certificate Pin](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app_plus-264-0-0-production-enus/24dbd8e3-8820-4d77-ab26-f3c195bfdf66/salesforce_app_plus/images/mobile_security_auth_server_cert_pin.png) 2. Enter the domain name for the server that you want to pin the certificate for in the **Domain Name** field. For example, `https://login.salesforce.com`. 3. For the **Certificate Fingerprint**, you have two options to obtain the value. You can obtain the Certificate Fingerprint value from your org’s internal team that owns the certificate. You can use a third-party application such as [www.ssllabs.com](https://www.ssllabs.com/) to obtain the Certificate Fingerprint value. ![Certificate Fingerpring Value](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app_plus-264-0-0-production-enus/24dbd8e3-8820-4d77-ab26-f3c195bfdf66/salesforce_app_plus/images/mobile_security_auth_server_cert_pin_ssl.png) 4. Copy and paste the value into the **Certificate Fingerprint** field. ![Certificate Fingerprint](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app_plus-264-0-0-production-enus/24dbd8e3-8820-4d77-ab26-f3c195bfdf66/salesforce_app_plus/images/mobile_security_auth_server_cert_pin_hash.png) 5. Click **Save**. Here are a few things to keep in mind about authentication server certificate pins. - The test of the server certificate happens when the user logs in. This policy doesn’t replace the Man-in-the-Middle security policy. - The certificate is set after the user logs in for the first time, and is enforced for subsequent logins on that server. If the policy is updated or removed, then the updated policy is picked up by the app the next time the user logs in. - The authentication server pins aren’t enforced if the user is using advanced authentication in Safari. - If the pinned server certificate is rotated, but the app isn’t updated, then the user can’t log in because of the mismatched pins. A workaround is to ask the user to reinstall the app to obtain the new certificate pin value. - It’s recommended that you use the pin of the intermediate certificate, since that provides a good balance between how frequently it expires and security value. # Configure Basic Connected App Settings For all connected apps, define the basics, which include the app’s name, logo, and contact information. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: all editions

User Permissions Needed
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage Connected Apps

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. 1. From Setup, enter External Client Apps in the Quick Find box, and then select **External Client App Settings**. 2. To create a connected app, select **New Connected App**. 3. Enter the connected app’s name, which displays in the App Manager and on its App Launcher tile. The connected app name must be unique within your org. If the connected app was created in Spring ’14 or later, you can reuse the name of a deleted connected app. 4. Enter the API name used when referring to your app from a program. It defaults to a version of the name without spaces. Only letters, numbers, and underscores are allowed, so if the original app name contains any other characters, edit the default name. 5. Enter the contact email for Salesforce to use in case we want to contact you or your support team. This address isn’t given to Salesforce admins who install the app. 6. Enter the contact phone for Salesforce to use in case we want to contact you or your support team. This number isn’t given to Salesforce admins who install the app. 7. To display your logo with the connected app on the App Launcher tile, enter a logo image URL. Your logo also displays on the consent page that users see when approving the app. The logo URL must use HTTPS. The logo image must be a GIF, JPG, or PNG file with a file size that’s preferably under 20 KB and no more than 100 KB. We resize the image to 128 pixels by 128 pixels, so make sure that you like how it looks. If you don’t supply a logo, Salesforce generates one for you by using the app’s initials. To upload your logo image, click **Upload logo image**. Select an image from your local file system that meets the size requirements. When your upload is successful, the URL to the logo appears in the Logo Image URL field. To upload a Salesforce sample logo, click **Choose one of our sample logos**. The sample logos include Salesforce apps, third-party apps, and standards bodies. Click the logo that you want, and then copy and paste the appropriate URLs into the Logo Image URL field and Icon URL field. To use a logo hosted publicly on Salesforce servers, upload an image as a document from the Documents tab. To get the URL, view the image, copy the URL, and paste the URL in the Logo Image URL field. 8. If you have a web page with more information about your app, provide an info URL. 9. To display a description on the connected app’s App Launcher tile, enter up to 256 characters. If you don’t supply a description, only the connected app’s name displays on the tile. 10. Configure the connected app depending on its use case. See [Create a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create.htm&release=264.0.0&type=5 "When you create a connected app, make sure that you understand how it’s going to be used so you can configure the appropriate settings. For example, if you’re creating a connected app to integrate an external application with your Salesforce API, configure the connected app with OAuth authorization settings. Or if you’re creating a connected app to act as a service provider in a SAML single sign-on (SSO) flow, configure SAML settings."). # Configure Bulk Timesheet Creation Supervisors can configure the settings to enable the bulk creation of timesheets. ### Required Editions
Available in: Lightning Experience
Available in: All editions of Field Service Plus for Energy & Utilities, and all editions of Asset Service Lifecycle Management
User Permissions Needed
To access Timesheets objects: Labor Cost Optimization Admin
1. From the object management settings for Time Sheet, go to **Button , Link and Actions**. You can also configure a Bulk Creation of Time Sheet Entry and Time Sheet Entry Items as well. 2. Click **New Button or Link**. 3. In the Label field, enter Bulk Create. 4. In the Link field, enter: /lightning/cmp/ifstmsht\_\_createBulkTimesheetsModal. 5. Set the Behavior as **Display in existing window without sidebar or header**. 6. Save your changes. 7. From the object management settings for Time sheet, go to **List View Button Layout**. 8. Select **List View** and click **Edit**. 9. Add the **Bulk Create** button. 10. Save your changes. # Configure Caching for a Data Mapper To configure top-level caching for a Data Mapper, go to the Procedure Configuration and set the **Salesforce Platform Cache Type** and **Time To Live In Minutes** properties. 1. Go to the Data Mapper configuration page and click **Options**. 2. Set the **Salesforce Platform Cache Type** to one of these: - **None** — For no caching ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Do not cache when working with confidential or regulated information unless security settings are enforced. - **Session Cache** — For data related to users and their login sessions - **Org Cache** — For all other types of data ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_important.png) Important Use Org Cache only for non-sensitive data. 3. Specify a value for **Time To Live In Minutes**. This setting determines how long data remains in the cache. The minimum value is 5. Default and maximum values depend on the cache type: - **Session Cache** — The default value is 5. The maximum value is 480, equivalent to 8 hours. The cache is cleared when the user's session expires regardless of this value. - **Org Cache** — The default value is 1440, equivalent to 24 hours. The maximum value is 2880, equivalent to 48 hours. 4. Configure field-level security to check the user's access permissions for the fields before executing the Data Mapper. Selecting this option disables the Org Cache, but not the Session Cache. 5. To include null values in the Data Mapper response, select **Overwrite target for all null inputs**. 6. Save your changes. 7. To observe the effects of caching when testing the Data Mapper, deselect **Ignore Cache**. # Configure Channel Revenue Management Features Easily set up Channel Revenue Management features by using Salesforce Go. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions.
1. Select **Salesforce Go** from the gear menu or from the main Setup menu. 2. The search feature in Salesforce Go suggests feature names that are similar to the search term you enter. In Salesforce Go, Channel Revenue Management features are part of Manufacturing. You can search for any Channel Revenue Management feature within Manufacturing, such as Channel Partner Inventory or Price Protection. 3. Go to the **Feature Sets** tab and apply filters by Cloud, Feature, or Feature Set. Channel Revenue Management features are available in the Manage Partner Engagement feature set. 4. Click **Keep Going** and follow the guided prompts to complete the setup. To learn more about Salesforce Go, see [Discover and Set Up Features with Salesforce Go](https://help.salesforce.com/s/articleView?id=xcloud.setup_salesforce_go.htm&language=en_US&type=5). # Configure Clickjack Protection Clickjacking is a type of attack that tricks users into clicking something, such as a button or link. The click sends an HTTP request that performs malicious actions that can lead to data intrusion, unauthorized emails, changed credentials, or similar results. To help protect against this kind of attack, most Salesforce pages can only be served in an inline frame by a page on the same domain. Learn which types of pages can be framed and how to configure the related clickjack settings. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Contact Manager, Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
## Clickjack Protection Clickjacking uses a trusted domain or site to trick users into clicking a malicious link. With clickjacking, the trusted domain is served in an iframe, then a hidden or transparent UI control is served in the same location. For example, a transparent button on top of the Save button. The user thinks that they’re clicking the top-level iframe when they’re really clicking the hidden UI control. To protect your users, Salesforce uses clickjack protection. For pages that Salesforce serves, clickjack protection is implemented through the Content Security Policy (CSP) `frame-ancestors` HTTP response header directive. An HTTP response header is part of the HTTP response passed from a server to a browser or client machine in response to an HTTP request. Within that header, a directive is a value that provides additional context or instructions. The CSP `frame-ancestors` HTTP response header directive tells the browser which sites are allowed to load the page in an iframe. Salesforce applies the CSP `frame-ancestors` HTTP response header directive to the pages that Salesforce serves when that directive is supported. To expand clickjack protection to more users, you can include that directive in the rare cases when Salesforce can’t identify whether the requesting app or specialized browser supports the directive. For more information, see [Apply Clickjack Protection to Less Common Browsers](https://help.salesforce.com/s/articleView?id=xcloud.security_clickjack_apply_unclear_support.htm&release=264.0.0&type=5 "To help protect your users against clickjacking attacks, Salesforce applies the Content-Security-Policy: frame-ancestors HTTP header directive to the pages that Salesforce serves when that directive is supported. To extend clickjack protection to more users, include that directive in the rare cases when Salesforce can’t identify whether the requesting app or specialized browser supports the directive."). Three CSP `frame-ancestors` values apply in Salesforce. The page type determines whether that HTTP response header is present by default and which of these options are available within the header. - `'none'`—prevents loading this page in an iframe. - `'self'`–pages from the same origin as the protected page, including the same URL scheme and port number, can load this page in an iframe. - A list of domains—the domains that can load this page in an iframe. The list can include wildcards. For example, `*.force.com`. Usually, this option is combined with the `'self'` value. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note The CSP `frame-ancestors` header directive replaces the obsolete `X-Frame-Options` header. For more information, see [X-Frame-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) on the Mozilla Developer Network. ## CSP Header Size Some infrastructure limits the maximum size of HTTP headers. If you allow multiple domains to frame content served by your org, keep the size of the CSP header under 12 KB. Salesforce customers report issues when the header size approaches 16 KB, and third parties often add to the header during processing. ## Salesforce Login Pages External sites can’t frame Salesforce login pages, including generic login pages, such as https://login.salesforce.com. Also, external sites can’t frame your org’s My Domain login page, such as https://mycompany.my.salesforce.com. For these pages, the CSP `frame-ancestors` HTTP response header is set to `'none'`, and you can’t change the HTTP response header. ## Lightning Pages Lightning pages delivered by Salesforce as part of the Platform can frame Lightning pages within the same org. The URLs for these pages contain lightning.force.com and a unique identifier in the form of a 16-digit number. For these pages, the CSP `frame-ancestors` HTTP response header is set to `'self'`, and you can’t change the HTTP response header directive. For details on clickjack protection options for your Experience Cloud site’s Lightning page, see the section of this topic on Experience Cloud sites. ## Salesforce Classic Pages External sites can’t frame pages built in Salesforce Classic and delivered by Salesforce. Examples of Salesforce Classic Pages include Setup pages and the pages for Salesforce objects, such as the Account detail page. Although users can view these pages in Lightning mode, the pages were built using Salesforce Classic. Two Session Settings prohibit framing of Classic pages delivered by Salesforce: **Enable clickjack protection for Setup pages** and **Enable clickjack protection for non-Setup Salesforce pages**. These settings are enabled by default and can’t be disabled. To disable these settings, contact Salesforce Customer Support. ## Visualforce Pages By default, Visualforce pages can be loaded in an iframe. For Visualforce pages with headers, the CSP `frame-ancestors` HTTP response header directive is absent. To prevent external websites from loading your Visualforce pages in an iframe, define the external domains that you trust to frame your Visualforce pages, and then enable two session settings. For more information, see [Enable Clickjack Protection for Visualforce Pages](https://help.salesforce.com/s/articleView?id=xcloud.security_clickjack_enable_visualforce.htm&release=264.0.0&type=5 "To help protect against clickjack attacks, prevent external sites from loading your Visualforce pages in an inline frame (iframe). Optionally, you can allow trusted external sites to frame your Visualforce pages.") and [Specify Trusted Domains for Inline Frames](https://help.salesforce.com/s/articleView?id=xcloud.security_clickjack_specify_iframe_trusted_domains.htm&release=264.0.0&type=5 "To allow external sites to load your Visualforce pages or surveys in an inline frame (iframe), you must add each trusted domain to an allowlist in Session Settings. External domains that aren't on the allowlist can't frame your pages.") in Salesforce Help. Because browsers block third-party cookies, framing an authenticated Visualforce page requires additional steps. See [Put Visualforce Pages on External Domains](https://developer.salesforce.com/docs/atlas.en-us.pages.meta/pages/pages_quick_start_external_iframe.htm) in the Visualforce Developer Guide. ## Experience Cloud Sites By default, Experience Cloud site pages can frame other site pages with the same domain and protocol security. The CSP `frame-ancestors` HTTP response header directive for these pages is set to `'self'`. You can allow trusted external domains to frame your site pages through page-level settings. For Experience Builder site pages, clickjack settings are in the Security & Privacy settings. For Salesforce Tabs and Visualforce Sites, clickjack settings are in the page administration for Force.com sites in Experience Workspaces. For more information, see [Enable Clickjack Protection in Experience Cloud Sites](https://help.salesforce.com/s/articleView?id=experience.networks_clickjack_protection.htm&type=5&language=en_US) in Salesforce Help. ## Salesforce Sites and Force.com Sites By default, a page within Salesforce Sites and Force.com Sites can frame other site pages with the same domain and protocol security. The CSP `frame-ancestors` HTTP response header directive for these pages is set to `'self'`. You can allow trusted external domains to frame your site pages through page-level site configuration settings. To set the clickjack protection level and trusted domains for each page, edit the configuration in Site.com Studio. For more information, see [Enable Clickjack Protection in Site.com](https://help.salesforce.com/s/articleView?id=platform.siteforce_clickjacking_enable.htm&type=5&language=en_US) in Salesforce Help. ## Surveys By default, Surveys can be framed by pages with the same domain and protocol security. The CSP `frame-ancestors` HTTP response header directive is set to `'self'`. Optionally, you can define the external domains that you trust to frame the surveys for your org. For more information, see [Specify Trusted Domains for Inline Frames](https://help.salesforce.com/s/articleView?id=xcloud.security_clickjack_specify_iframe_trusted_domains.htm&release=264.0.0&type=5 "To allow external sites to load your Visualforce pages or surveys in an inline frame (iframe), you must add each trusted domain to an allowlist in Session Settings. External domains that aren't on the allowlist can't frame your pages.") in Salesforce Help. ## Disclosure and Compliance Hub Connector By default, Disclosure and Compliance Hub Connector can be framed by pages with the same domain and protocol security. The CSP `frame-ancestors` HTTP response header directive is set to `'self'`. Optionally, you can define the external domains that you trust to frame the Disclosure and Compliance Hub Connector for your org. For more information, see [Specify Trusted Domains for Inline Frames](https://help.salesforce.com/s/articleView?id=xcloud.security_clickjack_specify_iframe_trusted_domains.htm&release=264.0.0&type=5 "To allow external sites to load your Visualforce pages or surveys in an inline frame (iframe), you must add each trusted domain to an allowlist in Session Settings. External domains that aren't on the allowlist can't frame your pages.") in Salesforce Help. - **[Enable Clickjack Protection for Visualforce Pages](https://help.salesforce.com/s/articleView?id=xcloud.security_clickjack_enable_visualforce.htm&release=264.0.0&type=5)** To help protect against clickjack attacks, prevent external sites from loading your Visualforce pages in an inline frame (iframe). Optionally, you can allow trusted external sites to frame your Visualforce pages. - **[Specify Trusted Domains for Inline Frames](https://help.salesforce.com/s/articleView?id=xcloud.security_clickjack_specify_iframe_trusted_domains.htm&release=264.0.0&type=5)** To allow external sites to load your Visualforce pages or surveys in an inline frame (iframe), you must add each trusted domain to an allowlist in Session Settings. External domains that aren't on the allowlist can't frame your pages. - **[Apply Clickjack Protection to Less Common Browsers](https://help.salesforce.com/s/articleView?id=xcloud.security_clickjack_apply_unclear_support.htm&release=264.0.0&type=5)** To help protect your users against clickjacking attacks, Salesforce applies the Content-Security-Policy: frame-ancestors HTTP header directive to the pages that Salesforce serves when that directive is supported. To extend clickjack protection to more users, include that directive in the rare cases when Salesforce can’t identify whether the requesting app or specialized browser supports the directive. #### See Also - [Session Security](https://help.salesforce.com/s/articleView?id=xcloud.security_overview_sessions.htm&release=264.0.0&type=5 "After logging in, a user establishes a session with the platform. Use session security to limit exposure to your network when a user leaves the computer unattended while still logged in. Session security also limits the risk of internal attacks, such as when one employee tries to use another employee’s session. Choose from several session settings to control session behavior.") - [_Mozilla Developer Network_: CSP: frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) # Configure Client Credential Flow Policies for External Client Apps After Client Credentials Flows setting is enabled, configure the flow’s policies. 1. From Setup, in the Quick Find box, enter External Client Apps Manager, and then select **External Client Apps Manager**. 2. From the actions list for the external client app, select **Edit Policies**. 3. Select **Enable Client Credentials Flow**. 4. Enter the execution user’s username. 5. Save the policies. # Configure Communication Consent Options Select which Global Consent Definitions appear on the Communication Consent layout, and select up to three attributes to identify each consent record. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires the Privacy Center license.
User Permissions Needed
To configure communication consent options: Manage Global Consent
The Communication Consent layout controls how communication consent records appear in the Global Consent component. This layout applies to communication-related consent, such as newsletters. Configuring its options controls which consent records appear on the layout and how they're identified. You can add only published definitions, and each definition links to only one layout. 1. From the App Launcher, find and select **Privacy Center**, and then select the **Global Consent** tab. 2. Under **Configuration**, select **Guided Consent Management Layouts**. 3. Open the **Communication Consent** layout. 4. In the **Included Consents** section, select the Global Consent Definitions to include on the layout. 5. For each definition, select up to three attributes to help identify each consent record. 6. Select how to label consent records on the layout. 7. Save your changes. Configure the other Guided Consent Management Layout options and record configurations. To display these layouts to your users, add the Global Consent component to your data subject record pages in Lightning App Builder. Supported objects for data subject record pages are Individual, Account, Contact, Lead, and User. #### See Also - [Create and Configure Lightning Record or Home Pages](https://help.salesforce.com/s/articleView?id=platform.lightning_app_builder_customize_lex_pages.htm&type=5&language=en_US) - [Configure Communication Consent Records](https://help.salesforce.com/s/articleView?id=xcloud.global_consent_comm_records.htm&type=5&language=en_US) # Configure Communication Consent Records Select which attributes appear on the individual consent record page for Communication Consent. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires the Privacy Center license.
User Permissions Needed
To configure communication consent records: Manage Global Consent
This setting controls the individual record view for Communication Consent. Any custom attributes you configured earlier are available to include. 1. From the App Launcher, find and select **Privacy Center**, and then select the **Global Consent** tab. 2. Under **Configuration**, select **Guided Consent Management Layouts**. 3. Open the **Communication Consent** layout. 4. Go to the **Record Configuration** section. 5. Under **Fields and Values Displayed**, select the attributes to appear on the individual consent record page, including any custom attributes. 6. Save your changes. #### See Also - [Configure Action Consent Options](https://help.salesforce.com/s/articleView?id=xcloud.global_consent_action_options.htm&type=5&language=en_US) # Configure Community Profiles for Flexcards (Managed Package) For the managed package runtime, ensure that your users see Flexcards on Experience Builder sites by configuring user profile settings. Enable the appropriate interface first. Then configure custom object permissions and Apex class access. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Ensure that you are using the Original Profile Interface by disabling the Enhanced Profile User Interface. See [Disable Enhanced Profile User Interface (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_disable_enhanced_profile_user_interface.htm&release=264.0.0&type=5 "For the managed package runtime, enable the appropriate interface before configuring Community profile settings that ensure that your users see Flexcards on Experience Builder site. Use the Original Profile Interface."). 2. Complete the following tasks in any order: - Grant access to the necessary custom objects. See [Configure Custom Object Permissions for Community Profiles (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_custom_object_permissions_for_community_profiles.htm&release=264.0.0&type=5 "For the managed package runtime, configure custom object permission to ensure that your users see Flexcards on Experience Builder sites. Give access to the necessary objects."). - Grant access to the necessary Apex classes. See [Grant Apex Class Access to a Community Profile (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_grant_apex_class_access_to_a_community_profile.htm&release=264.0.0&type=5 "For the managed package runtime, configure Apex class access to ensure that your users see Flexcards on Experience Builder sites. Give access to the necessary Apex classes."). - **[Configure Custom Object Permissions for Community Profiles (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_custom_object_permissions_for_community_profiles.htm&release=264.0.0&type=5)** For the managed package runtime, configure custom object permission to ensure that your users see Flexcards on Experience Builder sites. Give access to the necessary objects. - **[Grant Apex Class Access to a Community Profile (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_grant_apex_class_access_to_a_community_profile.htm&release=264.0.0&type=5)** For the managed package runtime, configure Apex class access to ensure that your users see Flexcards on Experience Builder sites. Give access to the necessary Apex classes. # Configure Consent Export Settings Configure where Global Consent Manager exports consent records, and enable export to your Amazon S3 bucket. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires the Privacy Center license.
User Permissions Needed
To configure consent export settings: Manage Global Consent
Before you configure export settings, set up an [AWS Signature v4 External Credential](https://help.salesforce.com/s/articleView?id=xcloud.nc_create_edit_awssig4_ext_cred.htm&type=5&language=en_US) in Salesforce that authenticates to your Amazon S3 bucket. Also create a permission set that includes External Credential Principal Access and the Manage Global Consent user permission, and assign it to your admin user. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note When configuring the External Credential, use the External ID shown on the Consent Export Settings page for the STS External ID field. Global Consent Manager exports consent records as CSV files to your Amazon S3 bucket. Each file is written to a path keyed by prefix, Global Consent Definition ID, date, and timestamp, in the form `[prefix]/[consentDefinitionId]/MM-DD-YYYY/[timestamp][UUID].csv`. 1. From Setup, under **Global Consent Manager**, select **Consent Export Settings**. 2. In the **Destination** section, for **Named Credential**, select the named credential that authenticates to your AWS account. 3. For **S3 Bucket**, enter the name of the bucket where Global Consent Manager exports consent records. The named credential needs write permission for this bucket. 4. For **S3 Prefix**, enter a path within the bucket where Global Consent Manager writes the export files. 5. Click **Save**. Enable export only after you save the configuration. 6. In the **Activation** section, turn on **Consent Data Export**. In the **Status** section, monitor the status of the consent data export. #### See Also - [Review the Consent Audit Log](https://help.salesforce.com/s/articleView?id=xcloud.global_consent_audit.htm&type=5&language=en_US) # Configure Core Rebates System Permissions for Data Cloud Salesforce Connector Configure the core Rebates system permissions on the Data Cloud Salesforce Connector permission set to prevent object accessibility errors during installation or data stream deployment. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions
User Permissions Needed
To configure data kit installation permissions

Salesforce org: Customize Application

AND

Data Cloud org: Data Cloud Admin

1. Log in to the Salesforce core org that you connected to Data Cloud. 2. From Setup, in the Quick Find box, enter Permission Sets, and then select **Permission Sets**. 3. Find and select the **Data Cloud Salesforce Connector** permission set. 4. Click **System Permissions**, and then click **Edit**. 5. Select the checkbox to enable the appropriate permission based on your active product license. - **Use Manufacturing Rebates** (if using Manufacturing Rebates) - **Use Rebate and Accrual Management Advanced** (if using Advanced Rebates) 6. Click **Save**. 7. Return to your Data Cloud org, go to **Data Cloud Setup** | **Data Kits**, and retry your target deployment or data stream initialization. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note After these system permissions are enabled for the connector, you can also create standalone data streams for individual core Rebate objects directly from the Data Streams tab without installing the complete data kit. # Configure Custom Fields To gain the deeper insights that Proactive Asset Service has to offer, several custom fields must be configured. ## Create Custom Fields To create the fields, go to **Object Manager**, and then **Fields and Relationships** in the Asset and Product objects: - On the Asset object: - Field Name = TotalUsage, Data Type = number - Field Name = TotalUsageUOM, Data Type = text - On the Product object: - Field Name = ExpectedLifespan, Data Type = number - Field Name = ExpectedLifespanUOM, Data Type = text - Field Name = ExpectedLifetimeUsage, Data Type = number - Field Name = ExpectedLifetimeUsageUOM, Data Type = text ## Map the Custom Fields Manually map the custom fields to the corresponding DMO fields. Go to Data Cloud and then **Data Stream**. Click each data stream listed. Click **Review** under Data Mapping, map the fields listed, and save and close the mapping. # Configure Custom Object Permissions (Managed Package) For the managed package runtime, configure custom object permissions to ensure that your users see Vlocity Card Layouts on Experience sites. Give access to the necessary objects. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From Setup, type Users in the Quick Find box and click **Profiles**. 2. Find the profile for the users who will be accessing the community and click **Edit**. 3. Scroll to the Custom Object Permissions section. 4. Select **View All Records** for these objects: `Vlocity Actions`, `Vlocity Cards`, and `Vlocity UI Layouts`. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You can't change Custom Object Permissions for any of the default profiles. For these profiles, the checkboxes in this section are not selectable. 5. Select **Read**, **Create**, **Edit**, **Delete**, and **View All Records** for the `Vlocity UI Templates` object. 6. Scroll to the Field Level Security section, and click **View** next to the the `Vlocity UI Templates` object. 7. Click **Edit**, and ensure that **Read**is enabled for the `vlocity_cmt__Active__c` field. 8. Click **Save**. # Configure Custom Object Permissions for Community Profiles (Managed Package) For the managed package runtime, configure custom object permission to ensure that your users see Flexcards on Experience Builder sites. Give access to the necessary objects. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). See [Configure Community Profiles for Flexcards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_community_profiles_for_flexcards.htm&release=264.0.0&type=5 "For the managed package runtime, ensure that your users see Flexcards on Experience Builder sites by configuring user profile settings. Enable the appropriate interface first. Then configure custom object permissions and Apex class access."). Before You Begin - Ensure that you're using the Original Profile Interface. See [Disable Enhanced Profile User Interface (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_disable_enhanced_profile_user_interface.htm&release=264.0.0&type=5 "For the managed package runtime, enable the appropriate interface before configuring Community profile settings that ensure that your users see Flexcards on Experience Builder site. Use the Original Profile Interface."). 1. From Setup, type Users in the Quick Find box and click **Profiles**. 2. Find the profile for the users who will be accessing the Experience Builder site and click **Edit**. 3. Scroll to the Custom Object Permissions section. 4. Check **View All Records** for the following objects: - Vlocity Actions - Vlocity Cards ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You can't change Custom Object Permissions for any of the default profiles. For these profiles, the checkboxes in this section are not selectable. 5. Click **Save**. What’s next: If you haven't already, [Grant Apex Class Access to a Community Profile (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_grant_apex_class_access_to_a_community_profile.htm&release=264.0.0&type=5 "For the managed package runtime, configure Apex class access to ensure that your users see Flexcards on Experience Builder sites. Give access to the necessary Apex classes."). # Configure Custom Scopes for External Client Apps Personalize your external client apps by using OAuth custom scopes. Like with connected apps, OAuth custom scopes define the permissions of an external client app to access protected resources hosted by an external entity. External client apps support packaging these custom scopes for distribution. ### Required Editions
Available in: Professional, Performance, Unlimited, and Developer Editions
OAuth custom scopes for external client apps work the same as [OAuth custom scopes for connected apps](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_customscopes.htm&release=264.0.0&type=5 "An external client app can use the OAuth authorization protocol to access protected resources. As part of the protocol, OAuth default scopes fine-tune the app’s permissions to access protected resources in Salesforce. However, these default scopes are insufficient when an external entity hosts the protected resource. In this scenario, Salesforce plays the role of OAuth authentication and authorization provider, but it has little knowledge about the resource it’s protecting. To define an external client app’s permissions to access protected resources hosted by an external entity, create an OAuth custom scope. The custom scope tells the external entity which information the external client app is authorized to access."). To use a custom scope, you must first create the scope and then assign it to the external client app. Custom scopes can be set in the Policies, Settings, and Package Defaults tabs for external client apps. Developers can set custom scopes for local external client apps and define default values for apps for packaging. Admins can add, edit, or remove custom scopes from their external client apps. ## Custom Scopes and 2GP Managed Packaging Because custom scopes are created independently from external client apps, they must be packaged separately as well. To package an external client app with custom scopes, package the custom scopes by using second-generation (2GP) managed packaging, and then package the external client app as a 2GP managed package. To install an external client app that includes custom scopes, you must install the custom scope package before you install the external client app package. If your custom scopes use custom labels as descriptions, package these labels separately as well. In this case you must package the custom labels by using 2GP managed packaging, then package the custom scopes by using 2GP managed packaging, and then package the external client app as a 2GP managed package. The installation process must follow this order as well. To install an external client app that includes custom scopes with custom labels, first install the custom label package, then the custom scope package, and then install the external client app package. # Configure Data Cloud Connector To ingest rebate objects and fields into Data Cloud, update the system permissions for the Data Cloud Salesforce Connector in your Salesforce org. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
1. Log in to the Salesforce org that contains the objects and fields that you want to ingest into Data Cloud. 2. From Setup, in the Quick Find box, enter Permission Sets, and then select Permission Sets. 3. Select the Data Cloud Salesforce Connector permission set. The Data Cloud Salesforce Connector permission set is available only after you connect your org to Data Cloud. 4. Enable the Use Rebate and Accrual Management Advanced and Batch Management User permissions in the Data Cloud Salesforce Connector permission set. 5. From Apps, select Object Settings. 6. Select the object that you want to ingest into Data Cloud. 7. To change the object permissions, click Edit. 8. Enable Read All, View All Records, and Edit permissions for these objects, ensuring Read Access for each field: - Rebate Program - Rebate Program Accrual Period - Rebate Program Member - Rebate Program Member Accrual - Rebate Program Member Accrual Adjustment - Rebate Program Member Payout - Program Rebate Type Program Rebate Type Aggregation Field - Program Rebate Type Accrual - Program Rebate Type Accrual Source - Program Rebate Type Benefit, - Program Rebate Type Payout, - Program Rebate Type Payout Source ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note When processing the Rebate Configuration Generation (or subsequent Rebate DPE templates) in an environment where Data Cloud was already active prior to setup, the DPE job may fail or throw data visibility/connector errors. Before running any Advanced Rebate DPE configurations, ensure that you manually verify and assign the object-level permissions to the connector profile. # Configure Date and Time Settings in Data Mappers Configure the default date format within Omnistudio Data Mappers. In Omnistudio, a date, time, or datetime field’s input is processed by using a list of predefined formats. However, if you want Omnistudio to use the date/time format associated with a user's locale, use the UserLocaleDateTime Omni Interaction Configuration setting. 1. From Setup, enter Omni Interaction Configuration in the Quick Find box, and then select **Omni Interaction Configuration**. 2. Click **New Omni Interaction Configuration**. 3. For label and name, enter UserLocaleDateTime without space and without changing the case. 4. Enter true as the value. 5. Save your changes. To test if the configuration works, find or create a user with a locale that uses the dd/mm/yyyy date format, for example, English (India). Then, create an Omniscript that uses a Data Mapper (Load or Extract) with a date input. Add a date in the dd/mm/yyyy format. With the correct configuration, the Data Mapper receives the user's date, time, or datetime input as a string and parses it to a date, time, or datetime by verifying the user's locale settings. # Configure Deep Linking for the Salesforce Mobile App Use supported URL schemes for the Salesforce mobile application for Android and iOS to launch Salesforce from a third-party or web application. You can customize a URL scheme to perform a specific action when Salesforce launches. For example, if a user receives an email about a feed post, you can create a link for the user to tap to view the post in the Salesforce Mobile app. Salesforce-supported URL schemes allow your users to launch the Salesforce Mobile app and perform one of several actions. - View a specific record in Salesforce, such as a record page, object home page, or feed post. - View and download files. - Follow a user and navigate to the user profile page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note For a better experience on iOS, we recommend using universal links instead of URL schemes. For more information, see [Open Links with One Tap](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_universal_links.htm&release=264.0.0&type=5 "When Salesforce mobile app users tap Lightning URL and Chatter notification links on their phones, they’re taken directly to the mobile app. Learn more about which URL types are supported."). - **[Salesforce App URL Scheme Format](https://help.salesforce.com/s/articleView?id=xcloud.sapp_url_schemes_format.htm&release=264.0.0&type=5)** You can use two different formats to make a request to a Salesforce URL scheme. - **[Additional Query Parameters](https://help.salesforce.com/s/articleView?id=xcloud.sapp_url_schemes_query_additional.htm&release=264.0.0&type=5)** Salesforce Mobile app URL schemes support additional, optional query parameters. These parameters let you create links for users who belong to multiple organizations or Experience Cloud sites such that they can be correctly redirected. # Configure Default Settings for a Packaged External Client App External client apps include default values when packaged for distribution. These values show up in the policies tab on a distributed external client app and are edited by admins. If a developer configures custom values in the Settings tab of an external client app before packaging, those configurations don't affect the packaged policies. To change the policies values that are packaged with the app, configure the settings in the Package Default tab. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To rotate OAuth client credentials Create, edit, and delete External Client Apps
1. From Setup, in the Quick Find box, enter External Client Apps Manager, and then select **External Client Apps Manager**. 2. Click the name of the external client app. 3. On the Package Defaults tab, click **Edit**. 4. Configure the policies values to include as defaults when the external client app is packaged. 5. Save the package default settings. # Configure Duplicate Detection for Deal Registrations Update the standard lead duplicate rule so channel managers can review duplicate deals without blocking partner submissions. ### Required Editions
Available in: Lightning Experience
Available in: Partner Cloud with Deal Registration for Partners enabled in Salesforce Go.
User Permissions Needed
Edit duplicate rules in Setup Customize Application
Complete channel manager page set up. Then add the Potential Duplicates component to the Lead record page. 1. In Setup, open **Duplicate Rules** and select **Standard Lead Duplicate Rule**. 2. Click **Edit**. 3. Under **Action on Create**, clear **Alert** and **Block**. 4. Keep the duplicate rule active and save your changes. 5. Submit a test deal that matches an existing lead, and verify that the duplicate appears in Potential Duplicates for channel managers. ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-partner_cloud-264-0-0-production-enus/cd9c08c3-2648-4867-ab9d-a0251a8a86a5/images/icon_warning.png) Warning Do not deactivate the duplicate rule. Deactivation prevents duplicate detection and leaves the Potential Duplicates component empty. # Configure Einstein Activity Capture for Partner Calendar Sync Create a dedicated configuration so that external partner users can connect their calendars for appointment scheduling. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions with Partner Ecosystem Management - Members or Partner Ecosystem Management - Login
User Permissions Needed
To configure Einstein Activity Capture: Partner EAC User
For partner users to connect external calendars: Partner EAC User
Set up the partner Experience Cloud site, and turn on Einstein Activity Capture (EAC). Confirm whether your company uses Google or Microsoft as its email provider. Before you add external partner users to a dedicated EAC configuration, assign them the required permission set. A dedicated EAC configuration gives external partner users access to connect their calendars for appointment scheduling. 1. From **Setup**, in the **Quick Find** box, enter Einstein Activity Capture, and then select **Settings**. 2. Start the EAC setup. 3. Select your email provider, Google or Microsoft, and complete the provider setup. Select the user-level provider option. 4. Create an EAC configuration for external partner users. 5. Assign the **Partner EAC User** permission set to each partner user who connects a calendar. 6. Add the partner users to the EAC configuration. 7. Save and activate the configuration. # Configure Elements in the LWC Omniscript Designer (Managed Package) For the managed package runtime, configure elements for your Omniscript in the Properties panel of the designer when an element is selected, such as the name, label, and instructions for a step element. Before you begin: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Create an Omniscript. See [Create an LWC Omniscript in the LWC Omniscript Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_lwc_omniscript_in_the_lwc_omniscript_designer.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC Omniscript to build a script in the LWC Omniscript Designer."). 2. Set up your Omniscript with optional settings. See [Set Up an Omniscript in the LWC Omniscript Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_set_up_an_omniscript_in_the_lwc_omniscript_designer.htm&release=264.0.0&type=5 "For the managed package runtime, configure optional settings for your Omniscript in the Setup panel of the LWC Omniscript Designer, such as making your Omniscript reusable or enabling tracking."). 3. Add elements to your Omniscript. See [Build an LWC Omniscript with Elements in the LWC Omniscript Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_an_lwc_omniscript_with_elements_in_the_lwc_omniscript_designer.htm&release=264.0.0&type=5 "For the managed package runtime, drag elements and entire Omniscripts from the Build panel onto the canvas to build your scripts in the Omniscript Designer."). To configure elements in the Lightning Web Component Omniscript Designer: 1. From your Omniscript, click an element on the canvas or the Navigation Panel to open the Properties panel. 2. Enter values for any required fields marked with an asterisk (\*), such as the **Name** field of a Text input element. 3. (Optional) Enter values for optional fields, such as the **Placeholder** and **Label** fields of a Text input element. 4. (Optional) To learn more about a specific property, hover over the tooltip icon (i) next to the name of the property. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/new_os_tooltip.png) 5. (Optional) For detailed documentation about your selected element, select the help icon (?) next to the name of the property. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/new_os_inproduct_help_icon.png) 6. To activate the element, click **Active**. # Configure Experience Cloud Settings for Headless Identity For headless registration, headless forgot password, and headless passwordless login, enable the flows from your Experience Cloud site and configure security and access settings. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
- **[Use Multiple Email Templates for Headless Flows](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_email_template_allowlist.htm&release=264.0.0&type=5)** By default, for the verification email sent to end users, the Headless Registration Flow, Headless Passwordless Login Flow, and Headless Forgot Password Flow use the email template specified in your Experience Cloud site’s email settings. To expand your email template options, create an email template allowlist using Metadata API. For example, create an allowlist with multiple, custom email templates that each provide a different branding experience. - **[Configure Experience Cloud Settings for Headless Registration](https://help.salesforce.com/s/articleView?id=xcloud.headless_identity_registration_settings.htm&release=264.0.0&type=5)** Before you set up the Headless Registration Flow, configure settings to control security and access for your app. - **[Configure Experience Cloud Settings for Headless Passwordless Login](https://help.salesforce.com/s/articleView?id=xcloud.headless_passwordless_login_settings.htm&release=264.0.0&type=5)** Before you build the Headless Passwordless Login Flow, configure these settings for security and access. - **[Configure Experience Cloud Settings for the Headless Forgot Password Flow](https://help.salesforce.com/s/articleView?id=xcloud.configure_headless_forgot_password_flow.htm&release=264.0.0&type=5)** Before you set up the Headless Forgot Password Flow, configure settings to control security and access for your off-platform app. - **[OAuth 2.0 for First-Party Applications: Configure Experience Cloud Settings](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_auth_challenge_experience_settings.htm&release=264.0.0&type=5)** Before you build headless username-password login, passwordless login, and registration flows using the OAuth 2.0 for First-Party Applications draft protocol, configure Experience Cloud settings on the Login & Registration page. - **[Configure Experience Cloud Settings for Headless User Discovery](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_discovery_settings.htm&release=264.0.0&type=5)** With headless user discovery, develop headless authorization flows that don’t require users to enter a username. To use headless user discovery for login, passwordless login, and forgot password flows, configure settings on the Experience Cloud Login & Registration page. # Configure Experience Cloud Settings for Headless Passwordless Login Before you build the Headless Passwordless Login Flow, configure these settings for security and access. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Before configuring these settings, complete these steps. - [Complete prerequisites for Headless Identity](https://help.salesforce.com/s/articleView?id=xcloud.headless_identity_prerequisites.htm&release=264.0.0&type=5 "Before you get started with a Headless Identity implementation for your off-platform apps, cross off these prerequisites in Salesforce."). - [Setup a connected app for the Authorization Code and Credentials Flow](https://help.salesforce.com/s/articleView?id=xcloud.authorization_code_credentials_configure.htm&type=5&language=en_US). For security, you must configure Salesforce to require either authentication or reCAPTCHA for your app’s initial request to Headless Passwordless Login API. Your security best practices depend on whether your app is a private client or a public client. If you’re implementing the flow with a private client, like a traditional client-server app with its own private backend, we recommend that you always require authentication. With this requirement, when your app submits information to the headless passwordless login endpoint, you must include an access token. To get the access token, use an internal integration user to complete an OAuth flow integrated with Salesforce, like the OAuth 2.0 web server flow. Include the `pwdless_login_api` scope when you complete this flow, either by configuring it in your connected app or passing it as a parameter. For a public client that can’t securely store information, like a single-page app, we recommend that you always require reCAPTCHA. With this requirement, you must include a reCAPTCHA token in POST requests when your app submits user information to Headless Passwordless Login API. To get a reCAPTCHA token, implement reCAPTCHA on your third-party app. For more information, see the reCAPTCHA documentation provided by [Google](https://developers.google.com/recaptcha). Salesforce supports these reCAPTCHA versions: v2, v3, and Enterprise. For a public client, we never recommend requiring authentication because the app can’t keep the access token secure. To expand your email template options for the one-time password (OTP) email sent to end users during the flow, opt in to email template allowlisting and create an allowlist with custom templates. See [Use Multiple Email Templates for Headless Flows](https://help.salesforce.com/s/articleView?id=sf.headless_identity_email_template_allowlist.htm&language=en_US). 1. From Setup, in the Quick Find box, enter Sites, and then select **All Sites**. 2. To access Experience Workspaces, next to your site name, click **Workspaces**. 3. Select **Administration**, and then select **Login & Registration**. 4. From the Administration workspace, select **Login & Registration**. 5. Under Headless Passwordless Login, select **Allow login via the Headless Passwordless Login API**. 6. To require an access token when your app submits information to Headless Passwordless Login API, select **Require authentication to access this API**. 7. To require a reCAPTCHA token when your app submits user information to Headless Passwordless Login API, select **Require reCAPTCHA to access this API**. 8. If you selected **Require reCAPTCHA to access this API**, configure reCAPTCHA settings. 1. For Secret Key, enter the key from your reCAPTCHA API key pair. 2. For Score Threshold, enter a threshold value between 0.5 and 1. If you’re using reCAPTCHA v3, this value determines the score that you accept. Scores closer to 0.5 are more likely to be bots, while scores closer to 1 are more likely to be valid users. For more information, see the [reCAPTCHA v3 documentation](https://developers.google.com/recaptcha/docs/v3). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note If you require reCAPTCHA for other Headless Identity flows, like registration and forgot password, these settings also apply. 9. To use a headless user discovery handler to look up users, take these steps. 1. For User Discovery Handler, click ![Magnifying glass icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png) and select an Apex class that implements the `Auth.HeadlessUserDiscoveryHandler` interface. Or, to generate a template class, click **Create a headless user discovery handler template** and customize the code later. 2. For Run As, select a user to run the handler. We recommend that you use an integration user account instead of a real user. 10. Save your settings. 11. Optionally, customize the OTP email that’s sent to end users for verification. If you created an email template allowlist, Salesforce defaults to this email template if you don’t include an `emailtemplate` parameter in your request. 1. From the Administration workspace, select **Emails**. 2. For One-Time Password, click ![Magnifying glass icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png). 3. In the window that appears, select **Experience Cloud: One-Time Password Email**. 4. Save your changes. 5. To customize the email, [edit its default content](https://help.salesforce.com/s/articleView?id=experience.networks_one_time_password_email.htm&type=5&language=en_US). You’re now ready to implement the Headless Passwordless Login Flow. Check out the instructions for your app type. - [Public Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_passwordless_login_public_clients.htm&release=264.0.0&type=5 "Make it easy for customers and partner users to log in to an off-platform app with the Headless Passwordless Login Flow. With this flow, users log in by entering their email address or phone number and verifying their identity with a one-time password (OTP). You control the front-end experience in your app. On the backend, your app calls Headless Passwordless Login API via an Experience Cloud site to log the user in. These steps show you how the flow works with a public client, like a single-page app, that can’t keep information private.") - [Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_passwordless_login_private_clients.htm&release=264.0.0&type=5 "To simplify the login process for your off-platform app, configure the Headless Passwordless Login Flow. Users log in to your app by entering their email address or phone number and verifying their identity with a one-time password (OTP). On the front end, you control the user experience in your app. On the backend, your app calls Headless Passwordless Login API via an Experience Cloud site to log the user in. These steps show you how the flow works with a private client, like a traditional client-server app, that can keep information confidential.") # Configure Experience Cloud Settings for Headless Registration Before you set up the Headless Registration Flow, configure settings to control security and access for your app. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Before you configure your Experience Cloud settings, complete these tasks. - [Complete Prerequisites for Headless Identity](https://help.salesforce.com/s/articleView?id=xcloud.headless_identity_prerequisites.htm&type=5&language=en_US). - [Configure a Connected App for the Authorization Code and Credentials Flow](https://help.salesforce.com/s/articleView?id=xcloud.authorization_code_credentials_configure.htm&type=5&language=en_US). This flow is the foundation of the Headless Registration Flow. Depending on your use case, there are a few considerations before you configure these settings. For security, you must configure Salesforce to require either authentication or reCAPTCHA when your app submits user information to Headless Registration API. If you’re implementing the flow with a private client—also known as a web app with a backing server—we recommend that you always require authentication. With this requirement, when your app submits user information to the headless registration endpoint, you must include an access token issued to an integration user. To get the access token, use an internal integration user to complete an OAuth flow integrated with Salesforce, like the OAuth 2.0 web server flow. Make sure that you include the `user_registration_api` scope when you complete this flow, either by configuring it on your connected app or passing it as a parameter. Save the access token from your response. If you’re using the flow with a public client—also known as a single-page app—we recommend that you always reCAPTCHA. With this requirement, you must include a reCAPTCHA token in POST requests when your app submits user information to the Headless Registration API. To get a reCAPTCHA token, implement reCAPTCHA on your third-party app. For more information, see the reCAPTCHA documentation provided by [Google](https://developers.google.com/recaptcha). We recommend that you never require authentication for public clients because they can’t keep the access token secret. To expand your email template options for the one-time password (OTP) email sent to end users during the flow, opt in to email template allowlisting and create an allowlist with custom templates. See [Use Multiple Email Templates for Headless Flows](https://help.salesforce.com/s/articleView?id=sf.headless_identity_email_template_allowlist.htm&language=en_US). 1. From Setup, in the Quick Find box, enter Sites, and then select **All Sites**. 2. To access Experience Workspaces, next to your site name, click **Workspaces**. 3. Select **Administration**, and then select **Login & Registration**. 4. From the Administration workspace, select **Login & Registration**. 5. Under Headless Identity Configuration, select **Allow self-registration via the Headless Registration API**. 6. To require an access token when your app submits user information to the Headless Registration API, select **Require authentication to access this API**. If you select this option, you must include an access token issued to an internal integration user in your POST request to the `init/registration` endpoint. Include the access token in a Basic authorization header. The access token must contain the `user_registration_api` scope. 7. To require a reCAPTCHA token when your app submits user information to the Headless Registration API, select **Require reCAPTCHA to access this API**. If you select this option, you must include a reCAPTCHA token in your POST request to the `init/registration` endpoint. If you’re implementing headless registration with a public client, select this setting. 8. For Default Profile, select the profile that you want to assign to new users when they register. 9. For Registration Handler, click ![Lookup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png), and then select an Apex class that implements the `HeadlessRegistrationHandler` interface. Or, to automatically create a template, select **Create a headless registration handler template**. The template is created when you save your changes. Edit its default content from Apex Classes in Setup. For more information about creating a headless registration handler or editing the default handler, see [HeadlessSelfRegistrationHandler Interface](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_interface_Auth_HeadlessSelfRegistrationHandler.htm) in the Apex Reference Guide. 10. For Run As, select an execution user for the registration handler. 11. If you selected **Require reCAPTCHA to access this API**, configure reCAPTCHA settings. 1. For Secret Key, enter the key from your reCAPTCHA API key pair. 2. For Score Threshold, enter a threshold value between 0.5 and 1. If you’re using reCAPTCHA v3, this value determines the score that you accept. Scores closer to 0.5 are more likely to be bots, while scores closer to 1 are more likely to be valid users. For more information, see the [reCAPTCHA v3 documentation](https://developers.google.com/recaptcha/docs/v3). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note If you require reCAPTCHA for other Headless Identity flows, like forgot password and passwordless login, these settings also apply. 12. Save your settings. 13. Optionally, configure an email template. If you created an email template allowlist, Salesforce defaults to this email template if you don’t include an `emailtemplate` parameter in your request. 1. From the Administration workspace, select **Emails**. 2. For One-Time Password for Headless Registration, click ![Lookup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png). 3. In the popup window that appears, select **Experience Cloud: One-Time Password Email for Headless Registration Verification**. 4. Save your changes. 5. To customize the email, [edit its default content](https://help.salesforce.com/s/articleView?id=experience.networks_headless_registration_email.htm&type=5&language=en_US). Configure the Headless Registration Flow using the instructions for your app type. - [Public Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_registration_public_clients.htm&release=264.0.0&type=5 "For apps that can’t keep confidential information, such as single-page apps, you can set up headless registration for customers and partners using the Headless Registration Flow. The Headless Registration Flow extends the Authorization Code and Credentials Flow, which is built on the OAuth 2.0 Authorization Code grant type. With this flow, you control the front-end user registration experience in a third-party app. You call Salesforce Headless Registration API via your Experience Cloud site to create users, log them in, and give them access to Salesforce resources. By separating these two processes, your users can register for your app and access Salesforce data without leaving the app.") - [Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_registration_private_clients.htm&release=264.0.0&type=5 "For apps that are able to keep confidential information, such as web apps with a client-server architecture, you can set up headless registration for customers and partners using the Headless Registration Flow. The Headless Registration Flow extends the Authorization Code and Credentials Flow, which is built on the OAuth 2.0 Authorization Code grant type. With this flow, you control the front-end user registration experience in a third-party app. You call Salesforce Headless Registration API via your Experience Cloud site to create users, log them in, and give them access to Salesforce resources. By separating these two processes, your users can register for your app and access Salesforce data without leaving the app.") # Configure Experience Cloud Settings for Headless User Discovery With headless user discovery, develop headless authorization flows that don’t require users to enter a username. To use headless user discovery for login, passwordless login, and forgot password flows, configure settings on the Experience Cloud Login & Registration page. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_important.png) Important All headless flows use the same headless discovery handler. You can’t use a different handler for each flow. To make sure that you complete all setup steps for headless identity, see [Headless Identity Implementation Checklists](https://help.salesforce.com/s/articleView?id=xcloud.headless_identity_implementation_checklist.htm&type=5&language=en_US). ## Configure Settings for Login with Any Identifier and a Password To configure login with an identifier of your choice and a password, use the Authorization Code and Credentials Flow or the OAuth 2.0 for First-Party Applications login flow. Both flows use the same settings for headless user discovery. 1. From Setup, in the Quick Find box, enter Sites, and then select **All Sites**. 2. To access Experience Workspaces, next to your site name, click **Workspaces**. 3. Select **Administration**, and then select **Login & Registration**. 4. Under Headless Username-Password Login, select **Use the headless user discovery handler for this flow**. 5. Under Headless User Discovery, click ![Lookup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png) and select an Apex class that implements the `Auth.HeadlessUserDiscoveryHandler` interface. Or, to generate a template, click **Create a headless user discovery handler template**. Edit the template later. 6. For Run As, click ![Lookup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png) and select a system user to execute the handler. We recommend that you don’t select a user account that’s associated with a person. 7. If necessary, configure other settings for the OAuth 2.0 for First-Party Applications login flow. See [OAuth 2.0 for First-Party Applications: Configure Experience Cloud Settings](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_auth_challenge_experience_settings.htm&type=5&language=en_US). 8. Save your settings. To continue setting up login, see these resources, depending on your flow. - [Authorization Code and Credentials Flow for Public Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_authcodecreds_singlepageapp.htm&type=5&language=en_US) - [Authorization Code and Credentials Flow for Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_authorization_code_credentials_flow.htm&type=5&language=en_US) - [OAuth 2.0 for First-Party Applications: Headless Username-Password Flow for Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_auth_challenge_username_password.htm&type=5&language=en_US) ## Configure Settings for Login with Any Identifier and One-Time Password To configure passwordless login with an identifier of your choice instead of a username, use the Headless Identity API version of the headless passwordless login flow or the OAuth 2.0 for First-Party Applications version. During these flows, users get an email or SMS containing a one-time password (OTP) that they use to complete login. For both flows, headless user discovery is enabled when you add the handler. There’s no extra setting to explicitly enable headless user discovery. 1. From Setup, in the Quick Find box, enter Sites, and then select **All Sites**. 2. To access Experience Workspaces, next to your site name, click **Workspaces**. 3. Select **Administration**, and then select **Login & Registration**. 4. Under Headless User Discovery, click ![Lookup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png) and select an Apex class that implements the `Auth.HeadlessUserDiscoveryHandler` interface. Or, to generate a template, click **Create a headless user discovery handler template**. Edit the template later. 5. For Run As, click ![Lookup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png) and select a system user to execute the handler. We recommend that you don’t select a user account that’s associated with a person. 6. If necessary, configure other settings for the flow that you’re using. - For the Headless Identity API version, see [Configure Experience Cloud Settings for Headless Passwordless Login](https://help.salesforce.com/s/articleView?id=xcloud.headless_passwordless_login_settings.htm&type=5&language=en_US). - For the OAuth 2.0 for First-Party Applications version, see [OAuth 2.0 for First-Party Applications: Configure Experience Cloud Settings](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_auth_challenge_experience_settings.htm&type=5&language=en_US). 7. Save your settings. To continue setting up passwordless login, see these resources, depending on your flow. - [Headless Passwordless Login Flow for Public Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_passwordless_login_public_clients.htm&type=5&language=en_US) - [Headless Passwordless Login Flow for Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_passwordless_login_private_clients.htm&type=5&language=en_US) - [OAuth 2.0 for First-Party Applications: Headless Passwordless Login for Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_auth_challenge_passwordless_login.htm&type=5&language=en_US) ## Configure Settings for Password Reset with Any Identifier To configure a password reset process with any identifier instead of a username, use headless user discovery with the Headless Forgot Password Flow. During this flow, users enter the identifier and then receive an email or SMS with a one-time password (OTP). To verify their identity, they enter the OTP and then set their new password. 1. From Setup, in the Quick Find box, enter Sites, and then select **All Sites**. 2. To access Experience Workspaces, next to your site name, click **Workspaces**. 3. Select **Administration**, and then select **Login & Registration**. 4. Under Headless Forgot Password, select **Use the headless user discovery handler for this flow**. 5. Under Headless User Discovery, click ![Lookup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png) and select an Apex class that implements the `Auth.HeadlessUserDiscoveryHandler` interface. Or, to generate a template, click **Create a headless user discovery handler template**. Edit the template later. 6. For Run As, click ![Lookup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png) and select a system user to execute the handler. We recommend that you don’t select a user account that’s associated with a person. 7. If necessary, configure other settings for the forgot password flow. See [Configure Experience Cloud Settings for the Headless Forgot Password Flow](https://help.salesforce.com/s/articleView?id=xcloud.configure_headless_forgot_password_flow.htm&type=5&language=en_US). 8. Save your settings. To continue setting up the forgot password flow, see [Headless Forgot Password Flow](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_forgot_password_flow.htm&type=5&language=en_US). # Configure Experience Cloud Settings for the Headless Forgot Password Flow Before you set up the Headless Forgot Password Flow, configure settings to control security and access for your off-platform app. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions.
User Permissions Needed
To read, create, update, or delete external client apps:

Customize Application AND either

Modify All Data OR Manage External Client Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage External Client Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall external client apps:

Customize Application AND either

Modify All Data OR Manage External Client Apps

To install and uninstall packaged external client apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage External Client Apps

For security, you must configure Salesforce to require either authentication or reCAPTCHA when your app submits user information to Headless Forgot Password API. If you’re implementing the flow with a private client—also known as a web app with a backing server—we recommend that you always require authentication. With this requirement, when your app submits user information to the headless registration endpoint, you must include an access token issued to an integration user. To get the access token, use an internal integration user to complete an OAuth flow integrated with Salesforce, like the OAuth 2.0 user-agent flow. Make sure that you include the `forgot_password` scope when you complete this flow, either by configuring it on your external client app or passing it as a parameter. Save the access token from your response. If you’re using the flow with a public client—also known as a single-page app—you must require reCAPTCHA. With this requirement, you must include a reCAPTCHA token in POST requests when your app submits user information to the Headless Registration API. To get a reCAPTCHA token, implement reCAPTCHA on your third-party app. For more information, see the reCAPTCHA documentation provided by [Google](https://developers.google.com/recaptcha). To expand your email template options for the one-time password (OTP) email sent to end users during the flow, opt in to email template allowlisting and create an allowlist with custom templates. See [Use Multiple Email Templates for Headless Flows](https://help.salesforce.com/s/articleView?id=sf.headless_identity_email_template_allowlist.htm&language=en_US). Before you start, create your external client app, complete its basic information. When you enable the necessary OAuth settings, add the **Access Headless Forgot Password API** (`forgot_password`) scope to the external client app. After the external client app is set with the proper scope, take these steps to configure the Experience Cloud site for the Headless Forgot Password Flow. 1. From Setup, in the Quick Find box, enter Sites, and then select **All Sites**. 2. To access Experience Workspaces, next to your site name, click **Workspaces**. 3. Select **Administration**, and then select **Login & Registration**. 4. In the Headless Identity Configuration section, select **Allow password reset via the Headless Forgot Password Flow**. 5. To require an access token in your initial POST request, select **Require authentication to access this API**. We recommend that you always enable this setting for private clients, and that you never enable it for public clients. 6. To require a reCAPTCHA token in your initial POST request, select **Require reCAPTCHA to access this API**. We recommend that you always enable this setting for public clients. For private clients, you can optionally enable this setting, but it’s less critical than requiring authentication. 7. From the dropdown, select the maximum number of password reset attempts you allow before users must request a new OTP. 8. If you require reCAPTCHA, configure reCAPTCHA settings. 1. For Secret Key, enter the secret key provided by Google in your reCAPTCHA API key pair. 2. For Score Threshold, enter a threshold value between 0.5 and 1. If you’re using reCAPTCHA v3, this value determines the score that you accept. Scores closer to 0.5 are more likely to be bots, while scores closer to 1 are more likely to be valid users. For more information, see the [reCAPTCHA v3 documentation](https://developers.google.com/recaptcha/docs/v3). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note If you require reCAPTCHA for the Headless Registration Flow, these settings also apply. 9. To opt in to email template allowlisting, select **Use only allowlisted email templates**. 10. Save your settings. 11. Depending on your email settings, configure an email template. If you selected **Use only allowlisted email templates**, this step is optional—Salesforce defaults to this email template if you don’t include an `emailtemplate` parameter in your request. 1. From the Administration workspace, select **Emails**. 2. For One-Time Password for Headless Forgot Password Flow, click ![Magnifying glass icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png). 3. In the popup window that appears, select an email template. 4. Save your changes. 5. To customize the email, [edit its default content](https://help.salesforce.com/s/articleView?id=experience.networks_headless_registration_email.htm&type=5&language=en_US). # Configure External Client App Policies Salesforce admins can set the policies that control the external client app. All changes are made through the metadata API. ### Required Editions
User Permissions Needed
To view all external client apps, view their settings, and edit their OAuth policies file View all External Client Apps, view their settings, and edit their policies
To update an OAuth policies file, you must first deploy an external client app on your Salesforce org. [Deploy an External Client App That References the Source Org’s Global OAuth Settings File](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_that_references_the_source_org.htm&release=264.0.0&type=5 "Deploy an external client app on a new org, and have it reference the source org’s credentials. To configure this relationship, edit the OAuth link in the OAuth settings file and remove the reference to the global OAuth settings file in the package.xml manifest file of the new org."), or [Deploy an External Client App with a New Global OAuth Settings File](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_with_global_settings_file.htm&release=264.0.0&type=5 "Deploy the source org’s metadata on an org with its own OAuth consumer. To configure the app, remove the OAuth link in the OAuth settings file and add a reference to the global OAuth settings file in the package.xml manifest file on the new org."). 1. Open the ExtlClntAppOauthConfigurablePolicies file on your org. The OAuth policies file is generated when the external client app is deployed, and its name follows this format: \[ECAPP\_OAUTH\_POLICY\].ecaOauthPlcy-meta.xml. 2. To set the configuration, edit the field values in the OAuth policies file. See [Verify OAuth Policy and Settings Generation](https://help.salesforce.com/s/articleView?id=xcloud.verify_oauth_policy_settings_field_generation.htm&release=264.0.0&type=5 "When the OAuth Plugin is deployed, several external client app components are generated. There are a few places you can check to verify if the deployment was successful.") for information about the available OAuth policies fields. 3. Deploy the OAuth policies changes. ``` sf project deploy start --manifest package.xml --target-org johndoe@example.com ``` 4. Use this command to retrieve the updated external client app information. ``` sf project retrieve start --manifest package.xml --target-org johndoe@example.com ``` # Configure Feedback Scorecards Configure feedback scorecards before you use them. ### Required Editions
Available for an extra charge in Enterprise, Unlimited, and Developer editions where Salesforce Surveys is enabled.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_note.png) Note Before you configure feedback scorecards for an object, make sure that the object records are associated with survey invitations using [SurveySubject](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_surveysubject.htm). 1. Go to an existing Lightning Experience page, click ![Gear](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/sfm_gear_icon.png), and then click **Edit Page**. 2. From the list of components, select **CRM Analytics Dashboard**. 3. From the Dashboard dropdown, select the scorecard you want to embed on the page. 4. Click **Filter String**. 5. In the text box, enter the filter string with survey name, question name, and other filters you want to add. Use the following syntax to enter the filter string: ``` {"datasets":{"":[{"fields":[""],"filter":{"operator":"","values":[""]}}], "":[{"fields":[""],"filter":{"operator":"","values":[""]}},{"fields":[""],"filter":{"operator":"","values":[""]}}]}} ``` 6. Save your page. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_example.png) Example Here’s an example filter string for configuring a Case feedback scorecard. ``` {"datasets":{"":[{"fields":["Id"],"filter":{"operator":"in","values":["$Id"]}}], "":[{"fields":["SurveyVersion.Survey.Name"],"filter":{"operator":"in","values":[""]}},{"fields":["Question.Name"],"filter":{"operator":"in","values":[""]}}]}} ``` # Configure Files and Attachments for Archived Records in Legacy Salesforce Archive Select what happens to files and attachments when their associated records become archived in Legacy Salesforce Archive. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Salesforce Archive license.
User Permissions Needed
To create, edit, and schedule Archive Policies: Manage Archive Policies
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Legacy Salesforce Archive. Read about the Archive managed package in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). 1. In the File Management section, select an option. - **Keep All Files** preserves all related files in your org. - **Delete Files if Not Shared** removes related files that only reference archived records. Files that also reference non-archived records are preserved in your org. - **Delete All Files** removes all related files from your org, regardless of additional references to other records. 2. Click **Next**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note The option to include related files and attachments in the archive is still in development. You're ready to add related objects to your Archive Policy. #### See Also - [Archive Related Objects in Legacy Salesforce Archive](https://help.salesforce.com/s/articleView?id=xcloud.archive_related_objects.htm&release=264.0.0&type=5 "Select any related objects in Legacy Salesforce Archive that you want to archive in addition to the primary object.") # Configure Flexcard Settings Specify your Flexcard’s behavior with the setup options. For example, add or update a data source, create an event listener, or add session variables. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note After updating or configuring Flexcards, allow 15–20 minutes for updates to appear, even after clearing your cache. If you see any errors or if old versions load, contact Salesforce support to enable the **Template API** setting. This helps updates show up faster and more reliably. 1. From the App Launcher, find and select **Flexcards**. 2. Expand a Flexcard and select a version. 3. If needed, deactivate the Flexcard. 4. Go to Setup and update the relevant information. - To show or hide the Setup panel, click ![Flexcard Setup icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/setup_icon_core_designer.png). - In the designer on a managed package, click the **Setup** tab. 5. If the Flexcard interacts with a Lightning Web Component Omniscript, turn on Omniscript support. For example, render a Flexcard inside an Omniscript with the Omniscript’s Custom Lightning Web Component element. Or update an Omniscript with the Update OmniScript action element. See [Embed Flexcard in a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_embed_flexcard_inside_another_flexcard_29030.htm&release=264.0.0&type=5 "Share data between Flexcards by embedding a Flexcard as a child in another Flexcard. The child Flexcard can have its data source, or the parent can override the child's data source with its own data source. The parent can also pass specific data to the child, such as its record ID to use as the child's context ID."). 6. To translate custom labels into any supported language, turn on multi-language support. You can then add custom labels to these Flexcard elements by using the {Label} merge field. - Field: Label, output, placeholder - Text: In the rich text editor - Action: Label ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Omnistudio updates custom labels and doesn’t store them in the cache. See [Create and Edit Custom Labels](https://help.salesforce.com/s/articleView?id=platform.cl_edit.htm&type=5&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Omnistudio provides autotranslated system labels, such as standard error messages, in the standard runtime. These autotranslated labels appear in your Flexcards based on the user's locale. 7. To add a dynamic class automatically in the CSS for resizing the element and rendering the card again when the browser width changes, turn on the width listener. 8. To restrict access to the Flexcard, enter a comma-separated list of custom permissions. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note If this field is left blank, all users can see the Flexcard. Assigning user permission only affects the Flexcard's visibility in the user interface at runtime and doesn't restrict data access. Data access is managed through field-level security. To ensure data security and maintain compliance with Salesforce encryption access controls, always check that a user has the **View Encrypted Data** permission before displaying or processing decrypted values of encrypted fields. For example, if you have custom permissions named Can\_Edit\_Policy and Can\_View\_Policy, enter them as `Can_Edit_Policy,Can_View_Policy`. 9. To improve performance when you load the card in preview, disable the child Flexcard preview. 10. If needed, generate a card container for each data source’s record instead of a single card that shows all the records. 1. Select **Repeat Records**. 2. Enter a render key that identifies the repeated card record to update in the Document Object Model (DOM). A render key helps improve performance by regenerating only the updated card record. If your data source is a data table, deselect Repeat Records to avoid having multiple cards showing the same information. Similarly, we recommend that you deselect the checkbox for charts or lists that retrieve data from multiple records. Also, deselect the checkbox for container elements such as Lightning web components or child Flexcards that use their own data sources. If your Flexcard has multiple states, Omnistudio applies the state’s condition. For example, if you select Repeat Records, but the available records don’t meet the state’s condition, Omnistudio hides those records. 11. If needed, [apply a specific style sheet](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements_38751.htm&release=264.0.0&type=5 "Configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. Configure backgrounds, text, and borders; adjust dimensions and element spacing; apply classes and inline styles; make your element responsive; and more.") for the Flexcard. 12. If needed, add an event listener that tracks an event triggered from a component, and performs an action in response: 1. Add an event listener. 2. Set up the listener properties. - Pubsub: Event from another component, such as another Flexcard on the same Lightning page. - Custom event: Event from a child Flexcard or from an element on the card. - Record change: Change on a record that’s on the Flexcard. Enter the record’s ID as {recordId} or enter an ID value, and select the record type. If needed, also select which field values to copy onto the card when the record changes. By default, in the Record Change event type you can select fields based on a Salesforce object, by using the Fields dropdown menu. However, if you turn on Advanced Mode, you can specify fields within any SObject and related objects in an array. For example, you can specify fields for the Account object in your array this way: `Contact.Id, Contact.Account.Id, Contact.Name`. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note If you change the record through an Experience Cloud page, the change only takes effect when it's edited within the same browser tab and not via backend processes. For information about the pubsub channel name or custom event name, see [Pass Data to Flexcards by Using Events](https://help.salesforce.com/s/articleView?id=xcloud.os_trigger_a_custom_event_from_an_action_on_a_flexcard_27948.htm&type=5&language=en_US). Also see [Set Up Actions on a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_add_an_action_to_a_flexcard_25672.htm&type=5&language=en_US) and [Set Up Conditions on a Flexcard Element](https://help.salesforce.com/s/articleView?id=xcloud.os_add_conditions_to_a_flexcard_element_35370.htm&type=5&language=en_US). 3. If you set up multiple actions and want to arrange them in a different sequence, expand the action properties sections and drag them in the desired order. See [Set Up Actions on a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_add_an_action_to_a_flexcard_25672.htm&type=5&language=en_US). 13. To create session variables that are globally accessible, make attributes available from a component, or store values from data sources, external systems, or hardcoded values. 1. Add a session variable. 2. Enter a key and a value. You can then apply the session variable as a merge field to an element field. For example, enter {Session.var} to a REST data source endpoint URL. Session variables are available for these elements and their fields: - Action: Label - Custom event action: Input Parameter > Value - Field: Label, Placeholder, and Output - Text: Inside the rich text editor You can’t use data source values as session variables. 14. To create a public property whose value you set in a Lightning or Experience Builder page, enter the relevant information. - Enter the attribute name in pascal case. The generated API name is `cfPropName`. From a custom Lightning web component or an Omniscript, reference the property name in the kebab case, such as `cf-record-limit`. - To make the property visible for Experience Builder pages, select the **lightningCommunity\_\_Default** target. To call the attribute as a session variable within the Flexcard, use the {Session} merge field where supported such as text, a data source's test and input parameters, or a field element's output property. For example, if you call the attribute RecordLimit, enter {Session.RecordLimit}. To configure the public property on a Lightning or Experience Builder page, update the value of the property in the builder’s properties. Omnistudio publishes public properties to the property subtag of the targetConfig tag in the configuration file that defines the metadata values for your Flexcard Lightning web component. You can configure additional metadata values when you publish the Flexcard. See [XML Configuration File Elements](https://developer.salesforce.com/docs/platform/lwc/guide/reference-configuration-tags.html) and [Activate and Publish a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_activateconfigureand_publish_flexcards_24744.htm&type=5&language=en_US). 15. Add or update the data source information. See [Set Up a Data Source on a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_a_data_source_on_a_flexcard_35864.htm&release=264.0.0&type=5 "Configure how to retrieve the data that a Flexcard shows. Pull it directly from Salesforce objects with Omnistudio Data Mappers, Salesforce Object Query Language (SOQL) queries, and Salesforce Object Search Language (SOSL) searches. You can also use an external source with REST methods. For complex business processes, use the Apex remote method or Integration Procedures. If needed, set different data sources for the child and parent Flexcards. Then, choose where to publish the Flexcard."). 16. If needed, test your data source configuration by adding test variables. See [Test Data Source Settings on a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard_37522.htm&release=264.0.0&type=5 "Preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account.") - **[Examples for Flexcard Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_standard_examples_for_flexcard_settings.htm&release=264.0.0&type=5)** View examples for Flexcard settings, such as adding an event listener and repeating records of a Flexcard. - **[Enable and Disable Data Sources](https://help.salesforce.com/s/articleView?id=xcloud.os_enable_and_disable_data_sources_36352.htm&release=264.0.0&type=5)** Enable and disable data source types for an org, profile, or user level from the Card Framework Configuration custom setting. For example, disable Apex REST, Apex Remote, and other complex data sources for your entire org, or prevent system admins with limited permissions from using these data sources. - **[Set Up a Data Source on a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_a_data_source_on_a_flexcard_35864.htm&release=264.0.0&type=5)** Configure how to retrieve the data that a Flexcard shows. Pull it directly from Salesforce objects with Omnistudio Data Mappers, Salesforce Object Query Language (SOQL) queries, and Salesforce Object Search Language (SOSL) searches. You can also use an external source with REST methods. For complex business processes, use the Apex remote method or Integration Procedures. If needed, set different data sources for the child and parent Flexcards. Then, choose where to publish the Flexcard. - **[Flexcards Data Source Common Properties](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_data_source_properties_36016.htm&release=264.0.0&type=5)** Review the common properties available for any Flexcard data source. - **[Test Data Source Settings on a Flexcard](https://help.salesforce.com/s/articleView?id=xcloud.os_test_data_source_settings_on_a_flexcard_37522.htm&release=264.0.0&type=5)** Preview a Flexcard with real data by adding test values to runtime variables. The variables populate the dynamic fields in a data source, such as a contextId from an Omnistudio Data Mapper that gets data from an Account. # Configure for Deployment Between a Repository and an Org (Managed Package) For the managed package runtime, you can use a Git repository as a Source or Target in IDX Workbench, deploying DataPacks from the repository to a Vlocity org or the reverse. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before You Begin Before you can set up a project with a Git repository as a Source or Target, you must: 1. Install Git on your computer. See [Installing Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git). 2. Set up your identity for using Git. See [First-Time Git Setup](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup). 3. Ensure that IDX Workbench has access to the Git repository. Instructions differ depending on the type of repository and whether you use a password or SSH — see the documentation for your repository. If you use Bitbucket with password access, see [Give a Bitbucket Git Repository Access to IDX Workbench (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_give_a_bitbucket_git_repository_access_to_idx_workbench.htm&release=264.0.0&type=5 "For the managed package runtime, you can give IDX Workbench access to a Bitbucket repository using a password."). To create a project using a Git repository as its Source or Target: 1. Follow the instructions for deploying between orgs. See [Configure for Deployment Between Orgs (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_for_deployment_between_orgs.htm&release=264.0.0&type=5 "For the managed package runtime, you must configure a source org and a target org. Both orgs should have the same Omnistudio runtime."). 2. In step 4, in the New Repository dialog, paste the cloning URL into the **Clone from Git Repository URL** field. 3. In step 5, select the repository as the Source, or in step 9, select the repository as the Target. # Configure for Deployment Between Orgs (Managed Package) For the managed package runtime, you must configure a source org and a target org. Both orgs should have the same Omnistudio runtime. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). You can import data packs of some older Omnistudio for Managed Packages objects into an Omnistudio org. Omnistudio Data Mapper, Integration Procedure, and LWC-enabled Omniscript objects are automatically converted to Omnistudio objects. Importing data packs of Omnistudio objects into an Omnistudio for Managed Packages org isn't supported. Importing Cards between Omnistudio and Omnistudio for Managed Packages orgs isn't supported. 1. In the org you plan to use as your source, make sure the correct versions of Salesforce objects you want to deploy are active. Some objects, such as Omniscripts and Integration Procedures, have versions that can be activated and deactivated. Only active versions of such objects are deployed. 2. Open IDX Workbench. If no projects exist, the Configure Workspace dialog appears. If other projects exist and you want to create a new project, click the Edit icon on the main IDX Workbench screen to open the Configure Workspace dialog. 3. From the Repository dropdown list, select **New Repository**. You must create a repository for the project even if both your source and target are orgs. 4. In the New Repository dialog, specify a name and a repository folder. If the folder doesn't exist, it's created. Click **Save**. 5. From the Source dropdown list, select **New Environment**. (An environment is an org.) To configure limited access to an org, see [Configure an Org Using a Community User Login (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_org_using_a_community_user_login.htm&release=264.0.0&type=5 "For the managed package runtime, when you configure an org for running Test Procedures, you can specify a Salesforce Community and authenticate as a Community user. This is especially useful for running Test Procedures in which user access affects the results."). 6. In the New Salesforce Org dialog, specify a name. 7. If your source is a sandbox org, change the Organization Type to https://test.salesforce.com. 8. Click **Log in using OAuth**. The Salesforce login window appears. Log in to the org. If the Allow Access window appears, click **Allow**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If you use the Google Chrome browser and you're redirected to a `localhost` URL when you attempt to log in, open a new browser tab and paste this URL into the address field: `chrome://net-internals/#hsts`. Look under the Delete domain security policies heading. If localhost is in the Domain field, click **Delete**. 9. From the Target dropdown list, select **New Environment**. Repeat the same steps. To configure limited access to an org, see [Configure an Org Using a Community User Login (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_org_using_a_community_user_login.htm&release=264.0.0&type=5 "For the managed package runtime, when you configure an org for running Test Procedures, you can specify a Salesforce Community and authenticate as a Community user. This is especially useful for running Test Procedures in which user access affects the results."). 10. From the Project dropdown list, select **New Project**. To use a Project object instead of configuring a project, see the next section. 11. In the New Project dialog, specify a name for your project. 12. Select the types of Vlocity and/or Salesforce objects to deploy. You can use the Search field to filter the list. Select all the types you need. ![In the New Project dialog, select Vlocity Types, type int in the Search field, and check the Integration Procedures box.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/selectips.png) 13. Click **Fetch DataPacks**. 14. Under Pick datapacks for project, you can optionally enter text to filter the names of the fetched objects. ![Under Pick datapacks for project, if you type Documentation in the Search field, the Documentation\_CacheTopLevel Integration Procedure is listed.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/fetchdatapacks.png) 15. Move the objects you want to deploy from the All datapacks list to the Selected datapacks list. You can use the Shift key to select multiple items in either list. ![The Documentation\_CacheTopLevel Integration Procedure is selected.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/selectdatapacks.png) You can click **Ignore Dependencies** to exclude dependent objects from deployment. 16. Click **Save**. The Configure Workspace dialog reappears. 17. To refresh comparison data whenever you save the workspace, make sure **Force refresh of data from orgs** is selected. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/forcerefresh.png) 18. Click **Save** to save the workspace. Messages appear as objects are fetched. To cancel, press Command-R on the Mac or Control-R on other operating systems. 19. When the listing is complete, IDX Workbench displays green + icons to indicate the new objects in the source org. 20. To edit the repository: 1. Click the Edit icon on the main IDX Workbench screen to reopen the Configure Workspace dialog. 2. Click the Edit icon next to the Repository dropdown list to open the Repository Settings. 3. Edit the Expansion Path if you want to change the subfolder of the repository folder in which data packs are stored. 4. Specify **Additional DataPack Query Filters** if you want to filter objects of the specified type in all projects that use the repository. Click **Add New Filter** to add as many filters as you need. For example, setting DataPack Type to Product2 and Additional Query Filter to `RecordTypeId != null` excludes non-Vlocity products. 5. Click **Save**. 21. To add objects to the project: 1. Click the Edit icon on the main IDX Workbench screen to reopen the Configure Workspace dialog. 2. Click the Edit icon next to the Project dropdown list to reopen the Project dialog. 3. Repeat steps 12 through 18 above. # Configure for Deployment from a JSON File (Managed Package) For the managed package runtime, you can specify a DataPack as a Source and deploy to either an org or a Git repository Target. The DataPack must include all the objects you want to deploy in a single JSON file. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Follow the instructions for deploying between orgs. See [Configure for Deployment Between Orgs (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_for_deployment_between_orgs.htm&release=264.0.0&type=5 "For the managed package runtime, you must configure a source org and a target org. Both orgs should have the same Omnistudio runtime."). 2. In step 5, select **Import JSON** from the Source drop-down list and browse for the file. # Configure for Deployment from the Salesforce Industries Process Library (Managed Package) For the managed package runtime, you can deploy DataPacks from the Salesforce Industries Process Library to a Vlocity org. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To create a project using the Salesforce Industries Process Library as its Source: 1. Open IDX Workbench. If no projects exist, the Configure Workspace dialog appears. If other projects exist and you want to create a new project, click the Edit icon on the main IDX Workbench screen to open the Configure Workspace dialog. 2. Select **Vlocity Process Library** from the Repository drop-down list. 3. Click **Login with different username**. 4. Click **Continue** to open the Vlocity Process Library in a browser tab. 5. In the browser tab, log into the Vlocity Process Library using your Vlocity Success Community username and password. 6. If you see the Allow Access? window, click **Allow**. 7. After successful login, return to IDX Workbench and click the Refresh button under **Vlocity Process Listing**. 8. From the Process Listing drop-down list, select the desired listing. 9. From the Target drop-down list, select a previously configured org or **New Environment**. For a new org, follow steps 5 through 8 in [Configure for Deployment Between Orgs (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_for_deployment_between_orgs.htm&release=264.0.0&type=5 "For the managed package runtime, you must configure a source org and a target org. Both orgs should have the same Omnistudio runtime."). 10. Click **Save**. # Configure Headless Identity API Flows After you complete your setup in Salesforce, build headless identity flows that integrate your off-platform app with Headless Identity APIs. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
- **[Headless Identity APIs: Authorization Code and Credentials Flow for Public Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_authcodecreds_singlepageapp.htm&release=264.0.0&type=5)** For public clients such as single-page apps or mobile apps, you can set up headless login for customers and partners by using the Authorization Code and Credentials Flow. This flow is built on the OAuth 2.0 Authorization Code grant type. With the Authorization Code and Credentials Flow, you control the front-end login experience in a third-party app. You call Salesforce Headless Login APIs via your Experience Cloud site to handle the back-end work of authenticating users and granting access to protected Salesforce resources. With separate front-end and back-end processes, your users can log in and access Salesforce data without leaving your app. For single-page apps, you use a server-side callback endpoint to extract the authorization code, and you perform the code exchange from the browser via client-side JavaScript. - **[Headless Identity APIs: Authorization Code and Credentials Flow for Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_authorization_code_credentials_flow.htm&release=264.0.0&type=5)** For private clients, such as client-server apps, you can set up headless login for customers and partners by using the Authorization Code and Credentials Flow, which is built on the OAuth 2.0 Authorization Code grant type. - **[Headless Identity APIs: Headless Registration Flow for Public Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_registration_public_clients.htm&release=264.0.0&type=5)** For apps that can’t keep confidential information, such as single-page apps, you can set up headless registration for customers and partners using the Headless Registration Flow. The Headless Registration Flow extends the Authorization Code and Credentials Flow, which is built on the OAuth 2.0 Authorization Code grant type. With this flow, you control the front-end user registration experience in a third-party app. You call Salesforce Headless Registration API via your Experience Cloud site to create users, log them in, and give them access to Salesforce resources. By separating these two processes, your users can register for your app and access Salesforce data without leaving the app. - **[Headless Identity APIs: Headless Registration Flow for Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_registration_private_clients.htm&release=264.0.0&type=5)** For apps that are able to keep confidential information, such as web apps with a client-server architecture, you can set up headless registration for customers and partners using the Headless Registration Flow. The Headless Registration Flow extends the Authorization Code and Credentials Flow, which is built on the OAuth 2.0 Authorization Code grant type. With this flow, you control the front-end user registration experience in a third-party app. You call Salesforce Headless Registration API via your Experience Cloud site to create users, log them in, and give them access to Salesforce resources. By separating these two processes, your users can register for your app and access Salesforce data without leaving the app. - **[Headless Identity APIs: Headless Passwordless Login Flow for Public Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_passwordless_login_public_clients.htm&release=264.0.0&type=5)** Make it easy for customers and partner users to log in to an off-platform app with the Headless Passwordless Login Flow. With this flow, users log in by entering their email address or phone number and verifying their identity with a one-time password (OTP). You control the front-end experience in your app. On the backend, your app calls Headless Passwordless Login API via an Experience Cloud site to log the user in. These steps show you how the flow works with a public client, like a single-page app, that can’t keep information private. - **[Headless Identity APIs: Headless Passwordless Login Flow for Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_passwordless_login_private_clients.htm&release=264.0.0&type=5)** To simplify the login process for your off-platform app, configure the Headless Passwordless Login Flow. Users log in to your app by entering their email address or phone number and verifying their identity with a one-time password (OTP). On the front end, you control the user experience in your app. On the backend, your app calls Headless Passwordless Login API via an Experience Cloud site to log the user in. These steps show you how the flow works with a private client, like a traditional client-server app, that can keep information confidential. - **[Headless Identity APIs: Headless Forgot Password Flow for Customers and Partners](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_forgot_password_flow.htm&release=264.0.0&type=5)** Set up a headless password reset process on your app using the Headless Forgot Password Flow, which calls Headless Forgot Password API. Use this flow along with other headless flows to provide native identity experiences. With this flow, a user who has forgotten their password can verify their identity and create a password without ever leaving the branded experience of your app. - **[Headless Identity APIs: Headless Guest Flow for Public Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_guest_public_clients.htm&release=264.0.0&type=5)** Some users interact with your off-platform app but don’t log in or register. You can issue identifiers in the form of unique visitor ID (UVIDs) for these unknown visitors with the Headless Guest Flow. If the user decides to log in or register, you can pass the identifier into a named user flow, like a headless login flow. Use guest user identity as a tool for carrying context from guest user sessions to named user sessions. This flow is a variation of the Authorization Code and Credentials Flow. - **[Headless Identity APIs: Headless Guest Flow for Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_guest_private_client.htm&release=264.0.0&type=5)** For users who interact with your off-platform app but aren’t necessarily logged in, you can use the Headless Guest Flow to identify users with a unique visitor ID (UVID). When the user logs in or registers, you can carry the UVID forward and maintain any contextual information associated with it, like a user’s preferences. This flow is a variation of the Authorization Code and Credentials Flow. - **[Headless Identity APIs: Extending the Headless Guest Flow into a Named User Flow](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_headless_guest_extension.htm&release=264.0.0&type=5)** When you complete a headless guest flow in your off-platform app, you get a guest JWT-based access token with the user’s unique visitor ID (UVID) minted into it. To bring the UVID and all of its associated context into a named user session, you can pass the UVID into a new authorization flow, like a headless login or registration flow. # Configure Headless Identity Flows with OAuth 2.0 for First-Party Applications After you complete your setup in Salesforce, build headless identity flows that integrate your off-platform app using the OAuth 2.0 for First-Party Applications draft protocol. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
- **[OAuth 2.0 for First-Party Applications: Generate a Client Attestation JWT](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_auth_challenge_generate_jwt.htm&release=264.0.0&type=5)** When using headless identity flows that implement the OAuth 2.0 for First-Party Applications draft standard, use a client attestation JWT to prove that apps sending requests to Salesforce are first-party apps created by your company. - **[OAuth 2.0 for First-Party Applications: Headless Username-Password Flow for Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_auth_challenge_username_password.htm&release=264.0.0&type=5)** To set up username-password login for an off-platform app developed by your company, use this headless username-password login flow, which implements the OAuth 2.0 for First-Party Applications draft standard protocol. With this flow, you can entirely control the front-end login experience in your first-party app while Salesforce handles the backend work of authenticating users and granting access to protected resources. This flow is supported only for private clients, such as client-server apps, and is supported only for external users - **[OAuth 2.0 for First-Party Applications: Headless Passwordless Login for Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_auth_challenge_passwordless_login.htm&release=264.0.0&type=5)** With headless passwordless login, users log in to your off-platform app via their email address or phone number and a one-time password. To set up passwordless login for an off-platform app developed by your company, use this headless passwordless login flow, which implements the OAuth 2.0 for First-Party Applications draft protocol. With this flow, you can entirely control the front-end login experience in your first-party app while Salesforce handles the backend work of authenticating users and granting access to protected resources. This flow is supported only for private clients, such as client-server apps, and is supported only for external users. - **[OAuth 2.0 for First-Party Applications: Headless Registration Flow for Private Clients](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_auth_challenge_registration.htm&release=264.0.0&type=5)** To set up a headless user registration process for an off-platform app developed by your company, use this flow, which implements the OAuth 2.0 for First-Party Applications draft standard protocol. This flow is supported only for private clients, such as client-server apps. With this flow, you can entirely control the front-end registration experience in your first-party app while Salesforce handles the backend work of authenticating users and granting access to protected resources. This flow is supported only for private clients, such as client-server apps, and is supported only for external users. # Configure Images for Guest Users Make sure images display correctly for unauthenticated (guest) users on mobile. Depending on where the image is saved, the setup is different. | Image Source | Setup Required | | --- | --- | | Static image (Image component) from an external URL | Add the URL's domain to Trusted URLs in Setup to allow the mobile client to render the image for unauthenticated users. | | Static image (Image component) from CMS | Deploy the asset in a public CMS channel so the mobile client can access it for unauthenticated users. | | Data image (Data Image component) sourced from your Apex action | Make sure the URLs returned by the Apex class point to publicly accessible endpoints. The responsibility is with the Apex developer, not the builder admin. | # Configure Incremental Sync for Salesforce Data Before you run or schedule data sync, specify whether the sync extracts incremental changes or all records from each Salesforce object. By default, Salesforce Data Pipelines performs an incremental sync. An incremental sync runs faster because it extracts only the latest changes to the Salesforce object. During the first sync of an object, Salesforce Data Pipelines always performs a full sync. Switching the site or migrating the org also triggers the object to undergo a full sync. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note When reviewing the results of an incremental sync job in Job Manager, the Rows in and Rows out values represent the total number of rows across all syncs. 1. In Data Manager, click the **Connections** tab. 2. From a local or external Salesforce connection, such as SFDC\_LOCAL, click ![Action button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_replication_actions_button.png) to the right of the Salesforce object that you want to sync, and then select **Edit Connection Mode**. Connection mode doesn’t apply to objects with other connection types. 3. Select one of these modes.
Connection Mode Description
Incremental Sync

Pulls only new, updated, and soft-deleted records to match the changes in the Salesforce object since the previous sync. Use this method to run faster syncs.

Incremental sync doesn’t update records that are excluded through Data Sync filters, and it doesn't remove hard-deleted records.

Periodic Full Sync Runs an incremental sync on each scheduled sync. Also runs a full sync on the first sync that happens after Friday 11 PM in your org’s time zone.
Full Sync Pulls all records from the Salesforce object and overwrites the records from the previous sync.
4. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note The API Type for the connector must be `BULKV2` for incremental and periodic full sync. 5. Save your changes. ## Considerations When Syncing Data Incrementally - Incremental sync isn’t supported for Salesforce big objects or these objects. - CallCenter - CaseTeamMember - CategoryNode - CollaborationGroup - CollaborationGroupMember - CollaborationGroupMemberRequest - Division - Domain - DomainSite - Group - GroupMember - ModelFactor - Profile - Site - Territory - Topic - User - UserRole - UserTerritory - Even if incremental sync is enabled, Salesforce Data Pipelines performs a full sync when. - The object performs hard deletes or cascade hard deletes on records. - The object is known to fail when queried without a specific filter or where condition. - The object doesn’t have a datetime system field. - The object has fields or field attributes (such as scale and precision) specified for the sync that don't match the previously synced dataset. If you make field changes in an sfdcDigest dataflow node, such as adding or removing fields, or changing attributes, Salesforce Data Pipelines triggers a full sync the next time that sync runs. - The object is configured for a periodic full sync. - The metadata of the object changes, triggering a full sync to update the object structure the next time the sync runs. - Some objects, such as ContentVersion, delete records without notifying the incremental mechanism, which can result in data drift. Data drift is the potential for records to be included or excluded due to operations that run during a data sync run. For example, adding a record during a sync isn't always included or a hard record delete between incremental runs can be ignored. Selecting periodic full sync performs the reset required to keep the data sync object true to what appears in Salesforce. - Verify that your org doesn’t have conflicting sync settings for the same object. For example, if incremental sync is turned off in an sfdcDigest node and not turned on in later nodes for the same object in the same dataflow, then a full sync is performed. To enable incremental sync, set the `incremental` parameter to `true` in the dataflow JSON. - If multiple dataflows have conflicting sync settings for the same object, Salesforce Data Pipelines uses the object’s sync settings from the last saved dataflow. - Run full sync for objects containing formula fields. With incremental sync, formula fields can become out of sync with your synced object. - Run a full sync manually if incremental sync fails for objects that have many updates. If incremental syncs continue to fail, set the object’s connection mode to **Full Sync**. - To ensure that all updates are included, set the object's connection mode to **Periodic Full Sync**. #### See Also - [Salesforce External Connections](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_external_settings.htm&release=264.0.0&type=5 "Use a Salesforce external connector to sync data from another Salesforce org to Salesforce Data Pipelines. External connectors require OAuth 2.0 for server to server communication.") # Configure Installed Packages Many components have an `isDeployed` attribute that controls whether they’re available for end users. After installation, all components are immediately available. Before making the package available to your users, make any necessary changes for your implementation. ### Required Editions
Available in: Salesforce Classic (not available in all orgs)
Available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To install packages: Download AppExchange Packages
To configure installed packages: Customize Application
Yes, all packages are customizable. However, to ensure compatibility with future versions, some aspects of managed packages can't be changed. To understand which components are editable in a managed package, see [Components Available in Managed Packages](https://developer.salesforce.com/docs/atlas.en-us.pkg2_dev.meta/pkg2_dev/packaging_packageable_components.htm) in the Second-Generation Managed Packaging Developer Guide. #### See Also - [Extend Your Org with AppExchange Packages](https://help.salesforce.com/s/articleView?id=xcloud.distribution_installed_packages.htm&release=264.0.0&type=5 "Extend the power of Salesforce with AppExchange solutions. You can find solutions that help employees across roles, departments, and industries do their jobs more effectively and efficiently. These solutions impact people in ways both small and large, automating tasks, consolidating information and systems, and more closely integrating systems with Salesforce.") - [Tradeoffs and Limitations of Shield Platform Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_considerations.htm&type=5&language=en_US) # Configure Internal OmniAnalytics OmniAnalytics can track user interactions with Omniscripts and Flexcards without the use of a third-party analytics provider. Use this workflow to build your OmniAnalytics capabilities. 1. [Create a Tracking Group and Add Components to Track](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_create_tracking_group_and_components_std.htm&release=264.0.0&type=5 "To specify a group of components that you want to track together, create a Tracking Group and add Omniscript and Flexcard components to it."). Specify the example Omniscript and Flexcard as components to be tracked. 2. [Add Tracked Components to a Lightning App Page](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_edit_lightning_app_page_std.htm&release=264.0.0&type=5 "Users interact with Omniscripts and Flexcards via Lightning App Pages. However, instead of directly adding Omniscripts and Flexcards to pages, you add wrapper components that make the Omniscripts and Flexcards available to OmniAnalytics."). Create an example page that includes the example Omniscript and Flexcard. 3. [View Tracked Data in the Tracking Group](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_view_data_tracking_group_std.htm&release=264.0.0&type=5 "After you add tracked components to a Lightning App page, you generate and view reports of the tracked data in the tabs for these components on the Tracking Group page."). # Configure iOS Push Notifications To support push notifications for iOS versions of your mobile app, create a separate connected app for the iOS platform. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

User Permissions Needed
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage Connected Apps

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. For iOS versions of your mobile app, you can use tokens, push certificates, or both. If a token is provided, Salesforce always uses the token. 1. Create your [mobile connected app](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_mobile.htm&release=264.0.0&type=5 "A connected app is a primary means by which a mobile app connects to Salesforce. Although not required, you can use Salesforce Mobile SDK to build mobile applications as connected apps. These connected apps can access Salesforce OAuth services and call Salesforce REST APIs."). 2. For App Platform, select **iOS**. 3. Select **Push Messaging Enabled**. 4. For Platform, select **Apple**. 5. Optionally provide an Application Bundle ID to avoid problems with your push notification settings. 6. Select the environment to enable push notifications for. 7. Upload the Signing Key from your Apple developer account. 8. Enter the Key Identifier from your Apple developer account. 9. Enter the Team Identifier from your Apple developer account. # Configure Knowledge for Individual Steps in the Omniscript (Managed Package) For the managed package runtime, after the initial configuration to set up your Omniscript to work with Salesforce Knowledge, integrate Knowledge in your Omniscript Steps. Configure options on each step to enable Knowledge and filter results. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before you begin, set up your Omniscript to work with Salesforce Knowledge. See [Set Up Omniscript to Work with Salesforce Knowledge (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_setup_omniscript_to_work_with_salesforce_knowledge.htm&release=264.0.0&type=5 "For the managed package runtime, to let users search and view Salesforce Knowledge articles in an Omniscript, integrate Salesforce Knowledge into the Omniscript. Omniscript also supports querying Lightning Knowledge."). 1. From the Omniscripts Designer, click the Step that you want to display the Knowledge component. 2. In the Properties panel, expand the **Knowledge Options** section, and click **Enable Knowledge**. 3. Update **Language** from the default value **English** to your preferred language. 4. Update **Public Status** from the default value Online to **Archive** or **Draft**. 5. In the **Keyword** field, enter the text to search for. This text can be literal text, such as Service Disconnect. Or you can use merge fields for variable data. For example, enter %RouterType% to enable your users to enter keywords to search for in a Text element whose **Name** is RouterType. For information on merge fields, see [Access Omniscript Data JSON with Merge Fields (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_access_omniscript_data_json_with_merge_fields.htm&release=264.0.0&type=5 "For the managed package runtime, enable Omniscript elements and element properties to access data JSON using merge fields. A merge field is a variable that references the value of a JSON node. For example, if a JSON node is \"FirstName\": \"John\", then the merge field %FirstName% returns John."). 6. To filter articles by their [Data Category](https://help.salesforce.com/articleView?id=category_whatis.htm&type=5&language=en_US), enter a SOQL query in the **Data Category Criteria** field. For example, enter Troubleshooting\_\_c AT (Router\_\_c) to show articles from the subcategory `Router` under the parent category `Troubleshooting`. For more information on building queries for Data Categories, see [With Data Category filtering Expression](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_select_with_datacategory.htm) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You don’t need to enter **WITH DATA CATEGORY** in your query. 7. If needed, when Filter Knowledge Search by Record Type or Lightning Knowledge is enabled in the Setup panel, enter the Record Type's API name in **Record Type Filter** to search those record types. For multiple Record Types, enter a comma-separated list with no spaces, such as FAQ,INFO. # Configure Loyalty Program Process Aliases Use aliases to quickly and easily specify object fields as resources. You can also use aliases for loyalty objects and fields instead of providing object-field relationships. To make loyalty aliases available as formula resources, define the formula in a rule condition. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To create a loyalty program process alias: Expression Set Object Aliases
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_important.png) Important You can’t create an alias for a field that has a polymorphic lookup relationship to two or more objects. For example, you can’t create an alias for the Member field in the Transaction Journal object. 1. From Setup, in the Quick Find box, enter Loyalty Program Process Aliases, and then select **Loyalty Program Process Aliases**. 2. On the Object and Field Aliases page, click **New**. 3. From Usage Type, select **TransactionJournal**. 4. For Create Field Alias For, select either an existing object alias or create an object alias. 5. Select the object for which you want to create a field alias. 6. Select the field for which you want to create the alias. For example, you can create an alias for the quantity purchased: Transaction Journal > Quantity. 7. Enter the alias name. 8. Save the object alias. When a loyalty alias is in use, you can’t modify or delete the alias. When the loyalty program process rule is inactive, you can change the source fields of the same data type. # Configure LWC Omniscript and Flexcard Activation and Compilation (Managed Package) For the managed package runtime, if Google Chrome is your default browser and IDX Workbench logs you into your source and target orgs through it, you can skip this task. When you deploy Omniscripts, Integration Procedures, and Flexcards, they’re automatically activated in the target org. However, if you use a different browser, you must configure this automatic activation feature manually. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To configure automatic activation of deployed Omniscripts, Integration Procedures, and Flexcards for a non-Chrome browser: 1. Install Node.js on your computer. 2. Open a terminal window on your computer. 3. Install the Puppeteer module on your computer using this command: ``` npm install puppeteer -g ``` IDX Workbench uses the Puppeteer module to automatically activate Omniscripts, Integration Procedures, and Flexcards in the target org. # Configure Multi-Language in OmniOut for Omniscripts (Managed Package) For the managed package runtime, display multi-language Omniscripts in OmniOut using custom labels. Access custom labels in your Omniscript directly from Salesforce or use custom labels defined in local files. Control which language displays by using a language code. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The language code searches locally defined language files or a Salesforce connection to access a language's custom labels. If the Omniscript component tag's run-mode attribute is present and set to localScriptDef, the Omniscript uses the locally defined custom labels. If run-mode isn’t present, the Omniscript accesses the custom labels through a Salesforce connection. Before You Begin 1. Create a multi-language Omniscript. See [Create Multi-Language Omniscripts (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_multi_language_omniscripts.htm&release=264.0.0&type=5 "For the managed package runtime, allow a single Omniscript to run in multiple languages using Salesforce custom labels."). 2. Add your multi-language Omniscript to an OmniOut LWC. See [Add an Omniscript Lightning Web Component to OmniOut (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_an_omniscript_lightning_web_component_to_omniout.htm&release=264.0.0&type=5 "For the managed package runtime, download and configure an Omniscript to use it off-platform in OmniOut. Download your Omniscript LWC from the LWC Omniscript Designer, add the component folder to the OmniOut project, and configure files for HTML and CSS."). 3. View Salesforce language codes. See [Translations](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_translations.htm) (Salesforce documentation). 1. After adding your multi-language Omniscript to OmniOut, in the VSCode command line, enter this command, and replace **LANGCODE** with a Salesforce language code: ``` npm run customlabels LANGCODE ``` 2. View these two generated files: LANGCODE.translations.js: contains all of the custom labels, both user-defined and out-of-the-box, in a single file. The language code replaces the LANGCODE property used in this example file name. translations.js: contains the exports of all different translations for all of the custom labels. 3. In each LANGCODE.translations.js file, add the translated labels for that language. The translated labels aren't downloaded as part of the npm command. For example, a fr.translations.js file has text for these two labels in English. ``` export const FR = { "OmniStepValidationError": "Please fix all the fields with errors.", "OmniValidationBadInput": "Enter a valid value.", ... } ``` In this example, the English text is manually replaced with the French labels. ``` export const FR = { "OmniStepValidationError": "Veuillez corriger tous les champs contenant des erreurs.", "OmniValidationBadInput": "Entrez une valeur valide.", ... } ``` 4. In translations.js, uncomment export lines to include them when the Omniscript is running. ``` export * from "./es.translations.js"; ``` 5. Pass the language code using a combination of these two options: ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If both options are present, the component tag property overrides the URL parameter.

Language Code Option

Description

Example

Component Tag Property

Passes the language code in the Omniscript's component tag as a prefill property.

<my-omniscript prefill='\{"LanguageCode":"iw"}'> </my-omniscript>

URL Parameter

Append the LanguageCode parameter to your URL endpoint and enter a Salesforce language code.

localhost:4002/myOmniScript?LanguageCode=en_US
                              
6. (Optional) In the Omniscript component tag, add the **run-mode="localScriptDef"** attribute to force the Omniscript to use the locally defined custom labels. If run-mode isn’t present, a connection is made to retrieve the custom labels from Salesforce. 7. (Optional) If you’re using **run-mode="localScriptDef"** in your Omniscript component tag, you must define custom translations for each language manually. To define your custom labels: 1. In OmniOut, select a **LANGCODE.translations.js** file. 2. In your file, locate a key-value pair, and in the value field, enter the translation for that custom label. Repeat this process for each custom label. ``` export const es = { "New": "Nuevo" } ``` 8. (Optional) Test the multi-language Omniscript In the command line: 1. In the command line, enter and run the command `npm run watch`. 2. Click the localhost link that appears in the command line. 3. In your browser, edit the URL to include a language code. ``` localhost:4002/myOmniScript?LanguageCode=en_US ``` What’s next: [Run OmniOut in Development Mode (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_run_omniout_in_development_mode.htm&release=264.0.0&type=5 "For the managed package runtime, view and test your Omniscript and Flexcard before adding it to your application by running it in development mode. Use a jsForce connection to request data from your org."). # Configure My Domain Settings Customize your login page with your brand and determine the user experience when they log into your Salesforce org via your My Domain. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note My Domain settings apply to your org’s deployed and provisioned domains. - **[Customize Your My Domain Login Page with Your Brand](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_login_branding.htm&release=264.0.0&type=5)** My Domain gives you a point-and-click way to brand the page that prompts users to log in to your Salesforce org. You can replace the Salesforce logo with your own and change your background and login button colors. You can also display content to the right of your login form. Branding options apply to the entire login experience, including pages for users to verify their identity and reset passwords. They also apply to login flows. - **[Create an Interview-Based Login Page with My Domain Login Discovery](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_login_discovery.htm&release=264.0.0&type=5)** Configure My Domain with Login Discovery to simplify the login process for users. Login Discovery is sometimes called interview-based login because it’s a two-step process. First, users identify themselves with an email address or phone number at the login page. Next, users verify themselves depending on the identifier entered. Users can verify themselves with a password, their single sign-on (SSO) credentials, or Lightning Login. You set up Login Discovery from the My Domain Setup page after you create an Apex class that implements the `MyDomainLoginDiscoveryHandler` interface. - **[Add Identity Providers to the My Domain Login Page](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_login_id_prov.htm&release=264.0.0&type=5)** Users can authenticate with alternate identity provider options from your My Domain login page. If you enabled single sign-on (SSO) and configured SAML, or if you set up external authentication providers, you can display them on the login page. Users are sent to the identity provider’s login screen to authenticate and then redirected to Salesforce. - **[Customize Your My Domain Login Page for Mobile Auth Methods](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_login_mobile_auth_methods.htm&release=264.0.0&type=5)** By default, mobile apps built with Salesforce Mobile SDK use standard authentication. With standard authentication, a user logs in and approves access to their Salesforce data within the mobile app. For improved security and better performance on mobile apps, configure advanced browser-based authentication from the My Domain Setup page. With browser based-authentication, mobile users are taken to their native browser for authentication. After they log in and approve data access, they’re redirected to the mobile app. #### See Also - [My Domain](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_overview.htm&release=264.0.0&type=5 "Showcase your company’s brand with a customer-specific subdomain name in your Salesforce org URLs. With My Domain, you can include your company name in your URLs, for example, https://mycompany.my.salesforce.com. With these org-specific URLs, you can set up a custom login page, set a custom login policy, offer single sign-on, and allow users to log in with a social account. My Domain also allows you to work in multiple Salesforce orgs in the same browser at the same time.") # Configure OAuth 2.0 Code and Credential Flow Policies for External Client Apps After Client Credentials Flows setting is enabled, configure the flow’s policies. 1. Select **Edit** on the Policies tab. 2. To define permitted users, select **Admin-approved users are pre-authorized** from the Permitted Users dropdown. 3. Select a permission set. 4. Save the policies. # Configure OAuth 2.0 JWT Bearer Flow for External Client Apps External client apps can support OAuth 2.0 JSON Web Token (JWT) bearer flows using the certificate field in the global OAuth settings file. A JWT flow authorizes servers to access data without interactively logging in each time the servers exchange information. ### Required Editions
User Permissions Needed
To view all external client apps, view their settings, and edit their OAuth policies file View all External Client Apps, view their settings, and edit their policies
To configure a JWT bearer flow, you must first deploy an external client app on your Salesforce org. [Deploy an External Client App That References the Source Org’s Global OAuth Settings File](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_that_references_the_source_org.htm&release=264.0.0&type=5 "Deploy an external client app on a new org, and have it reference the source org’s credentials. To configure this relationship, edit the OAuth link in the OAuth settings file and remove the reference to the global OAuth settings file in the package.xml manifest file of the new org."), or [Deploy an External Client App with a New Global OAuth Settings File](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_with_global_settings_file.htm&release=264.0.0&type=5 "Deploy the source org’s metadata on an org with its own OAuth consumer. To configure the app, remove the OAuth link in the OAuth settings file and add a reference to the global OAuth settings file in the package.xml manifest file on the new org."). 1. Create an X.509 certificate by following the steps in [OAuth 2.0 JWT Bearer Flow for Server-to-Server Integration](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_jwt_flow.htm&release=264.0.0&type=5 "Sometimes you want to authorize servers to access data without interactively logging in each time the servers exchange information. For these cases, you can use the OAuth 2.0 JSON Web Token (JWT) bearer flow. This flow uses a certificate to sign the JWT request and doesn’t require explicit user interaction. However, this flow does require prior approval of the client app."). 2. Open the extlClntAppGlobalOauthSettings file. 3. If the certificate field doesn’t exist, add it and enter the X.509 certificate as the value for the certificate field. 4. Save the extlClntAppGlobalOauthSets file. 5. Create a JWT following the steps in the [OAuth 2.0 JWT Bearer Flow for Server-to-Server Integration](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_jwt_flow.htm&release=264.0.0&type=5 "Sometimes you want to authorize servers to access data without interactively logging in each time the servers exchange information. For these cases, you can use the OAuth 2.0 JSON Web Token (JWT) bearer flow. This flow uses a certificate to sign the JWT request and doesn’t require explicit user interaction. However, this flow does require prior approval of the client app."). 6. Use this cURL command to request the token for deploying your external client app. ``` curl -X POST /services/oauth2/token -d 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=' | json_pp ``` This returns a bearer token you can use to authorize in other flows. # Configure OAuth Policies OAuth policies are an important part of the external client app OAuth plugin that are generated with default values when an external client app is saved or during deployment to a subscriber org. Admins configure the OAuth policies file for their specific use case. Policies only apply to the org where they are configured, whether that is the same org where the external client app was created or the external client app was installed. After an admin updates policies, the values persist even if the developer updates the app Settings. - **[Configure a Custom Attribute for External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.configure_custom_attributes_for_external_client_apps.htm&release=264.0.0&type=5)** Create custom attributes to capture useful and unique information. With custom attributes, you can get more information about a user’s identity such as an address or job title. Configure custom attributes for your external client app in the Policies tab. - **[Configure Client Credential Flow Policies for External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.policies_configure_client_credentials_flow_for_external_client_apps.htm&release=264.0.0&type=5)** After Client Credentials Flows setting is enabled, configure the flow’s policies. - **[Configure OAuth 2.0 Code and Credential Flow Policies for External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.policies_configure_authorization_code_credentials_flow_for_external_client_apps.htm&release=264.0.0&type=5)** After Client Credentials Flows setting is enabled, configure the flow’s policies. - **[Stage, Rotate, and Delete OAuth Credentials for a Local External Client App](https://help.salesforce.com/s/articleView?id=xcloud.eca_stage_oauth_credentials.htm&release=264.0.0&type=5)** Use the OAuth Staged Credentials Connect REST API endpoint to manage the OAuth key and secret for a local external client app. The API can be used to stage, view, rotate, or delete OAuth credentials. - **[Manage External Client App OAuth Credentials with AWS Secrets Manager](https://help.salesforce.com/s/articleView?id=xcloud.eca_manage_credentials_with_aws_secrets_manager.htm&release=264.0.0&type=5)** Maintain credential security as you stage and rotate your client secret with the Amazon Web Services (AWS) Secrets Manager. Using Secrets Manager, the external client app client secret is never exposed. Secrets Manager coordinates the rotation according to the schedule required by your security and compliance mandates. # Configure OAuth Policies: Configure Client Credential Flow Policies Control This security posture discourages the use of the Client Credentials flow in favor of more secure, user-context-based authentication methods. ## Control Name External Client Apps: Configure OAuth Policies: Configure Client Credential Flow Policies ## Recommended Configuration Configure Client Credential Flow Policies. ## Control Overview This security posture discourages the use of the Client Credentials flow in favor of more secure, user-context-based authentication methods to make sure that all data access is tied to a specific identifiable individual. The Client Credentials flow manages the ability of External Client Apps to authenticate and obtain access tokens using a Client ID and secret without human intervention. ## Security Risk If Not Configured Using this flow creates a high risk of data abuse because it bypasses user-level authorization, allowing backend service accounts to operate with persistent, autonomous access to the entire organizational dataset. ## Threat Scenarios A compromised external server uses its stored client credentials to programmatically exfiltrate massive volumes of records or modify critical system configurations without any interactive login or multi-factor authentication challenge. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations The use of over-privileged service identities results in a lack of individual accountability and can lead to a full-scale data breach if the static credentials associated with the external client app are intercepted or leaked. ## Higher Risk When The client credential flow is mapped to an execution user with broad administrative permissions or when the integration lacks IP address restrictions and request rate limiting. ## Low Risk When If the company replaces the client credentials flow with a JWT bearer flow using a unique digital certificate or restricts the service account to a highly narrowed permission set and specific network ranges. ## Business and Integration Considerations While this flow is easier to implement for automated server-to-server processes, it requires a rigorous internal governance process to manage the lifecycle of the service account and its associated permissions. ## Recommended Remediation Evaluate the integration architecture to transition from the client credentials flow to a more secure method like the JWT Bearer flow and make sure that any remaining service accounts are assigned to a dedicated execution user with the absolute minimum-required access. ## Security Health Review Guidance Security Health Review identifies these policies as strongly recommended depending on the integration use case, as avoiding or strictly hardening these automated processes helps make sure that backend systems operate with a restricted identity to prevent large-scale data abuse. #### See Also - [Configure Client Credential Flow Policies for External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.policies_configure_client_credentials_flow_for_external_client_apps.htm&type=5&language=en_US) # Configure OAuth Policies: Configure Custom Scopes for External Client Apps Control This security setting enables Salesforce admins to define specific, limited access permissions that allow external applications to interact only with designated protected resources. ## Control Name External Client Apps: Configure OAuth Policies: Configure Custom Scopes for External Client Apps ## Recommended Configuration Configure Custom Scopes for External Client Apps. ## Control Overview This security setting enables Salesforce admins to define specific, limited access permissions that allow external applications to interact only with designated protected resources rather than the entire organizational dataset. ## Security Risk If Not Configured Overly broad custom scopes for connected clients lead to a vulnerability where integrated applications gain excessive control and unauthorized functional capabilities via over-privileged access tokens. ## Threat Scenarios An external application with an unrestricted custom scope is compromised by an attacker who then uses the elevated token privileges to execute administrative commands or access sensitive data beyond the original business requirement. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to implement granular custom scopes results in a lack of least-privilege enforcement, potentially allowing a single vulnerability in a third-party tool to escalate into a full-scale compromise of the Salesforce environment. ## Higher Risk When When custom scopes are mapped to global or wildcard permissions that grant the external client the ability to read, write, or delete records across all objects without restriction. ## Low Risk When If the company uses a robust OAuth scope validator and enforces strict internal code reviews to ensure that each integration only requests the absolute minimum functional claims required for its operation. ## Business and Integration Considerations Defining precise custom scopes improves the company security posture but requires developers to explicitly update application logic to request and handle restricted tokens for specific API calls. ## Recommended Remediation Go to the OAuth Settings for the External Client App to define specific Custom Scopes and then assign these scopes to the relevant policies to ensure restricted access for all client requests. ## Security Health Review Guidance Security Health Review identifies the use of granular custom scopes as a strongly recommended standard to enforce the principle of least privilege and prevent third-party integrations from obtaining excessive control over the Salesforce instance. #### See Also - [Configure Custom Scopes for External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.custom_scopes_for_external_client_apps.htm&type=5&language=en_US) # Configure OAuth Policies: Custom Attribute Security Control This security setting lets Salesforce admins define and restrict the specific user-level metadata and company claims that are injected into the cryptographically signed OAuth ID token. ## Control Name External Client Apps: Configure OAuth Policies: Custom Attribute Security ## Recommended Configuration Configure a Custom Attribute for External Client Apps. ## Control Overview This security setting lets Salesforce admins define and restrict the specific user-level metadata and company claims that are injected into the cryptographically signed OAuth ID token. ## Security Risk If Not Configured Without explicitly defined custom attributes and associated security policies, third-party integrations can perform unauthorized harvesting of organizational metadata by extracting sensitive information from default or overly permissive token payloads. ## Threat Scenarios A malicious or poorly governed third-party application programmatically scrapes internal company structures, department hierarchies, or custom user fields included in the ID token to build a detailed map of the internal corporate environment. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations The unauthorized collection of metadata facilitates targeted social engineering attacks and shadow profiling of the workforce, potentially exposing internal business logic and administrative relationships to external entities. ## Higher Risk When The integration is granted broad data access permissions or when the ID token includes high-entropy identifiers that can be correlated across multiple external data sets. ## Low Risk When If the company enforces a strict allowlist for ID token claims and uses a hardened token exchange handler to sanitize all outbound identity assertions. ## Business and Integration Considerations Implementing restricted custom attributes makes sure that external partners only receive the minimum data required for functional authorization while maintaining compliance with corporate data residency and privacy standards. ## Recommended Remediation Go to the OAuth Policies of the External Client App to define a limited set of custom attributes and make sure that only necessary organizational metadata is exposed in the ID token. ## Security Health Review Guidance Security Health Review identifies the granular control of identity claims as a strongly recommended defense against metadata harvesting, so that third-party integrations operate under a strict need-to-know model for all company data. #### See Also - [Custom Attributes for External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.meta_custom_attributes_for_external_client_apps.htm&type=5&language=en_US) # Configure OAuth Policies: Manage External Client App OAuth Credentials with AWS Secrets Manager Control This security integration enables Salesforce to automatically synchronize and store External Client App OAuth consumer secrets directly within a centralized AWS Secrets Manager vault. ## Control Name External Client Apps: Configure OAuth Policies: Manage External Client App OAuth Credentials with AWS Secrets Manager ## Recommended Configuration Manage External Client App OAuth Credentials with AWS Secrets Manager. ## Control Overview This security integration enables Salesforce to automatically synchronize and store External Client App OAuth consumer secrets directly within a centralized AWS Secrets Manager vault rather than maintaining them as static metadata within the Salesforce platform. ## Security Risk If Not Configured Weak external management or decentralized storage of OAuth secrets leads to a single-point breach risk where a compromise of unsecured credentials exposes all integrated backend services to unauthorized access. ## Threat Scenarios An attacker gains access to a plaintext configuration file or an unprotected administrative interface containing static secrets and uses those credentials to impersonate the external client application across multiple production environments. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to use a hardware-backed or managed vault results in persistent credential exposure, as compromised secrets often remain valid for extended periods without the benefit of automated rotation or centralized audit logging. ## Higher Risk When When the same OAuth secret is manually shared across multiple distributed cloud environments or stored in version control systems without cryptographic protection. ## Low Risk When If the company already uses a robust, identity-based access management policy within AWS that restricts secret retrieval to specific verified VPC endpoints and execution roles. ## Business and Integration Considerations Implementing this control requires an active AWS account and the configuration of a named credential in Salesforce to establish a secure mutual authentication path between the two cloud platforms. ## Recommended Remediation Configure the External Client App to use AWS Secrets Manager for credential storage by defining the secret Amazon Resource Name and establishing the necessary cross-cloud authorization policies. ## Security Health Review Guidance Security Health Review identifies the use of externalized secret management as a strongly recommended standard for high-assurance integrations to make sure that sensitive authentication artifacts are protected by enterprise-grade vaulting and automated rotation policies. #### See Also - [Manage External Client App OAuth Credentials with AWS Secrets Manager](https://help.salesforce.com/s/articleView?id=xcloud.eca_manage_credentials_with_aws_secrets_manager.htm&type=5&language=en_US) # Configure OAuth Policies: Manage External Client App OAuth Usage Control This security setting provides Salesforce admins with a centralized interface to monitor, install, and block individual External Client App instances to regulate which third-party integrations can actively access organizational data. ## Control Name External Client Apps: Configure OAuth Policies: Manage External Client App OAuth Usage ## Recommended Configuration Manage External Client App OAuth Usage. ## Control Overview This security setting provides Salesforce admins with a centralized interface to monitor, install, and block individual External Client App instances to regulate which third-party integrations can actively access organizational data. ## Security Risk If Not Configured Unmonitored OAuth usage for external client applications leads to unauthorized application activity and data exfiltration that may proceed undetected due to a lack of visibility into active session lifecycles and integration permissions. ## Threat Scenarios A previously authorized but now insecure third-party application continues to programmatically harvest sensitive records long after its business utility has ended because the admin has no mechanism to audit or revoke its active OAuth footprint. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to actively manage application usage results in an unmanaged attack surface where compromised external services can maintain a persistent connection to the Salesforce environment without being subject to periodic security reviews. ## Higher Risk When When external applications are granted broad scopes—such as full data access or refresh token capabilities—and are not subject to automated session expiration or IP-based restrictions. ## Low Risk When If the company uses real-time Event Monitoring to alert on unusual API traffic patterns and enforces a strict approval process before any External Client App can be installed in the production environment. ## Business and Integration Considerations Implementing usage management to keep the company compliant with data processing agreements, though blocking a widely used integration without prior notice can result in critical business process interruptions. ## Recommended Remediation Go to the OAuth Usage page for External Client Apps to review active integrations, uninstall unnecessary applications, and block any suspicious or unapproved clients from accessing the org. ## Security Health Review Guidance Security Health Review identifies the continuous monitoring of OAuth usage as a strongly recommended standard to maintain a hardened security posture, so that all third-party access is explicitly tracked and aligned with current business requirements. #### See Also - [Manage External Client App OAuth Usage](https://help.salesforce.com/s/articleView?id=xcloud.manage_external_client_app_usage.htm&type=5&language=en_US) # Configure OAuth Policies: Manage the Start URL for External Client Apps Control This security setting lets Salesforce admins define and validate the specific landing page URL where users are directed after completing the OAuth authorization process for an External Client App. ## Control Name External Client Apps: Configure OAuth Policies: Manage the Start URL for External Client Apps ## Recommended Configuration Manage the Start URL for External Client Apps. ## Control Overview This security setting lets Salesforce admins define and validate the specific landing page URL where users are directed after completing the OAuth authorization process for an External Client App. ## Security Risk If Not Configured Unvalidated start URLs for external client apps lead to a vulnerability to open-redirect phishing attacks where legitimate Salesforce entry points are manipulated to forward users to malicious external domains. ## Threat Scenarios An attacker crafts a specially formatted login link that includes a rogue start URL parameter, leading an authenticated user to a spoofed credential-harvesting site immediately after a successful Salesforce login. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to restrict redirection targets facilitates sophisticated social engineering campaigns that leverage the trust of the Salesforce domain to compromise user credentials or distribute malware. ## Higher Risk When When the External Client App is used by high-privilege admins or when the company lacks global blocklists for known malicious domains. ## Low Risk When If the company has already configured restricted redirect allowlists within the Salesforce CSP and CORS settings to prevent unauthorized outbound navigation. ## Business and Integration Considerations Implementing a fixed start URL ensures a consistent and branded user experience, though it requires updating if the target application’s internal directory structure changes. ## Recommended Remediation Go to the Settings for the External Client App and define a specific, validated Start URL to ensure all post-authorization traffic is routed to a trusted destination. ## Security Health Review Guidance Security Health Review identifies the management of redirection targets as a strongly recommended standard to prevent the abuse of trusted identity flows for phishing and to maintain the integrity of the user’s navigation path. #### See Also - [Manage the Start URL for External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.manage_eca_start_url.htm&type=5&language=en_US) # Configure OAuth Policies: OAuth 2.0 Code and Credential Flow Policies for External Client Apps Control This security setting defines the specific operational parameters and authorization constraints for both interactive authorization code exchanges and automated machine-to-machine client credential flows. ## Control Name External Client Apps: Configure OAuth Policies: OAuth 2.0 Code and Credential Flow Policies for External Client Apps ## Recommended Configuration Configure OAuth 2.0 Code and Credential Flow Policies for External Client Apps. ## Control Overview This security setting defines the specific operational parameters and authorization constraints for both interactive authorization code exchanges and automated machine-to-machine client credential flows to regulate how tokens are issued. ## Security Risk If Not Configured The absence of flow-specific policies leads to a heightened risk of authentication artifact theft and unauthorized session acquisition because the system lacks the granular barriers necessary to prevent the exploitation of intercepted codes or credentials. ## Threat Scenarios An attacker intercepts a transient authorization code or a static client secret and successfully exchanges it for a high-privilege access token because the endpoint does not enforce secondary validation or strict execution user isolation. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to implement these policies facilitates the weaponization of stolen authentication artifacts, potentially allowing unauthorized actors to maintain persistent access to the organizational data tier without being detected by standard identity monitoring. ## Higher Risk When The integration uses a broad scope of data permissions and lacks supplemental controls like Proof Key for Code Exchange (PKCE) or source-based network restrictions. ## Low Risk When If the company mandates the use of the JWT bearer flow with digital certificates and enforces strict IP address filtering for all incoming token requests. ## Business and Integration Considerations Configuring these policies ensures that third-party integrations adhere to corporate security standards, though it requires a detailed inventory of application architectures to make sure that the chosen flow matches the technical capabilities of the client. ## Recommended Remediation Go to the OAuth Policies for the External Client App and explicitly turn on the required flows while assigning a dedicated, minimally privileged execution user for any automated processes. ## Security Health Review Guidance Security Health Review identifies these policies as strongly recommended depending on the integration use case, as these controls help make sure that backend automated processes and interactive sessions operate with restricted identities to prevent large-scale data abuse. #### See Also - [Configure OAuth 2.0 Code and Credential Flow Policies for External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.policies_configure_authorization_code_credentials_flow_for_external_client_apps.htm&type=5&language=en_US) # Configure OAuth Policies: Specify Profiles/Perm Sets for Access to External Client Apps Control These security settings restrict application access and App Launcher visibility to a specific subset of users by requiring explicit administrative pre-authorization through assigned profiles and permission sets. ## Control Name External Client Apps: Configure OAuth Policies: Admin approved users are pre-authorized for External Client Apps & Specify Profiles/Perm sets for access to External Client Apps ## Recommended Configuration Preauthorize User App Access Through External Client App Policies - select Admin approved users are pre-authorized. Configure an External Client App to Show in the App Launcher - select Admin-approved users are pre-authorized and specify the authorized profiles and permission sets. ## Control Overview These security settings restrict application access and App Launcher visibility to a specific subset of users by requiring explicit administrative pre-authorization through assigned profiles and permission sets. ## Security Risk If Not Configured The absence of admin-approved pre-authorization and defined permission sets lead to reduced oversight and unauthorized identification of sensitive organizational tools, which increases the potential blast radius of a compromised application. ## Threat Scenarios An unauthorized user or a compromised account identifies and targets a sensitive financial tool in the App Launcher that was globally visible, later harvesting data because the platform lacked administrative pre-approval constraints. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to constrain application access facilitates the proliferation of unmanaged data access points and allows malicious actors to perform internal reconnaissance to map out the organizational software ecosystem for potential exploitation. ## Higher Risk When When the application provides access to regulated data and is made visible to the entire workforce regardless of their functional role or verified need-to-know status. ## Low Risk When If the company enforces a restrictive visibility model where tools are only provisioned to users after a formal security review and the assignment of a specific permission set. ## Business and Integration Considerations Implementing these controls makes sure that only vetted applications are accessible, though it requires an established administrative process to manage the lifecycle of profile and permission set assignments for the user base. ## Recommended Remediation Go to the OAuth Policies for the External Client App, select Admin approved users are pre-authorized, and then explicitly add the authorized profiles and permission sets to the policy. ## Security Health Review Guidance Security Health Review identifies administrative pre-authorization as a strongly recommended standard to maintain centralized control over the application ecosystem and prevent the unauthorized discovery of sensitive business tools. #### See Also - [Pre-Authorize User App Access Through External Client App Policies](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_allow_deny_con_app.htm&type=5&language=en_US) # Configure OAuth Policies: Stage, Rotate, and Delete OAuth Credentials for an External Client App Control This security process uses the Salesforce REST API to programmatically generate, rotate, and retire consumer secrets and consumer keys for External Client Apps without exposing them in the administrative user interface. ## Control Name External Client Apps: Configure OAuth Policies: Stage, Rotate, and Delete OAuth Credentials for an External Client App ## Recommended Configuration Stage, Rotate, and Delete OAuth Credentials for an External Client App. ## Control Overview This security process uses the Salesforce REST API to programmatically generate, rotate, and retire consumer secrets and consumer keys for External Client Apps without exposing them in the administrative user interface. ## Security Risk If Not Configured The absence of automated credential management via the API leads to an increased likelihood of secret leakage in system logs or configuration files, eventually resulting in unauthorized API access through long-lived, static credentials. ## Threat Scenarios A legacy consumer secret is inadvertently captured in a developer log or version control system and exploited by an attacker to establish a persistent connection to the environment because the credential was never rotated. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failure to implement a structured rotation policy allows a single compromised secret to remain a viable entry point indefinitely, potentially leading to large-scale data exfiltration that remains undetected by standard monitoring. ## Higher Risk When When credentials are manually handled by multiple administrators or when the same secret is hard-coded across various distributed server environments and high-traffic logging systems. ## Low Risk When If the company uses a dedicated key management service to consume the API-generated secrets and enforces very short intervals for automated credential invalidation. ## Business and Integration Considerations Implementing programmatic rotation requires coordination between the Salesforce API and the client application to ensure that the transition to new credentials occurs without causing service downtime or authentication failures. ## Recommended Remediation Use the External Client App Credential REST API to stage new credentials, update the client application with the new values, and then delete the previous credentials to make sure that only the current set remains active. ## Security Health Review Guidance Security Health Review identifies the programmatic rotation of secrets as a strongly recommended standard for modern integrations to make sure that sensitive authentication artifacts are never handled in cleartext or retained beyond their necessary lifecycle. #### See Also - [Stage, Rotate, and Delete OAuth Credentials for an External Client App](https://help.salesforce.com/s/articleView?id=xcloud.eca_stage_oauth_credentials.htm&type=5&language=en_US) # Configure OmniAnalytics to Use the Tracking Manager (Managed Package) For the managed package runtime, after you create a Tracking Manager for the third-party analytics vendor, you must reference it from a Tracking Configuration and Tracking Group. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Follow the steps in [Workflow for Creating a Tracking Configuration and Adding Event Types (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_workflow_for_creating_a_tracking_configuration_and_adding_event_types.htm&release=264.0.0&type=5 "For the managed package runtime, a Vlocity Web Tracking Configuration specifies a third-party tag manager and account to which to send tracking data. Vlocity Web Tracking Event Types specify data formats for specific events. In the workflow example, Event Types pass Omniscript data to Google Analytics."), except: 1. Type a **Vendor Name**, for example MixPanel. 2. In the **Visualforce Page** field, type the name of the Visualforce page you created. 3. When creating each Vlocity Web Tracking Event Type, specify the **Event Payload** for the third-party analytics vendor. 4. Create [Inclusion Rules](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_inclusion_rule_for_an_event_type.htm&release=264.0.0&type=5 "For the managed package runtime, a Vlocity Web Tracking Event Type can have an Inclusion Rule, which specifies a true-or-false condition that determines whether an event is sent to a third-party analytics vendor such as Google Analytics.") if you need them. 2. Follow the steps in [Create a Tracking Group and Add Components to Track (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_tracking_group_and_add_components_to_track.htm&release=264.0.0&type=5 "For the managed package runtime, to specify a group of components to be tracked together, you create a Vlocity Tracking Group and add Omniscript and Flexcard components to it."), except: 1. Specify a **Tracking Group Type** of **Web**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note A specific Omniscript or Flexcard can belong to two Tracking Groups provided that one is **Internal** and the other is **Web**. 2. For the **Vlocity Web Tracking Configuration**, specify the configuration you created in the previous step. 3. Follow the steps in [Create a Lightning App Page with a Tracking Manager (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_lightning_app_page_with_a_tracking_manager.htm&release=264.0.0&type=5 "For the managed package runtime, the Vlocity Tracking Manager is a Lightning Web Component that must be included in any Lightning page that includes components tracked with OmniAnalytics. It listens for user interaction events and sends data for those events to VlocityTrackingEntry__c objects, VlocityTrackingEvent__e Platform Events, or both."). # Configure OmniAnalytics with Google Analytics OmniAnalytics tracks user interactions with Omniscripts and Flexcards by integrating with Google Analytics 4 (GA4) and Google Tag Manager. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Example Omniscript and Flexcard The tasks in this workflow use two examples to illustrate the setup: - A Omniscript representing a smartphone purchasing process. - A Flexcard that redirects users to the Google website. These examples communicate with GA4 by using the [Google Tag Manager Ecommerce APIs](https://developers.google.com/analytics/devguides/collection/ga4/ecommerce?client_type=gtm). If you're familiar with Google Analytics and don't need the examples, make sure your Omniscripts meet these criteria, then skip to step 5. - Enable Tracking is checked in the Omniscript Setup. - The Omniscript includes JSON data for Google Analytics and Google Tag Manager. In **Setup** or **Step Properties**, expand **Messaging Framework** and add your message key value pairs. Before You Begin - Complete [Configure Internal OmniAnalytics](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_workflow_configure_internal_std.htm&release=264.0.0&type=5 "OmniAnalytics can track user interactions with Omniscripts and Flexcards without the use of a third-party analytics provider."). You must create an Internal Tracking Group first to enable underlying metadata tracking. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note The step "Add Tracked Components to a Lightning App Page" is optional if you are only tracking events by using Google Analytics in Experience Cloud. This step is mandatory only if you want to view tracking data within the Salesforce Internal OmniAnalytics dashboard. - [Create Google Analytics Trusted URLs](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_create_google_analytics_trusted_sites_std.htm&release=264.0.0&type=5 "For OmniAnalytics and Google Analytics to communicate, your Salesforce org must trust the Google Analytics websites."). Make sure that your Salesforce org allows communication with Google domains. To ensure Google Analytics captures Omniscript and Flexcard events, configure Tracking Groups in sequence: 1. Configure an Internal Tracking Group: This registers the components for tracking within the Omnistudio framework. 2. Configure the Google Analytics Tracking Group: Link your registered components to your Google destination. 3. Set up Google Accounts: Create your accounts and properties at [analytics.google.com](https://analytics.google.com) and [tagmanager.google.com](https://tagmanager.google.com/). 4. Map JSON Data: Complete [Adding Ecommerce Data to the Example Omniscript for OmniAnalytics](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_workflow_google_data_example_omniscript_and_flexcard_std.htm&release=264.0.0&type=5 "Google Tag Manager Ecommerce requires specific kinds of data. You must add this data to the Messaging Framework Omniscript properties. When the Omniscript runs, it sends this data to Google Analytics.") to align your data with the standard Google Analytics Ecommerce schema. 5. Finalise Connections: Complete [Setting Up Third-Party Tracking and Event Types](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_workflow_configure_external_std.htm&release=264.0.0&type=5 "An External Tracking Definition specifies a third-party analytics account and tag manager that the OmniAnalytics tracking data is sent to. External Tracking Event Types specify data formats for specific events."). Define which specific interactions (example, StepLoad or ExtractAction) trigger a hit to Google. If you're an Experience Cloud user, make sure that the Google Analytics Tracking Group is active to enable external data flow. # Configure Omniscript Cancel Options Navigate users to different Salesforce experiences after canceling an Omniscript by configuring cancel options. Omniscript's cancel functionality enables users to cancel an Omniscript from a Step by clicking a cancel link. The cancel link directs the user to a Salesforce experience set in the cancel options. Cancel options are built on top of the Navigate Action and use the same Page Reference Types to navigate to different experiences. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Restart Omniscript isn’t supported as a cancel option. 1. From the Omniscript's Setup panel, expand **Cancel Options** and enable users to cancel the Omniscript. Enabling users to cancel an embedded Omniscript also enables them to cancel the parent Omniscript and any other Omniscripts embedded in the parent. Similarly, enabling users to cancel the parent Omniscript enables them to cancel all embedded Omniscripts. In both cases, a cancel link is included in all parent and child Omniscripts. 2. In **Field Label**, enter the cancel option's display text. The text displays as a clickable link in every Step element. 3. If needed, select the option to show a prompt before canceling the Omniscript, and enter a confirmation message for the prompt. Users can return to the Omniscript or confirm the cancellation. 4. If needed, select the option to replace the existing entry in the browser history with a Page Reference Type. Enabling the property prevents users from navigating back to the Omniscript. 5. Determine the Salesforce experience to which the cancel link directs by clicking and selecting a **Page Reference Type**. For available page reference types, see [Open Other Pages from Omniscripts with the Navigate Action](https://help.salesforce.com/s/articleView?id=xcloud.os_navigate_action_12710.htm&release=264.0.0&type=5 "To open various Salesforce pages, apps, and resources from Omniscript, use the Navigate element."). 6. For the selected Page Reference Type, enter additional parameters to pass to the experience. For information about Page Reference Types, see [PageReference Types](https://developer.salesforce.com/docs/component-library/documentation/lwc/lwc.reference_page_reference_type). # Configure Omniscript Settings Configure optional settings for your Omniscript in the Setup panel of the Omniscript Designer, such as making your Omniscript reusable or enabling logging. ## Default Setup Properties Default setup properties apply to your entire Omniscript and aren’t included in each element’s properties. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note After updating or configuring Omniscripts, allow 15–20 minutes for updates to appear, even after clearing your cache. If you see any errors or if old versions load, contact Salesforce support to enable the **Template API** setting. This helps updates show up faster and more reliably.

Default Setup Property

Description

Task Documentation

Enable reusable

If checked, enables the Omniscript to be embedded in another Omniscript.

Embed an Omniscript in Another Omniscript

Enable SEO

Makes your Omniscript's URL available to search engines.

Enable SEO for Omniscripts

Set the currency code

Overrides the default currency by configuring the currency code field. By default, Omniscript uses the org default currency in single-currency orgs and the user's currency in multi-currency orgs.

Configure an Omniscript's Currency Code

Fetch picklist values at script load

If selected, enables picklist values to be retrieved at script load. If deselected, picklists are fetched at design time. Sometimes, the Omniscript can’t retrieve the picklist values because it reached the Apex CPU limits. In that case, deselect the checkbox and reactivate the Omniscript. If you later add more values, deactivate and reactivate the Omniscript to refresh the data.

Populating Picklist Values in Omniscript Inputs from Apex

Seed data JSON

Enables the Omniscript to be seeded with JSON data on launch. The property doesn’t allow for referencing other data with the %element% syntax or use of expressions. For more robust functionality, see Set Values in an Omniscript.

Seed Data Into an Omniscript

Enable unload warning

Triggers a Leave Site? warning when reloading, navigating away, or closing the window.

None available

Enable logging metrics

Sends data to Salesforce about which Omniscript elements are used at runtime. The data doesn't include hidden actions and steps, and it doesn't collect user data.

None available

Enable logging metrics for hidden actions and steps

Sends data to Salesforce about which Omniscript hidden actions and steps are used at runtime. The data doesn't collect user data. By default, the property isn't selected due to possible decreased performance.

None available

Set the console tab title and icon

Applies text and an icon to the console tab where the Omniscript is embedded. These settings apply only if the Omniscript owns the entire tab or subtab. They aren't used if the Omniscript is embedded on a page with other components.

None available

## Setup Properties Setup property sections include sets of properties that apply to a specific configuration, such as displaying Knowledge Base articles in your Omniscript.

Setup Property

Description

Task Documentation

Step Chart Options

Hide the step chart or choose where to display it relative to your Omniscript.

Configure Step Chart for an Omniscript

Cancel Options

Enable cancel functionality and configure how the cancel behavior executes.

Configure Omniscript Cancel Options

Save Options

Enable users to save an Omniscript for later use.

Save and Resume an Omniscript

Knowledge Options

Enable Knowledge Articles to be displayed in or alongside your Omniscript.

Integrate Salesforce Knowledge with Omniscript

Error Messages

Set a default error message or simplify error messages for users.

Customize Omniscript Error Messages

Messaging Framework

Pass information using Pub/Sub, windowPostMessage, and Session Storage.

Messaging Framework for Omniscripts

Styling Options

Customize the design of your Omniscript using custom style sheets, design tokens, and a scroll animation.

Custom Styles for Omniscripts

# Configure Omnistudio Data Mapper and Integration Procedure Security Settings You can change settings for Data Mapper and Integration Procedure security in Setup. The settings you configure in this task are listed in [Data Mapper and Integration Procedure Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_and_integration_procedure_security_settings_48215.htm&release=264.0.0&type=5 "These settings affect Data Mapper and Integration Procedure security."). These steps apply if you use Omnistudio with standard runtime. 1. Go to Setup. - In Lightning Experience, click the gear icon and select **Setup** from the menu. - In Salesforce Classic, click the user menu and select **Setup** from the menu. 2. In the **Quick Find** box, type omni, then select **Omni Interaction Configuration**. 3. Click **New Omni Interaction Configuration**. 4. In the **Label** and **Value** field, type the name and value of the setting. For a list of settings, see [Data Mapper and Integration Procedure Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_and_integration_procedure_security_settings_48215.htm&release=264.0.0&type=5 "These settings affect Data Mapper and Integration Procedure security."). 5. Click **Save**. # Configure Omnistudio Data Mapper and Integration Procedure Security Settings You can change settings for Data Mapper and Integration Procedure security in Setup. The settings you configure in this task are listed in [Data Mapper and Integration Procedure Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_and_integration_procedure_security_settings_48215.htm&release=264.0.0&type=5 "These settings affect Data Mapper and Integration Procedure security."). These steps apply if you use Omnistudio on the standard runtime. 1. Go to Setup. - In Lightning Experience, click the gear icon and select **Setup** from the menu. - In Salesforce Classic, click the user menu and select **Setup** from the menu. 2. In the **Quick Find** box, type omni, then select **Omni Interaction Configuration**. 3. Click **New Omni Interaction Configuration**. 4. In the **Label** and **Value** fields, type the name and value of the setting. For a list of settings, see [Data Mapper and Integration Procedure Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_and_integration_procedure_security_settings_48215.htm&release=264.0.0&type=5 "These settings affect Data Mapper and Integration Procedure security."). 5. Click **Save**. # Configure Omnistudio Data Mapper and Integration Procedure Security Settings (Omnistudio for Managed Packages) (Managed Package) For the managed package runtime, you can change settings for Data Mapper and Integration Procedure security in Setup. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The settings you configure in this task are listed in [Data Mapper and Integration Procedure Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_and_integration_procedure_security_settings_1.htm&release=264.0.0&type=5 "For the managed package runtime, these settings affect Data Mapper and Integration Procedure security."). These steps apply if you use Omnistudio for Managed Packages. 1. Go to Setup. - In Lightning Experience, click the gear icon and select **Setup** from the menu. - In Salesforce Classic, click the user menu and select **Setup** from the menu. 2. In the Quick Find field, enter Custom Settings. 3. Click **Custom Settings**. 4. Click the letter **G** in the index across the top. ![The Custom Settings page lists settings with names that begin with G.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/customsettingsg.png) 5. To the left of **General Settings**, click **Manage**. ![The Custom Settings page lists General Settings.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/generalsettings.png) 6. Click **New**. 7. Enter a **Name** and a **Value**. For a list of settings, see [Data Mapper and Integration Procedure Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_and_integration_procedure_security_settings_1.htm&release=264.0.0&type=5 "For the managed package runtime, these settings affect Data Mapper and Integration Procedure security."). 8. Click **Save**. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important During the week of February 2, 2026, Salesforce enables the AdvancedOmnistudioAccessCheck, ApexClassCheckForIP, ApexClassCheck, EnforceDMFLSAndDataEncryption, and EnableQueryWithFLS settings by default to enhance org security. Review and prepare your configuration for a seamless transition and to prevent potential service interruptions. See [Advanced Security Checks for Omnistudio for Managed Packages](https://help.salesforce.com/s/articleView?id=xcloud.os_advanced_security_updates_overview.htm&release=264.0.0&type=5 "Advanced security checks for Omnistudio for Managed Packages enhance data protection by enforcing stricter validation of access and permissions. When enabled, these checks validate object-level access, field-level security, and Apex class permissions for all users, including guest, authenticated, and non-authenticated users, across Omnistudio components."). # Configure Omnistudio Data Mapper and Integration Procedure Security Settings (Omnistudio for Managed Packages) (Managed Package) For the managed package runtime, you can change settings for Data Mapper and Integration Procedure security in Setup. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The settings you configure in this task are listed in [Data Mapper and Integration Procedure Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_and_integration_procedure_security_settings.htm&release=264.0.0&type=5 "For the managed package runtime, these settings affect Data Mapper and Integration Procedure security."). These steps apply if you use Omnistudio for Managed Packages. 1. Go to Setup. - In Lightning Experience, click the gear icon and select **Setup** from the menu. - In Salesforce Classic, click the user menu and select **Setup** from the menu. 2. In the Quick Find field, enter Custom Settings. 3. Click **Custom Settings**. 4. Click the letter **G** in the index across the top. ![The Custom Settings page lists settings with names that begin with G.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/customsettingsg.png) 5. To the left of **General Settings**, click **Manage**. ![The Custom Settings page lists General Settings.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/generalsettings.png) 6. Click **New**. 7. Enter a **Name** and a **Value**. For a list of settings, see [Data Mapper and Integration Procedure Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_and_integration_procedure_security_settings.htm&release=264.0.0&type=5 "For the managed package runtime, these settings affect Data Mapper and Integration Procedure security."). 8. Click **Save**. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important During the week of February 2, 2026, Salesforce enables the AdvancedOmnistudioAccessCheck, ApexClassCheckForIP, ApexClassCheck, EnforceDMFLSAndDataEncryption, and EnableQueryWithFLS settings by default to enhance org security. Review and prepare your configuration for a seamless transition and to prevent potential service interruptions. See [Advanced Security Checks for Omnistudio for Managed Packages](https://help.salesforce.com/s/articleView?id=xcloud.os_advanced_security_updates_overview.htm&release=264.0.0&type=5 "Advanced security checks for Omnistudio for Managed Packages enhance data protection by enforcing stricter validation of access and permissions. When enabled, these checks validate object-level access, field-level security, and Apex class permissions for all users, including guest, authenticated, and non-authenticated users, across Omnistudio components."). # Configure OpenID Connect Single Logout with Salesforce as the OpenID Connect Provider Configure single logout (SLO) for an existing connected app acting as the OpenID Connect relying party. With OpenID Connect SLO, users can log out of either Salesforce or the relying party to log out of both of them. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Federated Authentication is available in: All Editions

Delegated Authentication is available in: Professional, Enterprise, Performance, Unlimited, Developer, and Database.com Editions

Authentication Providers are available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions

User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Modify All Data

Before you configure OpenID Connect SLO, review this information. - Confirm that the relying party supports OpenID Connect SLO. - Salesforce currently supports front-channel SLO only, meaning that SLO redirects must occur in the same browser. Salesforce doesn’t support SLO across different browsers. - After the initial creation of the connected app, changes to the SLO configuration for the connected app edit page don’t automatically propagate to the Manage Connected Apps page. - When users initiate SLO from Salesforce, the redirect to the login page is delayed for about 10 seconds. This delay ensures that the user is also logged out of the relying party. These steps edit an existing connected app. The fields described in the steps are the same whether you create or manage a connected app. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Manage Connected Apps**. 2. Next to the connected app that you want to configure for SLO, click **Edit**. 3. Under OAuth Policies, select **Enable Single Logout**. ![Single logout for OpenID Connect provider](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/single_logout_openid_connectedapp.png) 4. For Single Logout URL, enter the OpenID Connect SLO endpoint of the connected app’s relying party. This endpoint is where Salesforce sends a logout request when users log out of Salesforce. The relying party provides you with this endpoint. The Single Logout URL must be an absolute URL and start with https://. 5. To control where users are redirected after they successfully log out, configure logout page settings. - For an org, set the logout page URL in your [Session Settings](https://help.salesforce.com/s/articleView?id=xcloud.admin_sessions.htm&release=264.0.0&type=5 "Use the Session Settings screen to configure session security. You can configure settings such as the session connection type, timeout restrictions, and IP address ranges to protect against malicious attacks."). This URL applies to your entire org, not just the connected app. If you don’t set a logout page URL, users are redirected to your My Domain login page when they log out. - For an Experience Cloud site, set the logout page URL in the site’s [Login & Registration settings](https://help.salesforce.com/s/articleView?id=experience.external_identity_use_custom_logout_url.htm&type=5&language=en_US). If you don’t set a logout page URL, users are redirected to the site login page when they log out. 6. Provide the relying party with the OpenID Connect provider SLO endpoint for your Salesforce org. The relying party uses this endpoint to initiate SLO. The endpoint has the format https://MyDomainName.my.salesforce.com/services/auth/idp/oidc/logout where MyDomainName is your Salesforce domain. You can also find this endpoint using the [OpenID Connect Discovery Endpoint](https://help.salesforce.com/articleView?id=remoteaccess_using_openid_discovery_endpoint.htm&language=en_US). #### See Also - [Single Logout](https://help.salesforce.com/s/articleView?id=xcloud.slo_about.htm&release=264.0.0&type=5 "With single logout (SLO), users can log out from the identity provider and the service provider by logging out from either of them. Whether Salesforce is the service provider or identity provider, you can enable SLO with SAML or OpenID Connect. SLO can increase security and save users time by removing manual logout from every individual application.") - [Create Logout Event Triggers](https://help.salesforce.com/s/articleView?id=xcloud.security_auth_create_logout_event_trigger.htm&type=5&language=en_US) # Configure OpenID Connect Single Logout with Salesforce as the Relying Party Configure single logout (SLO) for an authentication provider acting as the OpenID Connect provider. With OpenID Connect SLO, users can log out of either Salesforce or the OpenID Connect provider to log out of both of them. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Federated Authentication is available in: All Editions

Delegated Authentication is available in: Professional, Enterprise, Performance, Unlimited, Developer, and Database.com Editions

Authentication Providers are available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions

User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Modify All Data

Before you configure OpenID Connect SLO, review this information. - Make sure that the authentication provider supports OpenID Connect SLO. - Salesforce currently supports front-channel SLO only, meaning that SLO redirects must occur in the same browser. Salesforce doesn’t support SLO across different browsers. - Some authentication providers don’t support logout initiated by the relying party. In this case, complete only step 5. Users can log out of Salesforce when initiated by the authentication provider. But logging out of Salesforce doesn’t necessarily log the user out of the authentication provider session. These steps edit an existing Authentication Provider. The fields are the same when you create or manage a connected app. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Next to the auth provider that you want to configure for SLO, click **Edit**. 3. Under Auth. Provider Edit, enter the logout endpoint from the authentication provider in Custom Logout URL. With this endpoint, Salesforce can initiate SLO. The Custom Logout URL must be an absolute URL and start with http:// or https://. ![Single Logout for OpenID Connect IdP](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/security_auth_slo_oidc_rp_configuring.png) 4. Save your work. 5. Provide the OpenID Connect provider with the SLO endpoint for your Salesforce org. The OpenID Connect provider uses this endpoint to initiate SLO. The endpoint has the format https://MyDomainName.my.salesforce.com/services/auth/idp/oidc/logout where MyDomainName is your Salesforce domain. You can also find this endpoint using the [OpenID Connect Discovery Endpoint](https://help.salesforce.com/articleView?id=remoteaccess_using_openid_discovery_endpoint.htm&language=en_US). ![Single Logout for OpenID Connect RP endpoint](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/security_auth_slo_oidc_rp_endpoint.png) #### See Also - [Single Logout](https://help.salesforce.com/s/articleView?id=xcloud.slo_about.htm&release=264.0.0&type=5 "With single logout (SLO), users can log out from the identity provider and the service provider by logging out from either of them. Whether Salesforce is the service provider or identity provider, you can enable SLO with SAML or OpenID Connect. SLO can increase security and save users time by removing manual logout from every individual application.") - [Authentication Provider SSO](https://help.salesforce.com/s/articleView?id=xcloud.sso_authentication_providers.htm&release=264.0.0&type=5 "With authentication providers, your users can log in to your Salesforce org or Experience Cloud site with single sign-on (SSO) using credentials from a third party. Authentication providers also give your users access to protected third-party data. Salesforce offers several ways to configure authentication providers, such as with OpenID Connect or with a custom OAuth 2.0 configuration. Which protocol you can use depends on the third party.") - [Create Logout Event Triggers](https://help.salesforce.com/s/articleView?id=xcloud.security_auth_create_logout_event_trigger.htm&type=5&language=en_US) # Configure Options Manually (Managed Package) For the managed package runtime, manually compose a multi-language Select element. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. In Salesforce, define a set of custom labels and specify the translations for each one. 2. In Omniscript Designer, add a Select element with these settings:
Option Source Manual
Options
  • Value: The value to be written to the data JSON if this option is selected
  • Label: The name of the Salesforce custom label from which the text for the option is read.
![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_example.png) Example For a list of animals, define three custom labels with translations in Salesforce. | Custom Label | Default Value | Spanish Translation | | --- | --- | --- | | Animal\_Bear | Bear | Oso | | Animal\_Dog | Dog | Perro | | Animal\_Cat | Cat | Gato | In Omniscript Designer, specify the Options for the Select element. | Value | Label | | --- | --- | | 1 | Animal\_Bear | | 2 | Animal\_Dog | | 3 | Animal\_Cat | # Configure Packageable External Client Apps External client apps are an excellent solution when created and used locally. However, they were designed with managed packaging in mind. Packaged apps can be deployed to other orgs. Determine whether to package your app or keep it local. Packaged apps that include an OAuth plugin can be deployed to generate their own unique OAuth settings or they can reference the settings of the org where the app was developed. To work with scratch orgs, first [enable Developer Hub (Dev Hub) in your org](https://help.salesforce.com/s/articleView?id=sf.sfdx_setup_enable_devhub.htm&language=en_US). The permissions specified in the scratch org’s definition file are only recognized if they’re enabled in the Dev Hub org. This section describes the different ways of packaging, distributing, and disassociating an external client app that includes an OAuth plugin. To set up the environment for the demos in this section, we enabled external client app users and permissions on three orgs. Each is used for a different external client app org formation. - Org 1 is the source org that stores the global OAuth settings file. All deployed external client apps that don’t have their own global settings file reference the global settings file on this org. In a real-world scenario, this org must be a non-ephemeral org that remains active as long as any external client apps associated with it are in use. The sample username for this org is johndoe@example.com. - Org 2 includes an external client app that is deployed from org 1. It references org 1’s global settings file for OAuth credentials. The sample username for this org is johndoe@example2.com. - Org 3 includes an external client app that is deployed from org 1, but it includes its own global settings file with unique OAuth credentials. The sample username for this org is johndoe@example3.com. ## Export Metadata and Deploy on New Org Export the metadata from your source org, and then deploy it on another org. When this process is complete, both the source org (org 1) and the new org (org 2) reference the global settings file and the OAuth consumer details for the source org. The policies file is optional when deploying to the other org. If the existing policies file isn’t specified in the header, the deployment process generates a new policies file with default values. The new org can’t retrieve metadata from the global settings file because the source org owns it and the new org can only reference it. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note If you delete the external client app from the source org, the new org’s external client app breaks. Because the new org requires a global settings file on the source org, removal of the file causes OAuth flow to fail on the new org. ## Remove External Client App Entities from 2GP Managed Packages External client apps support [removing metadata components from second-generation (2GP) managed packages](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_dev2gp_remove_md_components.htm). Upon upgrade, ExternaclClientApplication and ExtlClntAppOauthSettings are hard deleted. - **[Retrieve Data from the Source Org](https://help.salesforce.com/s/articleView?id=xcloud.retrieve_data_from_the_source_org.htm&release=264.0.0&type=5)** Get external client app metadata from the source org using a retrieve operation. - **[Deploy an External Client App That References the Source Org’s Global OAuth Settings File](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_that_references_the_source_org.htm&release=264.0.0&type=5)** Deploy an external client app on a new org, and have it reference the source org’s credentials. To configure this relationship, edit the OAuth link in the OAuth settings file and remove the reference to the global OAuth settings file in the package.xml manifest file of the new org. - **[Deploy an External Client App with a New Global OAuth Settings File](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_with_global_settings_file.htm&release=264.0.0&type=5)** Deploy the source org’s metadata on an org with its own OAuth consumer. To configure the app, remove the OAuth link in the OAuth settings file and add a reference to the global OAuth settings file in the package.xml manifest file on the new org. - **[External Client Apps Association and Disassociation](https://help.salesforce.com/s/articleView?id=xcloud.associate_and_disassociate_external_client_apps.htm&release=264.0.0&type=5)** External client apps are designed for second-generation (2GP) packaging, which means that they’re optimized for source-driven development on scratch orgs. # Configure Person Accounts for Self-Registration If your company uses a business-to-consumer (B2C) business model, set up person accounts for self-registration. When new users register, they're added to your site under an individual record that merges account and contact information. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
To learn more about when and how to use person accounts, visit [Person Accounts](https://help.salesforce.com/s/articleView?id=sales.account_person.htm&type=5&language=en_US) in _Salesforce Help_. For detailed configuration steps, see [Enable Person Accounts](https://help.salesforce.com/s/articleView?id=account_person_enable.htm&language=en_US) in _Salesforce Help_. # Configure Pricing Elements in a Pricing Procedure for Work Order Estimation Pricing elements are the building blocks of a pricing procedure. Add these pricing elements to configure the pricing procedure. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To set up Salesforce Pricing Salesforce Pricing admin AND Salesforce Pricing Manager AND Salesforce Pricing Design Time User
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note After setting up, the pricing elements may display these warnings. This does not indicate an issue. `Percentage isn’t a valid output field in the selected lookup table.` `This lookup table is associated with an inactive pricing recipe.` ## Configure Pricing Setting Element The Pricing Setting element maps the commonly used variables in a pricing procedure to context tags. 1. On Pricing Procedure Builder, click the **Add** icon, and then find and select **Pricing Setting** from the list. 2. Specify these details:
Configure Pricing Setting Element
Variable value
Input Variables Line Item: ItemId
Output Variables
  • Net Unit Price: ItemUnitPrice
  • Subtotal: ItemSubtotal
## Configure List Price Element The List Price element calculates the base price of a product based on the price type. Click the **Add** icon, and then find and select **List Price** from the list.
Configure List Price Element
variable value
Lookup Table Details IFS Pricebook Entries
Input Rule Variables
  • Price Book: PriceBookId
  • Product: Product2Id
Output Rule Variables Price Book Entry ID: PriceBookEntryId
Input Variables Quantity: Quantity
Output Variables List Price: ItemUnitPrice
## Configure Price Adjustment Matrix for Asset Warranty Labor Coverage Entries The price adjustment matrix element for asset warranty labor coverage entries calculates the price of a product based on the labor warranty coverage conditions. 1. Click the **Add** icon, and then find and select **List Group** from the list. 2. In the List Operation Element, specify these details. | vaiable | value | | --- | --- | | Filter Condition Requirements | All Conditions Are Met (AND) | | Resource | AssetWarrantyId | | Operator | Is Not Null | | Value | Keep this blank | 3. Click **Add Condition** and specify these details. | variable | value | | --- | --- | | Resource | ItemProductFamily | | Operator | Equals | | Value | Labor | 4. Inside the List Container, click the **Add** icon, and then find and select **Price Adjustment Matrix** from the list. 5. Specify these details.
variable value
Lookup Table Details Asset Warranty Labor Coverage Entries
Input Rule variables Asset Warranty ID: AssetWarrantyId
Input variables
  • Quantity: Quantity
  • Input Unit Price: ItemListPrice
Output Variables Net Unit Price: ItemUnitPrice
6. Go to the Resource Manager section and perform these steps. 1. Select the Constant\_AdjustmentType\_Asset\_Warranty\_Labor\_Coverage\_Entries\_PAM constant, set the Default Value field to **Percentage**, and click **Done**. 2. Select the Constant\_AdjustmentValue\_Asset\_Warranty\_Labor\_Coverage\_Entries\_PAM constant, set the Default Value field to **LaborCovered**, and click **Done**. ## Configure Price Adjustment Matrix for Asset Warranty Parts Coverage Entries The price adjustment matrix element for asset warranty labor coverage entries calculates the price of a product based on the labor warranty coverage conditions. 1. To add a new List Group element, click the **Add** icon, and then find and select **List Group** from the list. 2. Specify these details. | variable | value | | --- | --- | | Filter Condition Requirements | All Conditions Are Met (AND) | | Resource | AssetWarrantyId | | Operator | Is Not Null | | Value | Keep this blank | 3. Click **Add Condition** and specify these details. | variable | value | | --- | --- | | Resource | ItemProductFamily | | Operator | Equals | | Value | Part | 4. Inside the List Container, click the **Add** icon below the List Operation element, and then find and select **Price Adjustment Matrix** from the list. 5. Specify these details.
variables value
Lookup Table Details Asset Warranty Parts Coverage Entries
Input Rule variables Asset Warranty ID: AssetWarrantyId
Input variables
  • Quantity: Quantity
  • Input Unit Price: ItemListPrice
Output Variables Net Unit Price: ItemUnitPrice
6. Go to the Resource Manager section in the sidebar and perform these steps. 1. Select the Constant\_AdjustmentType\_Asset\_Warranty\_Parts\_Coverage\_Entries\_PAM constant, set the Default Value field to **Percentage**, and then click **Done**. 2. Select the Constant\_AdjustmentValue\_Asset\_Warranty\_Parts\_Coverage\_Entries\_PAM constant, set the Default Value field to **PartsCovered**, and then click **Done**. ## Configure Price Adjustment Matrix for Warranty Term Labor Coverage Entries The price adjustment matrix element for warranty term labor coverage entries calculates the price of a product based on the warranty term labor coverage conditions. 1. To add a new List Group element, click the **Add** icon, and then find and select **List Group** from the list. 2. Specify these details. | variable | value | | --- | --- | | Filter Condition Requirements | All Conditions Are Met (AND) | | Resource | WarrantyTermId | | Operator | Is Not Null | | Value | Keep this blank | 3. Click **Add Condition** and specify these details. | variable | value | | --- | --- | | Resource | ItemProductFamily | | Operator | Equals | | Value | Labor | 4. Inside the List Container, click the **Add** icon below the List Operation element, and then find and select **Price Adjustment Matrix** from the list. 5. Specify these details.
variable value
Lookup Table Details Warranty Term Labor Coverage Entries
Input Rule variables Warranty Term ID: WarrantyTermId
Input variables
  • Quantity: Quantity
  • Input Unit Price: ItemListPrice
Output Variables Net Unit Price: ItemUnitPrice
6. Go to the Resource Manager section in the sidebar and perform these steps. 1. Select the Constant\_AdjustmentType\_Warranty\_Term\_Labor\_Coverage\_Entries\_PAM constant, set the Default Value field to Percentage, and click **Done**. 2. Select the Constant\_AdjustmentValue\_Warranty\_Term\_Labor\_Coverage\_Entries\_PAM constant, set the Default Value field to LaborCovered, and click **Done**. ## Configure Price Adjustment Matrix for Warranty Term Parts Coverage Entries The price adjustment matrix element for warranty term labor coverage entries calculates the price of a product based on the warranty term labor coverage conditions. 1. To add a new List Group element, click the **Add** icon, and then find and select **List Group** from the list. 2. Specify these details. | variable | value | | --- | --- | | Filter Condition Requirements | All Conditions Are Met (AND) | | Resource | WarrantyTermId | | Operator | Is Not Null | | Value | Keep this blank | 3. Click **Add Condition** and specify these details. | variable | value | | --- | --- | | Resource | ItemProductFamily | | Operator | Equals | | Value | Part | 4. Inside the List Container, click the **Add** icon below the List Operation element, and then find and select **Price Adjustment Matrix** from the list. 5. Specify these details.
variable value
Lookup Table Details Warranty Term Parts Coverage Entries
Input Rule variables Warranty Term ID: WarrantyTermId
Input variables
  • Quantity: Quantity
  • Input Unit Price: ItemListPrice
Output Variables Net Unit Price: ItemUnitPrice
6. Go to the Resource Manager section and perform these steps. 1. Select the Constant\_AdjustmentType\_Warranty\_Term\_Parts\_Coverage\_Entries\_PAM constant, set the Default Value field to **Percentage**, and click **Done**. 2. Select the Constant\_AdjustmentValue\_Warranty\_Term\_Parts\_Coverage\_Entries\_PAM constant, set the Default Value field to **PartsCovered**, and click **Done**. 7. In the Resource Manager, click **Add Resource**, and specify these fields. | variable | value | | --- | --- | | Resource Type | Constant | | Resource Name | ServiceContractActiveStatus | | Data Type | Text | | Default Value | Active | 8. Click **Done**. ## Configure Price Adjustment Matrix for Service Contract Coverage Entries The price adjustment matrix element for service contract coverage entries calculates the price of a product based on the service contract coverage conditions. 1. To add a new List Group element, click the **Add** icon, and then find and select **List Group** from the list. 2. Specify these details. | variable | value | | --- | --- | | Filter Condition Requirements | All Conditions Are Met (AND) | | Resource | ServiceContractId | | Operator | Is Not Null | | Value | Keep this blank | 3. Inside the List Container, click the **Add** icon below the List Operation element, and then search and select **Price Adjustment Matrix** from the list. 4. Specify these details.
variable value
Lookup Table Details Service Contract Coverage Entries
Input Rule variables
  • Product: Product2Id
  • Service Contract: ServiceContractId
  • Status: ServiceContractActiveStatus
Input Variables
  • Quantity: Quantity
  • Input Unit Price: ItemListPrice
Output Variables Net Unit Price: ItemUnitPrice
5. Go to the Resource Manager section and perform these steps. Select the Constant\_AdjustmentType\_Service\_Contract\_Coverage\_Entries\_PAM constant, set the Default Value field to **Percentage**, and click **Done**. Select the Constant\_AdjustmentValue\_Service\_Contract\_Coverage\_Entries\_PAM constant, set the Default Value field to **Discount**, and click **Done**. ## Configure Manual Discount Element The Manual Discount element calculates the final price of a product after you manually enter the external discounts. 1. In the Resource Manager, click **Add Resource**, and enter these details. | variable | value | | --- | --- | | Resource Type | Constant | | Resource Name | ManualDiscountAdjustmentType | | Data Type | Text | | Default Value | Percentage | 2. Click **Done and New**. 3. Enter these details. | variable | value | | --- | --- | | Resource Type | Constant | | Resource Name | ManualDiscountAdjustmentValue | | Data Type | Number | | Decimal Places | 2 | | Default Value | 100.00 | 4. Click **Done**. 5. Click the **Add** icon to add a new List Group element and then find and select **List Group** from the list. 6. Specify these details. | variable | value | | --- | --- | | Filter Condition Requirements | All Conditions Are Met (AND) | | Resource | EntitlementId | | Operator | Is Not Null | | Value | Keep this blank | 7. Inside the List Container, click the **Add** icon, and then find and select **Manual Discount** from the list. 8. Specify these details.
variable value
Input variables
  • Adjustment Type: ManualDiscountAdjustmentType
  • Adjustment Value: ManualDiscountAdjustmentValue
  • Quantity: Quantity
  • Input Unit Price: ItemListPrice
Output Variables Net Unit Price: ItemUnitPrice
9. Click the **Element Details** (![Element Details](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/asset_service_lifecycle_mgmt/images/bundle_config.png)) section and then select the **Include in Output** checkbox. 10. Click the **Pricing Procedure Properties** section and assign a valid rank (for example, '1') to the pricing procedure version. 11. Click **Save** and then **Activate**. 12. Click **Simulate** to test the configuration. During simulation, replace the 'Input Id Fields' with the corresponding ID fields from your Org. Ensure the input pattern matches your requirements. ``` { "WorkOrderEstimationTransactionItem": [ { "ItemId": "<>", "AssetWarrantyId": "<>" }, { "ItemId": "<>", "EntitlementId": "<>" }, { "ItemId": "<>", "WarrantyTermId": "<>" }, { "ItemId": "<>", "ServiceContractId": "<>" }, { "ItemId": "<>" } ] } ``` # Configure Pricing Procedure for Work Order Estimation Pricing procedures use pricing elements where each element forms a step in a pricing procedure. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To set up Salesforce Pricing Salesforce Pricing admin AND Salesforce Pricing Manager AND Salesforce Pricing Design Time User
Follow these steps to create a pricing procedure. 1. From the App Launcher, find and select **Pricing Procedures**. 2. Click **New**. 3. Specify these details. 1. Name: Enter Work Order Est Default Pricing Procedure. 2. API Name: Gets auto populated. 3. Usage Type: Select **Pricing**. 4. Context Definition: Select the default value **WorkEstimationCoveragesContext**, or a custom context definition that you created. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note Make sure the pricing procedure name matches exactly as specified in this step. If you need to use a different pricing procedure name, refer to [Use Salesforce Pricing with Custom Pricing Procedure for Work Order Estimation](https://help.salesforce.com/s/articleView?id=xcloud.aslm_woe_use_salesforce_pricing_with_custom_pricing_procedure.htm&release=264.0.0&type=5 "You can modify the settings for the container that hosts the Lightning Web Components (LWCs) for the Work Order Estimation. The instructions provided here are for OmniScript, the default container, but you can customize these steps for other orchestration containers if necessary."). 4. Click **Save**. The priciing procedure is created. 5. On the Details tab, in the Pricing Procedure Versions section, click the first version of the pricing procedure. For example, Work Order Est Default Pricing Procedure V1. Pricing Procedure Builder opens in a new tab. # Configure Privacy Policy Batch Sizes Adjust the number of records processed per batch to optimize performance and avoid governor limit errors. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Privacy Center license.
User Permissions Needed
To create, edit, and schedule privacy policies: Manage Privacy Center Policies
If your privacy jobs fail due to system limits or timeout errors, reduce the batch size to process fewer records at once. You can set this value from 1 through 2,000. 1. In Privacy Center, go to the **Privacy Policies** tab. 2. Open the page containing batch size settings. - For a new policy, go to the Add Object page. - For an existing policy, select **Edit** from the policy's dropdown list to open the Edit Policy Details page. 3. Select **Set batch size manually**. 4. In the Batch Size field, enter a number from 1 through 2,000. 5. Save your changes. # Configure Product Qualification Product Internal Organization Unit (IOU) qualification filters the products a rep can order so that they see only the products qualified for their internal org unit. Create a single product qualification procedure and add the qualification steps your business needs. ### Required Editions

View supported editions

User Permissions Needed
To create product catalogs and categories: Order Capture for Manufacturing AND Product Catalog Management
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-advanced_orders-264-0-0-production-enus/3f520262-6313-4d80-b68f-bf760562aa0b/images/icon_note.png) Note You can add other qualification types, such as product qualification, category qualification, and disqualification, to the same procedure. For details, see the [Product Catalog Management](https://help.salesforce.com/s/articleView?id=ind.product_catalog_qualification_rules.htm&language=en_US&type=5). Complete these steps in order: 1. Create and activate the Product IOU Qualification decision table. 2. Create the product qualification procedure. 3. Configure and activate the procedure plan for qualification. - **[Create and Activate the Product IOU Qualification Decision Table](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_create_activate_product_iou_qualification_decision_table.htm&release=264.0.0&type=5)** Set up the decision table that maps products to internal org units, and then activate it. - **[Create the Product Qualification Procedure](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_create_product_qualification_procedure.htm&release=264.0.0&type=5)** Create one qualification procedure and add the Product IOU Qualification step, which is the required step. Add any other qualification steps you need in the same procedure. - **[Configure and Activate the Procedure Plan for Qualification](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_configure_activate_procedure_plan_qualification.htm&release=264.0.0&type=5)** Associate the qualification procedure with its procedure plan and activate the plan so that it runs at order capture. # Configure Program Rebate Types Panel on Record Pages Add the Program Rebate Types Panel to a record page so that sales reps and account managers can view the rebate types, benefit tiers, and attainment that apply to a record, such as an order, opportunity, or account, directly in context. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate and Accrual Management Advanced enabled.
User Permissions Needed
To configure page layouts: System Administrator
To view Program Rebate Types Panel: Rebate and Accrual Management Advanced User
Before you begin, ensure Program Rebate Type Benefit Mapping records are configured and that the Payout Source Field is mapped directly to the corresponding benefit attribute (such as Product or Product Category). Verify that the target object's page layout is enabled for Lightning App Builder. 1. From **Setup**, open **Object Manager** and select the object where you want to add the panel (for example, Order, Opportunity, Sales Agreement, or Account). 2. Select Lightning Record Pages, and click **Edit** on the active page layout to open the Lightning App Builder. 3. In the left component palette, locate the Program Rebate Types Panel (component under Custom - Managed or Standard components. 4. Drag the component onto the canvas and position it in the desired region (such as the main record column or right sidebar). 5. In the component properties pane on the right, configure display settings and set component visibility rules if you want to restrict visibility based on user profile or record criteria. 6. Click **Save**, and then click **Activate** if the page is not already set as the org or app default. 7. Navigate to a record on the object and verify that active rebate programs, mapped benefit tiers, and projected earnings render correctly. # Configure Publish Options on a Flexcard (Managed Package) For the managed package runtime, define metadata values, such as where your Flexcard is visible, and update the component SVG icon for your Flexcard before publishing your component to a Lighting or Experience page. For example, to view your Flexcard on an Experience site you can enable **Community Page** under **Targets** in **Publish Options**. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Before You Begin - You must activate your Flexcard to configure Publish Options. See [Activate a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activate_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, activate a Flexcard to generate an LWC and publish it to a Lightning page or Experience Builder site. After you activate a Flexcard, you can’t edit it or add elements to it."). 1. From the Flexcards tab, click a version of a Flexcard to open the Flexcard Designer. 2. From the Flexcard Designer submenu, click the down arrow next to **Activate**, and click **Publish Options**. 3. To configure metadata values, see [Define Metadata Values from the Flexcard Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_define_metadata_values_from_the_flexcard_designer.htm&release=264.0.0&type=5 "For the managed package runtime, define the metadata values for the generated Flexcard LWC from the Flexcard Designer. When your Flexcard is active, use the Publish Options feature to configure API Version, Targets, Description, and other metadata values from a GUI or code editor."). 4. To update the SVG resource with a custom icon, see [Add a Custom Component SVG Icon to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_custom_component_svg_icon_to_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, add an SVG resource as the custom icon for your generated LWC to easily identify it in the Lightning App Builder and the Experience Builder. Use the Publish Options feature on an activated Flexcard to update the default icon with a custom SVG resource."). What’s next: Publish your Flexcard to a Lightning or Experience page. See [Activate, Configure, and Publish Flexcards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_activateconfigureand_publish_flexcards.htm&release=264.0.0&type=5 "For the managed package runtime, after creating a Flexcard, activate it to generate a custom-generated LWC, which you can then add to a Lightning or Experience page."). - **[Flexcards Publish Options Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_publish_options_properties.htm&release=264.0.0&type=5)** For the managed package runtime, Flexcard Publish Options properties are configurable after activating a Flexcard. Define metadata values and update theffd SVG icon for your generated Flexcard LWC from the Flexcard Designer. - **[Define Metadata Values from the Flexcard Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_define_metadata_values_from_the_flexcard_designer.htm&release=264.0.0&type=5)** For the managed package runtime, define the metadata values for the generated Flexcard LWC from the Flexcard Designer. When your Flexcard is active, use the **Publish Options** feature to configure API Version, Targets, Description, and other metadata values from a GUI or code editor. - **[Add a Custom Component SVG Icon to a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_custom_component_svg_icon_to_a_flexcard.htm&release=264.0.0&type=5)** For the managed package runtime, add an SVG resource as the custom icon for your generated LWC to easily identify it in the Lightning App Builder and the Experience Builder. Use the **Publish Options** feature on an activated Flexcard to update the default icon with a custom SVG resource. # Configure Remote Site Settings Configure settings for a remote site. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Available in: Enterprise, Performance, Unlimited, Developer, and Database.com Editions

Visualforce and S-controls aren’t available in Database.com

User Permissions Needed
To configure remote settings: Customize Application or Modify All Data
Before any Visualforce page, Apex callout, or JavaScript code using XmlHttpRequest in an s-control or custom button can call an external site, that site must be registered in the Remote Site Settings page, or the call fails. To access the page, from [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Remote Site Settings**. This page displays a list of any remote sites already registered and provides additional information about each site, including remote site name and URL. For security reasons, Salesforce restricts the outbound ports you can specify to one of the following: - 80: This port only accepts HTTP connections. - 443: This port only accepts HTTPS connections. - 1024–65535 (inclusive): These ports accept HTTP or HTTPS connections. To register a new site: 1. Click **New Remote Site**. 2. Enter a descriptive term for the Remote Site Name. 3. Enter the URL for the remote site. 4. To allow access to the remote site regardless of whether the user’s connection is over HTTP or HTTPS, select the Disable Protocol Security checkbox. When selected, Salesforce can pass data from an HTTPS session to an HTTP session, and vice versa. Only select this checkbox if you understand the security implications. 5. Optionally, enter a description of the site. 6. Click **Save** to finish, or click **Save & New** to save your work and begin registering an additional site. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_tip.png) Tip For best performance, verify that your remote HTTPS encrypted sites have OCSP (Online Certificate Status Protocol) stapling turned on. #### See Also - [Manage Trusted URLs](https://help.salesforce.com/s/articleView?id=xcloud.security_trusted_urls_manage.htm&release=264.0.0&type=5 "Specify the URLs that you trust to interact with your users and network. Use Content Security Policy (CSP) directives to control the types of resources that Lightning components, third-party APIs, and WebSocket connections can load from each trusted URL. If you enabled the Permissions-Policy HTTP header in Session Settings, you can also control which URLs can access browser features from Salesforce.") # Configure Rule Libraries for Promotion Context Definitions in Loyalty Management Global Promotions Management uses rule libraries to let marketing managers use context definition tags in promotion rule eligibility criteria. When creating custom tag mappings for promotions, create additional Loyalty Management mappings based on promotion requirements. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
[Configure rule libraries for promotion context definitions](https://help.salesforce.com/s/articleView?id=mktg.global_promotions_management_setup_context_service_rule_library.htm&type=5&language=en_US). When you create a rule library, create these additional Loyalty Management mappings based on your promotion requirements.
Business Requirement Custom Tag Mapping Name Context Tag

Promotions that use the rule library belong to a loyalty program.

If you’re creating loyalty promotions, instead of the contact tags, map these custom tags.

  • loyaltyProgramMemberId or membershipNumber
  • loyaltyProgramId or loyaltyProgramName
Tags that are related to the Loyalty Program and Loyalty Program Member objects
# Configure Runtime Pricing Procedures Pricing executes against qualified items using the AdvOrderSalesTxnContext\_\_stdctx context payload. ### Required Editions

View supported editions

Configure the pricing decision table, the pricing procedure, and the pricing procedure plan so that Penny Perfect Pricing calculates net unit prices for qualified items during order capture. Pricing runs against the `AdvOrderSalesTxnContext__stdctx` context payload. - **[Verify the Pricing Decision Table](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_verify_pricing_decision_table.htm&release=264.0.0&type=5)** Verify that the pricing decision table is active and refreshed so that it picks up the current price book data. - **[Create the Pricing Expression Set (Pricing Procedure)](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_create_pricing_expression_set.htm&release=264.0.0&type=5)** Create a pricing procedure that looks up list prices and calculates net unit prices for order line items. - **[Configure the Procedure Plan for Pricing](https://help.salesforce.com/s/articleView?id=xcloud.advanced_orders_configure_procedure_plan_pricing.htm&release=264.0.0&type=5)** Associate the pricing procedure with a procedure plan and activate it so that pricing runs during order capture. # Configure Salesforce Backup & Recover Next Settings After installing the Salesforce Backup & Recover Next app and assigning permissions, configure various settings for your backups. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Backup & Recover Data and Backup & Recover Files add-on licenses
- **[Exclude Objects from Backups](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_exclude_objects.htm&release=264.0.0&type=5)** Set up exclusion rules to customize and optimize your backup strategy. These rules define which Salesforce objects to exclude from backups, minimizing backup time and ensuring that backups only include essential data. Also use these rules to exclude data from your backup to conform with data security policies. - **[Exclude Object Groups](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_exclude_object_groups.htm&release=264.0.0&type=5)** Within Backup & Recover Next are different object groups that we recommend excluding. When creating an exclusion rule, you can select to exclude these groups, rather than exclude each object individually. - **[Include Objects or Object Groups](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_include_objects.htm&release=264.0.0&type=5)** Remove exclusion rules that you created to include objects or object groups in future backups. - **[Exclude Files and Attachments from Backups](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_exclude_files.htm&release=264.0.0&type=5)** Backing up files and attachments makes sure that backups are as true and accurate as possible for recovery. If backups of files and attachments aren’t necessary in your case, you can remove them for improved backup times. - **[Schedule When Your Backup Runs](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_schedule.htm&release=264.0.0&type=5)** Choose when and how often you want your backups to run to minimize the impact on your business. - **[Understand Backup Retention](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_retention_policy.htm&release=264.0.0&type=5)** A data retention policy describes how long to keep data to meet business or legal requirements. You can configure these policies to align with your organization’s internal requirements for data backups and control how long Salesforce stores your backups. - **[Encrypt Your Data with Shield Platform Encryption](https://help.salesforce.com/s/articleView?id=xcloud.backup_recover_platform_encryption.htm&release=264.0.0&type=5)** Shield Platform Encryption integrates with Backup & Recover Next so you can encrypt your data with your own encryption key. # Configure Salesforce Backup Settings After installing the Salesforce Backup app and assigning permissions, configure a secure connection between the app and Salesforce. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Salesforce Backup & Recover add-on license.
User Permissions Needed
To install the Salesforce Backup managed package:

Modify All Data

AND

System Administrator

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Salesforce Backup. Read about Backup & Recover in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). Before you start, make sure that you have the necessary permission set license and permission set. Read more in [Assign the Salesforce Backup License and Permission Set](https://help.salesforce.com/s/articleView?id=xcloud.backup_restore_permissions.htm&type=5&language=en_US). 1. In the Salesforce Backup app, click the **Settings** tab. 2. In the Provision a Region section, from the dropdown menu, select the AWS region where you want to store your backups. When selecting a region, keep in mind any data residency requirements that apply to your organization. | AWS Region | Location | | --- | --- | | ap-northeast-1 | Asia Pacific (Tokyo) | | ap-south-1 | Asia Pacific (Mumbai) | | ap-southeast-1 | Asia Pacific (Singapore) | | ap-southeast-2 | Asia Pacific (Sydney) | | ca-central-1 | Canada (Central) | | eu-central-1 | Europe (Frankfurt) | | eu-north-1 | Europe (Stockholm) | | eu-west-2 | Europe (London) | | eu-west-3 | Europe (Paris) | | sa-east-1 | South America (São Paulo) | | us-east-1 | US East (N. Virginia) | | us-west-2 | US West (Oregon) | 3. If you have no IP restrictions, click **Start**. However, if you do have IP restrictions: 1. Add the IP address for the Salesforce Backup provisioning API (3.219.91.219) to the [Login IP Ranges](https://help.salesforce.com/s/articleView?id=platform.login_ip_ranges.htm&type=5&language=en_US) on your profile, and then click **Start**. When provisioning is finished, an IP Addresses section appears on the page. It lists IP addresses that are specific to the AWS region that you selected. 2. Add the IP addresses in the IP Addresses section to the Login IP Ranges for your user profile. 4. In the Set Up Your Connection section, click **Connect**. This action creates a secure connection by using OAuth 2.0 Web Server Flow between Salesforce and the data storage location in AWS. 5. Click **Test Connection**. Testing a connection triggers a scheduled job on behalf of the integrated user. When the test is successful, you're ready to create a backup policy. # Configure Salesforce CORS Allowlist Cross-Origin Resource Sharing (CORS) allows web browsers to request resources from other origins. For example, using CORS, the JavaScript for a web application at https://www.example.com can request a resource from https://www.salesforce.com. To allow access to supported Salesforce APIs, Apex REST resources, and Lightning Out from JavaScript code in a web browser, add the requesting origin to your Salesforce CORS allowlist. For Lightning apps that allow web browsers to make requests from their orgs, CORS allowlist prevents requests to Lightning apps unless the request comes from an approved URL. The allowlist is in effect for your My Domain URL and api.salesforce.com. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: Developer, Enterprise, Performance, and Unlimited Editions
Available with API access enabled in: Professional Edition
User Permissions Needed
To create, read, update, and delete: Modify All Data
These Salesforce technologies in your org support CORS. - Apex REST - Bulk API - Bulk API 2.0 - Connect REST API - Lightning Out - REST API - CRM Analytics REST API - User Interface API Add an origin serving the request code to the CORS allowlist. If a browser that supports CORS makes a request to an origin in the allowlist, Salesforce returns the origin in the `Access-Control-Allow-Origin` HTTP header along with any additional CORS HTTP headers. If the origin isn’t included in the allowlist, Salesforce returns HTTP status code 403. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **CORS**. 2. Select **New**. 3. Enter a resource in Origin URL Pattern. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_tip.png) Tip The origin URL pattern doesn’t always match the URL that appears in your browser's address bar. 4. Save your changes. The origin URL pattern must include the HTTPS protocol (unless you’re using your localhost) and a domain name. It can also include a port. The wildcard character (\*) is supported and must be in front of a second-level domain name. For example, https://\*.example.com adds all subdomains of example.com to the allowlist. The origin URL pattern can be an IP address. But an IP address and a domain that resolve to the same address aren’t the same origin, and you must add them to the CORS allowlist as separate entries. Google Chrome™ and Mozilla® Firefox® browser extensions are allowed as resources in API version 53 (Winter ‘22) or later. Chrome extensions must use the prefix `chrome-extension://` and 32 characters without digits or capital letters, for example `chrome-extension://abdkkegmcbiomijcbdaodaflgehfffed`. Firefox extensions must use the prefix `moz-extension://` and an 8-4-4-4-12 format of small alphanumeric characters, for example `moz-extension://1234ab56-78c9-1df2-3efg-4567891hi1j2`. You can get a successful response when requesting a REST resource in a CORS preflight test, but receive an unsuccessful response to the actual request. This discrepancy can occur when the resource is deleted after the preflight test and before the request is made. It can also occur if the resource doesn’t exist. A CORS preflight confirms if resources can be passed between servers, but doesn’t check if a specific resource exists or not. CORS preflight requests are typically issued automatically by a browser. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note To access certain OAuth endpoints with CORS, other requirements apply. See [Enable CORS for OAuth Endpoints](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_endpoints_cors.htm&type=5&language=en_US). #### See Also - [Limit Interactions with External URLs and Origins](https://help.salesforce.com/s/articleView?id=xcloud.security_external_interactions.htm&release=264.0.0&type=5 "In our connected world, interaction with external websites and origins is a necessity. To protect your network and data, configure allowlists and enable settings that limit how Salesforce and external origins interact. And limit redirections that originate in Salesforce to URLs that you trust.") # Configure Salesforce for Delegated Authentication Set up delegated authentication for your Salesforce org so users can log in with credentials managed by an external authentication service. To configure Salesforce for delegated authentication, wrap your authentication method in a web service that Salesforce can consume. Then, use permissions to determine whether users log in with delegated authentication or with a Salesforce-managed password. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Professional, Enterprise, Performance, Unlimited, Developer, and Database.com Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Modify All Data

Here’s the general process you use to set up delegated authentication: - Enable delegated authentication for your org. - Build your web service. - Specify your delegated authentication gateway URL. - Enable permissions. - (Optional) Record login attempts. #### See Also - [Single Sign-On](https://help.salesforce.com/s/articleView?id=xcloud.sso_about.htm&release=264.0.0&type=5 "Single sign-on (SSO) is an authentication method that enables users to access multiple applications with one login and one set of credentials. For example, after users log in to your org, they can automatically access all apps from the App Launcher. You can set up your Salesforce org to trust a third-party identity provider to authenticate users. Or you can configure a third-party app to rely on your org for authentication.") - [Delegated Authentication](https://help.salesforce.com/s/articleView?id=xcloud.sso_delauthentication.htm&release=264.0.0&type=5 "Delegated authentication is similar to single sign-on (SSO), but it offers a slightly different experience to users. With delegated authentication, one system relies on another system to validate user credentials. For example, you can configure your Salesforce org to rely on a Lightweight Directory Access Protocol (LDAP) server to validate credentials. Both SSO and delegated authentication enable users to log in to multiple apps with one set of credentials. However, with delegated authentication, users must log in to each app separately.") ## Enable Delegated Authentication for Your Org 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Single Sign-On Settings**. 2. Click **Edit**. 3. Select **Disable login with Salesforce credentials**. ## Build Your Web Service 1. In Salesforce, download the Delegated Authentication Web Services Description Language (WSDL) file. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **API**. 2. Click **Download Delegated Authentication WSDL**. The WSDL file describes the delegated authentication web service. Use the WSDL file to generate a server-side stub to which to add your delegated authentication implementation. For example, in the WSDL2Java tool from Apache Axis, use the `--server-side` switch. With the .NET wsdl.exe tool, use the `/server` switch. 2. Add a link to your corporate intranet or other internal site. This link takes the user’s credentials after they’re validated and passes them through an HTTP POST to the Salesforce login page. Salesforce only uses the password field to pass it back to your company. To avoid passing your corporate passwords to or from Salesforce, pass another authentication token instead, such as a Kerberos ticket. When the Salesforce server passes the credentials back to you in the `Authenticate` message, verify them. Then the user can access your org. ## Specify Your Delegated Authentication Gateway URL 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Single Sign-On Settings**. 2. Click **Edit**. 3. Enter the URL for the Delegated Gateway URL. For security reasons, Salesforce restricts outbound posts to any of the following. - 80, which accepts only HTTP connections - 443, which accepts only HTTPS connections - 1024–66535, which accepts HTTP or HTTPS connections ## Enable Permissions ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important If you enable delegated authentication, API and desktop client users can log in to Salesforce, unless they try to log in from outside a restricted IP range. Also, the SSO authority usually handles login lockout policies for users with the Is Single Sign-On Enabled permission. However, if the security token is enabled, your org’s login lockout settings determine how many times users can try to log in with an invalid security token. Enable the Is Single Sign-On Enabled permission for all the users you want to use delegated authentication. See [User Permissions and Access](https://help.salesforce.com/articleView?id=permissions_about_users_access.htm&language=en_US). ## (Optional) Force Callouts to the Delegated Authentication Endpoint 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Single Sign-On Settings**. 2. Click **Edit**. 3. Select **Force Delegated Authentication Callout**. This setting forces a callout to the delegated authentication endpoint with all login attempts, even attempts that fail within Salesforce due to restrictions. # Configure Salesforce Scheduler for External Calendar Sync Include your partner users' connected external calendars when Salesforce Scheduler calculates available appointment times. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions with Partner Ecosystem Management - Members or Partner Ecosystem Management - Login
User Permissions Needed
To create or update permission sets: Manage Profiles and Permission Sets
To assign permission sets: Assign Permission Sets
[Configure Einstein Activity Capture for partner users](https://help.salesforce.com/s/articleView?id=xcloud.pc_configure_eac_partner_calendar_sync.htm&release=264.0.0&type=5 "Create a dedicated configuration so that external partner users can connect their calendars for appointment scheduling."), and [add the Connected Accounts component to the partner Experience Cloud site](https://help.salesforce.com/s/articleView?id=xcloud.pc_add_connected_accounts_partner_site.htm&release=264.0.0&type=5 "Add the Connected Accounts component so that partner users can authorize Google or Microsoft accounts for Einstein Activity Capture calendar sync."). A scheduling policy controls whether Salesforce Scheduler considers calendars that partner users connect through Einstein Activity Capture. 1. Create or update the permission set that gives partner users access to Salesforce Scheduler. 2. Assign the permission set to each partner user who provides appointment availability. 3. From **Setup**, in the **Quick Find** box, enter Scheduling Policies, and then select **Scheduling Policies**. 4. Create a scheduling policy for partner appointments. 5. Select **External Calendar Integration Using Einstein Activity Capture**. 6. Save the scheduling policy, and record its API name. 7. Open the scheduling flow that your customer booking experience uses. 8. Set the scheduling policy input variable to the API name of the scheduling policy. 9. Save and activate the flow. 10. **Optional:** To add appointments to the Salesforce calendar, give partner users access to edit events and tasks. # Configure SAML Single Logout with Salesforce as the Identity Provider Configure single logout (SLO) for a SAML service provider. With SAML SLO, users can log out of either Salesforce or the service provider to log out of both of them. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Federated Authentication is available in: All Editions

Delegated Authentication is available in: Professional, Enterprise, Performance, Unlimited, Developer, and Database.com Editions

Authentication Providers are available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions

User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Modify All Data

Before you configure SAML SLO, review this information. - Make sure that the service provider supports SAML SLO. - This implementation uses connected apps. You can configure SLO when you create and edit a connected app as a developer and distribute it to other orgs. Or you can create and manage SLO for a connected app within your org as an administrator. When you’re editing a connected app as a developer, your changes to the SLO configuration aren’t propagated to the page. As you change settings through connected app management pages, manually copy settings to the app creation page, if desired. - Salesforce currently supports front-channel SLO only, meaning that SLO redirects must occur in the same browser. Salesforce doesn’t support SLO across different browsers. - Salesforce generates and sends the session index parameter during single sign-on (SSO) and SLO. - Some service providers don’t support initiating SLO. In this case, skip to step 6 in the setup. Users are logged out of the service provider when initiated by Salesforce. But logging out of the service provider doesn’t necessarily log the user out of Salesforce. Before configuring SAML SLO: - Get the SAML SLO endpoint from the service provider. - Get the HTTP binding type from the service provider. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Manage Connected Apps**. 2. Next to the connected app that you want to configure for SLO, click **Edit**. You’re now editing the connected app configuration even though the path is through Manage Connected Apps 3. Under Web App Settings, select **Enable Single Logout**. ![Single Logout for SAML IdP](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/security_auth_slo_saml_idp_configuring.png) 4. For Single Logout URL, enter the SAML SLO endpoint of the connected app service provider. The URL must start with https://. - When Salesforce initiates the logout, it sends the logout request with the session index parameter to this SLO endpoint. - When the service provider initiates the logout, Salesforce sends the logout response to this SLO endpoint. 5. Select the Single Logout Binding type for SLO. The binding type determines where to put the logout request or logout response in the SAML request. The value is base64 encoded. The service provider gives you this information. - For HTTP POST, the LogoutRequest or LogoutResponse is in the request body of the SAML request. - For HTTP Redirect, the deflated LogoutRequest or LogoutResponse is in the query string of the SAML request. 6. To control where users are redirected after they successfully log out, configure logout page settings. - For an org, set the logout page URL in your [Session Settings](https://help.salesforce.com/s/articleView?id=xcloud.admin_sessions.htm&release=264.0.0&type=5 "Use the Session Settings screen to configure session security. You can configure settings such as the session connection type, timeout restrictions, and IP address ranges to protect against malicious attacks."). This URL applies to your entire org, not just the connected app. If you don’t set a logout page URL, users are redirected to your My Domain login page when they log out. - For an Experience Cloud site, set the logout page URL in the site’s [Login & Registration settings](https://help.salesforce.com/s/articleView?id=experience.external_identity_use_custom_logout_url.htm&type=5&language=en_US). If you don’t set a logout page URL, users are redirected to the site login page when they log out. 7. Provide the service provider with the Salesforce identity provider SLO endpoint for your Salesforce org. The service provider uses this endpoint to initiate SLO. The endpoint has the format https://MyDomainName.my.salesforce.com/services/auth/idp/saml2/logout where MyDomainName is your Salesforce domain. ![Single Logout for SAML IdP](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/security_auth_slo_saml_idp_endpoint.png) #### See Also - [Single Logout](https://help.salesforce.com/s/articleView?id=xcloud.slo_about.htm&release=264.0.0&type=5 "With single logout (SLO), users can log out from the identity provider and the service provider by logging out from either of them. Whether Salesforce is the service provider or identity provider, you can enable SLO with SAML or OpenID Connect. SLO can increase security and save users time by removing manual logout from every individual application.") - [Create Logout Event Triggers](https://help.salesforce.com/s/articleView?id=xcloud.security_auth_create_logout_event_trigger.htm&type=5&language=en_US) # Configure SAML Single Logout with Salesforce as the Service Provider Configure single logout (SLO) for a SAML identity provider. With SAML SLO, users can log out of either Salesforce or the identity provider to log out of both of them. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Federated Authentication is available in: All Editions

Delegated Authentication is available in: Professional, Enterprise, Performance, Unlimited, Developer, and Database.com Editions

Authentication Providers are available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions

User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Modify All Data

Before you configure SAML SLO, review this information. - If the identity provider sends more than one session index parameter, Salesforce stores only the first one that it receives. The session index parameter can’t be more than 512 characters. - You can configure a custom logout URL and identity provider SLO URL. If Salesforce is the service provider and initiates the logout request, the identity provider can post a logout response to redirect the user back to Salesforce. In this scenario, Salesforce sends the user to the custom URL upon logout. If the identity provider doesn’t redirect the user back to Salesforce in a logout response, the identity provider determines the SLO redirect URL upon logout. - Some identity providers don’t support logout initiated by the service provider. In this case, skip to step 6 in the setup. Users are logged out of Salesforce when initiated by the identity provider. However, logging out of Salesforce doesn’t necessarily log the user out of the identity provider session. - Salesforce currently supports front-channel SLO only, meaning that SLO redirects must occur in the same browser. Salesforce doesn’t support SLO across different browsers. Before configuring SAML SLO, prepare by gathering this information. - Get the Issuer URL from the identity provider. This URL uniquely identifies your SAML identity provider. SAML assertions sent to Salesforce must match this value exactly in the attribute of SAML assertions. - Get and save the certificate for validating signatures from the identity provider. - Get the SLO URL from the identity provider. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Single Sign-On Settings**. 2. In SAML Single Sign-On Settings, select **New**. 3. On the SAML Single Sign-On Settings page, enter the SAML single sign-on (SSO) information, and select **Single Logout Enabled**. 4. To apply the selected Request Signature Method (RSM) during SLO, select **Use Selected Request Signature Method for Single Logout**. This setting uses the RSM that you selected during SSO to determine the RSM and digest algorithm for SLO. If you don’t select this option, the default RSM (`RSA-SHA1`) and digest algorithm (`SHA1`) are applied. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note For configurations created before Spring ’22, with which you can use a different RSM and digest algorithm for SSO, this SLO setting is independent of the SSO digest algorithm. Ultimately, only the RSM used for SSO determines which RSM and digest algorithm are used if you select **Use Selected Request Signature Method for Single Logout**. For more information, see [Configure SSO with Salesforce as a SAML Service Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_saml.htm&release=264.0.0&type=5 "Configure your Salesforce org or Experience Cloud site as a service provider with SAML single sign-on (SSO). With this SAML configuration, your users can log in to Salesforce with credentials from an external identity provider."). 5. For Identity Provider Single Logout URL, enter the SAML SLO endpoint of the identity provider. - When Salesforce initiates the logout, it sends the logout request with the session index parameter to this SLO endpoint. - When the identity provider initiates the logout request, Salesforce sends the logout response to this SLO endpoint. - In addition to the identity provider SLO URL, you can define a custom URL. If Salesforce initiates the logout, the identity provider can post a logout response to redirect the user back to Salesforce. In this scenario, Salesforce sends the user to the custom URL upon logout. ![Single Logout for SAML IdP](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/security_auth_slo_saml_sp_configuring.png) 6. Select the Single Logout Request Binding type to use for SLO when initiated by the service provider. The binding type determines where to put the LogoutRequest or LogoutResponse in the SAML request. The value is base64 encoded. - For HTTP POST, put the LogoutRequest or LogoutResponse in the request body of the SAML request. - For HTTP Redirect, put the deflated LogoutRequest or LogoutResponse in the query string of the SAML request. 7. Provide the service provider with the Salesforce identity provider SLO endpoint for your Salesforce org. The service provider uses this endpoint to initiate SLO. The endpoint has the format https://MyDomainName.my.salesforce.com/services/auth/idp/saml2/logout where MyDomainName is your Salesforce domain. ![Single Logout for SAML SP endpoint](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/security_auth_slo_saml_sp_endpoint.png) If the org is an Experience Cloud site, the logout URL for the site appears on the same page. #### See Also - [Single Logout](https://help.salesforce.com/s/articleView?id=xcloud.slo_about.htm&release=264.0.0&type=5 "With single logout (SLO), users can log out from the identity provider and the service provider by logging out from either of them. Whether Salesforce is the service provider or identity provider, you can enable SLO with SAML or OpenID Connect. SLO can increase security and save users time by removing manual logout from every individual application.") - [Create Logout Event Triggers](https://help.salesforce.com/s/articleView?id=xcloud.security_auth_create_logout_event_trigger.htm&type=5&language=en_US) # Configure SAML SSO Between Salesforce Orgs or Experience Cloud Sites If your company deploys more than one Salesforce org or Experience Cloud site, set up SAML single sign-on (SSO) so users can easily move between them. In this SSO configuration, a single org or site acting as the identity provider authenticates users for one or more orgs or sites in the service provider role. Users can log in to all orgs or sites with a single set of credentials. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Federated Authentication is available in: All Editions

Delegated Authentication is available in: Professional, Enterprise, Performance, Unlimited, Developer, and Database.com Editions

Authentication Providers are available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions

Configuring SSO between an org and a site is largely the same as configuring SSO across orgs, with a few small differences in endpoint URLs that point to sites. SSO across multiple service providers uses hub-and-spoke architecture. The identity provider is the authentication hub at the center. The identity provider validates credentials and asserts the user's identity to the spokes—the orgs or sites that are the service providers. ![Hub-and-spoke architecture for SSO between multiple orgs](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/sso_multi_org_architecture.png) Salesforce supports identity provider-initiated and service provider-initiated logins. For more information, see [SAML Single Sign-On Flows](https://help.salesforce.com/s/articleView?id=xcloud.identity_provider_about.htm&release=264.0.0&type=5 "When you set up single sign-on (SSO) with Security Assertion Markup Language (SAML), you can initiate login from the service provider or the identity provider. Service provider-initiated login and identity provider-initiated login use different flows, but both result in the user being logged in to the service provider."). To configure SSO between multiple Salesforce service providers, follow these high-level steps. - Set up a Salesforce identity provider. - Set up one or more Salesforce service providers. - In the identity provider, integrate your service providers as connected apps. - Test the SSO connection. ## Set Up Your Salesforce Identity Provider Configure an org or site as an identity provider to act as your authentication hub. To enable a site as an identity provider, complete these steps in the org where the site is set up. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Identity Provider**. 2. Click **Enable Identity Provider**. 3. Select a certificate that the identity provider and service provider can use to trust each other. Salesforce automatically creates a self-signed certificate when you enable your org as an identity provider. To create your own certificate, select **Create a new certificate**. 4. Save your certificate. If you changed your certificate, click **OK** to accept the warning message. 5. On the Identity Provider page, click **Download Certificate**. Use it when you set up your service provider. 6. Get SAML metadata to share with the service provider. Use this metadata when you configure SAML settings in the service provider. This step is different for orgs and sites. - If your identity provider is an org, click **Download Metadata** to get the metadata in an XML file. To get a URL that references an XML metadata file, copy the Salesforce Identity URL listed under SAML Metadata Discovery Endpoints. - If your identity provider is a site, copy the Experience Cloud Site Identity URL under SAML Metadata Discovery Endpoints. ## Set Up Your Salesforce Service Providers Configure your service provider orgs or sites—the spokes that rely on your authentication hub. Complete these steps in the service provider org or the org where your service provider site is enabled. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Single Sign-On Settings**. 2. Click **Edit**. 3. To see SAML SSO settings, select **SAML Enabled**, and save the change. 4. Under SAML Single Sign-On Settings, click the appropriate button to create a configuration. 1. If you downloaded an XML metadata file from the identity provider, click **New from Metadata File**. Upload the metadata file that you saved and click **Create**. This option uses the metadata from the XML file to complete SSO settings. 2. If you copied the Salesforce Identity URL or the Experience Cloud Site Identity URL from the identity provider, click **New from Metadata URL**. Paste the URL and click **Create**. This option reads the XML file at the Salesforce Identity URL and uses it to complete SSO settings. The metadata options fill in the required SAML settings, including the Issuer, Entity ID, and Identity Provider Login URL fields. 5. For Identity Provider Certificate, upload the certificate you downloaded earlier from the identity provider. 6. For SAML Identity Type, select **Assertion contains the Federation ID from the User object**. 7. Save your settings. Then, from the Single Sign-On Settings pages, copy and save the Entity ID. You share this value with the identity provider when you create a connected app. 8. From the same page, get the SAML login endpoint to share with the identity provider. This step is different for orgs and sites. 1. To configure your org as a service provider, copy the Login URL under Your Organization. 2. To configure your site as a service provider, click the dropdown arrow next to For Communities. Your site's SAML endpoints appear. Copy the Login URL for your site. 9. In the service provider, add the identity provider as an authentication service. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **My Domain**. 2. Under Authentication Configuration, click **Edit**. 3. Select the authentication service for your identity provider. ![The Authentication Configuration page](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/sso_authentication_configuration.png) To prevent users from logging in directly to the service provider, deselect **Login Form**. When users go to the service provider Login URL, they're redirected to the identity provider to log in. To give users the option to log in directly to the service provider, select **Login Form** and your identity provider. With both of these options selected, your identity provider appears as a login option on the service provider's login page. Users can decide whether to log in to the service provider directly or log in with SSO. ![The login form](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/sso/sso_login_form.png) 10. To define your other orgs as service providers, repeat these steps. Use the SAML metadata from your identity provider to complete SSO settings for your service providers. ## Integrate Service Providers as Connected Apps To define the service provider to the identity provider, create a connected app in the identity provider. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US) in the identity provider, use the Quick Find box to find and select **Settings** in the External Client App section. 2. Turn on **Allow creation of connected apps**, if it's off. 3. Click **New Connected App**. 4. Complete the connected app's [basic information](https://help.salesforce.com/articleView?id=xcloud.connected_app_create_basics.htm&type=5&language=en_US). 5. Under Web App settings, select **Enable SAML**. Remember the Entity ID and Login URL values that you saved when you configured your service provider? You need them now to complete the connected app settings. 1. For **Entity ID**, paste the Entity ID from the service provider. 2. For the **ACS URL**, paste the Login URL for the org or site. 3. For **Subject Type**, select Federation ID. 6. Save the settings. 7. To give your users access to this service provider, click **Manage** on the connected apps page. Select **Manage Profiles** or **Manage Permission Sets** and add the profiles or permission sets you want to access the service provider. For more information on profiles and permission sets, see [Manage Data Access](https://help.salesforce.com/articleView?id=security_data_access_mgmt.htm&language=en_US) and [Manage Other Access Settings for a Connected App](https://help.salesforce.com/articleView?id=xcloud.connected_app_manage_additional_settings.htm&type=5&language=en_US). 8. Each service provider needs its own connected app in the identity provider. To define your other service providers, repeat these steps. ## Test the SSO Connection Map a test user from the identity provider to the service provider and confirm that the test user can log in with SSO. 1. In the identity provider, create a test user. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Users**. 2. Click **New User**. 3. Complete the test user's basic information and assign the user a profile that can access the service provider. 4. Under Single Sign On Information, enter a unique Federation ID. The Federation ID can be any value. For more information on identifying and mapping users, see [Map Salesforce Users to the SAML Service Provider](https://help.salesforce.com/s/articleView?id=xcloud.service_provider_map_users.htm&release=264.0.0&type=5 "To ensure that your SAML service provider can recognize Salesforce users when they log in with single sign-on (SSO), update user information in Salesforce. Provide user identifiers that the service provider recognizes."). 5. Save the settings. 2. In the service provider, create the same test user. To bind the users together, use the same Federation ID that you entered for the test user in the identity provider. 3. In an incognito browser, enter the My Domain URL for the identity provider. 4. Log in to the identity provider as the test user. 5. In a new incognito browser tab, enter the My Domain URL for the service provider. If SSO is successful, you're redirected to the identity provider. Because you're already authenticated, you're then redirected back to the service provider and logged in. # Configure Save Options (Managed Package) For the managed package runtime, enable your users to save and resume Omniscripts by configuring the save for later functionality. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From the Omniscript's script configuration, expand the Save Options section. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/owc_save_options.png) 2. Click **Allow save for later** to enable save for later. 3. If needed, to save the Omniscript automatically when a user clicks **Next** in a step, select **Auto save on step next**. 4. In the **Save Name Template** field, enter a name for the Omniscript. This field supports merge fields. For example, `%LastName%, %FirstName% - Application`. If the field is blank, the default is `Saved-Omniscript Name-RowId`. 5. In the **Save Expire In Days** field, enter the number of days for which the Omniscript is to remain usable before it expires. If a user attempts to resume the script after it expires, the Omniscript restarts. 6. For Angular Omniscripts only, set the **Save For Later Redirect Page Name** to the name of a redirect page. Upon success, the script navigates to this page. 7. For Angular Omniscripts only, set the **Save For Later Redirect Template Url**, the HTML template of the redirect page. The provided template is vlcSaveForLaterAcknowledge.html. 8. Set the **Save Object ID** field to attach the saved Omniscript to a record. This field supports merge fields. The default value is %ContextId%. For more information, see [Access Omniscript Data JSON with Merge Fields (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_access_omniscript_data_json_with_merge_fields.htm&release=264.0.0&type=5 "For the managed package runtime, enable Omniscript elements and element properties to access data JSON using merge fields. A merge field is a variable that references the value of a JSON node. For example, if a JSON node is \"FirstName\": \"John\", then the merge field %FirstName% returns John."). 9. If needed, enable users to merge data into an updated Omniscript by selecting **Merge Saved Data JSON into updated Omniscript**. If **Merge Saved Data JSON into updated Omniscript** is selected, the Omniscript merges the data from the saved instance into the updated Omniscript when a saved instance launches. However, if you used the Set Value action in a step of your Omniscript, that step takes precedence over the saved value, and Omnistudio doesn’t retain any previously saved value. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note If an Omniscript is deactivated or activated, a new instance of the Omniscript is always created. Multiple instances of forms are created, and saved instances are no longer available. Selecting **Merge Saved Data JSON into updated Omniscript** prefills a form of the new instance of the Omniscript with saved data. To use saved fields in the new version of the Omniscript, first select either **Merge Saved Data JSON into updated Omniscript** or set the **ContextId** field. Then ensure that the value of the **Save Object Id** field is the same in both Omniscripts. These steps map JSON data from the saved version of the Omniscript into the new version of the Omniscript that is created. 10. To use Base64 encoding for the saved Omniscript file, click **Save Content Encoded**. Select this option to obfuscate the data. 11. In the Save URL Patterns section, map the Omniscript URL to a custom field of an object. See [Map Saved Instance URLs to Custom Fields (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_map_saved_instance_urls_to_custom_fields.htm&release=264.0.0&type=5 "For the managed package runtime, configure where a saved Omniscript instance launches in Salesforce by mapping URLs to custom fields on the Saved Omniscript object."). 12. To enable save for later on a per-step basis, expand the Save Options section and select **Allow Save For Later**. What’s next: [Map Saved Instance URLs to Custom Fields (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_map_saved_instance_urls_to_custom_fields.htm&release=264.0.0&type=5 "For the managed package runtime, configure where a saved Omniscript instance launches in Salesforce by mapping URLs to custom fields on the Saved Omniscript object."). # Configure Search Indexing and Product Discovery Configure Product Discovery search index settings in Product Catalog Management (PCM) so that reps can search across authorized catalog and assortment products at order capture, and so that the search index stays current automatically. ### Required Editions

View supported editions

User Permissions Needed
To configure Product Discovery search indexing: Customize Application AND Product Catalog Management
1. From Setup, in the Quick Find box, enter Product Discovery, and then select **Product Discovery Settings**. 2. Under **Search Settings**, configure these settings. - Enable **Indexed Data for Product Listing and Search**. This setting lets sales reps perform fast keyword searches across indexed product fields and attributes. - Enable **Automatic Product Catalog Index Update**. Automatic index updates ensure that whenever an administrator creates or updates an Assortment, AssortmentProduct, or StoreAssortment record, the system automatically updates the search index in the background to keep product listings current. 3. (Optional) If you're enabling search settings for the first time, perform a full index rebuild to build the initial search cache across all active catalog and assortment products. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-advanced_orders-264-0-0-production-enus/3f520262-6313-4d80-b68f-bf760562aa0b/images/icon_note.png) Note Assortment product search in Order Capture relies on Product Discovery search indexing. If reps can't find active assortment products using the free text search bar on the order entry grid, verify that **Use Indexed Data for Product Listing and Search** and **Automatic Product Catalog Index Update** are enabled in Product Discovery Settings. For more information, see [Manage Your Product Index](https://help.salesforce.com/s/articleView?id=ind.product_catalog_index_products.htm&type=5&language=en_US). # Configure Self-Registration After you set up an account for your new customers, configure self-registration for your site. Use these resources to configure a self-registration page. Depending on your page type, you can also add functionality with Apex or add fields to collect additional user information at sign-up. You can also completely customize the self-registration process by modifying the Apex controller. - **[Self-Registration Page Types](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_login_discovery_self_reg_types.htm&release=264.0.0&type=5)** Depending on your business needs, you can choose from a few page types to implement self-registration for your site. For example, choose a self-registration page type that lets your users register with an email address or phone number. - **[Modify the Default Self-Registration Page](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_self_registration_modify_default_page.htm&release=264.0.0&type=5)** If you're using the Default self-registration page, you can customize it with Visualforce. - **[Use the Configurable Self-Reg Page for Easy Sign-Up](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_login_discovery_create_config_self.htm&release=264.0.0&type=5)** To give visitors a simpler, mobile-centric self-registration experience, use the Configurable Self-Reg Page. With this self-registration page, users can sign up with only an email address or phone number, instead of having to create a username and password. With this lightweight sign-up process, you can limit the amount of information that you collect from the users when they sign up. On subsequent logins, you can get more information, building a member's profile through progressive profiling powered by the login flow. - **[Extend the Configurable Self-Reg Handler in Apex](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_login_discovery_review_config_code.htm&release=264.0.0&type=5)** When you select the Configurable Self-Reg Page registration type on the Login & Registration page, Salesforce generates the AutoCreatedConfigSelfReg handler. The handler contains logic for users to register with their email address or phone number. You can modify the handler in Apex to customize self-registration. You can add logic to ensure that a new member’s email address and phone number are unique in your org. - **[Create Custom Error Messages in the Configurable Self-Reg Handler](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_self_registration_custom_error.htm&release=264.0.0&type=5)** If a user makes a mistake when trying to self-register for your site, the Apex handler displays a generic error message. You can customize the error message that appears on the self-registration page and verify pages using the `Auth.DiscoveryCustomErrorException` exception. - **[Collect More Information on the Experience Builder Self-Registration Page](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_collect_additional_fields.htm&release=264.0.0&type=5)** When users register, you often want to ask them for more than just basic information. If you're using the Experience Builder self-registration page, you can easily add fields to collect additional information. - **[Test Your Self-Registration Process](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_self_registration_test.htm&release=264.0.0&type=5)** When you configure self-registration, or change your self-registration process or page, test the process to make sure it works. # Configure Settings for a Custom One-Time Password Provider To use your custom one-time password (OTP) delivery handler Apex class, add it to your Experience Cloud site settings. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: Professional, Enterprise, Unlimited, and Developer Editions
User Permissions Needed
To customize an Experience Cloud site:
  • Be a member of the site AND Create and Set Up Experiences

    OR

  • Be a member of the site AND View Setup and Configuration AND an experience admin, publisher, or builder in that site
To publish an Experience Cloud site:
  • Be a member of the site AND Create and Set Up Experiences

    OR

  • Be a member of the site AND an experience admin or publisher in that site
Before you get started, [create an Apex class that implements the `Auth.CustomOneTimePasswordDeliveryHandler`](https://help.salesforce.com/s/articleView?id=xcloud.custom_otp_provider_create_apex.htm&release=264.0.0&type=5 "Custom one-time password (OTP) delivery relies on an Apex handler that implements the Auth.CustomOneTimePasswordDeliveryHandler interface. Your custom OTP delivery handler calls out to your provider to send an OTP to the user via SMS. You can customize the content of the SMS message and the short code that the user sees.") interface. To add a custom OTP delivery handler to an Experience Cloud site, you must contact Salesforce Customer Support. When Support gives you access to this feature, we recommend that you configure all Experience Cloud sites in your org to use a custom OTP provider. If you don't configure a custom OTP provider, though, the site uses the Salesforce default provider. 1. Contact Salesforce Customer Support and ask to allow a custom messaging service for OTPs sent to external users. 2. From Setup, in the Quick Find box, enter Sites, and then select **All Sites**. 3. Next to your Experience Cloud site name, click **Workspaces**. 4. Select **Administration**, and then select **Login & Registration**. 5. Under Custom One-Time Password (OTP) Delivery, for OTP Delivery Handler, click ![lookup magnifying glass](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png) and search for the custom OTP delivery Apex class that you created. 6. Save your changes. 7. Test all configurations for your site that send an OTP via SMS. When you confirm that all use cases are working as expected, implement your changes in production. # Configure Setup with Agentforce Before you can use the Setup agent, you must enable Setup with Agentforce. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Foundations or Agentforce 1 Editions
User Permissions Needed
To enable or use Setup with Agentforce: View permissions information.
1. Check that you and all admins who will use Setup with Agentforce have the required permissions. See [Grant Permissions to Use Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_permissions.htm&release=264.0.0&type=5 "Review access requirements for Setup with Agentforce and how to configure this access for users. All users must be assigned permissions to turn on or use the Setup agent."). Admins must refresh their browser for the newly assigned permissions to take effect. 2. [Turn on Data 360](https://help.salesforce.com/s/articleView?id=data.c360_a_setup_provision.htm&language=en_US) if it isn’t already enabled. Wait for Data 360 setup to finish before you continue. When Data 360 setup is finished, you see the “Your Home Org Details” heading on Data Cloud Setup Home. 3. If you haven’t already, [enable generative AI in your org](https://help.salesforce.com/s/articleView?id=ai.generative_ai_enable.htm&language=en_US). 4. If you previously created an agent by using the [Agent for Setup tile](https://resources.docs.salesforce.com/rel1/doc/en-us/static/pdf/setup_agent_original.pdf) or Enhanced Agent For Setup (Pilot) tile, delete this agent on the Agentforce Agents Setup page before you continue. 5. From Setup, in the Quick Find box, enter Setup with Agentforce, and then click **Setup with Agentforce**. 6. Click **Get Started**. 7. Complete the prerequisites. 8. Turn on Setup with Agentforce. 9. Optionally, turn on [**Enhanced Conversation Recommendations**](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_personalization.htm&release=264.0.0&type=5 "By default, Setup with Agentforce conversation recommendations are personalized using your Setup Audit Trail and your Setup agent conversations. To improve your recommendations in searches and agent conversations, turn on Enhanced Conversation Recommendations. This feature collects your page views, CRUDs (create, read, update, and delete actions), and other runtime data, and then exports your insight to Data 360 and the personalization layer to improve Setup agent recommendations.") for Setup with Agentforce. Assign **Collect User Engagement Data for Insight Calculation** to your chosen admins. Unlike other agent types, the Setup agent created under Setup with Agentforce isn’t visible or able to be customized in Agentforce Builder. You aren’t required to select which topics and actions are added to the agent, as all supported functionality is enabled by default. # Configure Slack Notifications about Consumption Thresholds Configure Digital Wallet Consumption Threshold Alerts flow to send notifications about your org's usage to Slack. 1. Create a new flow with the Consumption Threshold Alerts template or open an existing Consumption Threshold Alerts flow to edit it. 2. With flow open, click the Create Alert and Notify action in the flow itself or click the element in the toolbox in the side panel to edit it. 3. Click the + icon directly below that element. Select Decision. 1. Under Outcome Details, name the first outcome Alert Created. 2. Set Resource to Outputs from Create Alert and Notify > isCreated. 3. Set Operation to Equals. 4. Set Value to GlobalConstant.True. 5. Name the default decision path Alert Not Created. 6. Add a label and name for the element. 4. Click the + icon directly below the Alert Created decision path. Select Wait for Amount of Time. Since the Send Slack Message action makes a callout, we need to commit the current transaction first. 1. Set Amount of Time to 1 minute. 2. Add a label and name for the element. 5. Click the + icon directly below the Wait element, then select **Action**. 1. Choose the [Send Slack Message](https://help.salesforce.com/s/articleView?id=platform.flow_ref_elements_actions_slack_send_message.htm&type=5&language=en_US) action. 2. Configure the action. 6. To keep your changes, click Save. The original flow template stays the same. 7. To start notifications, click **Activate**. # Configure Smart Actions on an LWC Card (Managed Package) For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Before you begin, you must [create an Integration Procedure](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_integration_procedure.htm&release=264.0.0&type=5 "For the managed package runtime, to create an Integration Procedure, you must name it, configure it, define its logic, and preview how it runs. You can also view debugging information and set options that apply only to previews.") before you can follow the steps on this page. Reduce server processing time and increase performance. Use an [Integration Procedure](https://help.salesforce.com/s/articleView?id=xcloud.os_integration_procedures.htm&release=264.0.0&type=5 "For the managed package runtime, the following diagram shows the relationship between an Omniscript and an Integration Procedure that it calls.") to generate and return actions to an LWC Card at run time. 1. Click the **Enable LWC** button on a card to enable Smart Actions. 2. In a card state, select an sObject from the **Salesforce Object Type** dropdown. 3. In the **Id Field for Actions** field, add the ContextId available from the card's data source, such as Id. 4. Click the arrow next to the **Smart Actions** to reveal smart action options. ![Smart Actions screenshot](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/os_classic_cards_smart_actions.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Prior to Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20, you must click the Actions dropdown to select Smart Actions. ![Screenshot of Smart Actions before Winter '20](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/os_classic_cards_smart_actionsbefore_W20.png) 5. Click into the **IP Name** input field and select an existing Integration Procedure from the list that appears. The Integration Procedure must include an [Intelligence Action for Integration Procedures](https://help.salesforce.com/s/articleView?id=xcloud.os_intelligence_action_for_integration_procedures.htm&release=264.0.0&type=5 "For the managed package runtime, the Intelligence Action provides input to and runs a Vlocity Intelligence Machine."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note We recommend that you use Vlocity Intelligence. However, you can use your own machine learning framework with the schema outlined on this page. The Integration Procedure must return the following schema. A Vlocity Intelligence Action returns this schema by default. ``` [ { "OfferRecommendation": "test", "targetObjectType": "Vlocity Action", "targetObjectKey": "open-claim", "virtualResourceId": null, "virtualResourceData": null, "rejectLast": null, "rejectDecay": 0, "acceptLast": null, "acceptDecay": 0, "viewLast": null, "viewDecay": 0, "currentMachine": "smartCard", "contextId": "02i3u0000099Ul0AAE", "info": null, "attachment": { "Icons_-_Lightning_Design_System-3": "00P3u00000dqZ1REAU", "Smartcard": "00P3u00000dk5JvEAI", "Ranking": "00P3u00000dZWuaEAG" }, "scaledRawScore": 100, "formattedAggregatedScore": 1, "aggregatedScore": 1, "componentScores": [ { "scoreParameters": [ { "score": 100, "objectTypeString": "vlocityins2__Attribute__c", "name": "OpenClaim", "identifier": "openClaim" } ], "scaledScore": 1, "normalizedScore": 1, "rawMaxScore": 100, "rawMinScore": 0, "scaledRawScore": 100, "rawMultiplier": 1, "rawScore": 100, "scoringComponentName": "VqScoringImplProfileMatch" } ], "resource": { "vlocityins2__TargetObjectType__c": "Vlocity Action", "vlocityins2__TargetObjectKey__c": "open-claim", "vlocityins2__IsActive__c": true, "vlocityins2__Headline__c": "There is open claim!", "vlocityins2__EffectiveDate__c": "2019-11-07T08:00:00.000Z", "vlocityins2__Description__c": "There is open claim. Please handle.", "SystemModstamp": "2019-12-18T22:19:25.000Z", "LastModifiedById": "0056A000000taWIQAY", "LastModifiedDate": "2019-12-18T22:19:25.000Z", "CreatedById": "0056A000000taWIQAY", "CreatedDate": "2019-11-13T01:59:48.000Z", "Name": "Open Claim", "IsDeleted": false, "OwnerId": "0056A000000taWIQAY", "Id": "a3k3u000000OJ8NAAW" } },... ] ``` 6. Enter the values for these settings if the Integration Procedure requires them: - **Input Map**: Enter name-value pairs in this field to send input parameters to the Integration Procedure. - **Options Map**: Enter name-value pairs in this field to send optional parameters to the Integration Procedure. # Configure Specialized Security Solutions Tailor your security posture to satisfy complex security and compliance requirements in Salesforce. Use specialized features and products to limit risk, proactively monitor and manage user activity, manage encryption keys, and gain more visibility into your data. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note For information about foundational security settings, see [Secure Your Salesforce Org](https://help.salesforce.com/s/articleView?id=xcloud.security_secure_your_org.htm&type=5&language=en_US) in Salesforce Help. - **[Take Charge of Your Security Goals with Security Center](https://help.salesforce.com/s/articleView?id=xcloud.security_center.htm&release=264.0.0&type=5)** The Security Center app offers a single view of your security, privacy, and governance posture across all of your Salesforce orgs and tenants. Use the app to review up-to-date health check scores, access settings, and user and login metrics in one easy-to-read interface. When you know how your orgs and tenants are performing, you can shorten security review processes and limit risks. You can also get clear insights into how you're meeting your security goals and respond proactively when suspicious conditions arise. And during periods of growth or change, Security Center can help you monitor changes that touch sensitive customer data. - **[Security Center Extension](https://help.salesforce.com/s/articleView?id=xcloud.security_center_extension_overview.htm&release=264.0.0&type=5)** The Security Center Extension helps enhance data security and compliance. After installing the Security Center Extension managed package, use it to find sensitive data and classify it with a data-sensitivity category. You can then decide how best to secure that data by using other Salesforce settings and features. - **[Salesforce Shield](https://help.salesforce.com/s/articleView?id=xcloud.shield.htm&release=264.0.0&type=5)** Salesforce Shield is a suite of security products that builds extra levels of security, compliance, and governance into your business-critical apps. You can access them through Setup or the Shield app. - **[Data Detect](https://help.salesforce.com/s/articleView?id=xcloud.einstein_data_detect.htm&release=264.0.0&type=5)** Data Detect is a crucial tool designed to help organizations identify sensitive data within their Salesforce orgs, enabling them to protect it effectively. By using native Salesforce technology, Data Detect ensures that your data remains secure within the platform, eliminating the need for third-party services or data transfers outside Salesforce. This capability significantly streamlines data classification, also by linking data sensitivity levels and categories to actual field data, ultimately empowering users to take necessary protective actions. - **[Strengthen Your Data’s Security with Shield Platform Encryption](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_overview.htm&release=264.0.0&type=5)** Shield Platform Encryption gives your data a whole new layer of security while preserving critical platform functionality. You can encrypt sensitive data at rest, not just when transmitted over a network, so your company can confidently comply with privacy policies, regulatory requirements, and contractual obligations for handling private data. - **[Platform Encryption Analyzer in Shield Extension](https://help.salesforce.com/s/articleView?id=xcloud.shield_extension_analyzer_overview.htm&release=264.0.0&type=5)** By encrypting sensitive data, you build extra layers of data protection and work toward meeting compliance and regulatory requirements. The Shield Extension managed package includes the Platform Encryption Analyzer, a tool for identifying and assessing fields that are suitable for field-level encryption. It simplifies the encryption process and helps you implement your encryption policies faster. - **[Using Frontdoor.jsp to Bridge an Existing Session Into Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.security_frontdoorjsp.htm&release=264.0.0&type=5)** You can use frontdoor.jsp to give users access to Salesforce from a custom web interface, such as a Salesforce site, using their existing session ID and the server URL. - **[Secure Cross-Cloud Integrations with Private Connect](https://help.salesforce.com/s/articleView?id=xcloud.private_connect_overview.htm&release=264.0.0&type=5)** When you integrate your Salesforce org with applications hosted on third-party cloud services, it’s essential to be able to send and receive HTTP/s traffic securely. With Private Connect, increase security on your Amazon Web Services (AWS) integrations by setting up a fully managed network connection between your Salesforce org and your AWS Virtual Private Cloud (VPC). Then, route your cross-cloud traffic through the connection instead of over the public internet to reduce exposure to outsider security threats. - **[Activations](https://help.salesforce.com/s/articleView?id=xcloud.security_activation_about.htm&release=264.0.0&type=5)** Activation tracks information about devices from which users have verified their identity. Salesforce prompts users to verify their identity when they access Salesforce from an unrecognized browser or application. Identity verification adds an extra layer of security on top of username and password authentication. The Activations page lists the login IP addresses and client browsers used. - **[Event Monitoring](https://help.salesforce.com/s/articleView?id=xcloud.real_time_event_monitoring_overview.htm&release=264.0.0&type=5)** Event Monitoring gives you access to detailed performance, security, and usage data on all your Salesforce apps. See who is accessing critical business data when, and from where. Understand user adoption across your apps. Troubleshoot and optimize performance to improve the end-user experience. Event Monitoring data is tracked via the API and surfaces many event logs in the Event Log Browser. You can directly query event log objects, visualize event data in dashboards, or import logs into data visualization or application monitoring tools like CRM Analytics, Splunk, or New Relic. To get started, check out our Event Monitoring training course. #### See Also - [Secure Your Salesforce Org](https://help.salesforce.com/s/articleView?id=xcloud.security_secure_your_org.htm&type=5&language=en_US) # Configure SSO with Salesforce as a SAML Service Provider Configure your Salesforce org or Experience Cloud site as a service provider with SAML single sign-on (SSO). With this SAML configuration, your users can log in to Salesforce with credentials from an external identity provider. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Federated Authentication is available in: All Editions

Delegated Authentication is available in: Professional, Enterprise, Performance, Unlimited, Developer, and Database.com Editions

Authentication Providers are available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions

User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Modify All Data

To configure Salesforce as a SAML service provider, complete these high-level steps. - **[Step 1: Gather Information from Your Identity Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_saml_idp_prereqs.htm&release=264.0.0&type=5)** During a SAML single sign-on (SSO) flow where you use Salesforce as a service provider, your identity provider sends a SAML response to Salesforce, which Salesforce then validates. To make sure that Salesforce can recognize and validate the SAML response, gather SAML information from your identity provider so that you can share it with Salesforce. - **[Step 2: Create a SAML Single Sign-On Setting in Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.sso_service_provider_configuration.htm&release=264.0.0&type=5)** For SAML configurations where your org or Experience Cloud site acts as a service provider, create a SAML single sign-on (SSO) setting with the information from your identity provider. - **[Step 3: Share Your SAML SSO Configuration with Your Identity Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_saml_sp_endpoints.htm&release=264.0.0&type=5)** After setting up your org or Experience Cloud site as a SAML single sign-on (SSO) service provider, share configuration details, including SAML endpoints, with your identity provider. - **[Step 4: Add Single Sign-On Providers to the Login Page and Test the SSO Connection](https://help.salesforce.com/s/articleView?id=xcloud.sso_sp_test_connection.htm&release=264.0.0&type=5)** After you configure Salesforce as a SAML service provider, add the identity provider to your login page so that users can easily access it. Then, to confirm that users can successfully log in, test your SSO connection. #### See Also - [View and Edit Single Sign-On Settings](https://help.salesforce.com/s/articleView?id=xcloud.sso_saml_detail.htm&release=264.0.0&type=5 "After you configure your Salesforce org to use SAML, you can manage the SAML configuration from the Single Sign-On Settings page.") - [SAML SSO with Salesforce as the Service Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_saml_setting_up.htm&release=264.0.0&type=5 "SAML is an open-standard authentication protocol that Salesforce uses for single sign-on (SSO) into a Salesforce org from a third-party identity provider. You can also use SAML to automatically create user accounts with Just-in-Time (JIT) user provisioning.") - [FAQs for Single Sign-On](https://help.salesforce.com/s/articleView?id=xcloud.sso_tips.htm&release=264.0.0&type=5 "Review these frequently asked questions (FAQs) to help you implement and troubleshoot single sign-on (SSO).") - [Troubleshoot SAML Assertion Errors](https://help.salesforce.com/s/articleView?id=xcloud.sso_saml_validation.htm&release=264.0.0&type=5 "Use the SAML Assertion Validator to troubleshoot single sign-on (SSO) login problems and identify errors in SAML assertions sent by your identity provider.") - [Certificates and Keys](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_about.htm&release=264.0.0&type=5 "Salesforce certificates and key pairs are used for signatures that verify a request is coming from your org. They’re used for authenticated SSL communications with an external website, or when using your Salesforce org as an Identity Provider. You only need to generate a Salesforce certificate and key pair if you're working with an external website that wants verification that a request is coming from a Salesforce organization.") # Configure State and Country/Territory Picklists Configuring state and country/territory picklists means choosing which states and countries you want to be available in your Salesforce org. It lets you make state and country/territory picklists available for purposes like importing data, working with external systems, and accessing picklist data from the Metadata API. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: All Editions except Database.com
User Permissions Needed
To configure state and country/territory picklists: Modify All Data
Configuring picklists isn’t required for you to enable state and country/territory picklists for users, but it’s highly recommended. Configuring picklists helps ensure continuity and data integrity with existing state, country, and territory data and customizations. When configuring states, countries, and territories, you start with countries and territories, and then drill down to their states or provinces. State and country/territory picklists include 235 countries and territories by default. They also include the states and provinces of the United States, Canada, Australia, Brazil, China, Japan, India, Ireland, Italy, and Mexico. State and country/territory picklists that contain more than 1,000 states or countries/territories can cause degraded performance. For the complete list of default countries, see [Standard Countries and Territories for Address Picklists](https://help.salesforce.com/s/articleView?id=xcloud.admin_state_country_picklists_standard_countries.htm&release=264.0.0&type=5 "Salesforce provides 235 countries and territories as standard for country/territory address picklists. Additionally, some countries and territories have state codes with special considerations."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note - Integration values for state and country/territory picklists can also be configured through the Metadata API. For more information, read about the AddressSettings component in the _Metadata API Developer Guide_. - State and country/territory picklists aren’t supported in Salesforce change sets or packages. However, you can move integration value changes for state and country/territory picklists between sandbox and production orgs by using the Metadata API. To edit the existing states and countries in a picklist, configure your state and country/territory picklists in your sandbox org. Then, use the Metadata API to retrieve the sandbox configurations, and deploy them to your production org. You can’t deploy new ISO codes or update ISO code values using any API. 1. From Setup, enter State and Country/Territory Picklists in the Quick Find box, then select **State and Country/Territory Picklists**. 2. On the State and Country/Territory Picklists page, click **Configure States, Countries, and Territories**. 3. On the Configure States, Countries, and Territories page, select from the following options: - **Active**: Makes the country or territory available in the Metadata API so that records that contain the country or territory can be imported. However, unless you also set it as visible, the country or territory isn’t available to users in Salesforce. Otherwise, users can still make updates to an invisible country or territory through the API. - **Visible**: Makes the country or territory available to users in Salesforce. A country or territory must be active before you can make it visible. 4. Click **Edit** to view and edit details for the country, including to configure its states or provinces. 5. (Optional) Under Picklist Settings, select a Default Country/Territory. The Default Country/Territory automatically populates country/territory picklists for new records in your org, but users can select a different country or territory. Default countries and territories must be both active and visible. 6. To save your configuration, click **Save**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note - Active states and countries not marked Visible are still valid filter lookup values. You can use invisible states and countries when creating filters in reports, list views, workflows, and so on. - If Custom Address Fields is enabled in your org, the Active checkbox for all countries and states is greyed out and cannot be changed. This limitation persists regardless of whether State and Country/Territory Picklists is enabled for standard fields. To manage which values are available to users when Custom Address Fields is active, use the Visible checkbox instead. #### See Also - [Edit State, Country, and Territory Details](https://help.salesforce.com/s/articleView?id=xcloud.admin_state_country_picklists_edit_details.htm&release=264.0.0&type=5 "To customize the states, countries, and territories in your picklists, edit their details.") - [Let Users Select States, Countries, and Territories from Picklists](https://help.salesforce.com/s/articleView?id=xcloud.admin_state_country_picklists_overview.htm&release=264.0.0&type=5 "State and country/territory picklists let users select states, countries and territories from predefined, standardized lists, instead of entering state and country/territory data into text fields. State and country/territory picklists offer faster and easier data entry. They help to ensure cleaner data that can be harnessed for other uses—in reports and dashboards, for example. They protect data integrity by preventing typos, alternate spellings, and junk data—even in records updated through the API.") - [Integration Values for State and Country/Territory Picklists](https://help.salesforce.com/s/articleView?id=xcloud.admin_state_country_picklists_integ_values.htm&release=264.0.0&type=5 "An integration value is a customizable text value that’s linked to a state or country/territory code. Integration values for states, countries, and territories default to the full ISO-standard state, country, and territory names. The way integration values function is similar to the way API names of custom fields and objects function. Configure integration values so integrations that you set up before enabling state and country/territory picklists continue to work.") # Configure Step Chart for an Omniscript Hide or move an Omniscript's Step Chart using Step Chart Options. 1. In the Omniscript's Setup section, expand **Step Chart Options**. 2. Display the Step Chart on either side of the Omniscript or above the Omniscript by selecting **Right**, **Left**, or **Top** in the Step Chart Placement dropdown. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note In the mobile view, the step chart appears on the top of the Omniscript irrespective of its placement setting. Also, step chart alignments are not supported if you're using the Newport Design System. 3. Select **Hide** to hide the step chart from users. # Configure Store Checkout Add checkout functionality to your store, including payment, shipping, and tax calculation services. By default, a new D2C store uses Managed Checkout, which includes smart store defaults for a streamlined checkout setup. A default shipping profile based on your store location and currency settings is automatically configured for you. You can change your profile and rates at any time. ### Required Editions
Available in: Lightning Experience
Available in: Starter and Pro Suite Editions.
User Permissions Needed
To set up or edit an online store: Commerce Admin or Commerce Starter App
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/images/icon_note.png) Note Setup steps for store checkout configuration can vary depending on whether you have a merchant account with Stripe. 1. From the Commerce app, select the **Store** tab. 2. From the Setup Assistant, select **Set up checkout.** 3. If you haven’t set up a merchant account yet, select **Activate a Merchant Account.** 4. Read the terms and conditions and confirm by selecting **Agree and Enable.** 5. Select **Complete Setup.** 6. Select **Add Information.** 7. Follow the guided setup to complete your Stripe merchant account. Credit cards are the default payment method for the merchant account, but you can add more payment methods during setup. You can also enable manual capture of payments. 8. To set up payment methods accepted by your store, select **Add Payment Methods.** 9. To set up your store’s tax service, select **Add a default tax category.** Your store’s tax category associates your products with the correct tax rates. 10. Review your shipping profile. The shipping profile is based on your store’s default settings. To set up different shipping zones and the rates that you want to offer, select **Manage Shipping.** # Configure the Agent Topic to Use Revenue Cloud Quoting Update the Upsell and Cross-sell agent topic by adding or removing specific actions. Refine the instructions to enable the agent to use Revenue Cloud quoting capabilities. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, and Manufacturing Cloud, with Agentforce enabled. View edition availability.
Identify instructions by their unique identifier label found on the first line of the description. Locate this label within the Agentforce UI rather than searching for internal YAML names. 1. Update the list of actions. 1. Remove this agent action. ```html - CreateSalesQuote ``` 2. Add these agent actions. ```html - CreateOpportunity - quotingAI__CreateInitialQuote - quotingAI__AddQuoteLineItemToQuote - quotingAI__ApplyDiscountToQuoteLineItem - quotingAI__QueryQuoteLineRecords - quotingAI__IdentifyObjectByName - quotingAI__GetProdtSellModelForPrdct ``` 2. Find the **CRITICAL - Core Parameter and API Governance** instruction identifier, navigate to the section about switching flows, and modify it. 1. Find and select this set of instructions. ```html When switching flows (e.g., Cross-Sell to Upsell, or Upsell to Cross-Sell): - You MUST retain and reuse the validated accountId from the previous flow - Clear all other flow-specific parameters (assetId, catalogId, categoryId, pricebookId, etc.) - DO NOT ask the user to provide the account again - it should be automatically reused - Simply inform: "I'll help you with [new flow type] for [Account Name]" and proceed ``` 2. Replace the selected set of instructions with this set. ```html When switching flows (e.g., Cross-Sell to Upsell, or Upsell to Cross-Sell): - You MUST retain and reuse the validated accountId from the previous flow - Retain the createdOpportunityId and createdQuoteId if they exist (for quote reuse) - Clear only flow-specific parameters (assetId, catalogId, categoryId) - DO NOT ask the user to provide the account again - it should be automatically reused - Simply inform: "I'll help you with [new flow type] for [Account Name]" and proceed ``` 3. Navigate to these instruction identifiers, and delete the sets of instructions under them. - **\[FLOW\] Quote - Step 1: Ask For Discount** - **\[FLOW\] Quote - Step 2: Create Quote & Associate** - **\[FLOW\] Quote - Step 3: Display & Ask to Submit (Do not delete this instruction, instead change the heading from “Step 3” to “Step 4”)** 4. Change the handoff target in these sets of instructions. 1. Navigate to the **\[FLOW\] Upsell - Step 4: Get & Display Products - STEP 5** instruction identifier and replace the paragraph that starts with the line “When user selects product(s):” with this set of instructions. ```html When user selects product(s): - Capture ALL selected product IDs (single or multiple) - Store them as selectedProductIds array MANDATORY: Pass control to [FLOW] Quote - Step 1: Prepare Opportunity and Quote DO NOT skip any steps in the quote flow ``` 2. Navigate to the **\[FLOW\] Cross-Sell - Step 4: Get & Display Products - STEP 5** instruction identifier and replace the paragraph that starts with the line “When user selects product(s):” with this set of instructions. ```html When user selects product(s): - Capture ALL selected product IDs (single or multiple) - Store them as selectedProductIds array MANDATORY: Pass control to [FLOW] Quote - Step 1: Prepare Opportunity and Quote DO NOT skip any steps in the quote flow ``` 3. Navigate to the **Exception: Handling Customer Preferences (Show 3)** instruction identifier and replace the paragraph that starts with the line “When user selects product(s):” with this set of instructions. ```html When user selects product(s): MANDATORY: Pass control to [FLOW] Quote - Step 1: Prepare Opportunity and Quote DO NOT skip any steps in the quote flow ``` 4. Navigate to the **Exception: Handling "Suggest Best Option" (Show 1) - Step 4:** instruction identifier and ONLY replace the paragraph that starts with the line “If user agrees to proceed:” with this set of instructions. ```html If user agrees to proceed: - Treat this as a product selection - MANDATORY: Pass control to [FLOW] Quote - Step 1: Prepare Opportunity and Quote - DO NOT skip any steps in the quote flow ``` 5. Add these new quote flow instructions to replace the deleted quote instructions. 1. Add this set of instructions to prepare Opportunity and Quote. ```html [FLOW] Quote - Step 1: Prepare Opportunity and Quote Trigger: This instruction activates after a user has selected one or more products to quote in ANY context. PREREQUISITES: - You MUST have accountId (validated Account record) - You MUST have selectedProductIds array (one or more Product2 IDs) - You MUST have selectedPricebookId (Pricebook2 ID) Task 1: Create or Reuse Opportunity (SILENT - DO NOT SHOW TO USER) CRITICAL - Opportunity Reuse Logic: Check if upsellOpportunityId already exists in conversation context: • If upsellOpportunityId EXISTS and is not null: - REUSE it. Do NOT create another Opportunity. - Skip to Task 2. • If upsellOpportunityId DOES NOT EXIST or is null: - Create a new Opportunity using CreateOpportunity action: * AccountId = accountId from context * Name = "Upsell Opportunity - [current date and time in dd/MM/yyyy HH:mm:ss format]" * StageName = "Prospecting" * CloseDate = 100 days from today - Capture the returned Opportunity Id - Store it in conversation memory as upsellOpportunityId - Proceed to Task 2 CRITICAL: DO NOT display any message to the user about Opportunity creation. This is a silent operation. Task 2: Create or Reuse Quote (SILENT - DO NOT SHOW TO USER) CRITICAL - Quote Reuse Logic: Check if createdQuoteId already exists in conversation context: • If createdQuoteId EXISTS and is not null: - REUSE it. Do NOT create another Quote. - Display brief message: "Adding selected product(s) to your existing quote..." - Skip to Task 3 (go directly to adding QLIs). • If createdQuoteId DOES NOT EXIST or is null: - Create a new Quote using quotingAI__CreateInitialQuote action: * OpportunityId = upsellOpportunityId from Task 1 * quote name = "Upsell Quote [current date and time in dd/MM/yyyy HH:mm:ss format]" * PricebookId = selectedPricebookId - Capture the returned Quote Id - Store it in conversation memory as createdQuoteId - Display brief message: "Creating quote..." - Proceed to Task 3 Task 3: Handoff to Add Quote Line Items Pass control to [FLOW] Quote - Step 2: Add Quote Line Items with: - selectedProductIds array (all products user selected) - createdQuoteId (quote to add items to) ``` 2. Add this set of instructions to add Quote Line Items. ```html [FLOW] Quote - Step 2: Add Quote Line Items Trigger: This instruction activates after Opportunity and Quote are prepared. PREREQUISITES: - createdQuoteId exists and is valid - selectedProductIds array exists with one or more Product2 IDs Task 1: Initialize Tracking Variables Create these tracking variables: - successfulQLIs = [] (array to store successfully added QLI details) - failedProducts = [] (array to store products that failed with error messages) Task 2: Process Each Selected Product For EACH product in selectedProductIds array, execute the following steps sequentially: Step A: Fetch Product Selling Model - Call GetProdtSellModelForPrdct action with ProductId = current product ID - Capture productSellingModelID from response Step B: Validate Selling Model - If productSellingModelID is missing, null, or empty: * Add product to failedProducts array with error: "Product selling model not available" * SKIP this product (do NOT stop entire flow) * Continue to next product in the loop Step C: Add Quote Line Item (if selling model is valid) - Call AddQuoteLineItemToQuote action with: * ProductSellingModelID = productSellingModelID from Step A * QuoteId = createdQuoteId * Quantity = 1 * ProductId = current product ID Step D: Handle Add Result - If add operation FAILED: * Add product to failedProducts array with the error details from action response * Continue to next product in the loop - If add operation SUCCEEDED: * Add product to successfulQLIs array with product name and QLI ID * Continue to next product in the loop Task 3: Display Summary After All Products Processed After processing ALL products in the loop: • If successfulQLIs array is NOT empty: Display: "Successfully added [count] quote line item(s) to the quote:" List each successful product name from successfulQLIs array • If failedProducts array is NOT empty: Display: "The following product(s) could not be added:" List each failed product name with its error message from failedProducts array • If BOTH arrays are empty (should not happen): Display: "No products were processed." Task 4: Determine Next Step • If successfulQLIs array is NOT empty (at least one QLI was added): - Proceed to Task 5 • If successfulQLIs array is empty (all products failed): - Ask: "Would you like to select different products?" - STOP and WAIT for user response - Do NOT proceed to discount step Task 5: Handoff to Discount Step ONLY if at least one QLI was successfully added: Pass control to [FLOW] Quote - Step 3: Apply Discount to Quote Line Items ``` 3. Add this set of instructions to appply discount to Quote Line Items. ```html [FLOW] Quote - Step 3: Apply Discount to Quote Line Items Trigger: This instruction activates after quote line items have been successfully added to the quote. PREREQUISITES: - createdQuoteId exists and is valid - At least one QLI has been successfully added to the quote - User has confirmed the discount for that quote line item Task 1: Ask User About Discount Preference (MANDATORY) FINAL ACTION IN THIS CONVERSATION TURN: Ask: "Would you like to apply a discount to the quote line items? You can choose to apply a discount to all items or specify discounts for individual items." END YOUR RESPONSE HERE. This is the last thing you do in this turn. - DO NOT proceed to Task 2 - DO NOT call any actions - The user will provide their answer in their next message ========== CONVERSATION BOUNDARY - WAIT FOR USER INPUT ========== Task 2: Process User's Discount Preference (ONLY EXECUTES IN THE NEXT CONVERSATION TURN) When user provides their response: Option A: User wants NO discount - User says: "no", "no discount", "skip", "no thanks" - Action: Skip discount application entirely - Proceed directly to Task 6 (handoff to display and submit) Option B: User wants discount on ALL items - User says: "apply to all", "all items", "same discount for all", "discount all" - Action: Continue to Task 3 Option C: User wants discount on SPECIFIC items - User says: "specific items", "individual items", "different discounts", "some items" - Action: Continue to Task 4 Option D: User provides discount percentage immediately - User says: "10%", "15 percent", "give 20% off" - Interpret as: Apply this discount to ALL items - Store the percentage and continue to Task 3 Task 3: Apply Discount to ALL Quote Line Items Trigger: User chose Option B or Option D above. Step 1: Get discount percentage (if not already provided) - If user didn't provide percentage yet, ask: "What discount percentage would you like to apply to all items? (0-100%)" - WAIT for user response - Extract percentage from user input (e.g., "10", "15%", "twenty" → parse as number) Step 2: Fetch all QLIs for this quote - Call QueryQuoteLineRecords action with: * quoteId = createdQuoteId * productIds = null (to get all QLIs) - Capture all returned QuoteLineItem IDs Step 3: Apply discount to each QLI - For EACH QuoteLineItem ID in the results: * Call ApplyDiscountToQuoteLineItem action with: - QuoteLineItemId = current QLI ID - discountPercentage = percentage from Step 1 * Track successes and failures Step 4: Display summary - Show: "Applied [X]% discount to [N] quote line item(s)." - If any failures, list them Step 5: Skip to Task 6 (handoff to display and submit) Task 4: Apply Discount to SPECIFIC Quote Line Items Trigger: User chose Option C in Task 2. Step 1: Ask which items - Ask: "Which products would you like to apply a discount to? You can provide product names or say 'show all items'." - WAIT for user response Step 2: Handle user response Option A: User says "show all items" or "list items" - Call QueryQuoteLineRecords with quoteId = createdQuoteId - Display all QLIs with product names in a numbered list - Ask: "Which item(s) would you like to discount? You can provide the numbers or product names." - WAIT for user response - Proceed to Step 3 Option B: User provides product name(s) - Extract product names from user input - Proceed to Step 3 Step 3: Identify products by name - If user provided product names (not IDs): * Call IdentifyObjectByName action to convert product names to Product2 IDs * Capture the list of product2Ids Step 4: Query specific QLIs - Call QueryQuoteLineRecords action with: * quoteId = createdQuoteId * productIds = list of product2Ids from Step 3 - Capture returned QuoteLineItem IDs Step 5: Handle multiple QLIs with same product - If multiple QLIs exist for the same product: * Display: "There are multiple line items for [Product Name]. Which one would you like to discount?" * Show details to help user distinguish (e.g., quantity, price) * WAIT for user clarification * Narrow down to specific QLI ID Step 6: Ask for discount percentage - Ask: "What discount percentage would you like to apply to the selected item(s)? (0-100%)" - WAIT for user response - Extract percentage from user input Step 7: Apply discount to selected QLIs - For EACH QuoteLineItem ID from Step 4: * Call ApplyDiscountToQuoteLineItem action with: - QuoteLineItemId = current QLI ID - discountPercentage = percentage from Step 6 * Track successes and failures Step 8: Display summary - Show: "Applied [X]% discount to the selected quote line item(s)." - If any failures, list them Step 9: Ask if user wants to discount more items - Ask: "Would you like to apply a discount to any other items on the quote?" - WAIT for user response - If YES: Return to Task 4 Step 1 - If NO: Proceed to Task 6 Task 5: RESERVED (not used - tasks flow from 4 to 6) Task 6: Handoff to Display and Submit After discount application is complete (or skipped): Pass control to [FLOW] Quote - Step 4: Display and Ask to Submit ``` 4. Add this set of instructions to display the quote and ask to submit. ```html [FLOW] Quote - Step 4: Display and Ask to Submit Trigger: This instruction activates after quote line items have been added and discounts (if any) have been applied. PREREQUISITES: - createdQuoteId exists and is valid - Quote has at least one QLI Task 1: Fetch Complete Quote Details Use GetRecordDetails or QueryRecords to fetch the full quote record with: - Quote Name - Quote ID - Quote Status - Account Name (from AccountId) - Total Amount - Discount Amount (if any) - Subtotal Also fetch all Quote Line Items for this quote using QueryQuoteLineRecords: - Product Name - Quantity - Unit Price - Line Total - Discount (if applied) Task 2: Display Comprehensive Quote Summary Format the quote details as follows: ``` Quote created and updated successfully! **Quote Details:** • Quote ID: [createdQuoteId] • Quote Name: [quoteName] • Account: [accountName] • Status: [quoteStatus] **Line Items:** [For each QLI:] • [Product Name] - Quantity: [qty] - Unit Price: $[unitPrice] - Discount: [discount]% - Line Total: $[lineTotal] **Pricing Summary:** • Subtotal: $[subtotal] • Total Discount: $[discountAmount] • Total Amount: $[totalAmount] ``` Display this summary to the user with the actual values populated. Provide a clickable link to the quote record using the format: [View Quote](/[createdQuoteId]) Task 3: Ask for Submission (MANDATORY) After the summary (on a new line), ask: "Do you want to submit the quote for approval now?" STOP IMMEDIATELY. Do NOT submit the quote without user consent. WAIT for explicit user consent (e.g., "yes," "submit it", "approve"). NEVER auto-submit or assume the user wants to submit. Task 4: Submit Quote (if consented) ONLY if the user explicitly confirms: - Call UpdateRecordFields action on createdQuoteId to set Status = "Approved" - Confirm the submission success to the user: "Quote has been submitted for approval successfully!" If the user says "no" or declines: - Do NOT submit the quote - Acknowledge their decision: "Quote has been saved but not submitted. You can submit it later from the quote record." Task 5: End Flow The quote flow is complete. Ask: "Is there anything else I can help you with?" ``` # Configure the External Client App Global OAuth Settings Configure a global settings file, which affects every instance where the external client app is deployed. 1. Create a file called \[ECAPP\_OAUTH\_CONSUMER\].ecaGlblOauth-meta.xml, for example, myecaconsumer.ecaGlblOauth-meta.xml, in a directory called extlClntAppGlobalOauthSets. This file is the global OAuth settings file, which includes sensitive OAuth consumer information. 2. Configure the file with this information. | Field | Description | | --- | --- | | callbackUrl | This field is optional. Type: String. The endpoint that Salesforce calls back to your external client app during OAuth. It’s the OAuth redirect\_uri. | | consumerKey | This field is optional. Type: String. A value used by the consumer for identification to Salesforce. Referred to as client\_id in OAuth 2.0. | | consumerSecret | This field is optional. Type: String. A value that is combined with the consumerKey and used by the consumer for identification to Salesforce. Referred to as client\_secret in OAuth 2.0. | | externalClientApplication | This field is required. Type: String. Name of the external client application. | | idTokenAudience | This field is optional. Type: String. The audiences that this ID token is intended for. | | idTokenIncludeStandardClaims | This field is optional. Type: Boolean. Indicates whether standard claims about the authentication event are included in the ID token. | | idTokenValidityInMinutes | This field is optional. Type: Integer. The length of time that the ID token is valid for after it’s issued. The value can be 1–720 minutes. | | isConsumerSecretOptional | This field is optional. Type: Boolean. If set to false (default), the external app’s client secret is required in exchange for an access token in the OAuth 2.0 web server flow. | | isIntrospectAllTokens | This field is optional. Type: Boolean. If set to true, authorizes the external app to introspect all access and refresh all tokens. If set to false (default), the external client app can introspect its own tokens. | | isPkceRequired | This field is required. Type: Boolean. If set to true (default) Proof Key for Code for Exchange (PKCE) is required for OAuth integration. | | isSecretRequiredForRefreshToken | This field is optional. Type: Boolean. If set to true (default), the app’s client secret is required in the authorization request of a refresh token and hybrid refresh token flow. If set to false and an app sends the client secret in the authorization request, Salesforce still validates it. | | label | This field is required. Type: String. External Client Application Global OAuth Settings Name. | | shouldRotateConsumerKey | This field is optional. Type: Boolean. If set to `true` then the external client app's OAuth consumer key is replaced with a newly generated key on metadata deploy. Default is `false`. Rotating consumer credentials causes app failure if the external client app is not set up for rotation. To maintain security, you must include the ignore warnings attribute `--ignorewarnings` in the deploy command if this field is set to `true`. | | shouldRotateConsumerSecret | This field is optional. Type: Boolean. If set to `true` then the OAuth external client app's consumer secret is replaced with a newly generated secret on metadata deploy. Default is `false`. Rotating consumer credentials causes app failure if the external client app is not set up for rotation. To maintain security, you must include the ignore warnings attribute `--ignorewarnings` in the deploy command if this field is set to `true`. | The global settings file looks like this example. ``` https://www.example.com myeca SalesforceAudience true 0 false false true false false false ``` # Configure the External Client App OAuth Settings Configure the OAuth settings to set the structure of the local external client app. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure External Client Apps OAuth settings Create, edit, and delete External Client Apps
1. Create your external client app, and complete its basic information. 2. In the OAuth Settings area of the page, select **Enable OAuth**. The OAuth Settings area expands and the OAuth settings fields are visible. 3. Enter the callback URL (endpoint) that Salesforce calls back to your application during OAuth. It’s the same as the OAuth redirect URI. Depending on which OAuth flow you use, the URL is typically the one that a user’s browser is redirected to after successful authorization. Because this URL is used by some OAuth flows to pass an access token, the URL must use secure HTTPS or a custom URI scheme. If you enter multiple callback URLs, at run time Salesforce matches the callback URL value specified by the app with one of the values in Callback URL. It must match one of the values to pass validation. The Callback URL field has a limit of 2000 characters, cumulatively. Separate multiple callback URLs with line breaks. 4. Select the OAuth scopes to apply to the external client app. OAuth scopes define permissions for the external client app, which are granted as tokens after the app is authorized. The OAuth token name is in parentheses. 5. To authorize a single external client app to introspect all access and refresh tokens within the entire org, select **Introspect all Tokens**. By default, all external client apps can introspect their own tokens. In addition, an OAuth client that directly registers OAuth 2.0 external client apps through the dynamic client registration endpoint can check the tokens for itself and its registered apps. 6. To control how the OAuth request handles the ID token, select **Configure ID token**. If the OAuth request includes the **Allow access to your unique identifier (openid)** scope, the returned token can include the ID token. The ID token is always included in access token responses. 7. With the primary ID token setting enabled, configure the secondary settings that control the ID token contents in both access and refresh token responses. Specify these settings. | Setting | Description | | --- | --- | | **Token duration in minutes** | The length of time that the ID token is valid for after it’s issued. The period can be from 1 to 720 minutes. The default is 2 minutes. | | **ID Token Audiences** | The intended consumers of the ID token. For example, the target service where you use the ID token, such as https://your\_service.com. | | **Include Standard Claims** | Include the standard claims that contain information about the user, such as the user’s name, profile, phone number, and address. The OpenID Connect specifications define a set of standard claims to be returned in the ID token. | | **Include Custom Permissions** | If your app has specified custom permission, include them in the ID token. | | **Custom Attributes** | If your app has specified custom attributes, include them in the ID token. | 8. Enable an OAuth flow, and configure these settings, as needed.
Configure settings for the client credentials flowSee Configure a Client Credentials Flow
Configure settings for the Authorization Code and Credentials FlowSee Configure a Code and Credentials Flow.
Configure settings for a device flowSee Configure a Device Flow
Configure JSON Web Token (JWT)-based access tokensSee Configure a JWT Bearer Flow
9. To require the app’s client secret in exchange for an access token, select **Require Secret for the Web Server Flow**. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_important.png) Important If the client app can’t keep the client secret confidential and must use the web server flow, deselect **Require Secret for Web Server Flow**. We still generate a client secret for your app, but this setting instructs the web server flow not to require the client\_secret parameter in the access token request. 10. To require the client secret in the authorization request of a refresh token and hybrid refresh token flow, select **Require Secret for Refresh Token Flow**. If you don’t select this option and an app sends the client secret in the authorization request, Salesforce still validates it. You can select this option for web-server based apps that can protect client secrets. But for apps that can’t protect client secrets, such as mobile apps or apps installed on a user’s computer, we recommend against selecting this option. 11. To require PKCE, select **Require Proof Key for Code Exchange (PKCE) extension for Supported Authorization Flows**. This setting requires PKCE for the web server flow, the hybrid web server flow, and the Code and Credentials flow. It also requires PKCE for all variations of the Code and Credentials flow including headless registration, headless passwordless login, and headless identity for guest users. With this setting enabled, any of these flows that don’t implement PKCE are blocked for this external client app. For more information on using PKCE to secure your apps, see [Proof Key for Code Exchange (PKCE) Extension](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_pkce.htm&release=264.0.0&type=5 "To improve the security of your OAuth and authentication provider implementations, use the OAuth 2.0 Proof Key for Code Exchange (PKCE) extension. You can require PKCE at an org-wide level, require it for a specific connected app, and automatically enable it for supported authentication providers."). 12. To get a new refresh token each time the refresh token flow is invoked, select **Enable Refresh Token Rotation**. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_important.png) Important Enabling this setting is a security best practice. With this setting enabled, the old refresh token is automatically invalidated after it’s used, so that each token is used only one time. If someone tries to use a refresh token that’s been rotated out, Salesforce invalidates the current refresh token and any associated access tokens. 13. To get access tokens for users, select **Issue JSON Web Token (JWT)-based access tokens for named users**. 14. After you configure the settings for your external client app, save your changes. - **[Set IP Allowlist Ranges for Refresh Tokens](https://help.salesforce.com/s/articleView?id=xcloud.set_ip_allowlist_for_refresh_tokens.htm&release=264.0.0&type=5)** To improve security and help protect your Salesforce data from unauthorized access, set an IP range to allow refresh tokens. When you turn on Enforce Refresh Token IP Allowlist, only IPs in allowed ranges can complete the OAuth web server flow or the refresh token flow. - **[Limit the Idle Refresh Token TTL in External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.eca_limit_idle_refresh_token_ttl.htm&release=264.0.0&type=5)** For improved security, Salesforce requires a 30-day limit to the idle refresh token TTL (time-to-live). The idle TTL is the amount of time that an OAuth refresh token can be inactive before it expires. When a refresh token expires, the user or app must request a new access token. The idle TTL works as a sliding window: each time the token is used within the 30 day-period, its idle TTL resets. For flows that don't use refresh tokens, this control also caps the access token lifetime at 30 days from the last login date. # Configure the External Client App OAuth Settings Configure the OAuth settings file, which affects the local instance. 1. Create a file called \[ECAPP\_OAUTH\_SETTINGS\].ecaOauth-meta.xml, for example,myecasettings.ecaOauth-meta.xml, in a directory called extlClntAppOauthSettings. This file is theOAuth settings file, which defines the configuration of the external client app. 2. Configure the file with this information.
Field Description
commaSeparatedOauthScopes This field is required. Type: String. The permissions given by the user running the external client app.
customAttribute This field is optional. Type: String. The additional configured attributes to be included as developer defaults. The maximum number accepted is 128. Each custom attribute must have a unique key and must use an available field. For example, assign a key name, such as country, and insert the field $Organization.Country.
externalClientApplication This field is required. Type: String. The name of the external client application header in which these OAuth settings exist.
label This field is required. Type: String. A name for the external client app OAuth settings file.
oauthLink This field is optional. Type: String. Auto-generated unique identifier. This identifier consists of [Organization_ID]:[Oauth_Consumer_ID].
trustedIpRanges

This field is optional. Specifies the ranges of IP addresses that can access the app without requiring the user to authenticate with the external client app. The maximum number of IP ranges is 128. This configuration includes these attributes

  • startIpAddress—This field is required when setting trustedIpRanges. Type: IP Address. The first address in the IP range, inclusive. Required with end address.
  • endIpAddress—This field is required when setting trustedIpRanges. Type: IP Address. The last address in the IP range, inclusive. Required with start address.
  • description—This field is optional. Type: String. A description of the IP range.
This example shows an OAuth settings file. ```markup myeca 10.55.2.0 10.55.2.255 Building 6 10.55.12.0 10.55.12.255 userattribute $User.Country Basic, Web ``` # Configure the External Client App OAuth Settings: Configure ID Token Control This control defines the security parameters for identity tokens, including their lifespan, authorized recipients, and the specific user attributes or permissions included in the data payload. ## Control Name External Client Apps: Configure the External Client App OAuth Settings: Configure ID Token ## Recommended Configuration Configure ID token - Token duration in minutes (2mins) | ID Token Audiences | Include Standard Claims | Include Custom Permissions | Custom Attributes. ## Control Overview This control defines the security parameters for identity tokens, including their lifespan, authorized recipients, and the specific user attributes or permissions included in the data payload. ## Security Risk If Not Configured Without a restricted token duration and defined audience, an identity token remains valid for an excessive period and can be reused by unauthorized third-party applications to gain access to protected resources. ## Threat Scenarios An attacker intercepts a long-lived identity token through a network vulnerability and uses it to impersonate a legitimate user across multiple integrated systems that do not verify the intended audience of the token. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Failing to constrain token attributes and duration allows for persistent unauthorized access and the unintended exposure of internal user permissions and custom profile data to external service providers. ## Higher Risk When Tokens are used to facilitate single sign-on for applications that handle sensitive data or when the tokens contain broad administrative custom permissions. ## Low Risk When If the external application performs its own rigorous validation of the token signature and expiration timestamp regardless of the Salesforce configuration. ## Business and Integration Considerations Setting a very short token duration, (for example, two minutes), requires the external application to have a robust and automated logic for refreshing identity data to prevent user session interruptions. ## Recommended Remediation Go to the OAuth settings of your External Client App, set the token duration to two minutes, specify the authorized audience URLs, and select the minimum necessary claims and attributes. ## Security Health Review Guidance Security Health Review identifies precise identity token configuration as a mandatory standard for so that user identity data is ephemeral, targeted to specific recipients, and limited to the least amount of information required for authentication. #### See Also - [Configure the External Client App OAuth Settings](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_oauth_settings.htm&type=5&language=en_US) # Configure the External Client App OAuth Settings: OAuth Scope Least Privilege Control ECAs allow for highly granular OAuth scopes, which control permissions for the ECA. ## Control Name External Client Apps: Configure the External Client App OAuth Settings: OAuth Scope Least Privilege ## Recommended Configuration OAuth Scopes - OAuth scopes define permissions for the external client app. ## Control Overview ECAs allow for highly granular OAuth scopes, which control permissions for the ECA. Restricting these minimizes the "blast radius." ## Security Risk If Not Configured Failing to restrict OAuth scopes results in over-privileged access, where an external application is granted broader permissions than necessary to function. Compromised apps gain access to sensitive PII unnecessarily. ## Threat Scenarios An attacker who gains control of a token with the `Full` scope can bypass UI restrictions to programmatically delete records, export entire customer databases, or modify system configurations. Additionally, a "token leak" via an insecure client-side implementation allows malicious actors to impersonate the user across any Salesforce API, not just the specific features intended for the external app. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Massive expansion of the blast radius during a credential theft event, potentially turning a minor localized breach into a total company data loss. ## Higher Risk When Apps are assigned "Full Access" by default. If the App is configured for "All users may self-authorize," letting any employee or customer grant broad permissions to unvetted third-party tools. ## Low Risk When Use narrow or Custom Scopes that restrict the token to specific, non-destructive actions. Implementing OAuth 2.0 Policy "Admin approved users are pre-authorized" further reduces risk by making sure that only specific profiles or permission sets can use the app, regardless of the scopes requested. ## Business and Integration Considerations Strictly defining scopes requires deep coordination between developers and architects to map every API call to its required permission, which can increase initial development time. However, this upfront effort prevents integration debt, where a lack of granularity forces you to grant excessive, unrestricted access to simple tools, creating a long-term security liability that is difficult to untangle later. ## Recommended Remediation Review the OAuth Settings of the ECA and select only the specific scopes (for example, api, openid) required for the business function. ## Security Health Review Guidance Security Health Review emphasizes the Principle of Least Privilege. Evaluate app requirements to restrict scopes (for example: "Full Access") that could turn a small breach into a catastrophic data loss event. #### See Also - [Configure the External Client App OAuth Settings](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_oauth_settings.htm&type=5&language=en_US) - [OAuth Tokens and Scopes](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_tokens_scopes.htm&type=5&language=en_US) # Configure the External Client App’s Canvas App Settings and Policies The Canvas plugin for an external client app enables you to integrate a third-party application in Salesforce. Configure the external client app’s Canvas app settings and policies in External Client App Manager. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure Canvas app settings and policies for an external client app: Create, edit, and delete External Client Apps
1. In External Client App Manager, [create an external client app](https://help.salesforce.com/s/articleView?id=xcloud.create_a_local_external_client_app.htm&language=en_US). 2. In the external client app’s settings, click **Canvas App Settings** to expand the section. 3. Select **Enable Canvas**. 4. Specify these settings. | Setting | Description | | --- | --- | | Canvas App URL | The URL that the org uses to communicate with the external app | | Access Method | The method for communicating with the external app | | SAML Initiation Method | Available for selection only if the **Enable SAML**checkbox is selected. You must first [configure the external client app's SAML settings](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_saml.htm&release=264.0.0&type=5 "To integrate a service provider with your Salesforce org, you can use an external client app that implements SAML 2.0 for user authentication. Salesforce supports SAML single sign-on (SSO) when the service provider or the identity provider initiates the flow. To use this option, configure an external client app with SAML 2.0 enabled for your service provider. Define your Salesforce org as the SAML identity provider."). When selected, the SAML initiation method enables users to use automatic authentication into your Canvas app via SAML and authentication into Salesforce via the signed request. | | Lifecycle Class | Sends context information using a custom Apex class. See [Customizing Your App Lifecycle](https://developer.salesforce.com/docs/atlas.en-us.platform_connect.meta/platform_connect/canvas_customizing_app_lifecycle.htm). | | Locations | The targets you want the external app to be surfaced, for example, in a Visualforce page, Lightning Component, or somewhere else. See [Where Canvas Apps Appear](https://developer.salesforce.com/docs/atlas.en-us.platform_connect.meta/platform_connect/canvas_apps_where_they_appear.htm). | | Hide Publisher Header | Hides the publisher header which contains the “What are you working on?” text. This value is only used when the Canvas app appears in the publisher. See [Canvas Apps in the Publisher](https://developer.salesforce.com/docs/atlas.en-us.platform_connect.meta/platform_connect/canvas_apps_in_publisher.htm). | | Hide Publisher Share Button | Hides the publisher Share button. This value is only used when the Canvas app appears in the publisher. | | Create Actions Automatically | Creates a global action for your Canvas app. | 5. Click **Create**. 6. Return to the list of external client apps in External Client App Manager, and then click the external client app that you created. 7. Click **App Policies** or **OAuth Policies** to expand the section. 8. Click **Edit**. You can then edit the App or OAuth policies, or work with custom attributes. For more information, see [Manage External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.manage_external_client_apps.htm&release=264.0.0&type=5 "After creating an external client app and configuring its distribution state, define its specific characteristics."). 9. Save your work. # Configure the External Client App’s Mobile App Settings and Policies The mobile app plugin for an external client app enables mobile-specific features, such as screen lock upon a custom timeout value. Configure the external client app’s mobile app settings and policies in External Client App Manager. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure mobile app settings and policies for an external client app: Create, edit, and delete External Client Apps
1. In External Client App Manager, [create an external client app](https://help.salesforce.com/s/articleView?id=xcloud.create_a_local_external_client_app.htm&language=en_US). 2. In the external client app’s settings, click **Mobile App Settings** to expand the section. 3. Select **Enable Mobile**. 4. To enable screen lock of the app upon timeout, select **Screen lock**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note You configure the timeout value in Step 8. 5. Click **Create**. 6. Return to the list of external client apps in External Client App Manager, and then click the external client app that you created. 7. Click **Mobile App Policies** to expand the section. 8. In the **Lock Screen After** field, select the amount of time after which the mobile app locks and requires the app user to reauthenticate. 9. Save your work. # Configure the External Client App’s Notification Settings With the notifications plugin for an external client app, you can subscribe the mobile app to custom notification types. Enable the notifications plugin, and subscribe the mobile app to notification types in External Client App Manager. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure the notifications plugin for external client apps: Create, edit, and delete External Client Apps
Before you begin, make sure that the custom notification types you want to subscribe to are enabled for the mobile delivery channel. You can use Notification Builder in Setup to configure a notification type for the mobile delivery channel. See [Manage Notification Delivery Settings](https://help.salesforce.com/s/articleView?id=platform.notif_builder_delivery_settings.htm&language=en_US). 1. In External Client App Manager, [create an external client app](https://help.salesforce.com/s/articleView?id=xcloud.create_a_local_external_client_app.htm&language=en_US). 2. [Enable the OAuth plugin](https://help.salesforce.com/s/articleView?id=xcloud.enable_oauth_plugin.htm&language=en_US) for the external client app. Enabling OAuth is required for sending notifications. 3. In the external client app’s settings, click **Notification Settings** to expand the section. 4. Select **Enable Notifications**. 5. In the list under Notification Subscriptions, subscribe to notification types by selecting the toggle next to the title of the notification type. 6. To send the notification type as a push notification on the mobile device, select **Send as a push notification**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note To send a notification type as a push notification, you must also configure the [push notification plugin](https://help.salesforce.com/s/articleView?id=xcloud.enable_push_notification_plugin.htm&release=264.0.0&type=5 "The push notification plugin for an external client app enables a mobile app’s push notifications for an Android or iOS device."). 7. After you subscribe to and configure the relevant notification types, click **Create**. # Configure the External Client App’s Push Notification Settings and Policies for Android To set up push notifications for Android versions of your mobile app, collect information from a Google Firebase project. Then, configure the external client app’s push notification settings and policies in External Client App Manager. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure push notifications for an external client app: Create, edit, and delete External Client Apps
If you have an existing Firebase project associated with your app, log in to the [Google Cloud Console](https://console.developers.google.com/apis/dashboard?project=_) and select the project for your app. On the Enabled APIs & Services page, confirm that the Firebase Cloud Messaging API is enabled for the project. 1. If you have an existing Firebase project associated with your app, open the existing project. If not, create a project for your app in the [Google Firebase Console](https://console.firebase.google.com/). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_important.png) Important If you previously set up notifications for your Android app, make sure that you proceed with the next steps by using the existing Firebase project associated with your app. To avoid any disruption in your app’s push notifications, confirm that the project ID in the Firebase project matches the project ID your app’s existing Firebase config file (google-services.json). 2. In the Firebase project, click the cog icon next to Project Overview, and then click **Project settings**. 3. Collect the Firebase project ID. 1. Click the **General** tab. 2. Record the value in the **Project ID** field. You need the project ID for a later step. 4. Generate an Admin SDK private key for your Firebase service account. 1. Select the **Service accounts** tab, and then click **Generate new private key**. 2. Download the JSON file that contains the private key. Note the location of the downloaded file because you need it later. The file name format for this private key is similar to Pc-api-1234567890123456789-123-firebase-adminsdk-a1bcd-a1234bc5678.json. 5. In External Client App Manager, [create an external client app](https://help.salesforce.com/s/articleView?id=xcloud.create_a_local_external_client_app.htm&language=en_US). 6. [Enable the OAuth plugin](https://help.salesforce.com/s/articleView?id=xcloud.enable_oauth_plugin.htm&language=en_US) for the external client app. Enabling OAuth is required for sending push notifications. 7. In the external client app’s settings, click **Push Notification Settings** to expand the section. Then, complete these fields. 1. Select **Enable Push**. 2. In the Mobile Platform field, select **Android**. 3. In the Firebase Admin SDK Private Key field, upload the JSON file that contains the private key that you generated for your Firebase service account. 4. In the Firebase Project ID field, enter the project ID that you collected from the Firebase project. 8. Click **Create**. 9. To optionally configure push notifications to display the full notification title and body text, update the external client app’s push notification policies. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note By default, standard notifications display a generic message and custom notifications display only the notification title. 1. Return to the list of external client apps in External Client App Manager, and then click the external client app that you created. 2. Click **Push Notification Policies** to expand the section. 3. Select **Display full content push notifications**. 4. Save your work. # Configure the External Client App’s Push Notification Settings and Policies for iOS To set up push notifications for iOS versions of your mobile app, collect information from Apple App Store Connect and from your Apple Developer account. Then, configure the external client app’s push notification settings and policies in External Client App Manager. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure push notifications for an external client app: Create, edit, and delete External Client Apps
1. In App Store Connect, record your iOS app’s Bundle ID. To configure the required authentication for iOS push notifications, you submit either a private key (.p8 file) or a TLS certificate (.p12 file) in External Client App Manager. To configure a private key (.p8 file), continue to Step 2 and skip Step 3. To configure a TLS certificate (.p12 file), skip Step 2 and continue to Step 3. 2. To configure push notifications with a private key (.p8 file), collect this information. 1. Generate and download a private key (.p8 file) with Apple Push Notification service (APNs) enabled. See [Create a private key to access a service](https://developer.apple.com/help/account/keys/create-a-private-key) in Apple Developer documentation. 2. After you create the key, record the key identifier. See [Get a key identifier](https://developer.apple.com/help/account/keys/get-a-key-identifier/) in Apple Developer documentation. 3. In the membership details of your Apple Developer account, record the Team ID. 3. To configure push notifications with a TLS certificate (.p12 file), generate and export a TLS certificate with Apple Push Notification service (APNs) enabled. See [Communicate with APNs using a TLS certificate](https://developer.apple.com/help/account/capabilities/communicate-with-apns-using-a-tls-certificate/) in Apple Developer documentation. 4. In External Client App Manager, [create an external client app](https://help.salesforce.com/s/articleView?id=xcloud.create_a_local_external_client_app.htm&language=en_US). 5. [Enable the OAuth plugin](https://help.salesforce.com/s/articleView?id=xcloud.enable_oauth_plugin.htm&language=en_US) for the external client app. Enabling OAuth is required for sending push notifications. 6. In the external client app’s settings, click **Push Notification Settings** to expand the section. Then, complete these fields. 1. Select **Enable Push**. 2. In the Mobile Platform field, select **iOS**. 3. In the Environment field, select **Production** or **Sandbox** to indicate the Apple Push Notification service environment. 4. In the App Bundle ID field, enter the Bundle ID that you recorded in Step 1. To configure a private key (.p8 file), continue to Step 7 and skip Step 8. To configure a TLS certificate (.p12 file), skip Step 7 and continue to Step 8. 7. To configure push notifications with a private key (.p8 file), submit this information. 1. In the Signing Key field, upload the key with APNs enabled that you downloaded in step 2. 2. In the Key Identifier field, enter the key identifier that you recorded in step 2. 3. In the Team ID field, enter the Team ID that you recorded in step 2. 8. To configure push notifications with a TLS certificate (.p12 file), submit this information. 1. In the Apple Push Notification Service Certificate field, upload the TLS certificate with APNs enabled that you exported in step 3. 2. In the **Certificate Password** field, enter the password for the TLS certificate. 9. Click **Create**. 10. To optionally configure push notifications to display the full notification title and body text, update the external client app’s push notification policies. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note By default, standard notifications display a generic message and custom notifications display only the notification title. 1. Return to the list of external client apps in External Client App Manager, and then click the external client app that you created. 2. Click **Push Notification Policies** to expand the section. 3. Select **Display full content push notifications**. 4. Save your work. # Configure the External Client App's SAML 2.0 Settings and Policies To integrate a service provider with your Salesforce org, you can use an external client app that implements SAML 2.0 for user authentication. Salesforce supports SAML single sign-on (SSO) when the service provider or the identity provider initiates the flow. To use this option, configure an external client app with SAML 2.0 enabled for your service provider. Define your Salesforce org as the SAML identity provider.
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
User Permissions Needed
To configure External Client Apps SAML settings Create, edit, and delete External Client Apps
For example, suppose you build a custom Your Benefits web app that implements SAML 2.0 for user authentication. You want your users to be able to log in to this app with their Salesforce credentials. To set up this SSO flow, configure the Your Benefits web app as an external client app. Define your Salesforce org as the SAML identity provider for the external client app. Your users can now log in to the Your Benefits web app with their Salesforce credentials. 1. Complete the [prerequisites for defining service providers](https://help.salesforce.com/s/articleView?id=xcloud.service_provider_prerequisites.htm&type=5&language=en_US). 2. Create your external client app, and complete its [basic information](https://help.salesforce.com/s/articleView?id=xcloud.create_a_local_external_client_app.htm&release=264.0.0&type=5 "Create an external client app in App Manager. Local external client apps are available only on the org where you create them. Packageable external client apps can be packaged for distribution to other orgs."). 3. In the Web App (Enable SAML Settings) section, select **Enable SAML**. 4. Enter the required information, which is available from your service provider. Entity ID The globally unique ID of the service provider. If you’re accessing multiple apps from your service provider, define the service provider. Then use the `RelayState` parameter to append the URL values to direct the user to the correct app after signing in. ACS URL The URL for the Assertion Consumer Service. This is the service provider’s endpoint that receives SAML assertions. Subject Type Specifies which field defines the user’s identity for the app. Options include the user’s username, federation ID, 15-character user ID, an algorithmically calculated persistent ID, or a custom attribute. A custom attribute can be any custom field added to the User object in the org, as long as it’s one of these data types: Email, Text, URL, or Formula (with Text Return Type). If you select **Custom Attribute** for the subject type, Salesforce displays a Custom Attribute field with a list of the available User object custom fields in the org. Name ID Format Specifies the format attribute sent in SAML messages. The default selection is **Unspecified**. Depending on your SAML service provider, you can set the format to email address, persistent, or transient. If you set the format to email address, your identity provider describes org users and Experience cloud users differently in SAML messages. For org users, SAML messages include only the user’s email address. This sample shows the SAML message sent when an org user logs in, with the NameID Format set to `emailAddress`. ``` sandy@salesforce.com ``` For Experience Cloud users, SAML messages append the org ID to the user’s email address. This sample shows the SAML message sent when an Experience Cloud user logs in, with the NameID Format set to `emailAddress`. ``` 00DR00000008fLq@sandy@play-test.com ``` If your service provider accepts only the email address and not the org ID, create a custom attribute for email address. See [Configure a Custom Attribute for External Client Apps](https://help.salesforce.com/s/articleView?id=xcloud.configure_custom_attributes_for_external_client_apps.htm&release=264.0.0&type=5 "Create custom attributes to capture useful and unique information. With custom attributes, you can get more information about a user’s identity such as an address or job title. Configure custom attributes for your external client app in the Policies tab."). Issuer By default, your org’s My Domain login URL is the standard issuer for your identity provider. If your SAML service provider requires a different value, specify it here. 5. To automatically log users out of the external client app service provider when they log out of Salesforce: 1. Select **Enable Single Logout**. 2. Enter the single logout endpoint of the service provider. Salesforce sends logout requests to this URL when users log out of Salesforce. The single logout URL must be an absolute URL that starts with https://. 3. Provide your service provider with the Salesforce IdP SLO endpoint. The endpoint is listed in your SAML Login Information as the Single Logout Endpoint. It’s also listed in the SAML Metadata file as the Discovery Endpoint. The format for the endpoint is https://MyDomainName.my.salesforce.com/services/auth/idp/saml2/logout, where MyDomainName is your org’s My Domain name. 4. Select the HTTP binding type for single logout provided by your service provider. 6. If your service provider requires a unique certificate to validate SAML requests from Salesforce, upload the certificate from your system. Otherwise, leave this setting as `Default IdP Certificate`. The certificate size is limited to 4 KB. 7. If the service provider gave you a security certificate, select **Verify Request Signatures**. Browse your system for the certificate and upload it. The certificate is necessary only if you plan to initiate logging in to Salesforce from the service provider and the service provider signs its SAML requests. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_important.png) Important If you upload a certificate, all SAML requests must be signed. If no certificate is uploaded, all SAML requests are accepted. 8. To encrypt the response, select **Encrypt SAML Response** to browse your system for the certificate and upload it. Select an encryption method for encrypting the assertion. Valid encryption algorithm values are `AES-128` (128-bit key) and `AES-256` (256-bit key). 9. For **Signing Algorithm for SAML Messages**, select **SHA1** or **SHA256** to secure SAML messages sent from your Salesforce org. As the identity provider, Salesforce applies the selected algorithm to its SAML requests and responses. The selected signing algorithm is applied to single sign-on and single logout messages from your org to the service provider. 10. After you configure all settings for your external client app, save your work. # Configure the License Utilization Alerts Flow for Permission Set Licenses Creating alerts for permission set licenses involves configuring the License Utilization Alerts flow to define which user licenses to monitor and the percentage thresholds that trigger an alert. You must create separate flows for user license and permission set licences. See [Configure the License Utilization Alerts Flow for User Licenses](https://help.salesforce.com/s/articleView?id=xcloud.wallet_license_utilization_alerts_user.htm&release=264.0.0&type=5 "Creating alerts for user licenses involves configuring the License Utilization Alerts flow. Define which user licenses to monitor and the percentage thresholds that trigger an alert."). ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/images/icon_tip.png) Tip You can save the flow at any time so you don’t lose your work. When you save the flow, it becomes version 1 but isn’t yet activated so you can continue modifying this version. Give it a descriptive name, for example, “Alerts for Permission Set Licenses.” 1. From the App Launcher, select **Automations**. 2. From the Flows tab, click **New**, then enter License Utilization in Search to locate and select the License Utilization Alerts template. 3. (Optional) Change the schedule when the flow runs. 4. Click the Assign License Values element to create a list of permission set licenses to monitor. Change the default assignment for the Salesforce license to a permission set license, and then optionally add more licenses. 1. Click **Add Assignment**. 2. For Variable, enter CollectLicenses, and for Operator, select **Add**. 3. For Value, type or copy the name of the permission set license as it appears in License Utilization. 4. Repeat until you added all required permission set licenses. ![Assign License Values element showing multiple permission set licenses added to the CollectLicenses variable.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-lu-alerts-assign-psl.png) If you accidentally mix user licenses and permission set licenses when assigning the license values, the flow only honors the license type indicated in the Create License Utilization Alert element. The flow silently ignores licenses that don’t match the indicated license type. 5. Click the Assign Thresholds element. The default threshold values are 80% and 90%. If the default values work for you, go to the next step. If not, modify or add threshold values. To add a threshold value, click **Add Assignment**.
VariableSetThresholdValue
OperatorAdd
ValueWhole number (1 to 100)
![Assign Thresholds element showing the default utilization thresholds of 80 and 90 percent. You can add or update the default values using the SetThresholdValue variable.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-lu-alerts-assign-thresholds.png) 6. Click the Create License Utilization Alert element. For License Type, delete the current value that collects user licenses and update it to `LicenseType_PermissionSetLicense`. ![Create License Utilization Alert element displaying License Type set to LicenseType\_PermissionSetLicense.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-lu-alerts-psl-license-type.png) 7. Save the flow and give it a descriptive name. 8. Activate the flow. Next: - (Optional) [Configure the License Utilization Alerts Flow for User Licenses](https://help.salesforce.com/s/articleView?id=xcloud.wallet_license_utilization_alerts_user.htm&release=264.0.0&type=5 "Creating alerts for user licenses involves configuring the License Utilization Alerts flow. Define which user licenses to monitor and the percentage thresholds that trigger an alert."). - [Create a License Utilization Notifications Flow](https://help.salesforce.com/s/articleView?id=xcloud.wallet_license_utilization_alerts_notifications.htm&release=264.0.0&type=5 "After you configured which licenses to monitor and defined the thresholds to trigger alerts, you can create the flow for alert notifications. You can send notifications to members of a profile, permission set, or public group. You can also create separate notification flows for each member group."). #### See Also - [_Salesforce Help_: Schedule-Triggered Flows](https://help.salesforce.com/s/articleView?id=platform.flow_concepts_trigger_schedule.htm&language=en_US) - [_Object Reference_: TenantConsumptionAlert](https://developer.salesforce.com/docs/atlas.en-us.sfFieldRef.meta/sfFieldRef/salesforce_field_reference_TenantConsumptionAlert.htm) # Configure the License Utilization Alerts Flow for User Licenses Creating alerts for user licenses involves configuring the License Utilization Alerts flow. Define which user licenses to monitor and the percentage thresholds that trigger an alert. Before you begin: - Do you have your list of user license names ready to go? - Did you copy the names directly from License Utilization? You must create separate flows for user license and permission set licenses. See [Configure the License Utilization Alerts Flow for Permission Set Licenses](https://help.salesforce.com/s/articleView?id=xcloud.wallet_license_utilization_alerts_psl.htm&release=264.0.0&type=5 "Creating alerts for permission set licenses involves configuring the License Utilization Alerts flow to define which user licenses to monitor and the percentage thresholds that trigger an alert."). The flow only honors the license type that you indicate in the Create License Utilization Alert element. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/images/icon_tip.png) Tip You can save the flow at any time so you don’t lose your work. When you save the flow, it becomes version 1 but isn’t yet activated so you can continue modifying this version. Give it a descriptive name, for example, “Alerts for User Licenses.” 1. From the App Launcher, select **Automations**. 2. From the Flows tab, click **New**, then enter License Utilization in Search to locate and select the License Utilization Alerts template. 3. (Optional) Change the schedule when the flow runs. 4. Click the Assign License Values element to create a list of user licenses to monitor. Keep or change the default assignment for the Salesforce license, or add more licenses. 1. Click **Add Assignment**. 2. For Variable, enter CollectLicenses, and for Operator, select **Add**. 3. For Value, type or copy the name of the user license as it appears in License Utilization. 4. Repeat until you added all required user licenses. ![Assign License Values element showing multiple user licenses added to the CollectLicenses variable.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-lu-alerts-assign-user-licenses.png) If you accidentally mix user licenses and permission set licenses when assigning the license values, the flow only honors the license type indicated in the Create License Utilization Alert element in step 6. The flow silently ignores licenses that don’t match the indicated license type. 5. Click the Assign Thresholds element. The default threshold values are 80% and 90%. If the default values work for you, go to the next step. If not, modify or add threshold values. To add a threshold value, click **Add Assignment**.
VariableSetThresholdValue
OperatorAdd
ValueWhole number (1 to 100)
![Assign Thresholds element showing the default utilization thresholds of 80 and 90 percent. You can add or update the default values by using the SetThresholdValue variable.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-lu-alerts-assign-thresholds.png) 6. Click the Create License Utilization Alert element. Notice that for License Type is already collecting user licenses, so no modifications are required. ![The Create License Utilization Alert element showing that the License Type is set to collect user licenses.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-lu-alerts-user-license-type.png) 7. Save the flow and give it a descriptive name. 8. Activate the flow. Next: - (Optional) [Configure the License Utilization Alerts Flow for Permission Set Licenses](https://help.salesforce.com/s/articleView?id=xcloud.wallet_license_utilization_alerts_psl.htm&release=264.0.0&type=5 "Creating alerts for permission set licenses involves configuring the License Utilization Alerts flow to define which user licenses to monitor and the percentage thresholds that trigger an alert."). - [Create a License Utilization Notifications Flow](https://help.salesforce.com/s/articleView?id=xcloud.wallet_license_utilization_alerts_notifications.htm&release=264.0.0&type=5 "After you configured which licenses to monitor and defined the thresholds to trigger alerts, you can create the flow for alert notifications. You can send notifications to members of a profile, permission set, or public group. You can also create separate notification flows for each member group."). #### See Also - [_Salesforce Help_: Schedule-Triggered Flows](https://help.salesforce.com/s/articleView?id=platform.flow_concepts_trigger_schedule.htm&language=en_US) - [_Object Reference_: TenantConsumptionAlert](https://developer.salesforce.com/docs/atlas.en-us.sfFieldRef.meta/sfFieldRef/salesforce_field_reference_TenantConsumptionAlert.htm) # Configure the MFA Verification Methods Available to Users for Salesforce Orgs Salesforce supports multiple MFA verification methods so users can verify their identity during login or device activation. ## Control Name Multi-Factor Authentication (MFA) Verification Methods Configuration ## Recommended Configuration Enable phishing-resistant MFA verification methods, prioritizing built-in authenticators, hardware security keys, and certificate-based authentication. ## Control Overview Salesforce supports multiple MFA verification methods to allow users to verify their identity during login or device activation. These methods range from phishing-resistant authenticators, such as biometrics and hardware security keys, to weaker methods such as SMS-based passcodes. Selecting strong verification methods significantly reduces the risk of credential theft and social engineering attacks. ## Security Risk If Not Configured If strong MFA verification methods are not enabled, users can rely on weaker or less phishing-resistant options. This increases susceptibility to phishing, credential replay, SIM-swapping, and social engineering attacks that can lead to unauthorized access. ## Threat Scenarios Phishing attacks capturing one-time passcodes, SIM swap attacks targeting SMS-based MFA, session hijacking due to lack of origin-bound authentication, impersonation of users or systems without certificate validation. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Risk severity depends on user type (internal vs external), access privilege levels, exposure of Experience Cloud sites, and whether authentication methods are phishing-resistant. ## Higher Risk When Only SMS-based MFA is available, phishing-resistant authenticators are not enabled, hardware security keys are not supported, or system-to-system authentication lacks certificate-based validation. ## Low Risk When This control can be considered low risk when implementing one or more of the following: - Built-In Authenticators: Device-based biometric authenticators such as Touch ID, Face ID, or Windows Hello are enabled. - Hardware Security Keys: WebAuthn (FIDO2) or U2F security keys are supported and adopted by users. - Certificate-Based Authentication: Mutual certificate validation is enforced for secure user or system authentication. - Limited SMS Usage: SMS-based MFA is restricted to external users only and supplemented with additional safeguards where possible. - Require User Verification During MFA Verification: During MFA verification, user verification is configured to be enforced to verify the user. ## Business and Integration Considerations Customers should consider user experience, device compatibility, external user populations, and regulatory requirements when selecting MFA methods. External-facing Experience Cloud sites can require phased adoption of stronger authentication methods. ## Recommended Remediation Enable built-in authenticators and hardware security keys, configure certificate-based authentication where applicable, limit or phase out SMS-based MFA, and regularly review MFA method adoption and usage. ## Security Health Review Guidance Security Health Review evaluates MFA verification methods to help customers adopt phishing-resistant authentication, reduce identity-based attack risk, and align with Salesforce-recommended security baselines and Zero Trust principles. #### See Also - [Enable Passkeys for Identity Verification in Salesforce Orgs](https://help.salesforce.com/s/articleView?id=xcloud.security_enable_builtin_authenticator.htm&release=264.0.0&type=5 "With passkeys, users can log in and complete multi-factor authentication (MFA) with Touch ID or Face ID, Windows Hello, a device password, or password managers. With MFA enforcement, Salesforce automatically enables passkeys (also known as built-in authenticators) as an available verification method for all employee users. When MFA is enforced in your org, you can't turn off this setting. If MFA isn't enforced yet in your org, turn on passkeys to test them. Passkeys satisfy the phishing-resistant MFA requirement for privileged users. Users can also use security keys to complete other identity verification challenges, such as device activation.") - [Security Keys (Passkeys) for MFA](https://help.salesforce.com/s/articleView?id=xcloud.mfa_supported_verification_methods_securitykey.htm&release=264.0.0&type=5 "Security keys are physical passkeys. They're small, USB or NFC devices that are easy to use for multi-factor authentication (MFA) logins because there's nothing to install and no codes to enter. This type of method is a great option if users don't have a mobile device or if phones aren't allowed where your users work (such as a PCI-compliant service center). Security keys require a supported browser to act as an intermediary between the key and your Salesforce product. Popular security keys include the YubiKey from Yubico and the Titan Security Key from Google. Security keys satisfy the phishing-resistant MFA requirement for privileged users.") - [Use SMS as an MFA Verification Method for External Users](https://help.salesforce.com/s/articleView?id=xcloud.security_mfa_sms_for_external_users.htm&release=264.0.0&type=5 "If you enable multi-factor authentication (MFA) for your customer or partner Experience Cloud sites, external users can log in using one-time passcodes delivered via SMS text messages. Users need only a verified mobile number and access to their device when they log in. This option is available for external users only. External users can also verify their identity with other supported MFA verification methods such as Salesforce Authenticator built-in authenticators, security keys, and third-party authenticator apps.") - [Help Users Register MFA Verification Methods for Direct Login](https://help.salesforce.com/s/articleView?id=xcloud.security_register_verification_methods.htm&release=264.0.0&type=5 "Multi-factor authentication (MFA) is required to access production and sandbox orgs. To log in, users must have at least one registered identity verification method that they provide in addition to their username and password. If they haven’t set up a verification method, they’re prompted to register one for MFA when they log in. The registration process connects a verification method to the user’s Salesforce account. Each user must complete this step themselves — Salesforce admins can’t do it for them. But you can head off confusion and support tickets but making sure your users understand what they must do.") # Configure the MFA Verification Methods Available to Your Users for Salesforce Orgs Salesforce supports four identity verification methods for multi-factor authentication (MFA) and device activation: built-in authenticators, physical security keys, Salesforce Authenticator, and third-party authenticator apps. As a security best practice, require users to use phishing-resistant methods: built-in authenticators or security keys. In orgs created before Summer ’25, Salesforce Authenticator and third-party apps are automatically available to users, but a Salesforce admin must enable the options to use passkeys (built-in authenticators and physical security keys). In orgs created in Summer ’25 and later, all verification methods are allowed by default. For external users only, you can allow the use of one-time passcodes delivered via SMS text messages. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: all editions
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important Salesforce enforces MFA requirements in the summer of 2026. See these articles for more information and detailed rollout timelines. - [Prepare for MFA Enforcement for All Employee Users](https://help.salesforce.com/s/articleView?id=005321561&type=1&language=en_US). - [Prepare for Phishing-Resistant MFA Enforcement for Privileged Users including Admins](https://help.salesforce.com/s/articleView?id=005321563&type=1&language=en_US). - **[Enable Passkeys for Identity Verification in Salesforce Orgs](https://help.salesforce.com/s/articleView?id=xcloud.security_enable_builtin_authenticator.htm&release=264.0.0&type=5)** With passkeys, users can log in and complete multi-factor authentication (MFA) with Touch ID or Face ID, Windows Hello, a device password, or password managers. With MFA enforcement, Salesforce automatically enables passkeys (also known as built-in authenticators) as an available verification method for all employee users. When MFA is enforced in your org, you can't turn off this setting. If MFA isn't enforced yet in your org, turn on passkeys to test them. Passkeys satisfy the phishing-resistant MFA requirement for privileged users. Users can also use security keys to complete other identity verification challenges, such as device activation. - **[Enable Security Keys for Identity Verification in Salesforce Orgs](https://help.salesforce.com/s/articleView?id=xcloud.security_u2f_enable.htm&release=264.0.0&type=5)** Security keys are small physical devices, such as YubiKeys or Titan keys, that users can use to set up passkeys for secure multi-factor authentication (MFA). With MFA enforcement, Salesforce automatically enables security keys as an available verification method for all employee users. When MFA is enforced in your org, you can't turn off this setting. If MFA isn't enforced yet in your org, turn on security keys to test them. Security keys satisfy the phishing-resistant MFA requirement for users with privileged permissions. Users can also use security keys to complete other identity verification challenges, such as device activation. - **[Use SMS as an MFA Verification Method for External Users](https://help.salesforce.com/s/articleView?id=xcloud.security_mfa_sms_for_external_users.htm&release=264.0.0&type=5)** If you enable multi-factor authentication (MFA) for your customer or partner Experience Cloud sites, external users can log in using one-time passcodes delivered via SMS text messages. Users need only a verified mobile number and access to their device when they log in. This option is available for external users only. External users can also verify their identity with other supported MFA verification methods such as Salesforce Authenticator built-in authenticators, security keys, and third-party authenticator apps. #### See Also - [Troubleshoot Passkey Issues](https://help.salesforce.com/s/articleView?id=xcloud.mfa_supported_verification_methods_bia.htm&release=264.0.0&type=5 "When employee users log in and register for multi-factor authentication (MFA), passkeys are the default option. Identify and resolve issues with passkey prompts, setup, login, and more.") - [Security Keys (Passkeys) for MFA](https://help.salesforce.com/s/articleView?id=xcloud.mfa_supported_verification_methods_securitykey.htm&release=264.0.0&type=5 "Security keys are physical passkeys. They're small, USB or NFC devices that are easy to use for multi-factor authentication (MFA) logins because there's nothing to install and no codes to enter. This type of method is a great option if users don't have a mobile device or if phones aren't allowed where your users work (such as a PCI-compliant service center). Security keys require a supported browser to act as an intermediary between the key and your Salesforce product. Popular security keys include the YubiKey from Yubico and the Titan Security Key from Google. Security keys satisfy the phishing-resistant MFA requirement for privileged users.") - [MFA Verification Methods for Direct Salesforce Login](https://help.salesforce.com/s/articleView?id=xcloud.mfa_supported_verification_methods.htm&release=264.0.0&type=5 "The multi-factor authentication (MFA) login process requires users to provide an identity verification method in addition to their username and password. Salesforce MFA functionality supports several types of verification methods, including passkeys (built-in authenticators and security keys) and authenticator apps. You can control which methods are available to your users.") # Configure the Objects Displayed in a Customer Story (Managed Package) For the managed package runtime, configure **Story Object Configuration** when adding a Customer Story to a new page layout. For example, create new object configurations for the Opportunity object. To import standard customer story configuration settings from Static Resources in your org, see ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). [Import Customer Story Configuration Settings (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_import_customer_story_configuration_settings.htm&release=264.0.0&type=5 "For the managed package runtime, before updating a Customer Story Object Configuration for a new Customer Story, you can import the standard Customer Story Object Configuration from Static Resources. Download as a JSON file to upload to an object's home page."). 1. Navigate to Setup > Custom Settings in your org, and click **Story Object Configuration**. 2. Select **Manage**. 3. Select **New**. 4. Fill out the Story Object form. For example, for an Opportunity, enter the following data: - **Name**: Opportunity\_Event - **Detail Fields**: Description - **Parent Object Name**: Opportunity - **Has Owner**: checked - **Story Object Lookup Field**: WhatId - **Story Object Name**: Event - **Story Object Sort Field**: StartDateTime - **Summary Fields**: Title:Subject,Title\_Highlight:Type,Subtitle:Location 5. Click **Save**. 6. Click **Back to List**. 7. Repeat Steps 1-6 for **Opportunity\_Note** and **Opportunity\_Task** using the values below: - **Name**: Opportunity\_Note - **Detail Fields**: Body - **Parent Object Name**: Opportunity - **Has Owner**: checked - **Story Object Lookup Field**: ParentId - **Story Object Name**: Note - **Story Object Sort Field**: LastModifiedDate - **Summary Fields**: Title:Title - **Name**: Opportunity\_Task - **Detail Fields**: Description - **Parent Object Name**: Opportunity - **Has Owner**: checked - **Story Object Lookup Field**: WhatId - **Story Object Name**: Task - **Story Object Sort Field**: ActivityDate - **Summary Fields: Title**:Subject,Title\_Highlight:Status,Subtitle:Priority,Type:Type - **[Customer Story Configuration (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_customer_story_configuration.htm&release=264.0.0&type=5)** For the managed package runtime, the following tables describe the settings you can configure for customer story objects. - **[Import Customer Story Configuration Settings (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_import_customer_story_configuration_settings.htm&release=264.0.0&type=5)** For the managed package runtime, before updating a Customer Story Object Configuration for a new Customer Story, you can import the standard Customer Story Object Configuration from Static Resources. Download as a JSON file to upload to an object's home page. # Configure the Output Parameter for the Get Eligible Program Rebate Types Flow Action in Flow Builder The Get Eligible Rebate Types flow action has two output parameters, Resultant Rebate Types for API and Resultant Rebate Types for Flow. Use the Resultant Rebate Types for API parameter for API calls and the Resultant Rebate Types for Flow parameter when creating a flow with the GetEligibleRebateTypes invocable action. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
User Permissions Needed
To create a flow Rebate Management Admin permission set, Manage Flows
1. From Setup, in the Quick Find box, enter Flows and then select **Flows**. 2. Click **New Flow**. 3. Select a flow type and then click **Create**. 4. Select the Freeform layout and then drag the Action element onto the canvas. 5. In the Action field in the New Action dialog, select the Get Eligible Program Rebate Types action and specify these details. | Field | Description | | --- | --- | | Label | The name for the action. | | API Name | The API name for the action. | | Reference ID | The input collection variable. Select `{!ReferenceObjectIDs}`. | | Limit | The limit for the eligible rebate type results. | | Offset | The offset for the eligible rebate type results. | | Applied Rebate Types Limit | The limit for the applied rebate types results. | | Applied Rebate Types Offset Input | The offset for the applied rebate types results. | | Manually assign variables | Select the checkbox to manually assign the output variables. | 6. In the Resultant Rebate Types for Flow field, click **New Resource**. 7. In the New Resource dialog, specify these details. | Field | Value | | --- | --- | | Resource Type | Variable. | | API Name | Specify an API name for the variable. | | Data Type | Apex-Defined. | | Apex Class | ConnectApi\_\_EligibleProgramRebateTypesOutput. | ![Add apex-defined output parameter](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/channel_revenue_mgmt/images/rebates_output_parameter_ia.png) 8. Select the **Available for output** checkbox and then click **Done**. 9. In the New Action dialog, click **Done**. 10. Add other elements as required to the flow and save your work. # Configure the Procedure Plan for Pricing Associate the pricing procedure with a procedure plan and activate it so that pricing runs during order capture. ### Required Editions

View supported editions

1. From Setup, navigate to **Procedure Plan** | **Procedure Plan Definitions** | **New**. 2. Enter the procedure plan details. - Title: Pricing - Process Type: Order Capture (or MACGOrderCapture) - Primary Object: Order (Order) - Context Definition: AdvOrderSalesTxnContext\_\_stdctx - DefaultReadContextMapping and DefaultSaveContextMapping: OrderEntitiesMapping 3. Add a procedure plan section. - Name: Pricing, Section Type: Pricing Procedure - Phase: Pricing, Resolution Type: Default - ReadContextMapping and SaveContextMapping: OrderEntitiesMapping - Procedure: Select Retail List Price Procedure 4. Click **Save** and activate the procedure plan definition version (IsActive = true). For more information, see [Penny Perfect Pricing](https://help.salesforce.com/s/articleView?id=xcloud.ppp_parent.htm&type=5&language=en_US). # Configure the Product Transfer Action for Inventory Search Define the types of actions that users can perform on search results. Create action configurations to help users launch Flow, Lightning Web Component, or Omniscript-based actions. For your inventory search experience, help users transfer products by creating an action configuration with the prebuilt Product Transfer lightning web component. The Product Transfer lightning web component is a workflow that helps users transfer serialized and non-serialized products across inventory locations. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To configure the searchable object:

Use Criteria-Based Search and Filter system permission

AND

Manage Inventory Search system permission

1. From Setup, in the Quick Find box, enter Criteria-Based Search and Filter, and then select **Criteria-Based Search and Filter**. 2. On the Action Configuration tab, click **New**. 3. Enter a name for the action. The name appears on the button that users click to launch the action in the search results page. The API name is automatically populated. The Action Scope field is set to Global by default. 4. For Action Type, select **LightningWebComponent**. 5. For Action Reference, select **Product Transfer**. 6. Enter a description. 7. Save your changes. You select your action configuration in the search criteria configuration that you create for Inventory Search. #### See Also - [Create a Search Action](https://help.salesforce.com/s/articleView?id=ind.criteria_based_search_filter_actions_create.htm&type=5&language=en_US) # Configure the Push Notification Plugin The push notification plugin for an external client app enables a mobile app’s push notifications for an Android or iOS device. - **[Configure the External Client App’s Push Notification Settings and Policies for Android](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_push_notifications_android.htm&release=264.0.0&type=5)** To set up push notifications for Android versions of your mobile app, collect information from a Google Firebase project. Then, configure the external client app’s push notification settings and policies in External Client App Manager. - **[Configure the External Client App’s Push Notification Settings and Policies for iOS](https://help.salesforce.com/s/articleView?id=xcloud.configure_external_client_app_push_notifications_ios.htm&release=264.0.0&type=5)** To set up push notifications for iOS versions of your mobile app, collect information from Apple App Store Connect and from your Apple Developer account. Then, configure the external client app’s push notification settings and policies in External Client App Manager. # Configure the Salesforce CDN for Salesforce CMS Use the Salesforce content delivery network (CDN) to serve Salesforce CMS content on your sites, send enhanced emails, and serve custom applications. Set a cache duration for CMS content served in Salesforce CDN channels and configure a domain that links content from your public channel to the CDN. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create a channel in the Digital Experiences app:

Modify All Data

OR

Create CMS Workspaces and Channels

To manage channel settings: A CMS workspace contributor role of content admin
First, follow these steps to [Serve Your Experience Cloud Site with the Salesforce Content Delivery Network (CDN)](https://help.salesforce.com/s/articleView?id=platform.domain_mgmt_salesforce_cdn.htm&type=5&language=en_US). Then create a public CMS channel. To configure Salesforce CDN and link your domain to a public CMS channel so the Salesforce CDN can serve the content, take these steps. 1. To link your domain to a public CMS channel so the Salesforce CDN can serve the content, in Lightning Experience, from the App Launcher, open the Digital Experiences app (previously named Salesforce CMS). 2. To open the CMS Channels tab, click ![down arrow image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_down_arrow.png) (1), then click **CMS Channels** (2). ![The Digital Experience Home tab is highlighted. First select the down arrow to show the menu, then select CMS Channels.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_channels_tab.png) 3. To serve content from a Salesforce CMS workspace, edit a public channel associated with that CMS workspace. Click ![Dropdown icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/resources-global/_corporate/images/dropdown.png), and select **Edit**. 4. To set a cache duration for CMS content served in Salesforce CDN channels, click the General tab. Set the duration for as little as 1 hour and as many as 8,760 hours, which is 1 year. - In a public channel or a site channel, use a long cache duration for images and documents that change infrequently, like your company logo. The default is 720 hours, which is 30 days. - In a public channel, for other content types that change frequently and that you want to render soon after you publish, use a short duration. The default is 1 hour. - In a site channel, the default cache duration for other content types is 1 hour, and you can’t change it. 5. To configure a domain to link content associated with the public channel to the Salesforce CDN, click the Domain tab. Select a domain from the menu and enable or disable it. - The default domain for public channels requires My Domain. If you don’t have a deployed My Domain, set one up and deploy it to your users. - If you have a deployed My Domain, you can start sharing your Salesforce CMS content to a public channel with the default domain. Select the default My Domain URL. The default domain URL format is `https://MyDomainName.cdn.salesforce-experiences.com`. 6. To serve Salesforce CMS content in enhanced emails, use the Salesforce CDN as your channel domain. Create an [interactive email design experience](https://help.salesforce.com/articleView?id=pardot_eilex_setup.htm&language=en_US) with enhanced emails in Account Engagement. Make sure that you use [Connected Campaigns and Handlebars Merge Language](https://help.salesforce.com/articleView?id=pardot_handlebars_merge_language.htm&language=en_US) and enable Account Engagement through a verified [Salesforce Connector](https://help.salesforce.com/articleView?id=pardot_sf_connector_setup_v2_parent.htm&language=en_US). Then, select a public channel associated with a CMS workspace to source your images. # Configure the Supplier Portal Configure the portal so that suppliers see the fields and navigation your business process requires, and configure access so suppliers can see their own records. ### Required Editions
Available in: Lightning Experience
Available with the Supplier Management AddOn license and the External Supplier Management AddOn license, included with Net Zero Cloud and the Manufacturing, Automotive, and Consumer Goods Cloud SKUs (and other industry Cloud SKUs). See required licenses and permissions.
User Permissions Needed
To configure the portal System Administrator
Configuring the supplier profile, permission set, and sharing set also requires Manage Users, Manage Sharing, and Customize Application permissions, in addition to System Administrator. 1. From **Setup**, in the **Quick Find** box, enter **Profiles**, and clone the standard **Partner Community User** profile to create a profile for your supplier portal users. 2. Assign a role to the internal user who owns your Supplier and Sustainability Scorecard records. Role hierarchy affects which records are shared with external users. 3. Clone the **Suppliers Onboarding to Site** permission set. On the cloned permission set, update field-level security for the Supplier and Sustainability Scorecard objects to grant Read and Edit access to the fields your suppliers need, and assign the clone to your supplier portal users instead of the original. 4. From **Setup**, in the **Quick Find** box, enter **Digital Experiences**, and then select **Settings**. Create a sharing set that grants your supplier portal profile Read/Write access to Account records (mapped by Account ID) and Sustainability Scorecard records (mapped through Supplier's Account lookup), so suppliers can see their own data. 5. From **Setup**, in the **Quick Find** box, enter **All Sites**, and then select **All Sites**. 6. Next to your supplier portal site, select **Builder** to open **Experience Builder**. 7. On the Administration tile, select **Members**, and add the profile you created in step 1 so its users can access the site. 8. Review the prebuilt homepage components, Open Requests and All Scorecards. 9. To change which fields suppliers see at a wizard step, select the wizard component, open its properties, and update the field API names listed for that step. 10. Add or remove navigation menu items as needed. 11. Select **Publish**. 12. From the site's administration settings, select **Activate**. The portal is available to supplier users after you activate and publish it. # Configure the Vlocity Action Toolbar (Managed Package) For the managed package runtime, configure the optional properties that control the toolbar layout and the available actions. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important The Vlocity Action Toolbar is no longer updated or enhanced. If you use Vlocity Actions and have Managed Package Runtime enabled, display Vlocity Actions in a Flexcard instead. You can configure up to 70 Vlocity Actions for a Flexcard.

Property

Description

Record Id

To enable the toolbar to automatically use the ID of the record page it's on, leave the Record Id property empty. To display actions associated with a specific record ID, enter the record ID.

Style

Select a horizontal or vertical layout. The default is horizontal.

Object Type

Select the objects whose actions have specific Applicable Types. Applicable Types determine the objects from which you want the action to launch. See Vlocity Actions (Managed Package). For example, enter Account,Policy_c to display Vlocity Actions that can only launch from an account or policy record page. The default is Home.

Display On

To limit to Vlocity Actions that only display on specific platforms. Select from one of these options.

  • All: For actions that display on both web client and mobile.
  • Web Client: Default. Actions display only on the Salesforce web client.
  • Mobile: For actions that display online on the mobile app.

Link Type

To specify where the action is launched from, enter a comma-separated list without spaces. For example, to display actions that launch Omniscripts and specific URLs, enter Other,Omniscript.

  • CommunityURL: Launches an Experience Cloud site page.
  • Omniscript: Launches an Omniscript.
  • Other: Launches a specific URL.
  • ConsoleCards: Launches a Salesforce Classic card.
  • LEXConsoleCards: Launches a Lightning Experience Console card in a subtab.
  • Document: Launches a Contracts Document.
  • Layout: Launches a Card Layout page.

Community Page

If Link Type is CommunityURL, enter the name of the Experience Cloud site page you created to display Omniscripts.

# Configure Timesheet Entry Fields Create custom fields on the TimeSheetEntry object and update page layouts to make sure that technicians can enter the necessary details during their shifts. ### Required Editions
Available in: Lightning Experience
Available in: All editions of Field Service Plus for Energy & Utilities, and all editions of Asset Service Lifecycle Management
User Permissions Needed
To access Timesheets objects: Labor Cost Optimization Supervisor
1. From **Setup**, select **Object Manager**. 2. Select **TimeSheetEntry**. 3. Select **Fields & Relationships**, and then select **New**. 4. Create the custom fields required for your business process. Note: **StartTime** and **EndTime** fields are of the type dateTime, but the user only enters the time. The system calculates the final dateTime by using the Timesheet’s **StartDate** plus the input time. The **Status** field is ignored. 5. Select **Page Layouts**. 6. Create a page layout or update an existing one to include your new fields. 7. Assign this page layout to the technician user profile to make sure that it’s used when creating a time sheet entry. Note: If you add a field that is read-only for create or update operations, it’s removed from the mobile app regardless of the operation being performed. Only supported data types (text, picklist, lookup, number, date, dateTime, time, text area, and Long Text Area) appear on the mobile app. 8. If you added a custom or standard object as a lookup, verify that the technician has access to the entity records and the timesheet entries lookup field. 9. If access is missing, create a permission set. 1. Go to **Object Settings** and select the object. 2. Select **Edit** and turn on **Read and View All Records** permissions. 10. In **Object Settings**, select **Time Sheet Entry**. 11. Select **Field Permissions**. 12. Select **Edit** and turn on **Read** and **Write** permissions for the lookup field. # Configure Timesheet Entry Item Fields Create custom fields on the TimeSheetEntryItem object and update page layouts to make sure that technicians can enter the necessary details during their shifts. ### Required Editions
Available in: Lightning Experience
Available in: All editions of Field Service Plus for Energy & Utilities, and all editions of Asset Service Lifecycle Management
User Permissions Needed
To access Timesheets objects: Labor Cost Optimization Supervisor
1. From Setup, select **Object Manager**. 2. Select **TimeSheetEntryItem**. 3. Select **Fields & Relationships**, and then select **New**. 4. Create the custom fields required for your business process. Note: **StartTime** and **EndTime** fields are of the type dateTime, but the user only enters the time. The system calculates the final dateTime by using the Timesheet’s **StartDate** plus the input time. The **Status** field is ignored. 5. Select **Page Layouts**. 6. Create a page layout or update an existing one to include your new fields. 7. Assign this page layout to the technician user profile to make sure that it’s used when creating a time sheet entry. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note If you add a field that is read-only for create or update operations, it’s removed from the mobile app regardless of the operation being performed. Only supported data types (text, picklist, lookup, number, date, dateTime, time, text area, and Long Text Area) appear on the mobile app. 8. If you added a custom or standard object as a lookup, verify that the technician has access to the object records and the timesheet item entries lookup field. 9. If access is missing, create a permission set. 1. Go to **Object Settings** and select the object. 2. Select **Edit** and turn on **Read and View All Records** permissions. 10. In **Object Settings**, select **Time Sheet Entry Item**. 11. Select **Field Permissions**. 12. Select **Edit** and turn on **Read** and **Write** permissions for the lookup field. 13. Save your changes. # Configure TLS Settings for Outbound Emails: Set TLS Setting to Required Control Enforces transport‑layer encryption for all outbound emails sent through Salesforce’s email infrastructure. ## Control Name Email Security - Deliverability (Configure TLS settings for outbound emails; Set TLS Setting to "Required"). ## Control Overview Enforces transport‑layer encryption for all outbound emails sent through Salesforce’s email infrastructure, so that messages are protected in transit and can’t be read or intercepted by unauthorized parties on the network. ## Description This setting requires that outbound email traffic use TLS (Transport Layer Security) when communicating with recipient mail servers. If the receiving server does not support TLS, Salesforce will not deliver the message, preventing unencrypted transmission of sensitive content. ## Recommended Configuration On the Deliverability Setup page, in the Transport Layer Security (TLS) (Emails from Salesforce or Email Relay Only) section, set **TLS Setting** to **Required**. ## Security Impact Protects the confidentiality of email content in transit, reducing the risk of eavesdropping, man‑in‑the‑middle attacks, and accidental exposure of sensitive information on shared or public networks. ## Business Impact Aligns outbound email with general data‑protection and privacy expectations, supports compliance with internal and external security policies, and reassures customers and partners that Salesforce‑originated communications are encrypted. ## Security Risk If Not Configured Unencrypted outbound email via missing TLS enforcement allows attackers to intercept or read email contents as they travel between Salesforce and recipient mail servers. ## Threat Scenarios Network‑level attackers or malicious insiders on the same path as email traffic can capture unencrypted messages containing sensitive data such as passwords, PII, or financial information; this can also violate data‑protection regulations or contractual obligations. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations The impact is highest when Salesforce sends emails containing PII, financial data, or other regulated information to external recipients. The impact is lower when most email traffic is low‑sensitivity or internal‑only. ## Higher Risk When Salesforce sends outbound emails with sensitive or regulated data to external domains, or when the company operates in a regulated industry (for example, finance, healthcare, government). ## Low Risk When Outbound email volume is low, messages contain only non‑sensitive internal information, or external recipients’ mail servers are known to consistently support TLS‑enabled connections. ## Business and Integration Considerations Verify that your key recipient domains accept TLS‑encrypted email and coordinate with external email‑admin teams if hard failures occur, as "Required" may block delivery to legacy or non‑TLS‑supporting servers. ## Security Health Review Guidance Strongly recommended. ## Who Is Impacted System administrators, marketing and communication teams, any business users who send email from Salesforce, and external recipients who receive Salesforce‑originated messages. #### See Also - [Set Up Transaction Layer Security (TLS)](https://help.salesforce.com/s/articleView?id=xcloud.emailadmin_set_up_tls.htm&release=264.0.0&type=5 "Transaction Layer Security (TLS) encrypts the contents of an email transaction during transmission. The sender and receiver can also use it to verify each other's identity. You can choose a TLS setting when sending email through Salesforce or through an email relay.") # Configure Top-Level Caching for an Integration Procedure To configure top-level caching for an Integration Procedure, go to the Procedure Configuration and set the **Salesforce Platform Cache Type** and **Time To Live In Minutes** properties. 1. Go to the Integration Procedure configuration page. 2. In the Cache Configuration section, set the **Salesforce Platform Cache Type** to one of these: - Blank — For no caching ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Do not cache when working with confidential or regulated information unless security settings are enforced. - **Session Cache** — For data related to users and their login sessions - **Org Cache** — For all other types of data ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_important.png) Important Use Org Cache only for non-sensitive data. ![Under Cache Configuration, Salesforce Platform Cache Type is set to Org Cache, and Time to Live in Minutes is set to 5.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/platformcachetype.png) Behind this drop-down is the IsCacheable\_\_c picklist. 3. Specify a value for **Time To Live In Minutes**. This setting determines how long data remains in the cache. The minimum value is 5. Default and maximum values depend on the cache type: - **Session Cache** — The default value is 5. The maximum value is 480, equivalent to 8 hours. The cache is cleared when the user's session expires regardless of this value. - **Org Cache** — The default value is 1440, equivalent to 24 hours. The maximum value is 2880, equivalent to 48 hours. Top-level caching overrides Cache Block caching for the duration of the top-level **Time To Live In Minutes** value. Top-level and Cache Block data is cleared when the Integration Procedure is deactivated regardless of this value. 4. Click **Activate Version**. Top-level caching occurs only if the Integration Procedure is active. # Configure Top-Level Caching for an Integration Procedure (Managed Package) For the managed package runtime, to configure top-level caching for an Integration Procedure, go to the Procedure Configuration and set the **Salesforce Platform Cache Type** and **Time To Live In Minutes** properties. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Go to the Procedure Configuration. 2. In the Cache Configuration section, set the **Salesforce Platform Cache Type** to one of the following: - Blank — For no caching - **Session Cache** — For data related to users and their login sessions - **Org Cache** — For all other types of data ![Under Cache Configuration, Salesforce Platform Cache Type is set to Org Cache, and Time to Live in Minutes is set to 5.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/platformcachetype.png) Behind this drop-down is the IsCacheable\_\_c picklist. 3. Specify a value for **Time To Live In Minutes**. This setting determines how long data remains in the cache. The minimum value is 5. Default and maximum values depend on the cache type: - **Session Cache** — The default value is 5. The maximum value is 480, equivalent to 8 hours. The cache is cleared when the user's session expires regardless of this value. - **Org Cache** — The default value is 1440, equivalent to 24 hours. The maximum value is 2880, equivalent to 48 hours. Top-level caching overrides Cache Block caching for the duration of the top-level **Time To Live In Minutes** value. Top-level and Cache Block data is cleared when the Integration Procedure is deactivated regardless of this value. 4. Click **Activate Version**. Top-level caching occurs only if the Integration Procedure is active. # Configure Trusted IP Ranges for a Connected App After you create a connected app, you can specify the trusted IP ranges from which a user can log in. In addition, you can apply IP relaxation to all OAuth client apps, including apps that use OAuth and SAML for single sign-on. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

User Permissions Needed
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage Connected Apps

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. For more information about IP Relaxation, see [Manage OAuth Access Policies for a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_oauth.htm&release=264.0.0&type=5 "Configure OAuth access policies for OAuth-enabled connected apps. These policies include defining which users can access a connected app, what IP restrictions apply to the connected app, and how long a refresh token is valid for."). 1. From Setup, enter Apps in the Quick Find box, then select **App Manager**. 2. Locate the connected app, click ![Action dropdown](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/dropdown.png), and then select **View**. 3. In the Trusted IP Range for OAuth Web Server Flow section, click **New**. 4. For the start IP address, enter a valid IP address. For the end IP address, enter the same or higher IP address. Enter multiple, discontinuous ranges by clicking **New**. #### See Also - [Connected App IP Relaxation and Continuous IP Enforcement](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_continuous_ip.htm&release=264.0.0&type=5 "For security reasons, if you relax IP restrictions for your connected app, and your org has enabled Enforce login IP ranges on every request, users can’t access the app in some circumstances. This access restriction applies to all OAuth-enabled connected apps, including mobile devices.") - [Manage OAuth Access Policies for a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage_oauth.htm&release=264.0.0&type=5 "Configure OAuth access policies for OAuth-enabled connected apps. These policies include defining which users can access a connected app, what IP restrictions apply to the connected app, and how long a refresh token is valid for.") # Configure Trusted IP Ranges for a Connected App: Trusted IP Ranges for a Connected App Control This control restricts access to a Connected App so that it only accepts authentication requests originating from a specific list of verified, "allow-listed" IP addresses. ## Control Name Connected Apps: Configure Trusted IP Ranges for a Connected App: Trusted IP Ranges for a Connected App ## Recommended Configuration Specify the trusted IP ranges from which a user can log in. ## Control Overview This control restricts access to a Connected App so that it only accepts authentication requests originating from a specific list of verified, "allow-listed" IP addresses. ## Security Risk If Not Configured Without IP restrictions, a compromised OAuth token or Client Secret can be used from any location in the world, allowing an attacker to bypass your corporate network perimeter entirely. ## Threat Scenarios An attacker steals an integration's Client Secret and uses it from a rogue server in a different country to programmatically scrape data, which would have been blocked if the app only accepted traffic from your known Data Center IP. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations The absence of IP fencing leads to a significantly larger attack surface, making it nearly impossible to stop automated, geography-based brute force or token-replay attacks. ## Higher Risk When A Connected App is associated with a "System Administrator" or a high-privilege integration user that has "Modify All Data" permissions. ## Low Risk When The scenario is lower risk when the integration user is also restricted by Profile-Level IP Ranges, creating a "double-wall" that requires the attacker to be on your VPN or corporate network. ## Business and Integration Considerations Implementing IP ranges requires maintaining an accurate list of static IPs from third-party vendors (like MuleSoft, Workday, or AWS), as any change in their infrastructure could inadvertently break the integration. ## Recommended Remediation Go to the Connected App, click Edit Policies, and under the IP Relaxation section, select "Enforce IP restrictions" while ensuring the specific ranges are defined in the User Profile or Org-Wide settings. ## Security Health Review Guidance Security Health Review identifies IP Trusted Ranges as a critical "Network Gatekeeper," so that even with valid credentials, an integration is only "trusted" when it calls from a pre-approved and managed location. #### See Also - [Configure Trusted IP Ranges for a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_edit_ip_ranges.htm&type=5&language=en_US) # Configure URL to Access Vlocity LWC Omniscript Wrapper Component (Managed Package) For the managed package runtime, configure the URL to access the Vlocity LWC Omniscript Wrapper component. Launch any LWC Omniscript on a Community Page by sending a URL to the Vlocity LWC Omniscript Wrapper component on the page. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Configure the URL for the Community page in a URL field, such as a URL in a Card Action or text editor. Example URL for a Community named AccountCommunity that has a page named AccountPage: ``` https://MyDomainName.my.site.com/AccountCommunity/s/AccountPage? ``` 2. In your Omniscript, click the **How to Launch Activated Script** button. 3. In the How to Launch modal, click the **LWC** tab. 4. In the Vlocity Aura Wrapper section of the LWC tab, copy the text appearing after the question mark. ``` https://MyDomainName--c.vf.force.com/lightning/cmp/namespace__vlocityLWCOmniWrapper?c__target=namespace:myLWCTestEnglish&c__layout=lightning ``` - The **c\_\_target** parameter is set to a component indicated by **c:**. The component is the Name of your Omniscript combined with the Type, SubType, and Language. This component passes into the LWC Omniscript Name field of the Vlocity LWC Omniscript Wrapper. - The **c\_\_layout** parameter passes the layout to the Layout field of the Vlocity LWC Omniscript Wrapper. 5. In the c\_\_target parameter of the URL, replace the namespace with c. ``` c__target=c:myLWCTestEnglish&c__layout=lightning ``` 6. Paste the copied text to the end of the Community Page URL. ``` https://MyDomainName.my.site.com/AccountCommunity/s/AccountPage?c__target=c:myLWCTestEnglish&c__layout=lightning ``` 7. (Optional) Pass additional parameters by separating them with an ampersand, &. Parameters must use the c\_\_ prefix. For example, to pass "AccountName": "Acme" into the Omniscript's data JSON,the syntax must be &c\_\_AccountName=Acme. 8. (Optional) Fire events from the Navigate Action by passing an event to the Omniscript in the URL parameter `c__vlocEvents`. The Navigate Action element must have the checkbox property **LWC PubSub Message?** enabled to fire the event. To refresh Cards using events, see [Reloading a Card After Updating an LWC Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_reloading_a_card_after_updating_an_lwc_omniscript.htm&release=264.0.0&type=5 "For the managed package runtime, update information on a card after making a change to an LWC Omniscript by passing an event to the Omniscript in the URL parameter c__vlocEvents of an OS Action."). # Configure User Provisioning for Connected Apps Configure a connected app to save time when provisioning users for third-party apps. Salesforce provides a wizard that guides you through the user provisioning settings for each connected app. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details.
User Permissions Needed
To configure user provisioning for connected apps: View Setup and Configuration AND Manage Users AND Customize Application
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

AND Download AppExchange Packages

Salesforce provides a step-by-step wizard to guide you through the user provisioning process for each connected app. Before you use the wizard, you must have the following. A connected app for the third-party service to provision Any connected app can support user provisioning, including a “bookmark” connected app, which is a connected app that hasn’t been configured beyond its basic settings. See [Configure Basic Connected App Settings](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_basics.htm&release=264.0.0&type=5 "For all connected apps, define the basics, which include the app’s name, logo, and contact information."). Named credentials Named credentials identify the third-party system and its authentication settings. Calls to the third-party system, such as creating, editing, or deleting accounts, use the third-party authentication settings in the named credential. For the named credential, you specify a Named Principal. The Named Principal can be an account on the third-party system or an OAuth authorization for an existing Auth Provider in your org. The User Provisioning Wizard prompts for this named credential. A flow to manage provisioning requests to the third-party service or app Salesforce provides preconfigured flows to simplify your user-provisioning setup process. From AppExchange, install the [Salesforce Identity User Provisioning Connectors](https://appexchange.salesforce.com/listingDetail?listingId=a0N3A00000EeLdWUAV) package and the [Salesforce Identity User Provisioning Utils](https://appexchange.salesforce.com/listingDetail?listingId=a0N3A00000EeLdbUAF) packages. You associate one of these flows with the connected app using the User Provisioning Wizard. Optionally, you can create your own flow. For more information, see [Create Your Own User Provisioning Flow](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_user_provisioning_configure.htm&release=264.0.0&type=5). ## Run the User Provisioning Wizard If user provisioning is enabled for your org, use these steps to start the User Provisioning wizard for your connected app. 1. From Setup, enter Connected Apps in the Quick Find box, then select **Manage Connected Apps**. 2. Click the name of the connected app. 3. On the connected app detail page, click **Edit Policies**. 4. Under User Provisioning Settings, select **Enable User Provisioning**. 5. Click **Save**. 6. Under User Provisioning Settings, click **Launch User Provisioning Wizard**. ![User Provisioning Wizard button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/identity_userprovisioning_button.png) After you provision users for your connected app, you can update a user’s account information from the connected app detail page. All users provisioned for the app appear under User Accounts. You can also rerun the wizard to collect and analyze the accounts on the third-party system, change the provisioning configuration, and process all accounts. ## Create Your Own User Provisioning Flow If the packaged flows don’t support the third-party system that you want to provision, or if you want to customize the user provisioning process, you can create your own flow. Creating a flow requires you to be familiar with Flow Builder and Apex triggers. Use the `UserProvisioningPlugin` legacy Apex action and the UserProvisioningRequest and UserProvAccount standard objects to create a flow of type User Provisioning. Include these items in the flow. - Legacy Apex action using the `UserProvisioningPlugin` class with these input and output variables: - Input: User, UserProvisioningRequest, UserProvAccount - Output: ExternalUserId, ExternalUsername, ExternalFirstName, ExternalLastName, ExternalEmail, Details, Status - At least one legacy Apex action with these input and output parameters: - Input: userProvisioningRequestId, userId, namedCredDevName, reconFilter, reconOffset - Output: ExternalUserId, ExternalUsername, ExternalFirstName, ExternalLastName, ExternalEmail, Details, Status, reconState, nextReconOffset - A “Look Up User” Get Records element to modify during user account linking between Salesforce users and users on the third-party system #### See Also - [User Provisioning for Connected Apps](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_user_provisioning.htm&release=264.0.0&type=5 "You can use a connected app to link your users with a third-party app. User provisioning for a connected app simplifies account creation and links your Salesforce users’ accounts to their third-party accounts. After the accounts are linked, you can configure the App Launcher to display the connected app as a tile. With a single click, users get instant access to the third-party app.") - [Create a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create.htm&release=264.0.0&type=5 "When you create a connected app, make sure that you understand how it’s going to be used so you can configure the appropriate settings. For example, if you’re creating a connected app to integrate an external application with your Salesforce API, configure the connected app with OAuth authorization settings. Or if you’re creating a connected app to act as a service provider in a SAML single sign-on (SSO) flow, configure SAML settings.") - [_Named Credentials_](https://help.salesforce.com/s/articleView?id=xcloud.named_credentials_about.htm&type=5&language=en_US) - [_Flow Builder_](https://help.salesforce.com/s/articleView?id=platform.flow.htm&type=5&language=en_US) - [_Apex Developer Guide_](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode) # Configure Validity Duration for Stock Rotation Incentive Define the Validity Duration to establish the timeframe for eligible transactions. This ensures that only inventory purchased within a specific window can be returned or scrapped. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Stock Rotation enabled.
User Permissions Needed
To configure validity duration: Stock Rotation Admin permission set
1. On a Program Rebate Type record, open the **Calculation Information** related list of the Details tab. 2. Enter **Validity Duration** that defines the duration for which the inventory is eligible for stock rotation. For example, 10. 3. Enter **Validity Duration Type** which defines the unit of measure for the validity duration. Valid values are Days, Months and Years. 4. Save your changes. The system calculates the Stock Rotation Start Date by subtracting the Validity Duration from the Rebate Program Start Date. This calculation (StockRotationStartDate to StockRotationEndDate) resides within the Stock Rotation DPE, allowing for custom logic if needed. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_example.png) Example If a program starts on November 1st and the Validity Duration is 10 days, the eligibility window begins on October 22nd. Any inventory purchased between October 22nd and the program end date is eligible for rotation. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note - The account on the inventory record must match the Rebate Program Member. - The product must satisfy the Include/Exclude filters defined above. - The price type on the inventory record (e.g., "List Price") must match the eligibility record. # Configure Variables for Merge Fields Configure variables that define the information that you want merge fields to insert, including field values from records related to survey invitations, participant details, company information, and custom values. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Feedback Management - Starter and Feedback Management - Growth licenses
User Permissions Needed
To configure merge field variables:
You can add up to 25 merge field variables, excluding the variables that insert record IDs. 1. In the Survey Builder, click **Advanced Settings**, and then select **Merge Field Variables**. 2. In the Object Variables for Merge Fields section, define these variables. 1. Name the associated object variable and select the object whose records are related to the invitations of this survey. Use this variable to insert field values in the related record. 2. Name the participant object variable and select the object that stores the participant records. Use this variable to insert field values in the participant record related to the survey invitation. 3. Save the associated object and the participant object variables. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_note.png) Note - If a participant doesn't have access to an object referenced by a merge field, the merge fields in email invitations don't resolve and the survey doesn’t open. - Polymorphic merge fields don't resolve in email invitations. - If the field that a merge field resolves to is empty, the survey doesn’t display any information for the merge field. 3. In the Org and Custom Variables section, define these types of variables. 1. Create org variables that merge fields use to insert information about the company. 2. Create custom variables with your own values that merge fields insert. 3. Save the org and custom variables. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_example.png) Example If your survey gathers feedback from contacts on the case resolutions, create variables to insert custom information. For example, insert the case subject, the contact's first name, the company's name, and the service team's name. - Create an associated object variable with the Case object. - Create a participant object variable with the Contact object. - Create an org variable and for the variable value, select **Name**. - Create a custom variable and for the variable value, enter the service team's name. # Configure Vehicle Selection Supervisors can configure the options for the technicians to select the vehicle. ### Required Editions
Available in: Lightning Experience
Available in: All editions of Field Service Plus for Energy & Utilities, and all editions of Asset Service Lifecycle Management
User Permissions Needed
To access Timesheets objects: Labor Cost Optimization Admin
1. From Setup, in the Quick Find box, enter Timesheets, and then select **Advanced Timesheets Labor Cost Optimization Settings**. 2. Select a vehicle selection option. - **Vehicle**: In the Field Service mobile app, Technicians can select a specific daily vehicle for their day and individual hourly breakdown. For example, Truck A - Ford F150. - **Vehicle model from Vehicle Definition**: In the Field Service mobile app, Technicians can select a vehicle model for their day and individual hourly breakdown. For example, Ford F150. - **Assets**: In the Field Service mobile app, Technicians can select multiple vehicles or mobile assets for a single timesheet. For example, Vehicle 99333E2 and Trailer 223452. - **Page Layout Control**: In the Field Service mobile app, Technicians can select a vehicle, vehicle definition, or assets based on the page layout. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note You can assign the different vehicle selection to different technicians from the Time Sheet Entry page layout assignment. # Configure Visualforce Page Access (Managed Package) For the managed package runtime, configure Visualforce page access to ensure that users see Vlocity Card Layouts on Experience pages. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From Setup, type Users in the Quick Find box and click **Profiles**. 2. Find the profile for the users who will be accessing the community and click the profile name. If you click **Edit**, you won't see the Enabled Visualforce Page Access settings. 3. Scroll to the Enabled Visualforce Page Access section and click **Edit**. 4. Make sure the following pages are in the Enabled Visualforce Pages list: - namespace.CommunityCanvas - namespace.ConsoleCards - namespace.UniversalCardPage 5. Click **Save**. # Configure Work Estimation Flow for Partner Community Partners can perform work order estimation for Asset Service Lifecycle Management (ASLM) from the community site. Create and assign customized permissions and buttons to launch the work estimation flow on the community site. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
| REQUIRED USER PERMISSIONS |   | | --- | --- | | To set up work estimation flow in partner community: | Work Order Estimation Experience User | Before you begin, create a [community site](https://help.salesforce.com/s/articleView?id=experience.networks_creating.htm&language=en_US) on the Experience Cloud site for partners. ## Set Up Work Estimation Page on Partner Community 1. Create a page on the community site, and name it Work Estimation. 2. Add the [work estimation community](https://help.salesforce.com/s/articleView?id=xcloud.aslm_setup_partner_community_on_experience_cloud_sites.htm&release=264.0.0&type=5 "Extending the scope of work order estimation to be used by the partners on the Experience cloud sites.") flow to the Work Estimation page. ## Assign Custom Permissions to Partner Users 1. From Setup, in the Quick Find box, enter Permission Sets and select it. 2. Create a permission set with the name Work Estimation Custom Permission Set. 3. On the new permission set, give object access to the community users. 1. Click **Object Settings**. 2. Add the permissions for these objects. Give read, edit, create, and delete access to the Quote Line Work Source. Give read, edit, and create access to the Quote object. Give only read access to these objects. - Document Templates - Contacts - Assets - Accounts - Order - Products - Work Orders - Work Type Group - Work Type - Contract Line Items - Entitlements - Service Contracts - Service Territories - Warranty Terms 3. Save the changes. 4. From Setup, in the Quick Find box, enter Sharing Settings and select it. 5. In the Organization-Wide Defaults section, click **Edit**. 6. Set **Public Read Only** as the default external access for these objects. - Product - Service Contract - Service Territory - Warranty Term - Work Order - Work Type - Work Type Group - Document Template 7. Save the changes. 4. From Setup, in the Quick Find box, enter Permission Sets and select it. 5. Open Work Estimation Custom Permission Set. 6. On the permission set page, click **Manage Assignments**. 7. Click **Add Assignments**. 8. Select the partner community user, and click **Assign**. 9. Click **Done**. ## Add Button to Launch Work Order Estimation 1. From Setup, click **Object Manager** and then click **Account**. 2. On the Account page, click the Buttons, Links, and Actions tab. 3. Click **New Button or Link**. 4. Enter these values. | Field name | Entry value | | --- | --- | | Label | Work Order Estimation Community | | Name | Work\_Order\_Estimation\_Community | | Display Type | Detail Page Button | | Behavior | Display in new window | | Content Source | URL | | Select Field Type | Account | | URL | /s/work-estimation?c\_\_recordId={!Account.Id} | | Link Encoding | Unicode (UTF-8) | 5. Click **Check Syntax**. 6. Save the changes. 7. On the Account page, click the Page Layouts tab, click **Account Layout**. 8. Under Fields, click **Buttons**. 9. Drag the **Work Order Estimation Community** button to Custom Buttons under Account Detail. 10. Save the changes. # Configure Your API Client to Use Mutual Authentication To use mutual authentication when calling Salesforce services via API, configure your client app to present your client certificate and chain to Salesforce. For security reasons, the client certificate must be used only in your org. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Performance, Personal, Unlimited, Developer, and Database.com Editions
User Permissions Needed
To create, edit, and manage certificates: Customize Application

To enforce mutual authentication on port 8443 for standard SSL/TLS connections:

(Assign to users with the API Only User permission)

Enforce SSL/TLS Mutual Authentication
To access Salesforce only through a Salesforce API: API Only User
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important With Google Chrome Root Program Policy v1.7, your client and server certificates can't originate from the same Public Root CA in the Chrome Trusted Root List. With this change, you can no longer use certificates that include Extended Key Usage (EKU) extensions for both client and server authentication. To prevent disruptions, transition to separate certificate hierarchies. The Google Chrome policy changes take effect on June 15, 2026, but you can experience issues with certificate renewal for some Public CA vendors before that date. For more information, see [Upcoming Mandatory Changes to Public Key Infrastructure (PKI)](https://help.salesforce.com/s/articleView?id=005237282&type=1&language=en_US). For mTLS to work, the client must send a certificate chain. A certificate chain is a hierarchical order of certificates where one certificate issues and signs another certificate lower in the hierarchy. Upload a certificate chain as a single PEM-encoded certificate authority-signed (CA-signed) certificate representing the concatenated chain of certificates. The uploaded certificate chain must include the intermediate certificates in this order. - Start with the client certificate, and then add its signing certificate. - If more than one intermediate certificate exists between the client certificate and the root, add each certificate as the one that signed the previous certificate. - The root certificate is optional, and generally isn’t included. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important The client certificate must include any intermediate certificates in the chain when contacting port 8443. The intermediate certificates must be sent by the client with every request. You can upload either the leaf certificate or the full certificate chain. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note If you delete a mutual authentication certificate associated with a user who has the Enforce SSL/TLS Mutual Authentication user permission, it takes up to 5 minutes for the user’s session ID to be invalidated and for the certificate to be cleared from the cache. Before you start, [Set Up a Mutual Authentication Certificate for API Login](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_uploading_mutual_auth_cert.htm&release=264.0.0&type=5 "To improve security by preventing impersonation, you can require mutual authentication when a client app tries to access Salesforce data. With mutual authentication, the client app and the Salesforce server prove their identity to each other with signed certificates by using the Mutual Transport Layer Security (mTLS) protocol. As a prerequisite for mutual authentication, upload your client certificate to Salesforce."). 1. After you upload your mutual authentication certificate, log in to the Salesforce service using port 8443 for your My Domain login URL. Include your credentials and your signed certificate information. Your configuration using `cURL` can look something like this example. Replace “MyDomainName.my.salesforce.com:8443” with the specific instance’s endpoint, replace “@login.txt” with your login Soap message credentials, and replace “fullcert.pem:xxxxxx” with your certificate information. ``` curl -k https://MyDomainName.my.salesforce.com:8443/services/Soap/u/31.0 -H "Content-Type: text/xml; charset=UTF-8" -H "SOAPAction: login" -d @login.txt -v -E fullcert.pem:xxxxxx ``` ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important Use your My Domain login URL. Don't use login.salesforce.com. 2. After a session ID is returned from your call, you can perform other actions, such as queries. In this result, @accountQuery.xml is the file name containing the query Soap message with the session ID from the login response. ``` curl -k https://MyDomainName.my.salesforce.com:8443/services/Soap/u/31.0 -H "Content-Type: text/xml; charset=UTF-8" -H "SOAPAction: example" -d @accountQuery.xml -v -E fullcert.pem:xxxxxx ``` For steps to set up certificate-based UI login using mutual authentication, see [Certificate-Based Authentication](https://help.salesforce.com/s/articleView?id=xcloud.security_certificate_based_auth.htm&release=264.0.0&type=5 "In addition to authentication methods like single sign-on, Salesforce provides certificate-based authentication, which you can configure to authenticate your Salesforce users with unique PEM-encoded X.509 certificates."). #### See Also - [Certificates and Keys](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_about.htm&release=264.0.0&type=5 "Salesforce certificates and key pairs are used for signatures that verify a request is coming from your org. They’re used for authenticated SSL communications with an external website, or when using your Salesforce org as an Identity Provider. You only need to generate a Salesforce certificate and key pair if you're working with an external website that wants verification that a request is coming from a Salesforce organization.") - [Set Up a Mutual Authentication Certificate for API Login](https://help.salesforce.com/s/articleView?id=xcloud.security_keys_uploading_mutual_auth_cert.htm&release=264.0.0&type=5 "To improve security by preventing impersonation, you can require mutual authentication when a client app tries to access Salesforce data. With mutual authentication, the client app and the Salesforce server prove their identity to each other with signed certificates by using the Mutual Transport Layer Security (mTLS) protocol. As a prerequisite for mutual authentication, upload your client certificate to Salesforce.") # Configure Your App's Orientation Choose which orientations to support in your Mobile Publisher for Experience Cloud app. You can also opt in to support users who want to experience your branded Experience Cloud app on an iPad. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
To create and modify a site: Create and Set Up Experiences
Mobile Publisher for Experience Cloud supports both portrait and landscape modes for iPhone, Android phone, and Android tablet devices. Portrait mode only is selected by default, but you can choose to support both landscape and portrait orientations in Mobile Publisher setup. ![Screenshot of Mobile Publisher setup, showing orientation pickers for phone form factors and opt-in toggle for iPad support](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/mobile_publisher_configure_orientation.png) You can choose to opt in to iPad support for your branded Experience Cloud app in Mobile Publisher. Mobile Publisher supports these orientation modes for iPad: - Portrait only - Landscape only - Landscape and Portrait ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note If you decide to opt in to iPad support, you must support iPad devices for the current version or any future versions of your branded Experience Cloud app. You can’t opt out of support for iPad after you’ve opted in. It’s important to keep in mind that components that work in one orientation mode might not work with another orientation mode. For example, if your component works in Portrait mode, it might not work as expected in Landscape mode. Use the Publisher Playground app to test and confirm that your components work in your preferred orientation mode before you decide to opt in to support iPad. #### See Also - [Preview Your Mobile Experience Cloud Site with Publisher Playground (Beta)](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_playground.htm&release=264.0.0&type=5 "The Publisher Playground app is a non-branded version of the Mobile Publisher for Experience Cloud app. This app lets you quickly preview and evaluate the in-app experience of your Experience Cloud sites before you purchase any Mobile Publisher licenses.") # Configure Your Backup Retention Policy Choose how long to retain your backups. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions with the Backup & Recover Data and Backup & Recover Files add-on licenses
1. In Salesforce Backup & Recover Next, click the **Settings** tab. 2. From the navigation bar on the left, click **Retention**. 3. Select the time to retain data for each retention period. # Configure Your Branded App with Apple Configure Sign In with Apple from your Apple developer account. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

Keep in mind that the Apple API sends the user’s name and email to your branded app the first time that the user logs in only. 1. Sign in to your Apple developer account. 2. Register an App ID for your branded app. According to [Register an Apple ID](https://help.apple.com/developer-account/#/dev1b35d6f83) in Apple Help: 1. In [Certificates, Identifiers & Profiles](https://developer.apple.com/account/resources), select Identifiers from the sidebar, then click the Add button (**+**) in the upper-left corner. 2. Select App IDs from the list of options and click **Continue**. 3. From the options, confirm App ID type is automatically selected and click **Continue**. 4. Enter a name or description for the App ID in the Description field. On your App ID configuration page, notice that the Team ID is the same as the App ID Prefix. You need the Team ID later. 5. Select the corresponding checkboxes to enable the app capabilities you want to use. The capabilities available to your type of app and program membership appear under Capabilities. Not all capabilities are eligible for all platforms. 6. Click **Continue**, then Review the registration information, and click **Register**. 3. Associate your website to your branded app. According to [Configure Sign In with Apple for the web](https://help.apple.com/developer-account/#/dev1c0e25352) in Apple Help: 1. In [Certificates, Identifiers & Profiles](https://developer.apple.com/account/resources), select Identifiers from the sidebar, then click the Add button (+) in the upper-left corner. 2. Select Services ID and click **Continue**. 3. Enter the Services ID description and provide a unique identifier for your website. 4. Register the Services ID and select it from the list to start configuration. 5. Select Sign in with Apple and click **Configure**. 6. In the modal that appears, select your app from the list of primary App IDs that is related to your website. 7. Under Website URLs, provide your domains, subdomains, or return URLs as a comma-delimited list. You must provide at least one domain or subdomain. You can get the fully qualified domain name from the Domains page in Salesforce Setup. For employees, specify your My Domain login URL. For customers and partners, specify your site domain. For Return URLs, enter a placeholder. Later, you populate this field with the Salesforce callback URL. 8. Click **Done** to store your configuration. 9. Click **Continue**. 10. Review the configuration and click **Save**. # Configure Your Cache-Only Key Callout Connection Use a named credential to specify the endpoint for your callout, and identify the key that you want to fetch from your endpoint. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires purchasing Salesforce Shield or Shield Platform Encryption, and the External Key Management Service.
User Permissions Needed
To create, edit, and delete named credentials: Customize Application
To allow cache-only keys with BYOK:

Customize Application

AND

Manage Encryption Keys

To generate, destroy, export, import, upload, and configure tenant secrets and customer-supplied key material: Manage Encryption Keys
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Some endpoints support legacy named credentials, and others require named principal-based named credentials. This topic doesn’t show you how to configure a named principal-based credential. See [Use a Named Principal-Based Credential for a Cache-Only Key](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_use_an_aws_kms_key_for_cok.htm&release=264.0.0&type=5 "You can use an externally managed key as your cache-only key. External credentials create a secure connection between Salesforce and your external-key repository. For optimal security, set up an external credential that uses a named principal to authenticate into your external service on behalf of all users authorized to manage key material. Salesforce recommends you use this method instead of a legacy named credential if you use an external key management service along with cache-only keys."). 1. Make sure that your org has an active Fields and Files (Probabilistic) key, either Salesforce-generated or customer-supplied. - From Setup, in the Quick Find box, enter **Encryption Settings**, and then select **Encryption Settings**. Turn on **Generate Initial Probabilistic Tenant Secret**. - From Setup, in the Quick Find box, enter Key Management, and then select **Key Management**. Select the **Fields and Files (Probabilistic)**tab, and then click **Generate Tenant Secret**. 2. From Setup, in the Quick Find box, enter Named Credential, and then select **Named Credential**. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip A named credential provides an authenticated callout mechanism through which Salesforce can fetch your key material. Because named credentials are allowlisted, they’re a secure and convenient channel for key material stored outside of Salesforce. Learn more about named credentials, how to define a named credential, and how to grant access to authentication settings for named credentials in Salesforce Help. 3. Create a named credential. Specify an HTTPS endpoint from which Salesforce can fetch your key material. 4. From Setup, in the Quick Find box, enter Encryption Settings, and then select **Encryption Settings**. 5. In the Advanced Encryption Settings section, turn on **Allow Cache-Only Keys**. You can also enable the Cache-Only Key Service programmatically. For more information, see [EncryptionKeySettings](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_encryptionkeysettings.htm) in the Metadata API Developer Guide. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note If you turn off **Allow Cache-Only Keys**, data that’s encrypted with cache-only key material remains encrypted and Salesforce continues to invoke secured callouts. However, you can’t modify your cache-only key configuration or add new ones. If you don’t want to use cache-only keys, rotate your key material to use customer-supplied (BYOK) key material. Then synchronize all your data, and turn off **Allow Cache-Only Keys**. 6. From Setup, in the Quick Find box, enter Platform Encryption, and then select **Key Management**. 7. In the Key Management Table, select a key type. 8. Click **Bring Your Own Key**. 9. Select a BYOK-compatible certificate from the Choose Certificate dropdown. 10. Select **Use a Cache-Only Key**. 11. For Unique Key Identifier, enter your KID—the unique key identifier for your data encryption key. Your identifier can be a number, a string (2018\_data\_key), or a UUID (982c375b-f46b-4423-8c2d-4d1a69152a0b). 12. In the Named Credential dropdown, select the named credential associated with your key. You can have multiple keys associated with each named credential. ![Configure a cache-only key callout connection on the Key Management page.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/cache_only_key_configure.png) Salesforce checks the connection to the endpoint specified by the named credential. If Salesforce can reach the endpoint, the key specified for the Unique Key Identifier becomes the active key. All data marked for encryption by your encryption policy is encrypted with your cache-only key. If Salesforce can’t reach the specified endpoint, an error displays to help you troubleshoot the connection. Cache-only key status is recorded as Fetched on the Key Management page. In Enterprise API, the TenantSecret Source value is listed as Remote. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip You can monitor key configuration callouts in the Setup Audit Trail. When a callout to an active or archived cache-only key is successful, the Setup Audit Trail logs an Activated status. Individual callouts aren’t monitored in Setup Audit Trail. #### See Also - [Object Reference for Salesforce and Lightning Platform: RemoteKeyCalloutEvent](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/api/sforce_api_objects_remotekeycalloutevent.htm) # Configure Your Domain to Host Preference Forms Add the domain where your preference form is hosted to the Cross-Origin Resource Sharing list so that your users can access your form. Complete this step before you host your form on an external website or before you use the default method with hosting on a static web page. ### Required Editions
Available in: Lightning Experience and Salesforce Classic in Developer, Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To use Preference Manager: ManagePreferenceManager
Every external webpage that includes a Preference Manager form must be on the allowed domain list so that Cross Origin Resource Sharing (CORS) can occur. The allowed domain list is a security measure to ensure that only certain origin locations are able to include the script to load the form. 1. From the Preference Manager dashboard, find the name of your form, click the dropdown arrow, and select **Configure Allowed Domains**. 2. Click **Add Domain**, and then enter the domain URL. 3. Save your changes. After you add the external site to the allowed domain list, embed the preference form into your external site. # Configure Your Experience Cloud Site as a Service Provider or Relying Party To let users log in to your Experience Cloud site with credentials from a third-party provider, configure your site as a service provider or relying party. For single sign-on (SSO) authentication only, you can use SAML to configure your site as a service provider. Or, if you want the third party to authenticate users and authorize them to access third-party data, set up an authentication provider to configure SSO with your site as the relying party. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Professional, Enterprise, Unlimited, and Developer Editions
## Configure Your Site as a SAML Service Provider ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note There are many terms to remember for SSO. If you need a refresher, check out [Single Sign-On Terminology](https://help.salesforce.com/articleView?id=sso_terminology.htm&language=en_US) in Salesforce Help. To set up SAML SSO with a third-party identity provider, use these resources. - For configuration steps, see [Configure Salesforce as the Service Provider with SAML Single Sign-On](https://help.salesforce.com/articleView?id=sso_saml.htm&language=en_US). - Optionally, you can set up Just-in-Time (JIT) provisioning to quickly create and update user accounts. For more information, see [Just-in-Time Provisioning for SAML](https://help.salesforce.com/s/articleView?id=xcloud.sso_jit_about.htm&type=5&language=en_US). ## Configure Your Site as the Relying Party with Authentication Providers Use authentication providers to set up SSO using OpenID Connect or similar authentication protocols. Most authentication providers handle both SSO and third-party data access. For more information on how authentication providers work, visit [Authentication Providers](https://help.salesforce.com/articleView?id=sso_authentication_providers.htm&language=en_US). To get started with setting up your authentication provider, you can use one of these methods. - Use a predefined authentication provider, such as Apple, Facebook, or Google. For instructions, see [Configure a Predefined Authentication Provider](https://help.salesforce.com/articleView?id=sso_predefined_authentication_provider_parent.htm&language=en_US) in Salesforce Help. - Use an external authentication provider that uses the OpenID Connect protocol, such as Amazon and PayPal. For instructions, see [Configure an OpenID Connect Authentication Provider](https://help.salesforce.com/articleView?id=sso_provider_openid_connect.htm&language=en_US) in Salesforce Help. - Create a custom authentication provider for a third party that supports OAuth 2.0, but not OpenID Connect. For instructions, see [Create a Custom External Authentication Provider](https://help.salesforce.com/articleView?id=sso_provider_plugin_custom.htm&language=en_US) in Salesforce Help. # Configure Your Experience Cloud Site as an Identity Provider or OpenID Provider To let users log in to a third-party service provider with credentials from your Experience Cloud site, configure your site as an identity provider. Depending on the third party you want to integrate, you can use SAML or OpenID Connect as your authentication protocol. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Professional, Enterprise, Unlimited, and Developer Editions
## Configure Your Site as a SAML Identity Provider ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note There are many terms to remember for SSO. If you need a refresher, check out [Single Sign-On Terminology](https://help.salesforce.com/articleView?id=sso_terminology.htm&language=en_US) in Salesforce Help. For third parties that speak the SAML authentication protocol, use these resources to help you set up and understand SAML SSO. - For configuration steps, see [Salesforce as a SAML Identity Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_sfdc_idp_saml_parent.htm&type=5&language=en_US) in _Salesforce Help_. - If you learn better with videos, check out [How to Configure SAML Single Sign-On with Salesforce as the Identity Provider](https://www.youtube.com/watch?v=9Ov4Y6M5PLE) on YouTube. - For detailed information on SAML SSO behind the scenes, visit [SAML SSO Flows](https://help.salesforce.com/s/articleView?id=xcloud.identity_provider_about.htm&type=5&language=en_US). ## Configure Your Site as an OpenID Provider If your third party uses OpenID Connect, visit [Integrate Service Providers as Connected Apps with OpenID Connect](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_openid_connect.htm&type=5&language=en_US) in _Salesforce Help_. # Configure Your Login Page After you decide which login page you want to set up, configure your login page in the Administration workspace. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To access Experience Workspaces:
  • Access Experience Management OR Manage Experiences OR Create and Set Up Experiences
  • AND is a member of the Experience Cloud site
To create and edit Visualforce pages: Customize Application
To edit Apex classes:
  • Author Apex
  • AND Customize Application
1. From Setup, in the Quick Find box, enter All Sites, and then select **All Sites**. 2. Next to your site name, click **Workspaces**. 3. Select **Administration**, and then select **Login & Registration**. 4. Under Login Page Setup, for Login Page Type, select one of these options. 1. To choose the Default, select **Default Page**. 2. To choose the Login Discovery Page, select **Login Discovery Page**, and then [create a custom Login Discovery page](https://help.salesforce.com/s/articleView?id=external_identity_passwordless_login_in_apex.htm&language=en_US) and [customize the LoginDiscovery handler](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_passwordless_login_customize_discovery_handler.htm&type=5&language=en_US) using passwordless login. 3. To choose the Experience Builder Page, select **Experience Builder Page**, click ![Lookup magnifying glass icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png), and select **login**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note To access the Experience Builder Page, you must first publish your site. 4. To use a custom Visualforce page, select **Visualforce Page**, click ![Lookup magnifying glass icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png), and then select your custom page. You can select this option only for Aura sites. If you selected this option for an LWR site before Summer ’23, the site can continue to use a Visualforce page for the login page. However, if you switch your LWR site to another login page type, you can’t go back to using a Visualforce page. For detailed information about creating a Visualforce login page, see [Create a Custom Login Page in Visualforce](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_custom_login_page_login.htm&type=5&language=en_US). 5. (Optional) To let employees use their internal Salesforce credentials to log in to your site, select **Allow employees to log in directly to an Experience Cloud Site**. Employees must be members of the site to log in directly from the site login page. After they log in, your internal users land on the site home page. 6. Select which login options to display. By default, users log in to the site using the default site username and password. To allow users to log in with single sign-on (SSO) from an authentication provider or SAML identity provider, select an SSO option from the list. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_important.png) Important You must configure SSO options before they display on this page. For more information, see [Single Sign-On for Salesforce Customer Identity](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_single_sign_on_use_cases.htm&type=5&language=en_US). # Configure Your Security Agent (Beta) Configure Security Center with Agentforce to get the most out of agent capabilities for security triage, investigation, and response. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise and Unlimited Editions with the Security Center add-on license.
Available for free in: Developer Edition
| User Permissions Needed |   | | --- | --- | | To run agent tools (Default): | Use Agentforce Default Agent | | To view Security Center pages: | View Security Center | | To create and edit security policies: | Manage Security Center | | To access Setup with Agentforce capabilities: | Use Setup with Agentforce | | To access Event Monitoring log data: | View Event Log Files and View Event Log Object Data | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Security Agent is a pilot or beta service that is subject to the Beta Services Terms at Agreements - Salesforce.com or a written Unified Pilot Agreement if executed by Customer, and applicable terms in the Product Terms Directory. Use of this pilot or beta service is at the Customer's sole discretion. To use the Security Agent, turn on the Setup Agent. See [Configure Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_configuration.htm&type=5&language=en_US) For the Security Agent to complete tasks such as querying data to answer your questions or completing remediation steps, assign agent actions to your agent. 1. From Setup, in the Quick Find box, enter Profiles, and select the profile to which you want to add the tab, for example, Salesforce admin and click Edit. 2. Locate the Security Investigations tab and the Configuration tab. Change the settings for both tabs from Tab Hidden to Default On and save. 3. In the App Manager, locate the Security Center Lightning app and click Edit. 4. In Navigation Items (1) in Available Items, search for Security Investigations (2) then click the right pointing arrow (3) to move it to Selected Items. Use the up-pointing arrow (4) to order it as the second tab and save. ![Add the Security Investigations tab to Navigation Items.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/add_security_invest_tab.png) After you refresh, the Security Investigations tab appears in the Security Center app. 5. Open the Security Center app, and in the Configuration tab, in Agentforce for Security: 1. Turn on Agentforce for Security to allow agent-powered functions within Security Center. 2. Turn on Background Activity to allow running security investigations in the background. To leverage Agentforce for Security actions, in Agent Builder, create a new topic for Security Support or similar. Assign the relevant tool to the Topic and activate your Agent. ## Security Agent Tools (Beta) Use these agent tools to enable conversational security features: - [Classify Security Risks](https://help.salesforce.com/s/articleView?id=ai.copilot_actions_ref_classify_security_risk.htm&type=5&language=en_US): Deliver clear, conversational risk identification and prioritized remediation plans, ensuring admins know both the 'what' and the 'how' of security responses - [Get Security Alerts](https://help.salesforce.com/s/articleView?id=ai.copilot_actions_ref_get_security_alerts.htm&type=5&language=en_US): Cut through Salesforce notification overload by providing conversational, proactive security posture alerts. - [Get Security Metric Data](https://help.salesforce.com/s/articleView?id=ai.copilot_actions_ref_get_security_metric_data.htm&type=5&language=en_US): Translate your security posture into plain language with the Get Security Metric Data agent action. Ask questions, get answers, and spot threats before they strike. - [SaveInvestigationTimelineEntry](https://help.salesforce.com/s/articleView?id=ai.agent_ref_save_investigation_timeline_entry.htm&type=5&language=en_US): Enable the agent to analyze Event Monitoring logs and generate a visual timeline of activity before, during, and after an anomaly. - [Summarize User Activity](https://help.salesforce.com/s/articleView?id=ai.copilot_actions_ref_summarize_user_activity.htm&type=5&language=en_US): Easily identify potential suspicious activity. Ask simple questions to get insight into when a user logged in, what they viewed, and more. # Configure Your Template After you finish gathering your template requirements, build a template in Quip and add the Salesforce data that your company needs. ### Required Editions
Available in: Lightning Experience
1. Create a document in Quip. 2. Use headers to create an outline of required template sections. Refer to what data you identified needs to be in your template. 3. Identify sections that require Salesforce data. 4. Add context to relevant sections for your users. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note Keep it simple. Too much formatting can be intimidating for your users and can lead to time lost on formatting rather than content. Try using a checklist or bulleted list. 5. Mark the document as a template. [Tell Me How](https://help.salesforce.com/s/articleView?id=xcloud.quip_mark_as_template.htm&release=264.0.0&type=5 "To differentiate documents that your team uses as templates, mark your documents as templates in Quip. See what documents are embedded in Salesforce based on the object, convert your embedded documents to templates, and access them from the Template Library in Quip.") 6. Add templated Salesforce data: 1. [Add dynamic Salesforce records](https://help.salesforce.com/s/articleView?id=xcloud.quip_template_record.htm&release=264.0.0&type=5 "As you set up your templates, use Template Records. When a user creates a document from your embedded template, the Salesforce template records automatically populate with the record’s data and continue to stay up to date. Control the fields that your users see to keep information relevant and boost Account Plan adoption."). 2. [Add dynamic Salesforce related lists](https://help.salesforce.com/s/articleView?id=xcloud.quip_template_related_list.htm&release=264.0.0&type=5 "As you set up your templates, use Template Related Lists. When a user creates a document from your embedded template, the Salesforce template related lists automatically populate with the record’s data and continue to stay up to date. Configure the Salesforce List live app in Quip to auto-populate with a list of Opportunities related to an Account."). 3. [Add dynamic Salesforce reports](https://help.salesforce.com/s/articleView?id=xcloud.quip_dynamic_filters.htm&release=264.0.0&type=5 "Save time tailoring your master report to each individual by automatically filtering your reports based on your users, region, and more. Add a filtered Salesforce report to a document embedded in a Salesforce record. Embedded reports dynamically filter based on the record’s data."). 4. [Add a Salesforce Template Data Mention](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_add_template_data_mention.htm&release=264.0.0&type=5 "As you set up your templates, use Salesforce Template Data Mentions instead of mail merge syntax. When a user creates a document from your embedded template, the Salesforce Data Mentions automatically populate with record’s data and continue to stay up to date."). 5. [Add mail merge syntax](https://help.salesforce.com/s/articleView?id=xcloud.admin_files_quip_templates.htm&release=264.0.0&type=5 "Use templates to prepopulate documents with content that’s specific to the Salesforce record they’re embedded in. For example, you want to use a document to store an Account Plan for each account. When a user creates an Account Plan, you want it to include the same boilerplate content for every account. But you also want to include specific field values from the account, such as the account name and description."). 7. To let your users create a document from the template, turn on link sharing. From the template, click **Share**, and then include a shareable link. Click **Link Settings** and set access to **View only**. 8. By default, the template is added to your Created by Me private template gallery. You can also share it with specific users or move it to a folder to organize your templates thematically. 1. From the template, click **Share**. 2. Enter the name of a folder or person and set the level of access. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip To keep your sandbox templates organized while you test them, we recommend creating a Sandbox Templates folder. 9. Click **Done**. # Configuring a Card (Managed Package) For the managed package runtime, to configure a card on a layout, set these optional properties: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. To create a new version of a card, click **Create Version**. The new version is added underneath the current card. Creating a version of the card creates an exact copy of the card with a Version equal to the latest version number plus one, such as **Version 2**. See [Cards Framework Versioning (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_framework_versioning.htm&release=264.0.0&type=5 "For the managed package runtime, the Vlocity Cards Framework supports versioning for all components. The name, author, and version combination must be unique for each component of a given type (layout, card, or template) in an org."). 2. To filter the output of the returned data from the data source: 1. In the **Filter** section of the card, click **\+ Add Filter**. 2. In the first column's input field, enter the name of a field returned from the data source. For example, \['AccountName'\]. To view available data fields to filter, click **View Data** in the card or the card layout. 3. In the second column's input field, enter the value to filter. For example, Acme. 3. To configure a card to store data from the data source, or to enable additional features from a card template, in the **Card Session Variables** section, click **\+ Add Session Variables** to enter a variable **Name** and **Value**. 4. To use metatags to enable search engine optimization (SEO) options in your metadata, click +Add Metatags. The metatags feature enables the layout to write metatags to a page header. Available card metatags are: - `author` - `description` - `keywords` - `viewport` The metatags are inserted after a layout or card loads, whether or not the data source is set. Vlocity recommends that you replace metatags with the same name. Do not duplicate metatags. Web crawlers ignore duplicate tags. 5. Select a data source for the layout in the **Data Source** field. The data source holds the master query that returns results in a JSON structure for cards in the layout. For example, you might query every policy associated with an account, then create a card for each policy type. For more information on how to configure a data source and to see a complete list of data sources, see [Configuring Data Sources](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_data_sources_for_cards_components.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source on a card, layout, or flyout to retrieve data from a Salesforce object or an external database. Display the returned data on cards in a layout or flyout."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Cards can have data sources different from the layout data source. What’s next: Add card states to your cards. See [Adding a State to a Card (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_state_to_a_card.htm&release=264.0.0&type=5 "For the managed package runtime, add card states to display data fields from the card or card layout data source, to present different interactions and layouts based on specified conditions, to add actions, and to add flyouts to display additional information about a record. For example, for cards displaying past due policy information, use a card state template, and display actions, fields, and flyouts different from those on cards displaying information for active policies in good standing."). # Configuring a Platform Event Data Source (Managed Package) For the managed package runtime, configure a Platform Event data source to enable apps to communicate inside and outside of Salesforce. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Platform Events are part of Salesforce’s enterprise messaging platform. A Platform Event combines PushTopic and Streaming Channel. Instead of working with an sObject, Platform Events work with custom objects. See [Platform Event Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_platform_event_data_source_1.htm&release=264.0.0&type=5 "For the managed package runtime, configure a Platform Event data source to enable apps to communicate inside and outside of Salesforce."). To configure a Platform Event data source: 1. In the Cards Designer, in the Layout or Cards pane, from the **Data Source** picklist, select **Streaming API**. 2. From the **Type** picklist, select **Platform Event**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/streamingplatformevent.png) 3. In the **Channel** field, enter the URL of the Platform Event that you created. 4. From the **Operation** picklist, select **Replace** or **Append**. - Select **Replace** to overwrite the Card with new data. - Select **Append** to add new data to the Card. From the **Get All Messages** picklist, select **True** or **False**. - Select **True** to get all data from the last 24 hours. - Select **False** to get the latest data update. 5. (Optional). Enter values for these properties: - To drill down to a specific dataset, in the **Result JSON Path** field, enter a path. For example, enter records.results, which drills down to the `results` array and passes the array to the card or card layout. - To sort data by a specific data field, enter the field name in the **Order By** input field. - To reverse the order of the data returned, select **True** from the **Reverse Order** picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/orderbyreverseorder.png) - Set a **Timeout** value in milliseconds. The timeout value controls the time that the framework waits for the designated data source to return a response. Timeouts improve handling user interactions with long running processes. Setting an appropriate timeout value allows the application and users to react accordingly to long wait times. - Set an **Interval** value in milliseconds. The card component's data source refreshes continuously at the given interval and checks for changes in data source records. If changes are found, the layout or card component reloads. Setting an interval enables recursive updates of records. 6. To preview a card using real data, add a test variable in the **Test Data Source Settings** fields. See [Testing Data Source Settings (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_testing_data_source_settings.htm&release=264.0.0&type=5 "For the managed package runtime, add runtime variables to fetch and test your data source."). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important After configuring a Streaming API data source for an LWC card, you cannot preview the card in the Card Designer's Preview pane. To view the LWC card, you must deploy it, and then add the LWC card to a Lightning or Community page. For more information on deploying an LWC card, see [Creating an LWC Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components."). For more information on adding an LWC card to a page, see [Adding an LWC Card to a Lightning or Community Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_an_lwc_card_to_a_lightning_or_community_page.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model."). # Configuring a PushTopic Data Source (Managed Package) For the managed package runtime, configure a PushTopic data source to run an SOQL query that returns a result that notifies listeners of changes to records in a Salesforce organization. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The PushTopic defines a Streaming API channel. For instance, if you want to get notified when a case is created for a particular type or status or both, use a PushTopic. For more information on how a Streaming API PushTopic data source works, see [PushTopic Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_pushtopic_data_source_1.htm&release=264.0.0&type=5 "For the managed package runtime, the Streaming Channel API type uses the Streaming API to send notifications of general events that are not tied to Salesforce data changes. Use the Streaming Channel API when you want to send and receive notifications based on custom events that you specify. You can use Streaming Channel API for any application that sends custom notifications, such as a Chat application. Streaming API is known as Generic Streaming in Salesforce."). To configure a PushTopic data source: 1. In the Cards Designer, in the Layout or Cards pane, from the **Data Source** picklist, select **Streaming API**. 2. From the **Type** picklist, select **PushTopic**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/pushtopicdemo.png) 3. In the **Channel** field, select the URL of the PushTopic that you created. This field is auto-populated for Streaming Channel and PushTopic. 4. From the **Operation** picklist, select **Replace** or **Append**. - Select **Replace** to overwrite the Card with new data. - Select **Append** to add new data to the Card. From the **Get All Messages** picklist, select **True** or **False**. - Select **True** to get all data from the last 24 hours. - Select **False** to get the latest data update. 5. (Optional). Enter values for these properties: - To drill down to a specific dataset, in the **Result JSON Path** field, enter a path. For example, enter records.results, which drills down to the `results` array and passes the array to the card or card layout. - To sort data by a specific data field, enter the field name in the **Order By** input field. - To reverse the order of the data returned, select **True** from the **Reverse Order** picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/orderbyreverseorder.png) - Set a **Timeout** value in milliseconds. The timeout value controls the time that the framework waits for the designated data source to return a response. Timeouts improve handling user interactions with long running processes. Setting an appropriate timeout value allows the application and users to react accordingly to long wait times. - Set an **Interval** value in milliseconds. The card component's data source refreshes continuously at the given interval and checks for changes in data source records. If changes are found, the layout or card component reloads. Setting an interval enables recursive updates of records. 6. To preview a card using real data, add a test variable in the **Test Data Source Settings** fields. See [Testing Data Source Settings (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_testing_data_source_settings.htm&release=264.0.0&type=5 "For the managed package runtime, add runtime variables to fetch and test your data source."). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important After configuring a Streaming API data source for an LWC card, you cannot preview the card in the Card Designer's Preview pane. To view the LWC card, you must deploy it, and then add the LWC card to a Lightning or Community page. For more information on deploying an LWC card, see [Creating an LWC Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components."). For more information on adding an LWC card to a page, see [Adding an LWC Card to a Lightning or Community Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_an_lwc_card_to_a_lightning_or_community_page.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model."). # Configuring a REST Data Source Using Named Credentials (Managed Package) For the managed package runtime, configure a REST data source using Named Credentials to authenticate Apex callouts. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). A named credential specifies the URL of a callout endpoint and its required authentication parameters in one definition. To create a named credential, see [Named Credentials as Callout Endpoints](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_callouts_named_credentials.htm). To configure a REST data source: 1. On the Vlocity Cards tab, click **New** to configure a data source for a new card component, or select an existing component to configure its data source. 2. In the Cards Designer, in the Layout or Cards pane, from the **Data Source** picklist, select **REST**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/restdatasource.png) 3. From the **Subtype** picklist, select **Named Credential**. 4. In the **Path** box, enter the REST endpoint URL. 5. Specify the REST method: - `GET`—Requests data specified by the parameters of the URL. - `POST`—Sends JSON data specified in the Body text area. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/screenshot___rest___post.png) You can use Context Variables to pass inherited values with either method. # Configuring a REST Web Data Source (Managed Package) For the managed package runtime, configure a REST Web data source to get or post data from or to a public API. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). For example, pull in weather data from a weather API based on a policy holder's postal code. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. See [Configure an Integration Procedure Data Source on a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_an_integration_procedure_data_source_on_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call. For example, as a Systems Admin, you want your customer service reps to view the weather forecast of policy holders when on a call. You can use an Integration Procedure with an Omnistudio Data Mapper Extract that returns an account's ZIP code, and a REST API call that uses the ZIP code to get the current forecast for the Account's region."). To configure a REST data source: 1. On the Vlocity Cards tab, click **New** to configure a data source for a new cards component, or select the component for which you want to configure a data source. 2. In the Cards Designer, in the Layout or Cards pane, from the **Data Source** picklist, select **REST**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/restwebdatasource.png) 3. From the **Subtype** picklist, select **Web**. 4. In the **Endpoint** box, enter REST endpoint URL. For example: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/screenshot___rest___endpoint.png) 5. Specify the REST method: - `GET`—Requests data specified by the parameters of the URL. - `POST`—Sends JSON data specified in the Body text area. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/screenshot___rest___post.png) You can use Context Variables to pass inherited values with either method. 6. Click **+Add Header Variable** to add request headers. Most third-party APIs expect headers, such as tokens, public keys, and content-type. For example:

Request header

Value

Accept:

application/json

Accept-Language:

en_US

Token:

Ke2B34kmpOU9wen

If you are making a cross-domain REST API call, you must ensure that it abides by the Cross-Origin Resource Sharing (CORS) policy. For example, an API response that contains a request header named `Access-Control-Allow-Origin: *` enables CORS. 7. (Optional). Enter values for these properties: - To drill down to a specific dataset, in the **Result JSON Path** field, enter a path. For example, enter records.results, which drills down to the `results` array and passes the array to the card or card layout. - To sort data by a specific data field, enter the field name in the **Order By** input field. - To reverse the order of the data returned, select **True** from the **Reverse Order** picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/orderbyreverseorder.png) - Set a **Timeout** value in milliseconds. The timeout value controls the time that the framework waits for the designated data source to return a response. Timeouts improve handling user interactions with long running processes. Setting an appropriate timeout value allows the application and users to react accordingly to long wait times. - Set an **Interval** value in milliseconds. The card component's data source refreshes continuously at the given interval and checks for changes in data source records. If changes are found, the layout or card component reloads. Setting an interval enables recursive updates of records. 8. To preview a card using real data, add a test variable in the **Test Data Source Settings** fields. See [Testing Data Source Settings (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_testing_data_source_settings.htm&release=264.0.0&type=5 "For the managed package runtime, add runtime variables to fetch and test your data source."). # Configuring a SOQL Query Data Source (Managed Package) For the managed package runtime, configure a data source to use a Salesforce Object Query Language (SOQL) query to search an org's data for specific information. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note When mapping fields, only fields in the field picker that have non-null values for the specific record in the test query are visible. Use a test record that you know has non-null values for all the fields you want to map. Or use custom fields if the test record doesn't have the fields that you want to map. The SOQL queries are encrypted so that Cards do not display query information on the client-side. If security is a concern, use an Omnistudio Data Mapper instead of a SOQL query, because Data Mappers provide field-level security. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. See [Configuring an Integration Procedure Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_an_integration_procedure_data_source.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call."). To configure a data source for a card, perform the following steps: 1. In the **SOQL Query** box, enter a SOQL expression. For example: ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/soqlquerydatasource.png) 2. (Optional). Enter values for these properties: - To drill down to a specific dataset, in the **Result JSON Path** field, enter a path. For example, enter records.results, which drills down to the `results` array and passes the array to the card or card layout. - To sort data by a specific data field, enter the field name in the **Order By** input field. - To reverse the order of the data returned, select **True** from the **Reverse Order** picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/orderbyreverseorder.png) - Set a **Timeout** value in milliseconds. The timeout value controls the time that the framework waits for the designated data source to return a response. Timeouts improve handling user interactions with long running processes. Setting an appropriate timeout value allows the application and users to react accordingly to long wait times. - Set an **Interval** value in milliseconds. The card component's data source refreshes continuously at the given interval and checks for changes in data source records. If changes are found, the layout or card component reloads. Setting an interval enables recursive updates of records. 3. To preview a card using real data, add a test variable in the **Test Data Source Settings** fields. See [Testing Data Source Settings (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_testing_data_source_settings.htm&release=264.0.0&type=5 "For the managed package runtime, add runtime variables to fetch and test your data source."). # Configuring a SOSL Search Data Source (Managed Package) For the managed package runtime, construct text-based search queries against the search index with Salesforce Object Search Language (SOSL). ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). You can search text, email, and phone fields for multiple objects to which you have access, including custom objects, in a single query. See the [SOSL and SOQL Reference](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_sosl_intro.htm) in the Salesforce help. The SOSL queries are encrypted so that Cards do not display query information on the client-side. To create a SOSL query for a card: 1. On the Vlocity Cards tab, click **New** to configure a data source for a new cards component, or select an existing component to configure its data source. 2. In the Cards Designer, in the Layout or Cards pane, from the **Data Source** picklist, select **SOSL Search**. 3. Select or enter values for the following:

Field

Select or Enter

Search For

Enter the search term in the object field. Must be more than one character.

In

Select the fields to search:

  • All fields (Name, Email, Phone)

  • Name Fields

  • Email Fields

  • Phone Fields

Returning sObject & fields

Select at least one sObject. Click + Add sObject to add more sObjects and fields.

Limit to

Specify the maximum number of rows to return.

4. Reusing topic #UUID-ae995bf9-95bf-810f-2f09-0d74d3ec2531 5. Test data source settings. To preview a cards component using real data, add a test variable that the query can use to return live data. See [Testing Data Source Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_testing_data_source_settings.htm&release=264.0.0&type=5 "For the managed package runtime, add runtime variables to fetch and test your data source."). # Configuring a Streaming Channel Data Source (Managed Package) For the managed package runtime, enable the Streaming Channel data source to send and receive notifications based on custom events that you specify. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The Streaming Channel API type enables the Streaming API to send notifications of general events that are not tied to Salesforce data changes. See [Streaming Channel Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_streaming_channel_data_source_1.htm&release=264.0.0&type=5 "For the managed package runtime, the Streaming Channel API type uses the Streaming API to send notifications of general events that are not tied to Salesforce data changes."). To configure a Streaming Channel data source: 1. In the Cards Designer, in the Layout or Cards pane, from the **Data Source** picklist, select **Streaming API**. 2. From the **Type** picklist, select **Streaming Channel**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/genericstreamingdemo.png) 3. In the **Channel** field, select the URL of the app that you created. This field is auto-populated for Streaming Channel and PushTopic. 4. From the **Operation** picklist, select **Replace** or **Append**. - Select **Replace** to overwrite the Card with new data. - Select **Append** to add new data to the Card. From the **Get All Messages** picklist, select **True** or **False**. - Select **True** to get all data from the last 24 hours. - Select **False** to get the latest data update. 5. (Optional). Enter values for these properties: - To drill down to a specific dataset, in the **Result JSON Path** field, enter a path. For example, enter records.results, which drills down to the `results` array and passes the array to the card or card layout. - To sort data by a specific data field, enter the field name in the **Order By** input field. - To reverse the order of the data returned, select **True** from the **Reverse Order** picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/orderbyreverseorder.png) - Set a **Timeout** value in milliseconds. The timeout value controls the time that the framework waits for the designated data source to return a response. Timeouts improve handling user interactions with long running processes. Setting an appropriate timeout value allows the application and users to react accordingly to long wait times. - Set an **Interval** value in milliseconds. The card component's data source refreshes continuously at the given interval and checks for changes in data source records. If changes are found, the layout or card component reloads. Setting an interval enables recursive updates of records. 6. To preview a card using real data, add a test variable in the **Test Data Source Settings** fields. See [Testing Data Source Settings (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_testing_data_source_settings.htm&release=264.0.0&type=5 "For the managed package runtime, add runtime variables to fetch and test your data source."). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important After configuring a Streaming API data source for an LWC card, you cannot preview the card in the Card Designer's Preview pane. To view the LWC card, you must deploy it, and then add the LWC card to a Lightning or Community page. For more information on deploying an LWC card, see [Creating an LWC Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components."). For more information on adding an LWC card to a page, see [Adding an LWC Card to a Lightning or Community Page (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_an_lwc_card_to_a_lightning_or_community_page.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model."). # Configuring Action Options (Managed Package) For the managed package runtime, configure additional options for Vlocity Actions, Omniscript Actions, and Custom Actions on a card state by enabling the **Action Options** feature. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/action_options.png) Options available for all actions: - **Custom Parameters**: Enter additional parameters to send them with the request. - **Conditions**: Enter conditions to hide actions from specific users. For example, to display an action only to an account named Acme, select the \['Name'\] field and set it equal to Acme. See [Displaying Conditional Actions on a Card (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_displaying_conditional_actions_on_a_card.htm&release=264.0.0&type=5 "For the managed package runtime, you can use conditions to show or hide actions on a card based on the card data. For example, you can have a card display one set of actions for a Policy card when the Status is New, and a different set when the Status is not New. To do this, clone a state on the card, modify the actions, and use conditions to determine when to display each state."). ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/action_options_conditions.png) Options available only for Custom Actions: - **Invoke Class Name**: Enter an Apex class name to invoke through the action. For example, EmailManager. - **Invoke Method Name**: Enter a method within the Apex class to invoke through the action. For example, sendMail. - **Input Map**: Enter key-value pairs to send as a Map object to the invoked Apex class. For more information, see [Maps](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/langCon_apex_collections_maps.htm). - **Options Map**: Enter key-value pairs to send as an Options Map to the invoked Apex class. # Configuring an Apex Remote Data Source (Managed Package) For the managed package runtime, configure a data source to invoke an Apex Class and method to fetch data to populate a card. Before you begin: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - Know the Apex remote class and method you need to invoke before you can configure a remote data source. Managed packages can include Apex remote classes and methods. To see existing Apex classes: 1. In your org, go to Setup, and in the **Quick Find** box, enter Apex. 2. Click **Apex Classes**. - Beginning with Vlocity Health and Insurance Spring '21, add an Apex class permissions checker to ensure only authorized users can access VlocityOpenInterface classes (APIs) from a remote action on a card. Apex remote data sources can run asynchronously through Apex. This increases the CPU time but ensures that long-running transactions are not timed-out. For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. 1. In your org, click the App Launcher, click Vlocity Cards, click a version of a card layout to open the Card Designer. 2. In the Layout or Cards pane, from the **Data Source** picklist, select **Apex Remote**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/apexremotedatasource.png) 3. Enter the name of the **Remote Class**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/screenshot___apex_class.png) ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important The Apex Class must implement the Vlocity Open Interface otherwise an error message displays. 4. Enter the name of the Remote Method. For example, you can access the remote Apex method getStories from the remote Apex class StoryListHandler. 5. Click **\+ Add Input Map Variable** to add one or more name-value pairs to pass to the remote Apex class method. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/ds_input_map_apex_remote.png) For example, to use the Page Parameters `{{params}}` [context variable](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, several variables are available across the framework to provide contexts to cards, data sources, flyouts, templates, and other components.") to dynamically get the ContextId for your layouts and cards: 1. In the first field of the _Input Map_, enter a ContextId form your Apex class method, such as `AccountId`. 2. In the second field of the _Input Map_, enter `{{params.id}}` as the value. Parameters passed to the page are stored in the `{{params}}` context variable for use anywhere in the Vlocity Cards framework. In this case, your card or layout inherits the Id of the record page it's on in order to dynamically populate the card with that record's data. The remote method receives an inherited value as an Account Id from the layout or card, not the literal string `{{params.id}}`. 6. Click **+Add Options Map Variable** to add option variables to the map passed to the remote method. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note By default the `NS.IntegrationProcedureService` continuation object is set for you to use asynchronous callouts to make long-running requests from a Visualforce page to an external Web service and process responses in callback methods. `NS` represents your org's Namespace, such as `vlocity_ins` or `vlocity_cmt`, as in `vlocity_ins.IntegrationProcedureService`. 7. (Optional). Enter values for these properties: - To drill down to a specific dataset, in the **Result JSON Path** field, enter a path. For example, enter records.results, which drills down to the `results` array and passes the array to the card or card layout. - To sort data by a specific data field, enter the field name in the **Order By** input field. - To reverse the order of the data returned, select **True** from the **Reverse Order** picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/orderbyreverseorder.png) - Set a **Timeout** value in milliseconds. The timeout value controls the time that the framework waits for the designated data source to return a response. Timeouts improve handling user interactions with long running processes. Setting an appropriate timeout value allows the application and users to react accordingly to long wait times. - Set an **Interval** value in milliseconds. The card component's data source refreshes continuously at the given interval and checks for changes in data source records. If changes are found, the layout or card component reloads. Setting an interval enables recursive updates of records. 8. Preview a card using real data, add a test variable in the **Test Data Source Settings** fields. # Configuring an Apex REST Data Source (Managed Package) For the managed package runtime, configure a data source to use an Apex REST call to fetch data to populate fields on a Flexcard. See ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). [Introduction to Apex REST](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_rest_intro.htm). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. See [Configuring an Integration Procedure Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_an_integration_procedure_data_source.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call."). To configure Salesforce to use an Apex REST method: 1. On the Vlocity Cards tab, click **New** to configure a data source for a new cards component, or select an existing component to configure its data source. 2. In the Cards Designer, in the Layout or Cards pane, from the **Data Source** picklist, select **Apex REST**. 3. In the **Endpoint** field, enter the URL of the REST endpoint. 4. Specify the REST method: - `GET`—Requests data specified by the parameters of the URL. - `POST`—Sends JSON data specified in the Body text area. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/screenshot___rest___post.png) You can use Context Variables to pass inherited values with either method. 5. (Optional). Enter values for these properties: - To drill down to a specific dataset, in the **Result JSON Path** field, enter a path. For example, enter records.results, which drills down to the `results` array and passes the array to the card or card layout. - To sort data by a specific data field, enter the field name in the **Order By** input field. - To reverse the order of the data returned, select **True** from the **Reverse Order** picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/orderbyreverseorder.png) - Set a **Timeout** value in milliseconds. The timeout value controls the time that the framework waits for the designated data source to return a response. Timeouts improve handling user interactions with long running processes. Setting an appropriate timeout value allows the application and users to react accordingly to long wait times. - Set an **Interval** value in milliseconds. The card component's data source refreshes continuously at the given interval and checks for changes in data source records. If changes are found, the layout or card component reloads. Setting an interval enables recursive updates of records. 6. To preview a card using real data, add a test variable in the **Test Data Source Settings** fields. See [Testing Data Source Settings (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_testing_data_source_settings.htm&release=264.0.0&type=5 "For the managed package runtime, add runtime variables to fetch and test your data source."). # Configuring an Integration Procedure Data Source (Managed Package) For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note An Integration Procedure doesn’t support the following data sources: - Salesforce Object Search Language (SOSL) - Streaming API - Off-Platform 1. On the Vlocity Cards tab, click **New** to configure a data source for a new card, or select an existing card to configure its data source. 2. In the Cards Designer, in the Layout or Cards pane, from the **Data Source** picklist, select **Integration Procedures**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_ip_data_source_2.png) 3. Enter the **Name** of the Integration Procedure to use. To create an Integration Procedure, see [Create an Integration Procedure (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_integration_procedure.htm&release=264.0.0&type=5 "For the managed package runtime, to create an Integration Procedure, you must name it, configure it, define its logic, and preview how it runs. You can also view debugging information and set options that apply only to previews."). 4. Click **\+ Add Input Map Variable** to add one or more name-value pairs to pass to the Integration Procedure. To determine the name-value pair to pass to the Integration Procedure, in your Integration Procedure, view the **Element Value Map** on its SetValues action or the **Input Parameters** on its Preview tab. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_ip_input_map.png) For example, to use the Page Parameters `{{params}}` [context variable](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, several variables are available across the framework to provide contexts to cards, data sources, flyouts, templates, and other components.") to dynamically set the ContextId of your layouts and cards: 1. Open your Integration Procedure, click the Preview tab to view the **Input Parameters**. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_tip.png) Tip To quickly access the Integration Procedure, click the link icon next to the Integration Procedure name. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_ip_link_icon.png) 2. In the Data Source section of your card or layout, in the first field of the **Input Map**, enter the key of the **Input Parameter**, such as `AccountId`. 3. In the second field of the **Input Map**, enter `{{params.id}}` as the value. Parameters passed to a page are stored in the `{{params}}` context variable for use anywhere in the Vlocity Cards framework. In this case, your card or layout inherits the Id of the record page it's on in order to dynamically populate the cards with that record's data. 5. Optionally, enter the values for the following: - **Options Map:** To pass additional parameters to the Integration Procedure, enter a name-value pair. - **Return JSON Path:** To drill down through the JSON data to pass a specific dataset to the cards, enter the JSON path. For example, enter Account.Cases to return data from the ‘Cases’ object only. - **OrderBy:** To change the order of the data returned, choose the data field by which to order the returned data. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important The **OrderBy** feature works with one array of objects. The feature does not work with multiple objects with or without internal arrays. For example, if you want to order by Case.Number, and have Account, Cases and Contact objects in the returned data, the **OrderBy** feature does not work. - **Reverse Order:** To reverse the order of the data returned, select **True** from the picklist. - **Timeout (ms):** To limit the time that the framework waits for the designated data source to return a response, set a timeout value in milliseconds. - Timeouts improve handling user interactions with long running processes. Setting an appropriate timeout value allows the application and users to react accordingly to long wait times. - **Interval (ms):** To continuously refresh the data and check for changes from the data source, set an interval value in milliseconds. - If changes are found, the layout or card component reloads. Setting an interval enables recursive updates of records. 6. In **Test Data Source Settings**, add a test variable that the query can use to return live data in the Preview pane. See [Testing Data Source Settings (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_testing_data_source_settings.htm&release=264.0.0&type=5 "For the managed package runtime, add runtime variables to fetch and test your data source."). 7. To Use Dummy Data from an Integration Procedure: 1. In a current or new Integration Procedure add a **Response Action** step. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_ip_dummydata_responseaction.png) 2. Use one of two methods to add dummy JSON data: - For a small dataset: 1. In the Properties tab, click **ADDITIONAL OUTPUT RESPONSE**. 2. For each key/value pair, click the **Add Key/Value Pair** button and add your data. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_ip_dummydata_additional_ouput_response.png) - For a large dataset: 1. Click the **Edit as JSON** link at the top right of the Properties tab. 2. In the **additionalOutput** node, enter your full JSON data as an object. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_ip_dummydata_additionaloutput_node.png) 3. (Optional) If the Integration Procedure has other data sources, to return only the dummy data, select the checkbox next to the **Return Only Additional Output** label. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/card_ip_dummydata_return_only.png) 4. In the Card Designer, in the Layout or Cards pane, confirm that the Integration Procedure with the dummy data is chosen in the **Name** field. 5. To view your dummy data, click the **View Data** button at the bottom of the Layout or Cards pane. # Configuring an Omnistudio Data Mapper Data Source (Managed Package) For the managed package runtime, configure a Data Mapper data source to fetch data from a Data Mapper Extract. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Data Mapper is a mapping tool that enables you to read, transform, and write Salesforce data. See [Data Mapper Overview](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptors.htm&release=264.0.0&type=5 "For the managed package runtime, a Data Mapper is a mapping tool that enables you to read, transform, and write Salesforce data. There are four types of Data Mapper: Turbo Extract, Extract, Transform, and Load."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. See [Configuring an Integration Procedure Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_an_integration_procedure_data_source.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call."). To use a Data Mapper Extract as a data source for a layout or card: 1. On the Vlocity Cards tab, click **New** to configure a data source for a new cards component, or select an existing component to configure its data source. 2. In the Cards Designer, in the Layout or Cards pane, from the **Data Source** picklist, select Data Mapper. 3. Enter the **Interface Name** of a Data Mapper Extract. 4. Click **+Add Input Map Variable** and add one or more name-value pairs to pass to the Data Mapper. For example, to use the Page Parameters `{{params}}` [context variable](https://help.salesforce.com/s/articleView?id=xcloud.os_cards_context_variables.htm&release=264.0.0&type=5 "For the managed package runtime, several variables are available across the framework to provide contexts to cards, data sources, flyouts, templates, and other components.") to dynamically get the ContextId of your layouts and cards: 1. Open your Data Mapper, click the Preview tab to view the _Input Parameters_. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_tip.png) Tip To quickly access the Data Mapper, click the link icon next to the Interface Name. 2. In the Data Source section of your card or layout, in the first field of the _Input Map_, enter the key of the _Input Parameter_, such as `AccountId`. 3. In the second field of the _Input Map_, enter `{{params.id}}` as the value. Parameters passed to the page are stored in the `{{params}}` context variable for use anywhere in the Vlocity Cards framework. In this case, your card or layout inherits the Id of the record page it's on in order to dynamically populate the cards with that record's data. 5. (Optional). Enter values for these properties: - To drill down to a specific dataset, in the **Result JSON Path** field, enter a path. For example, enter records.results, which drills down to the `results` array and passes the array to the card or card layout. - To sort data by a specific data field, enter the field name in the **Order By** input field. - To reverse the order of the data returned, select **True** from the **Reverse Order** picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/orderbyreverseorder.png) - Set a **Timeout** value in milliseconds. The timeout value controls the time that the framework waits for the designated data source to return a response. Timeouts improve handling user interactions with long running processes. Setting an appropriate timeout value allows the application and users to react accordingly to long wait times. - Set an **Interval** value in milliseconds. The card component's data source refreshes continuously at the given interval and checks for changes in data source records. If changes are found, the layout or card component reloads. Setting an interval enables recursive updates of records. 6. To preview a card using real data, add a test variable in the **Test Data Source Settings** fields. # Configuring an OS Action (Managed Package) For the managed package runtime, set up an OS Action. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. Open the Vlocity Cards tab, and click on a version of a card to open the Card Designer. 2. Click **Add OS Action** in the Actions section of a card state 3. In the **Id** field, enter a unique name to distinguish the action from other actions in the Card Designer. 4. In the **Display Name** field, enter the name that the action displays to the user. 5. Click in the **Omniscript** typeahead field to choose an active Omniscript from the drop-down list. Beginning with Vlocity Insurance and Health Winter '20 , the Omniscripts are listed as `Type/SubType/Language`. For example, if you select CustomerInteractionAccountCMT/Creation/English, the Type is the Omniscript name CustomerInteractionAccountCMT, the SubType is Creation, and the Language is English. 6. (Optional) Enter values for these properties: - **Action Options**: To add custom parameters, set conditions for when the OS Action displays, and configure optional settings for LWC enabled cards, select this checkbox. See [Configuring Action Options (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_action_options.htm&release=264.0.0&type=5 "For the managed package runtime, configure additional options for Vlocity Actions, Omniscript Actions, and Custom Actions on a card state by enabling the Action Options feature."). - **Icon**: Select a Vlocity icon or an [SLDS icon](https://www.lightningdesignsystem.com/icons/) to display next to the action link. For a complete list of Vlocity Icons, go to the Vlocity Actions tab, open any action, and click the Vlocity Icons header label to reveal the list of icons. - **Open URL in**: Select **Current Window** or **New Tab/Window** to indicate where to open the target URL. - **Visualforce Page**: Choose a Visualforce page to display the Omniscript on a custom page. For example, if you have a custom template for your Omniscript, you might create a custom page to display it. - **Layout**: Select the **Lightning** or **Newport** for the layout. This feature works for Angular Omniscripts only. - **LWC Enabled**: If the selected Omniscript is an LWC OS, this checkbox is automatically selected. - When **LWC Enabled** is checked, enter values for these properties: - **Context Id**: Enter the sObject's ContextId associated with your Omniscript. For example, if your LWC Omniscript updates account information, your context Id is an account record ID. - **Console Tab Icon**: Select a Vlocity icon or an [SLDS icon](https://www.lightningdesignsystem.com/icons/) to display in the subtab of a console after the OS action link is clicked. For example, select standard:account for an Omniscript that updates account information. ![Console tab icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/console_tab_icon.png) - **Console Tab Label**: Enter the visible label of the Console Tab Icon. For example, Update Account. ![Console tab label](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/console_tab_label.png) # Configuring and Executing Co-Branded Email Campaigns The co-branded email experience consists of two main workflows: vendor setup and partner execution. Vendors create and configure marketing campaigns with pre-built email content, then publish these campaigns to the partner Campaign Marketplace. After campaigns are published, partners can browse the marketplace and enroll in campaigns that align with their business goals. After enrollment, partners can send personalized, brand-compliant emails to their leads and contacts directly from the partner portal. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions in Agentforce for Sales with Partner Ecosystem Management - Members, Partner Ecosystem Management - Login.
- **[Configuring Campaigns for Partner Users](https://help.salesforce.com/s/articleView?id=xcloud.pem_setup_campaign_configuration_vendor.htm&release=264.0.0&type=5)** Channel managers create marketing campaigns by using Marketing Cloud capabilities. Each campaign includes essential details such as a name, description, and clear campaign objectives that help partners understand the campaign's purpose and intended outcomes. - **[Discovering and Executing Campaigns](https://help.salesforce.com/s/articleView?id=xcloud.pem_discover_execute_campaigns.htm&release=264.0.0&type=5)** After vendors configure and publish campaigns, partners can browse the Campaign Marketplace, enroll in campaigns, and send co-branded emails to their leads and contacts. # Configuring Back-in-Stock Notifications Use these configurations to send back-in-stock notifications. ## Catalog Feed Catalog Feed from Commerce Cloud to Marketing Cloud Engagement Use the [Marketing Cloud Connector](https://github.com/SalesforceCommerceCloud/marketing-cloud-connector) for Commerce Cloud to send a regular [catalog feed](https://github.com/SalesforceCommerceCloud/marketing-cloud-connector/blob/master/docs/4_0_AdditionalFeatures.md#navlink). The default catalog feed configuration sends the onlineAvailability flag. However, this flag indicates that the product is set to be available online and not that it is in stock or out of stock. Override the catalog feed script to use the `getAvailabilityModel().isInStock()` method and output it in the feed. Catalog Importing in Engagement [Import](https://help.salesforce.com/s/articleView?id=mktg.mc_as_use_an_import_activity.htm&type=5&language=en_US) the catalog into a data extension using [Automation Studio](https://help.salesforce.com/s/articleView?id=mc_as_automation_studio.htm&language=en_US&type=5). Create a data extension using the product catalog field list described in [Einstein Recommendations Catalog Field Definitions](https://help.salesforce.com/s/articleView?id=mktg.mc_pb_catalog_field_definition.htm&type=5&language=en_US). If you’re using or planning to implement [Einstein Recommendations](https://help.salesforce.com/s/articleView?id=mktg.mc_pb_personalization_builder.htm&type=5&language=en_US), you can instead use the [catalog import](https://help.salesforce.com/articleView?id=mktg.mc_pb_catalog_import.htm&type=5&language=en_US) in Engagement, setting the schedule options as appropriate. Set the import notification settings to monitor the success or failure of the import. ## Back-in-Stock Notifications Create a Notification Sign-Up on the Product Detail Page - Override the productAvailability.isml in a new cartridge. - Render an alternative template if the stock is unavailable. - Use a form to capture the notification request. - Use a controller to handle the UI request and pass it to model. - Use a model to invoke the b2c-crm-sync ServiceMgr to send the request to Service Cloud. Create a Service Cloud Flow to Receive the Notification Requests - The flow resolves the customer to a contact record or creates a contact. - The flow creates an associated Back In Stock Notification custom object record with: - Master and detail relationship to the contact record - Product ID and SKU - Status of requested or sent Use [MC Connect](https://trailhead.salesforce.com/content/learn/modules/marketing-cloud-connect) to connect Service Cloud and Engagement. Consider using a [multi-org](https://help.salesforce.com/articleView?id=mktg.mc_co_faqs_for_multi_org.htm&type=5&language=en_US) setup. After setup, use [Contact Builder](https://trailhead.salesforce.com/en/content/learn/modules/contact-builder-implementation-basics/get-started-with-contact-builder) to configure [synchronized data sources](https://help.salesforce.com/articleView?id=mktg.mc_cab_data_integration_for_your_account_with_synchronized_data_sources.htm&type=5&language=en_US). Select only the objects and fields that you require. We recommend the contact object and the Back In Stock Notification custom object. Depending on the configuration of your Service Cloud, sync other prerequisite objects. Deliver Back-in-Stock Notification Emails with Engagement Use [Content Builder](https://help.salesforce.com/articleView?id=mktg.mc_ceb_content_builder.htm&type=5&language=en_US) to create the emails. Ensure that your email is created with a link to the product display page to let customers directly access the product from their inbox. Create a [data extension](https://help.salesforce.com/articleView?id=mktg.mc_es_create_data_extension.htm&type=5&language=en_US) to use as the [entry source](https://help.salesforce.com/articleView?id=mktg.mc_jb_data_extension.htm&type=5&language=en_US) for the journey in [Journey Builder](https://trailhead.salesforce.com/content/learn/modules/journey-builder-basics). Use [Automation Studio](https://help.salesforce.com/articleView?id=mc_as_automation_studio.htm&type=5&language=en_US) to create an automation. Use the [SQL query](https://help.salesforce.com/articleView?id=mktg.mc_as_using_the_query_activity.htm&type=5&language=en_US) to create the audience based on the stock now being available. Ensure that the SQL query collects the required fields across the sync data extensions and product catalog [IGO\_Products](https://help.salesforce.com/articleView?id=mktg.mc_pb_integration_with_contact_builder.htm&type=5&language=en_US) (or user-created product) data extension. Ensure that the SQL query adds the contacts to the journey data extension. Suggested fields are:Ensure that the SQL query collects only records where the status of the back-in-stock notification is requested. Append only new records into the journey data extension. - ContactID - EmailAddress - SkuID - ProductName - ProductLink - ImageLink - BIS\_ID (the ID of the back-in-stock notification record from the synchronized data extension) Create your journey using the data extension as your entry source, evaluating new record entries. Create at least two journey activity steps. The first step sends the email, and the second step updates the back-in-stock notification record status to sent. This journey prevents more than one notification from being sent for each logged request. Configure your automation and journey to run daily after the product catalog import completes. Use Service Cloud to [create required reports on back-in-stock notification sign-ups](https://trailhead.salesforce.com/en/content/learn/modules/lex_implementation_reports_dashboards), for example, to share with stock management. Get insights about shopper purchases using [Google Analytics 360](https://trailhead.salesforce.com/en/content/learn/modules/google-analytics-360-integration-for-marketing-cloud). ## Related Content
Icon of an arrow that points right.

Review earlier steps in this solution.

# Configuring Campaigns for Partner Users Channel managers create marketing campaigns by using Marketing Cloud capabilities. Each campaign includes essential details such as a name, description, and clear campaign objectives that help partners understand the campaign's purpose and intended outcomes. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions in Agentforce for Sales with Partner Ecosystem Management - Members, Partner Ecosystem Management - Login.
Within each campaign, admins and channel managers configure marketing campaign flows that contain pre-configured email content. These flows define the email structure, personalization options, and specify which sections are locked to maintain brand consistency and which sections partners can edit to add their local touch. When the campaigns are ready, admins and channel managers publish them to make them visible in the partner Campaign Marketplace within the partner portal. Published campaigns become available for partners to discover, review, and use for their email outreach activities. # Configuring Card Layout Properties (Managed Package) For the managed package runtime, configure card layout properties. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). After creating a card layout, configure layout properties in the Layout pane of the Card Designer. See [Creating a Card Layout Using Card Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_card_layout_using_card_designer.htm&release=264.0.0&type=5 "For the managed package runtime, create a card layout to build visual components to your customer interactions by adding data, enabling actions, and using custom or Vlocity templates to determine the look and feel."). See [Creating an LWC Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components.").

Property

Description

Example

+Add Metatags

Enables search engine optimization (SEO) options in your metadata by allowing the layout to write metatags to a page header.

Available card metatags are: author, description, keywords, and viewport.

The metatags are inserted after a layout or card loads, whether or not the data source is set.

Vlocity recommends that you replace metatags with the same name. Do not duplicate metatags. Web crawlers ignore duplicate tags.

For example, possible keywords for a card layout that shows a list of active account cases are cases, current cases, active cases.

+Add Test Variables

Returns test data after configuring your data source. Name and Value populate the dynamic fields in a data source endpoint. Enter the name of the variable to test, such as params.id. Enter the value of the variable. For more information on test variables and their settings, see Testing Data Source Settings.

  • Name: For example, enter params.id to get the ID in a page parameter for a record, such as an account record ID.

  • Value: For example, enter the account ID found in the URL parameter of an account record.

Add Session Variables

Sets card layout attributes. Enter a variable Name and Value for each attribute.

For example, the layout template cardCanvasLayout has a configurable attribute called title, which adds a title to the top of the layout. Enter title in the Name field and a value for the title such as List of Accounts in the Value field.

Data Source

Sets a data source for the layout.

The data source holds the master query that returns results in a JSON structure for cards in the layout. For more information on how to configure a data source and to see a complete list of data sources, see Configuring Data Sources. Cards can have data sources different from the layout data source.

For example, you might query every policy associated with an account, then create a card for each policy type.

Required Permissions

Limits user access to a card layout by entering a comma-separated list of custom permissions. If this field is left empty, any user can see the layout. See Custom Permissions.

This feature is available beginning with Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20.

Also see Limit User Access to a Card Layout in a Managed Package (Managed Package).

For example, enter Can_Edit_Card,Can_View_Card to only allow users with at least one of these custom permissions to see the card layout.

# Configuring Card Properties (Managed Package) For the managed package runtime, configure card properties on your card layout. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). After creating a card layout and adding cards, configure card properties in the Cards pane of the Card Designer. See [Creating a Card Layout Using Card Designer (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_card_layout_using_card_designer.htm&release=264.0.0&type=5 "For the managed package runtime, create a card layout to build visual components to your customer interactions by adding data, enabling actions, and using custom or Vlocity templates to determine the look and feel.") or [Creating an LWC Card Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components."). See [Adding a Card to a Layout (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_a_card_to_a_layout.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model.").

Property

Description

Example

Create Version

Creates a new version of a card. The new version is added underneath the current card. Creating a version of the card creates an exact copy of the card with a Version equal to the latest version number plus one, such as Version 2. See Cards Framework Versioning (Managed Package).

N/A

+ Add Filter

Filters the output of the returned data from the data source. For the key, select the name of a field returned from the data source. For the value, enter the value to filter. To view available data fields to filter, click View Data in the card or the card layout.

For example, to show data whose account name is Acme, select ['AccountName'] as the key, and Acme as the value.

+ Add Session Variables

Configure a card to store data from the data source, or enable additional features from a card template.

For example, enter columns as the name and an array of table heading names and settings as the value if your selected card state template is a DataTable LWC whose attribute columns requires a list of columns to display in the table.

+Add Metatags

Enables search engine optimization (SEO) options in your metadata by allowing the layout to write metatags to a page header.

Available card metatags are: author, description, keywords, and viewport.

The metatags are inserted after a layout or card loads, whether or not the data source is set.

Vlocity recommends that you replace metatags with the same name. Do not duplicate metatags. Web crawlers ignore duplicate tags.

For example, possible keywords for a card layout that shows a list of active account cases are cases, current cases, active cases.

Data Source

Sets a data source for the layout.

The data source holds the master query that returns results in a JSON structure for cards in the layout. For more information on how to configure a data source and to see a complete list of data sources, see Configuring Data Sources. Cards can have data sources different from the layout data source.

For example, you might query every policy associated with an account, then create a card for each policy type.

# Configuring Community Profiles for Omniscript (Managed Package) For the managed package runtime, to allow deployment of an Omniscript from an Experience page, configure the following sharing settings and profile access. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Beginning with the Winter '20 Salesforce release, [Guest Users](https://help.salesforce.com/articleView?id=networks_public_access.htm&language=en_US), also called anonymous users, cannot access any records by default. Criteria-based Sharing Rules grant them read-only access. This affects all Salesforce orgs. For details, see [Guest User Record Access Development Best Practices](https://www.learncommunitycloud.com/s/news/guest-user-record-access-development-best-practices-20Y1U000000UkITUA0). Vlocity allows guest users to create and update the records to which Sharing Rules grant access. No additional configuration is necessary for this expanded access. To grant guest user access, see [Give Secure Access to Unauthenticated Users with the Guest User Profile](https://help.salesforce.com/articleView?id=platform.networks_public_access.htm&type=5&language=en_US). 1. To configure sharing settings: 1. From Setup, click **Security Controls** or **Security** and then click **Sharing Settings**. 2. If you are in Lightning Experience, from the **Manage sharing settings for** drop-down list, select **Vlocity Omniscript**. If you are in Salesforce Classic, skip this step. 3. To change the Default Internal Access or External Default Access for Vlocity Omniscript, click the **Edit** button next to Organization-Wide Defaults. 4. For Vlocity Omniscript, set the Default Internal Access and External Default Access to **Public Read Only**. 5. If you are writing to the Application object, follow the same steps to set the Default Internal Access and Default External Access for Application objects to **Public Read/Write**. 6. Click **Save**. 2. The prerequisite for these steps is that communities must exist in your org. For more information, see [Setting Up a Community](https://help.salesforce.com/articleView?id=networks_setup_maintain_communities.htm&type=5&language=en_US) in the Salesforce Help. To configure community user visibility: 1. From Setup, click **Customize** or **Feature Settings**, then click **Communities**, then click **All Communities**. 2. For the community to which you are granting access, click **Workspaces**, click **Administration**, then click **Members**. 3. Make sure that all profiles that should access the community are in the **Selected Profiles** section, then click **Save**. 3. To ensure that you are using the Original Profile Interface: 1. From Setup, type User in the Quick Find box and click **User Management Settings**. 2. Set the Enhanced Profile User Interface option to **Disabled**. 4. To set field-level security: 1. From Setup, click **Manage Users** or **Users**, then click **Profiles**. 2. Find the profile for the users who will be accessing the community and click its name. If you click **Edit**, you won't see the Field Level Security settings. 3. Scroll down to the Field Level Security section and click **View** next to Application. 4. Click **Edit** and click **Read Access** next to every field. 5. Click **Save**. 6. Repeat steps 3 through 5 for Vlocity Omniscript and Vlocity Omniscript Compiled Definition. - **[Setting Object Permissions and Enabling APIs, Visualforce Pages, and Apex Access (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_setting_object_permissions_and_enabling_apisvisualforce_pagesand_apex_access.htm&release=264.0.0&type=5)** For the managed package runtime, Vlocity allows guest users to create and update the records to which Sharing Rules grant access. No additional configuration is necessary for this expanded access. - **[Apply the Visualforce Page for Omniscript in a Community (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_applying_the_visualforce_page_for_omniscript_in_a_community.htm&release=264.0.0&type=5)** For the managed package runtime, to configure the Visualforce Page for the Omniscript in a Community: - **[Create a Community User From an Application (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_a_community_user_from_an_application.htm&release=264.0.0&type=5)** For the managed package runtime, the housing community provides clients with a self-service portal to interact with the agency and property management. # Configuring Community Profiles for Vlocity Cards (Managed Package) For the managed package runtime, ensure users see Vlocity Card Layouts on community pages by configuring user profile settings. Enable the appropriate interface, and configure custom object permissions, Visualforce page access, and Apex class access. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Disable Enhanced Profile User Interface (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_disable_enhanced_profile_user_interface.htm&release=264.0.0&type=5)** For the managed package runtime, enable the appropriate interface before configuring Community profile settings that ensure that your users see Flexcards on Experience Builder site. Use the Original Profile Interface. - **[Configure Custom Object Permissions (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_custom_object_permissions.htm&release=264.0.0&type=5)** For the managed package runtime, configure custom object permissions to ensure that your users see Vlocity Card Layouts on Experience sites. Give access to the necessary objects. - **[Configure Visualforce Page Access (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_visualforce_page_access.htm&release=264.0.0&type=5)** For the managed package runtime, configure Visualforce page access to ensure that users see Vlocity Card Layouts on Experience pages. - **[Configure Apex Class Access (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_apex_class_access.htm&release=264.0.0&type=5)** For the managed package runtime, configure Apex Class access to ensure that users see Vlocity Card Layouts on Experience pages. # Configuring Data Sources for Cards Components (Managed Package) For the managed package runtime, configure a data source on a card, layout, or flyout to retrieve data from a Salesforce object or an external database. Display the returned data on cards in a layout or flyout. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Cards can have data sources independent of the layout or flyout data source. Administrators can enable or disable data sources for an org, profile, and user level. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/configuring_data_sources_on_cards.png) ## Data Source Types Data sources available for card, layouts, and flyouts include:

Data Source Type

Description

Availability

Integration Procedures

Uses an Integration Procedure to return data. Integration Procedures are declarative, server-side processes that execute multiple actions in a single server call.

Using an Integration Procedure as a data source is recommended for optimal flexibility and easier implementation.

Cards and Layouts

Apex Remote

Uses an Apex Remote class and method to return data. An Apex Remote class is a standard Apex class that implements the VlocityOpenInterface.

Cards and Layouts

Apex REST

Uses a REST endpoint of an Apex class to return data from a server or post data to a server.

Cards and Layouts

Data Mapper

Uses an Omnistudio Data Mapper Extract interface to return data. Field-level security is fully supported.

Cards and Layouts

Dual

Combines Apex Remote and Apex REST technologies to support hybrid applications available for both web and mobile usage. For example, the Salesforce web environment uses Apex Remote technology while its parallel mobile App uses the Apex REST API, requiring configuration for multiple environments.

Cards and Layouts

Parent

On the card or card layout of a flyout, the Parent data source uses data from the parent card or card layout that a flyout is assigned.

Flyouts

REST

Uses the standard REST API call to return data. The Vlocity Rest types include:

  • Web : Standard request from the URL of a callout endpoint.

  • Named Credentials: Specifies the URL of a callout endpoint and its required authentication parameters in one definition.

Note
Note

Use +Add Header Variables to add any request headers. Most third-party APIs expect various headers such as tokens, public keys, and content-type.

Cards and Layouts

SOQL Query

Uses a Salesforce Object Query Language (SOQL) to search an org's Salesforce data for specific information. For example, SELECT Name, Id FROM Account LIMIT 5.

Note
Note

If security is a concern, use a Data Mapper instead of a SOQL query, because Data Mappers fully support field-level security.

Cards and Layouts

SOSL Query

Uses a Salesforce Object Search Language (SOSL) to construct text-based search queries against the search index.

Cards and Layouts

Sample

Uses sample JSON to set up a card with a temporary data source, which will eventually be replaced with another data source. This allows you to embed the custom JSON directly into the layout without depending on external data.

Cards and Layouts

Streaming API

Uses the Salesforce Streaming API to push notifications from the server to the client based on criteria that you define. The Vlocity Streaming API types include:

  • Streaming Channel: Sends notifications of general events that are not tied to Salesforce data changes.

  • PushTopic: Uses an SOQL query to return a result that notifies listeners of changes to records in a Salesforce organization.

  • Platform Event: Uses Salesforce's Platform Events enterprise messaging platform, which combines PushTopic and Streaming Channel to enable apps to communicate inside and outside of Salesforce.

Cards and Layouts

- **[Configuring an Integration Procedure Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_an_integration_procedure_data_source.htm&release=264.0.0&type=5)** For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call. - **[Configuring a SOQL Query Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_a_soql_query_data_source.htm&release=264.0.0&type=5)** For the managed package runtime, configure a data source to use a Salesforce Object Query Language (SOQL) query to search an org's data for specific information. - **[Configuring a SOSL Search Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_a_sosl_search_data_source.htm&release=264.0.0&type=5)** For the managed package runtime, construct text-based search queries against the search index with Salesforce Object Search Language (SOSL). - **[Configuring an Omnistudio Data Mapper Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_a_dataraptor_data_source.htm&release=264.0.0&type=5)** For the managed package runtime, configure a Data Mapper data source to fetch data from a Data Mapper Extract. - **[Configuring a REST Web Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_a_rest_web_data_source.htm&release=264.0.0&type=5)** For the managed package runtime, configure a REST Web data source to get or post data from or to a public API. - **[Configuring a REST Data Source Using Named Credentials (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_a_rest_data_source_using_named_credentials.htm&release=264.0.0&type=5)** For the managed package runtime, configure a REST data source using Named Credentials to authenticate Apex callouts. - **[Configuring an Apex REST Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_an_apex_rest_data_source.htm&release=264.0.0&type=5)** For the managed package runtime, configure a data source to use an Apex REST call to fetch data to populate fields on a Flexcard. - **[Configuring an Apex Remote Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_an_apex_remote_data_source.htm&release=264.0.0&type=5)** For the managed package runtime, configure a data source to invoke an Apex Class and method to fetch data to populate a card. - **[Configuring Dual Data Sources (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_dual_data_sources.htm&release=264.0.0&type=5)** For the managed package runtime, a dual data source combines Apex remote and Apex REST technologies to support hybrid applications for both web apps and mobile apps. The Salesforce web environment uses Apex remote technology, and the parallel mobile app uses the Apex REST API, requiring configuration for dual environments. - **[Vlocity Streaming API Data Sources (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_vlocity_streaming_api_data_sources_1.htm&release=264.0.0&type=5)** For the managed package runtime, streaming API lets you push a stream of notifications from Salesforce to client apps based on criteria that you define. It has a persistent connection that continues to deliver new data as it becomes available, rather than using client polling. Polling is the most traditional way to get data from a data source that produces the stream of events and updates. The client makes requests periodically, and the server sends data if there is a response. In case there is no data to be sent by the server, an empty response is returned. - **[Testing Data Source Settings (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_testing_data_source_settings.htm&release=264.0.0&type=5)** For the managed package runtime, add runtime variables to fetch and test your data source. # Configuring Dual Data Sources (Managed Package) For the managed package runtime, a dual data source combines Apex remote and Apex REST technologies to support hybrid applications for both web apps and mobile apps. The Salesforce web environment uses Apex remote technology, and the parallel mobile app uses the Apex REST API, requiring configuration for dual environments. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note For optimal flexibility and easier implementation, use an Integration Procedure as a data source to execute multiple actions in a single server call. See [Configuring an Integration Procedure Data Source (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_configuring_an_integration_procedure_data_source.htm&release=264.0.0&type=5 "For the managed package runtime, configure a data source to use a Vlocity Integration Procedure to execute multiple actions in a single server call."). To configure a dual data source: 1. On the Vlocity Cards tab, click **New** to configure a data source for a new cards component, or select an existing component to configure its data source. 2. In the Cards Designer, in the Layout or Cards pane, from the **Data Source** picklist, select **Dual**. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/desktopapexremote_config.png) 3. In the Desktop ApexRemote Config section, follow these steps: 1. In the **Remote Class** box, enter the name of the remote class, for example, CpqAppHandler. 2. In the **Remote Method** box, enter the name of the method the remote class invokes. For example, the method in the CpqAppHandler remote class is getCartsItemsGet Cart Items. 3. Click **\+ Add Input Map Variable** to add input variables to the map that is passed to the remote method. Context variables allow the map to inherit values from variables in a parent Layout or Card. By defining CartId as {{params.id}}, the remote method receives an inherited value (an Account ID) from the layout or card, not the literal string `{{params.id}}`. 4. Click **+Add Options Map Variable** to add option variables to the map that is passed to the remote method. 5. In the **Result JSON Path** box, you can specify a path to a specific node in the JSON-formatted response. If the information resides specifically in the CartId node, set the **Result JSON Path** to CartId. 4. In the **Mobile Hybrid RemoteApex Config** section, follow these steps: 1. In the **Endpoint** box, enter the Apex REST endpoint URL. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/mobilehybridapexrest.png) 2. Specify the REST method: - `GET`—Requests data specified by the parameters of the URL. - `POST`—Sends JSON data specified in the Body text area. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/screenshot___rest___post.png) You can use Context Variables to pass inherited values with either method. 3. (Optional). Enter values for these properties: - To drill down to a specific dataset, in the **Result JSON Path** field, enter a path. For example, enter records.results, which drills down to the `results` array and passes the array to the card or card layout. - To sort data by a specific data field, enter the field name in the **Order By** input field. - To reverse the order of the data returned, select **True** from the **Reverse Order** picklist. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/orderbyreverseorder.png) - Set a **Timeout** value in milliseconds. The timeout value controls the time that the framework waits for the designated data source to return a response. Timeouts improve handling user interactions with long running processes. Setting an appropriate timeout value allows the application and users to react accordingly to long wait times. - Set an **Interval** value in milliseconds. The card component's data source refreshes continuously at the given interval and checks for changes in data source records. If changes are found, the layout or card component reloads. Setting an interval enables recursive updates of records. 5. To preview a cards component using real data, add a test variable that the query can use to return live data. See [Testing Data Source Settings](https://help.salesforce.com/s/articleView?id=xcloud.os_testing_data_source_settings.htm&release=264.0.0&type=5 "For the managed package runtime, add runtime variables to fetch and test your data source."). # Configuring Knowledge for Individual Steps in Classic Omniscript (Managed Package) For the managed package runtime, after finishing the Initial Configuration for the Knowledge Component in an Omniscript, you can configure the integration with Knowledge for the Omniscript Steps. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To configure Knowledge at the step level: 1. From the Omniscript Designer, click the Step that should display the Knowledge component. 2. Under Show Persistent Component, select **vlcKnowledge**. 3. Expand the **Knowledge Options** section. 4. **Language** is defaulted to **English** and **Publish Status** to **Online**. 5. In the **Keyword** field, enter one or more static values, such as a literal string, or a merge field to build the query string. For information on merge fields see, [Access Omniscript Data JSON with Merge Fields (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_access_omniscript_data_json_with_merge_fields.htm&release=264.0.0&type=5 "For the managed package runtime, enable Omniscript elements and element properties to access data JSON using merge fields. A merge field is a variable that references the value of a JSON node. For example, if a JSON node is \"FirstName\": \"John\", then the merge field %FirstName% returns John."). 6. In the **Data Category Criteria** field, enter a query for the Data Category. This helps to filter the articles. For example, **Type\_\_c AT (Internet\_\_c)**. Note that you do not need to enter **WITH DATA CATEGORY**. See [With Data Category filtering Expression](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_select_with_datacategory.htm) from the **Force.com SOQL and SOSL Reference** for more information on building queries for Data Categories. 7. (Optional) When lightning knowledge is enabled, enter article **Record Type**s into the **Record Type Filter** field to filter the record types queried by the step. ![image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/omniscript_lightning_knowledge_step.png) # Configuring LWC Settings on an LWC Card Layout (Managed Package) For the managed package runtime, configure LWC-specific properties on your LWC Card layout. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). After [creating an LWC card layout](https://help.salesforce.com/s/articleView?id=xcloud.os_creating_an_lwc_card_layout.htm&release=264.0.0&type=5 "For the managed package runtime, create an LWC card layout to enable Vlocity Lightning web components."), configure the optional layout properties in the **LWC Settings** of the Layout pane of the Card Designer.

Property

Description

Example

Enable Newport

Enable the Newport Design System to load the Newport CSS resource to your LWC Card layout. Your Layout and Card templates must have Newport support. See Apply Global Branding to Vlocity Cards (Managed Package).

N/A

Include User Information

Uses the $root.vlocity variable to return information about the logged in user from the data source of a card layout. See Cards Context Variables (Managed Package).

Beginning with Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20, LWC Cards support returning information about the logged in user from the data source of a card, in addition to a card layout, after enabling Include User Information.

For example, to display the ID and the name of the logged-in user on a card, enter $root.vlocity.userName in the Search For field of a SOSL search.

Loop Settings

Sets how to group the cards. To group cards by object type (such as Cases, Accounts, Contacts), select Repeat Cards. To group cards by the order they appear in the database, select Repeat Records.

Deselect Repeat Records only to make a Chart or Datatable display one record. For all other elements, Repeat Records is required for displaying even one record.

For example, if you have a Datatable that displays a list of contacts, choose Repeat Records.

Omniscript Support

Enables Omniscript to work with your LWC card layout. When enabled, the LWC card layout is usable in the Omniscript Designer via the Custom LWC input element. See Launch Vlocity Cards within an LWC Omniscript (Managed Package). The card must be active for the Omniscript Support feature to work. The LWC card layout is a standalone LWC that doesn’t interact with the LWC Omniscript.

N/A

Show XML Interface

Sets the metadata for the component using a visual editor. For more information on configuring metadata, see Component Configuration File. The layout must be active to enable this feature. By default, the following metadata is set: Master Label, API Version, Is Exposed, and AppPage, RecordPage, and HomePage targets. See Configuration File Tags.

For example, select the CommunityPage checkbox under Target Name to make your LWC accessible on a community page.

# Configuring Omniscript Styling and UI Behavior (Managed Package) For the managed package runtime, to control the style and behavior of Omniscript elements, you use Templates, Conditions, Display Components, and options. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Templates use JavaScript and CSS to alter the behavior and design of an element. Conditions use Omniscript data to determine whether an element is active or hidden. Display Elements include elements with built-in styling for static text. Options include customizable error messages, show/hide settings, and the text directionality setting. - **[Designing and Styling Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_designing_and_styling_omniscript.htm&release=264.0.0&type=5)** For the managed package runtime, this section explains how to edit the look and feel of your Omniscripts. Design and style your Omniscript by overwriting an element's HTML template, customizing which steps in the form to display, or using images for buttons. - **[Modify Omniscript UI Behavior (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_modify_omniscript_ui_behavior.htm&release=264.0.0&type=5)** For the managed package runtime, this section explains how to modify UI behaviors in an Omniscript. # Configuring the Cancel Link in an Omniscript (Managed Package) For the managed package runtime, the Cancel link appears on every Step in an Omniscript. From the Omniscript Designer, in the **Cancel Options** section of the Script Configuration, you can specify the behavior for when a user hits the Cancel link with the Cancel Type and Cancel Source. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - Allow Cancel: Remove the Cancel button option from the Omniscript by clearing the **Allow Cancel** box. - **Cancel Type**: - **SObject** redirects to an SFDC object. Enter the merge field of the record that you want to redirect to in Source. Default is %ContextId%. - **URL** redirects to a URL. - **Redirect** directs to an HTML template, specified in the Source - **Dismiss** closes the script and presents a blank page. This is the pre-Version 12 behavior of the Cancel link. - **Cancel Source**: - If redirecting to an SObject, enter "%ContextId%" to redirect to the record that the script launched from. - If redirecting to a URL, enter the page and parameters. For example, "MyTestPage?Id=%ContextId%" would redirect to an internal page and "http://www.vlocity.com"; would redirect to an external page. - If you selected Redirect as the Cancel Type, in the Cancel Redirect Page Name and Cancel Redirect Template Url, enter the page name and template that the Omniscript should redirect. # Configuring the Metadata Values for an LWC Card (Managed Package) For the managed package runtime, configure the metadata values for an LWC card from a visual editor in the card layout instead of updating the configuration file manually. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To learn more about a component's configuration file, see [Component Configuration File](https://developer.salesforce.com/docs/component-library/documentation/lwc/lwc.create_components_meta_file). - **[Defining Metadata Values (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_defining_metadata_values.htm&release=264.0.0&type=5)** For the managed package runtime, to define the metadata values for an LWC enabled card component: - **[Adding Properties to a Target Name (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_adding_properties_to_a_target_name.htm&release=264.0.0&type=5)** For the managed package runtime, to add a property to a **Target Name**: # Confirm a Suggested CRM Match in the AI Relationship Research Graph Confirm or reject a suggested match between a discovered entity and an existing CRM record when AI Relationship Research identifies a potential link. If a node has a link icon, AI Relationship Research has identified a potential match between a discovered entity and an existing CRM record. The match is pending your confirmation. 1. Click the node to open the Entity Details panel. 2. Review the suggested match details. 3. Click **Confirm** to accept the match, or **Cancel** to reject it. # Confirm Record Deletion (Managed Package) For the managed package runtime, enable users to confirm the deletion of a record using the Confirmation Modal. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To change the behavior of the confirmation modal, configure these properties: - **Confirm**: Controls whether the modal displays. - **Confirmation Dialog Message**: Message asking the user to confirm the deletion. - **Confirm Label**: Button label for the confirm action. - **Cancel Label**: Button label for the cancel action. # Confirm Successful Execution Using Run Logs Tab Use the Run Logs tab to check that an execution was successful, identify missed steps, and resolve errors. ### Required Editions
Available in: all editions
User Permissions Needed
To view Run Logs: ModifyAllData and PrivacyCenter
The Run Logs tab provides key information for every policy run, including the Run Log Name, Status, Message, Created Date, Execution ID, and Configuration ID. Run logs track important steps in the masking process. - _Run Log Name_: a 6-digit number unique to each run log within your org that represents a single step in the process - _Status_: states that the run was successful (Success) or encountered an error (Error) - _Message_: describes the outcome of the run and details the nature of any errors - _Created Date_: the date when the run log was created and usually the date when the policy was run - _Execution ID_: a 13-digit number unique to each masking process ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note Because a run log is generated for each step in the process, multiple run logs can have the same execution ID. By default, the Recently Viewed list is pinned. To view all run logs, click the dropdown arrow next to Recently Viewed and select **All** as your list view.To pin or unpin a list view, select the pin icon. ![All list view option in Recently Viewed dropdown menu](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/data_protection_and_privacy/images/run_logs_all.png) ![pin icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/data_protection_and_privacy/images/run_logs_pin.png) # Connect and Reorganize Nodes or Branches in a Recipe In Salesforce Data Pipelines, connect disconnected nodes or branches to join or append data from any node to any other node in a Data Prep recipe. You can also create a branch at an intermediate node, and join or append it to another path in the recipe. 1. To create a branch and join or append it to another path, hover over a node to see the Branch button (![Branch button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_button_branch.png)). Then drag the Branch button on top of a node in the other path. ![Drag the Branch button on top of the node.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_graph_connect_branch.png) In the Connect Nodes box, select whether to join or append the data. ![The Connect Nodes box shows a Join and Append option.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_graph_connect_branch_dialog.png) 2. To join or append data to another node, drag the Add Node button (![Add Node button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_button_Add.png)) for a node or a Branch button on top of the predecessor. ![Drag the Add Node button on top of the Account predecessor node.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_graph_connect_predecessor.png) Then select whether to join or append the data in the Connect Nodes box. This graph joins aggregated account data back to the account records. ![The Aggregate Node is joined to the Account predecessor node.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_graph_connect_predecessor_result.png) 3. To make the flow of data easier to view, reposition the recipe nodes in the graph. Select and move individual nodes, or drag your mouse to select as many nodes as you want. Pull the group of nodes around to rearrange, or delete them all at once. ![Select multiple nodes simultaneously to move or delete them as a group.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_graph_grab_multiple.png) For example, you can move upstream nodes after a downstream node in the graph, where nodes flow right to left. ![The data from the input nodes flow left and the remaining nodes flow right.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_graph_backward.png) # Connect and Sync Your Data to Data Pipelines Salesforce Data Pipelines connectors give you an easy way to connect data inside and outside of Salesforce. Salesforce Data Pipelines provides a prebuilt connector for data in your local org and a range of configurable connectors for remote data in external Salesforce orgs, apps, data warehouses, and database services. After you connect to a data source, configure data sync to extract the needed source data into connected objects. You can then prepare the data in these connected objects using a recipe to create your final dataset. ![Overview graphic of connectors](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_connectors_overview.png) - **[Connect to a Data Source or Target](https://help.salesforce.com/s/articleView?id=xcloud.sdp_prepare_connect.htm&release=264.0.0&type=5)** Use the Salesforce Data Pipelines connectors to connect data inside and outside of Salesforce. You can access data in your local Salesforce org, external orgs, and other sources, such as apps, data warehouses, and database services. - **[Connect to Local Salesforce Data](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_local.htm&release=264.0.0&type=5)** Use the prebuilt Salesforce Connector to manage the data synced between your local Salesforce org and Data Pipeline. Filter data synced to Data Pipelines, create more connections using the Salesforce Local connector, manage objects between connections, and add or remove objects and fields from sync. Use the Salesforce External connector to sync data from a remote Salesforce org. - **[Connect to Data Outside of Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_remote.htm&release=264.0.0&type=5)** Create a remote connection to sync external cloud data with Salesforce Data Pipelines. - **[Output Connectors](https://help.salesforce.com/s/articleView?id=xcloud.sdp_output_connectors.htm&release=264.0.0&type=5)** Use output connectors to push data from Salesforce Data Pipelines to the remote system. Output connectors can push as part of a data prep output node, and some can also push out unprepared data using sync. - **[Private Connectors](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_private_connectors.htm&release=264.0.0&type=5)** Use private connectors to push and pull data between Salesforce Data Pipelines and external services AWS using a Virtual Private Connection (VPC). Supported services include Snowflake and Amazon S3. To use private input and output connectors you must configure a network connection, external credential, and named credential. These credentials provide the security and privacy required for the private connection. - **[Pre-Pull Data for Recipes with Data Sync](https://help.salesforce.com/s/articleView?id=xcloud.sdp_replication.htm&release=264.0.0&type=5)** Use data sync to decouple the extract of data from your recipes and sync this data to Salesforce Data Pipelines on a separate schedule. By scheduling sync from Salesforce and remote systems ahead of time, your recipes have less to do and run faster. To lighten the load even more, Salesforce Data Pipelines can sync supported local Salesforce data incrementally by default, meaning that only data that’s changed gets synced. - **[Stage CSV Data in Datasets](https://help.salesforce.com/s/articleView?id=xcloud.sdp_prepare_upload_csv.htm&release=264.0.0&type=5)** Because CSV files can’t be used as sources in a recipe, you can upload the CSV file and write it to a dataset. And then you can use the dataset as a source for the recipe. When you upload the file, it’s temporarily stored for processing only. After the dataset is created, the file is purged. If you want to use the file again later, keep a copy. # Connect APIs for Cache Management in Data Mappers See this table for a summary of Connect APIs to call Data Mappers from Apex classes. Starting with Summer ’25, replace the existing methods in the DRGlobal Apex classes with the Connect APIs.
Purpose Connect API Existing Method (Replace with Connect API)
Clear metadata cache for a Data Mapper
ConnectApi.DatamapperCacheInputParamRepresentation finalInput = new ConnectApi.DatamapperCacheInputParamRepresentation();
ConnectApi.DataMapperParamRepresentation param = new ConnectApi.DataMapperParamRepresentation();
param.dataMapperName = DataMapperName;
finalInput.dataMapperList = new List<ConnectApi.DataMapperParamRepresentation>();
finalInput.dataMapperList.add(param);
finalInput.cacheStorageType = ConnectApi.CacheStorageType.Metadata;
ConnectApi.DatamapperClearCacheOutputRepresentation response = ConnectApi.OmniDesignerConnect.clearDatamapperCache(finalInput);

Example:

ConnectApi.DatamapperCacheInputParamRepresentation finalInput = new ConnectApi.DatamapperCacheInputParamRepresentation();
ConnectApi.DataMapperParamRepresentation param = new ConnectApi.DataMapperParamRepresentation();
param.dataMapperName = 'DM_Create_Contact';
finalInput.dataMapperList = new List<ConnectApi.DataMapperParamRepresentation>();
finalInput.dataMapperList.add(param);
finalInput.cacheStorageType = ConnectApi.CacheStorageType.Metadata;
ConnectApi.DatamapperClearCacheOutputRepresentation response = ConnectApi.OmniDesignerConnect.clearDatamapperCache(finalInput);
DRGlobal.clearCacheForDataRaptor('DataMapperName');
Clear session cache for all Data Mappers
ConnectApi.DatamapperCacheInputParamRepresentation finalInput = new ConnectApi.DatamapperCacheInputParamRepresentation();
finalInput.cacheStorageType = ConnectApi.CacheStorageType.Metadata;
ConnectApi.DatamapperClearCacheOutputRepresentation response = ConnectApi.OmniDesignerConnect.clearDatamapperCache(finalInput);

Example:

ConnectApi.DatamapperCacheInputParamRepresentation finalInput = new ConnectApi.DatamapperCacheInputParamRepresentation();
finalInput.cacheStorageType = ConnectApi.CacheStorageType.Metadata;
ConnectApi.DatamapperClearCacheOutputRepresentation response = ConnectApi.OmniDesignerConnect.clearDatamapperCache(finalInput);
DRGlobal.clearCacheForAllDataRaptor();
# Connect APIs for Cache Management in Integration Procedures See this table for a summary of Connect APIs to call Integration Procedures from Apex classes. Starting Summer ’25, replace the existing methods in the IntegrationProcedureService Apex classes with the Connect APIs.
Purpose Connect API Existing Method (Replace with Connect API)
Clear org cache for an Integration Procedure.
ConnectApi.IntegrationProcedureCacheInputRepresentation finalInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
ConnectApi.IntegrationProcedureCacheInputData apexInput = new ConnectApi.IntegrationProcedureCacheInputData();
apexInput.ipKey = ipKey;
apexInput.inputData = JSON.serialize(inputData);
List<ConnectApi.IntegrationProcedureCacheInputData> l = new List<ConnectApi.IntegrationProcedureCacheInputData>();
l.add(apexInput);
finalInput.ipInput = l;
finalInput.cacheStorageType = ConnectApi.CacheStorageType.Org;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(finalInput);

ipKey: Specifies the Integration Procedure to invoke in Type_Subtype format.

inputData: Specifies the input in the Map<string,object> format.

Example:

ConnectApi.IntegrationProcedureCacheInputRepresentation finalInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
ConnectApi.IntegrationProcedureCacheInputData apexInput = new ConnectApi.IntegrationProcedureCacheInputData();
apexInput.ipKey = 'LastNames_Cached';
Map<String, Object> map = new Map<String, Object>{'ContactLastName' => 'Smith'};
apexInput.inputData = JSON.serialize(map);
List<ConnectApi.IntegrationProcedureCacheInputData> l = new List<ConnectApi.IntegrationProcedureCacheInputData>();
l.add(apexInput);
finalInput.ipInput = l;
finalInput.cacheStorageType = ConnectApi.CacheStorageType.Org;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(finalInput);
IntegrationProcedureService.clearOrgCache(ipKey, inputData);
Clear org cache with vlcCacheKeys
ConnectApi.IntegrationProcedureCacheInputRepresentation apexInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
List<String> cacheKeyList = new List<String>();
cacheKeyList.add(cacheKey);
apexInput.cacheKeys= cacheKeyList;
apexInput.cacheStorageType = ConnectApi.CacheStorageType.Org;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(apexInput);

Example:

ConnectApi.IntegrationProcedureCacheInputRepresentation apexInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
List<String> cacheKeyList = new List<String>();
cacheKeyList.add('2032076016a1745801061oc');
apexInput.cacheKeys= cacheKeyList;
apexInput.cacheStorageType = ConnectApi.CacheStorageType.Org;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(apexInput);
IntegrationProcedureService.clearOrgCache(cacheKey);
Clear session cache for an Integration Procedure
ConnectApi.IntegrationProcedureCacheInputRepresentation finalInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
ConnectApi.IntegrationProcedureCacheInputData apexInput = new ConnectApi.IntegrationProcedureCacheInputData();
apexInput.ipKey = ipKey;
apexInput.inputData = JSON.serialize(inputData);
List<ConnectApi.IntegrationProcedureCacheInputData> l = new List<ConnectApi.IntegrationProcedureCacheInputData>();
l.add(apexInput);
finalInput.ipInput = l;
finalInput.cacheStorageType = ConnectApi.CacheStorageType.Session;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(finalInput);

Example:

ConnectApi.IntegrationProcedureCacheInputRepresentation finalInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
ConnectApi.IntegrationProcedureCacheInputData apexInput = new ConnectApi.IntegrationProcedureCacheInputData();
apexInput.ipKey = 'LastNames_Cached';
Map<String, Object> map = new Map<String, Object>{'ContactLastName' => 'Smith'};
apexInput.inputData = JSON.serialize(map);
List<ConnectApi.IntegrationProcedureCacheInputData> l = new List<ConnectApi.IntegrationProcedureCacheInputData>();
l.add(apexInput);
finalInput.ipInput = l;
finalInput.cacheStorageType = ConnectApi.CacheStorageType.Session;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(finalInput);
IntegrationProcedureService.clearSessionCache(ipKey, inputData);
Clear session cache with vlcCacheKeys
ConnectApi.IntegrationProcedureCacheInputRepresentation apexInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
List<String> cacheKeyList = new List<String>();
cacheKeyList.add(cacheKey);
apexInput.cacheKeys= cacheKeyList;
apexInput.cacheStorageType = ConnectApi.CacheStorageType.Session;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(apexInput);

Example:

ConnectApi.IntegrationProcedureCacheInputRepresentation apexInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
List<String> cacheKeyList = new List<String>();
cacheKeyList.add('2032076016a1745801061oc');
apexInput.cacheKeys= cacheKeyList;
apexInput.cacheStorageType = ConnectApi.CacheStorageType.Session;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(apexInput);
IntegrationProcedureService.clearSessionCache(cacheKey);
Clear all cached data for an Integration Procedure
ConnectApi.IntegrationProcedureCacheInputRepresentation finalInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
ConnectApi.IntegrationProcedureCacheInputData apexInput = new ConnectApi.IntegrationProcedureCacheInputData();
apexInput.ipKey = ipKey;
List<ConnectApi.IntegrationProcedureCacheInputData> l = new List<ConnectApi.IntegrationProcedureCacheInputData>();
l.add(apexInput);
finalInput.ipInput = l;
finalInput.cacheStorageType = ConnectApi.CacheStorageType.All;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(finalInput);

Example:

ConnectApi.IntegrationProcedureCacheInputRepresentation finalInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
ConnectApi.IntegrationProcedureCacheInputData apexInput = new ConnectApi.IntegrationProcedureCacheInputData();
apexInput.ipKey = 'LastNames_Cached';
List<ConnectApi.IntegrationProcedureCacheInputData> l = new List<ConnectApi.IntegrationProcedureCacheInputData>();
l.add(apexInput);
finalInput.ipInput = l;
finalInput.cacheStorageType = ConnectApi.CacheStorageType.All;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(finalInput);
IntegrationProcedureService.clearAllCache(ipKey);
Clear metadata cache for an Integration Procedure
ConnectApi.IntegrationProcedureCacheInputRepresentation finalInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
ConnectApi.IntegrationProcedureCacheInputData apexInput = new ConnectApi.IntegrationProcedureCacheInputData();
apexInput.ipKey = ipKey;
List<ConnectApi.IntegrationProcedureCacheInputData> l = new List<ConnectApi.IntegrationProcedureCacheInputData>();
l.add(apexInput);
finalInput.ipInput = l;
finalInput.cacheStorageType = ConnectApi.CacheStorageType.Metadata;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(finalInput);

Example:

ConnectApi.IntegrationProcedureCacheInputRepresentation finalInput = new ConnectApi.IntegrationProcedureCacheInputRepresentation();
ConnectApi.IntegrationProcedureCacheInputData apexInput = new ConnectApi.IntegrationProcedureCacheInputData();
apexInput.ipKey = 'LastNames_Cached';
List<ConnectApi.IntegrationProcedureCacheInputData> l = new List<ConnectApi.IntegrationProcedureCacheInputData>();
l.add(apexInput);
finalInput.ipInput = l;
finalInput.cacheStorageType = ConnectApi.CacheStorageType.Metadata;
ConnectApi.IntegrationProcedureCacheOutputRepresentation test = ConnectApi.OmniDesignerConnect.ClearIntegrationProcedureCache(finalInput);
IntegrationProcedureService.clearMetadataCache(ipKey);
# Connect External Objects to Your Salesforce Org Set up the OData service as an External Data Source, and customize object tabs and External Object layouts. ### Required Editions
Available in: all editions
User Permissions Needed
To set up the OData service as an External Data Source: ModifyAllData and PrivacyCenter
To customize object tabs and External Object layouts: ModifyAllData and PrivacyCenter
![New External Data Source panel](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/data_protection_and_privacy/images/new_external_data_source.png) 1. From Setup, in the Quick Find box, enter External, then select **External Data Sources** in the dropdown. Click **New External Data Source**. 2. Enter an External Data Source and Name, and select **Salesforce Connect: OData 4.0** as the Type. 3. Paste the OData 4.0 Service URL into the URL parameter. 4. To use the read/write capabilities of OData 4.0, select **Writable External Objects.** 5. Choose **Named Principal** as the Identity Type and **Password Authentication** as the Authentication Protocol. 6. Enter your username and password. 7. Save your work. 8. Click **Validate and Sync**. Check your connection to the external system, and select the tables you want as External Objects. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note Initially, table names have $ characters instead of periods, but you can edit the labels later. 9. To create custom object tabs and customize layouts for External Objects, click **Edit** beside the name of the object you want to update. To make SOQL queries against your external object, use the API name \[object name\]\_x. For example, for the external object public\_customer, the associated API name is public\_customer\_x. # Connect Quip and Salesforce Connect your Quip site to Salesforce. When you set up your site, we create permission sets, an Auth. provider, and external data source for you. ### Required Editions
Available in: Enterprise, Performance, Professional, Developer, and Unlimited Editions
- Only a Quip admin and Salesforce admin can connect an existing Quip site to Salesforce. - To complete the setup, first create a [Client ID and Client Secret](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_new_api_key.htm&release=264.0.0&type=5 "To connect your Quip site to Salesforce, you need an API key.") in the Quip Admin Console. 1. In Salesforce Setup, from the Quick Find box, enter Quip, then select **Quip (Salesforce Anywhere)**. 2. Click **Get Started**. ![Set Up Quip page in Salesforce with Get Started button](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_setup_get_started.png) 3. To connect your site, enter your Quip site subdomain and click **Use your Quip Client ID and Client Secret**. [Tell Me How](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_new_api_key.htm&release=264.0.0&type=5 "To connect your Quip site to Salesforce, you need an API key.") ![Get started with Quip window in Salesforce](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_setup_connect_quip.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note If you’re not a Quip site admin, ask the site’s admin for the [Client ID and Client Secret](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_new_api_key.htm&release=264.0.0&type=5 "To connect your Quip site to Salesforce, you need an API key."). 4. Assign the Quip permission set to give your team access to Quip features in Salesforce. You can manually assign the permission set or assign it to everyone. [Learn About Quip Permissions](https://help.salesforce.com/s/articleView?id=xcloud.quip_permission_sets.htm&release=264.0.0&type=5 "Quip Advanced and Quip for Customer 360 enable permissions from two different permission sets.") ![Manage Permissions or Assign to Everyone option](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_manage_perms_setup.png) 5. **Optional:** To see documents and spreadsheets in Global Search, validate and sync the external data source. Click **Go To External Data Source** and click **Validate and Sync** on the External Data Source page. If the Quip external data source is pending, click **Edit**, then **Validate and Sync. ![Edit, Validate and Sync, and Pending highlighted for the Quip external data source](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_validate_xds.png) ** 6. To complete the setup, tell your users to click **Take the Last Step**. ![Take the Last Step connection banner](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_setup_take_the_last_step.png) #### See Also - [Create a Salesforce API Key](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_new_api_key.htm&release=264.0.0&type=5 "To connect your Quip site to Salesforce, you need an API key.") - [Learn About Quip Permissions](https://help.salesforce.com/s/articleView?id=xcloud.quip_permission_sets.htm&release=264.0.0&type=5 "Quip Advanced and Quip for Customer 360 enable permissions from two different permission sets.") - [Complete the Quip Connection](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_complete_setup.htm&release=264.0.0&type=5 "To use Quip features in Salesforce, users must complete the Salesforce and Quip connection.") - [Add Users to Your Quip Site](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_add_users_to_site.htm&release=264.0.0&type=5 "To give your users access to your Quip site, add them manually, upload a CSV, or automatically grant access to all users from a Salesforce org.") # Connect Quip User Engagement Metrics to Salesforce Records To associate Quip user engagement metrics with a Salesforce record, link the Collaboration User Engagement Metric object to the Collaboration Document Metric Record object. ### Required Editions
Available in: Lightning Experience
1. To connect the Collaboration User Engagement Metric to the Collaboration Document Metric, use CRM Analytics. - Match the Quip Thread ID of the Collaboration User Engagement Metric to the Document ID of the Collaboration Document Metric. - Match the Metric Date fields on both objects. 2. Also in CRM Analytics, connect the Collaboration Document Metric to the Collaboration Document Metric Record. - Match the Id field from Collaboration Document Metric to the CollabDocMetricId field of the Collaboration Document Metric Record. - Match the Metric Date fields on both objects. ![Connect engagement metrics to Salesforce record](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_metrics_connection_01.png) Now the Collaboration User Engagement Metric has a record ID in the same row, which came from the Collaboration Document Metric Record table. This configuration creates the same data that was previously tracked through the CollabUserEngmntRecordLinks object. # Connect Quip VPC to Salesforce Connect your Quip VPC site to Salesforce to get your users in sync, use Quip Lightning components, and more, all while keeping your data secure. ### Required Editions
User Permissions Needed
To set up Quip in VPC: Customize Application
Only a Quip admin and a Salesforce admin can complete the Quip integration setup. 1. From Setup, in the Quick Find box, enter Quip, and then select **Quip (Salesforce Anywhere)**. 2. Click **Get Started**. 3. To connect your Quip VPC site, choose to connect an existing site. 4. Use your Quip site’s Client ID and Client Secret. To find your Quip Client ID and Client Secret, log in to the Quip Admin Console. Under Settings, select **Integrations**, and view your Salesforce API Key. 5. In Salesforce, enter your Client ID and Client Secret. 6. Under Authorize Endpoint URL, enter https://platform..onquip.com/1/oauth/login. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note Not all VPCs use the same Authorize Endpoint and Token Endpoint URL structures. To get your VPC’s specific URLs, contact Quip Support. 7. Under Token Endpoint URL, enter https://platform..onquip.com/1/oauth/access\_token. 8. Assign permissions to give your team access to Quip. 9. **Optional:** To see documents and spreadsheets in Global Search, validate and sync the external data source. Click **Go To External Data Source** and click **Validate and Sync** on the External Data Source page. If the Quip external data source is pending, click **Edit**, then **Validate and Sync.** To check that your Quip VPC site is successfully connected to Salesforce, contact Quip Support. After the setup is complete, get the most out of your Quip integration with Quip Lightning components, live Salesforce data in Quip, and more. # Connect Salesforce to AWS KMS and Create a Data Encryption Key When you configure your connection between Salesforce and AWS, you provide information about the AWS KMS key that you want Salesforce to use (key identifier, region, and description). You then generate a JSON structure and add that structure to your key policy in the AWS console for your key. ### Required Editions
Available in both Lightning Experience and Salesforce Classic (not available in all orgs).
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires purchasing Salesforce Shield or Shield Platform Encryption, and the External Key Management Service. Data 360 customers must also have the Platform Encryption for Consumption license.
User Permissions Needed
To generate, destroy, export, import, upload, and configure tenant secrets and customer-supplied key material: Manage Encryption Keys
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important Before you can use EKM, you must create and configure the AWS key you plan to use. See the [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) documentation. You can also add information about your Salesforce key policy to your key policy in AWS KMS. Salesforce then uses this key policy to generate and wrap a data encryption key for encryption and decryption operations in Salesforce. 1. From Setup, in the Quick Find box, enter Platform Encryption, and then select **Advanced Settings**. Turn on **External Key Management**. You can now access External Key Management configuration controls on the Key Management page. 2. From Setup, in the Quick Find box, enter Platform Encryption and then select **Key Management**. 3. Click the tab for the service you need the EKM for (Data Cloud, Fields and Files - Probabilistic, Fields - Deterministic, Event Bus, or Search Index). Then click Generate Root Key located on the tab. The Configure a Key Management Service box appears. 4. Select **AWS Key Management Service**, and then click **Start**. 5. Follow the prompts for gathering and entering your AWS KMS key information. Enter its key identifier, region, and description. A unique description helps you distinguish between keys for efficient auditing and key management. 6. To create a copy of the JSON text, on the Key Policy tab, click **Copy**. The copied JSON text contains details about your AWS KMS key that you entered in the previous step. 7. Log in to your AWS KMS console. Paste the copied JSON text into your key policy. Make sure that it references your key ID and not an alias name, and then save your changes. For example, use `key/key_id` instead of `alias/alias_name` in your ARN. 8. In Salesforce, on the Key Management page, click **Done**. You receive a notification that AWS KMS is now connected to Salesforce and that a Salesforce data encryption key is created. Check the connection and new data encryption key on the Key Management page. #### See Also - [Check the Connection to Your EKM Key](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_ekm_check_connection.htm&release=264.0.0&type=5 "You can check the connection between Salesforce and your external key management service. This information can help you troubleshoot problems when you configure your key policy.") # Connect Slack to Your Salesforce Suite Salesforce channels bring the collaborative power of Slack into Salesforce Suites. ### Required Editions
Available in: Lightning Experience
Available in: Starter and Pro Suite Editions.
Connect with your teams directly within a Salesforce record, like Accounts or Opportunities, and work together in real-time to manage complex deals, solve problems, and strategize around customers. Plus, you can access conversations in Salesforce or Slack, ensuring a single source of truth and seamless communication for your team, regardless of where they work. ![Salesforce record channels for Slack](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/starter_record_channels_slack.png) Slack is turned on and configured for you in Starter and Pro Suite. When you create your org, a Slack workspace is automatically set up and connected to it. The Slack component is directly embedded in the Accounts, Opportunities, Leads, and Cases record pages. When your team accesses one of the record pages, a Slack account is automatically created for them if they don't have one. - To configure Salesforce channels for additional objects, such as Quotes or custom objects, see [Set Up Salesforce Channels in Your Org](https://help.salesforce.com/s/articleView?id=slack.slack_salesforce_channels_setup.htm&type=5&language=en_US). - To completely remove your Slack integration with Salesforce: - Remove the Slack component from the Salesforce record page. See ‘Disconnect Salesforce and Slack’ in [Manage Your Salesforce Connection](https://slack.com/help/articles/30754346665747-Connect-Salesforce-and-Slack#manage-your-connection) - Remove the channel configuration row on the Slack channels for records page. See ‘Remove Salesforce Channels from an Object’ in [Set Up Salesforce Channels in Your Org](https://help.salesforce.com/s/articleView?id=slack.slack_salesforce_channels_setup.htm&type=5&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/images/icon_note.png) Note If you only remove the Slack component from the record page using Lightning App Builder, the channel is still available in Slack. If you only remove the channel configuration on the Slack Channels for Records page, the Slack component displays on the record page but with an error. - If you're already using Slack, you can connect your Salesforce org to an existing Slack workspace instead. Disconnect from the delivered workspace and connect to your workspace. See [Manage Your Salesforce Connection](https://slack.com/help/articles/30754346665747-Connect-Salesforce-and-Slack#manage-your-connection). #### See Also - [Set Up and Manage Salesforce Channels in Slack](https://salesforce.enterprise.slack.com/docs/T0257US1S/F08QXGXQK62) - [Salesforce Channels for Records](https://help.salesforce.com/s/articleView?id=slack.slack_salesforce_channels.htm&language=en_US) - [Salesforce Channels Trailhead](https://trailhead.salesforce.com/content/learn/modules/salesforce-channels) # Connect the Tracking Group and External Tracking Configuration You can edit a Tracking Group to send its data to a third-party analytics provider without changing the components that the group includes. 1. From Setup, in the Quick Find box, enter omni. 2. Expand **OmniAnalytics** and click **Tracking Groups**. 3. Click **AnalyticsTest**. AnalyticsTest is the [Tracking Group that you created](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_create_tracking_group_and_components_std.htm&release=264.0.0&type=5 "To specify a group of components that you want to track together, create a Tracking Group and add Omniscript and Flexcard components to it."). If you edit this Tracking Group, you can use the [Lightning App Page that you created](https://help.salesforce.com/s/articleView?id=xcloud.os_omnianalytics_edit_lightning_app_page_std.htm&release=264.0.0&type=5 "Users interact with Omniscripts and Flexcards via Lightning App Pages. However, instead of directly adding Omniscripts and Flexcards to pages, you add wrapper components that make the Omniscripts and Flexcards available to OmniAnalytics."). 4. Click **Edit**. 5. Change the Tracking Group Type to **External**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note A specific Omniscript or Flexcard can belong to two Tracking Groups if one is Internal and the other is External. 6. Click in the External Tracking Config Definition text box and select **GoogleAnalyticsTest** from the list. 7. Save your changes. 8. Refresh the browser. # Connect to a Data Source or Target Use the Salesforce Data Pipelines connectors to connect data inside and outside of Salesforce. You can access data in your local Salesforce org, external orgs, and other sources, such as apps, data warehouses, and database services. 1. From the App Launcher, open Data Manager. ![Data Manager is an app listed in the App Launcher.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/sdp_app_picker_data_manager.png) 2. In the left panel, select **Connections**. ![The connection page showing the default connection to your local Salesforce org with the default connected objects.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_data_manager_connect_page.png) By default, you have a connection to your local Salesforce org. 3. To connect to a different data source or create another connection to the same data source, click **New Connection**. 4. Select the connection type. For example, select **Salesforce External Connector** to connect to another Salesforce org. ![The Select Connector dialog showing a list of connectors with the Salesforce External Connector selected.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_data_manager_select_connection_type.png) 5. Enter and save the connection details. The connector help pages in this section provide information on the details needed for each connector. 6. In the Edit objects dialog box, for each object you want to extract data from. 1. Select the object. ![The Select an Object page shows all objects in the data source.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_connection_select_object.png) 2. On the Columns tab, select the object’s fields that you want to extract data from. A field name can only include letters, numbers, periods, underscores, or dashes. The data sync fails if the field name contains other characters, such as brackets. 3. On the Data Preview tab, review the sample records to ensure that you’re pulling the correct fields and that the fields have the expected data. ![The Preview Source Data page shows a sample of records for the selected fields.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_connection_field_data_preview.png) 4. On the Data Sync Filter tab, add filters if you want to extract a subset of records from the object. ![The Preview Source Data page shows a sample of records for the selected fields.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_connection_field_data_filter.png) 7. When you’ve added all the objects you want to sync, click **Save**. The connection and its objects appear in the connections list. ![The object appears under the connection type in the Connect tab.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_connection_object_added.png) 8. To change the field selections, attributes, or filter for an object, click the object name. 9. To add objects to a connection, click the dropdown next to the connection name and click **Edit Objects**. ![The object appears under the connection type in the Connect tab.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_connection_edit_objects.png) #### See Also - [Connect to Local Salesforce Data](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_local.htm&release=264.0.0&type=5 "Use the prebuilt Salesforce Connector to manage the data synced between your local Salesforce org and Data Pipeline. Filter data synced to Data Pipelines, create more connections using the Salesforce Local connector, manage objects between connections, and add or remove objects and fields from sync. Use the Salesforce External connector to sync data from a remote Salesforce org.") - [Connect to Data Outside of Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_remote.htm&release=264.0.0&type=5 "Create a remote connection to sync external cloud data with Salesforce Data Pipelines.") # Connect to Data Outside of Salesforce Create a remote connection to sync external cloud data with Salesforce Data Pipelines. ### Required Editions ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_important.png) Important These connectors sync data from cloud-based systems without a firewall. You can’t use them to sync data from an on-premises system. Nor can you use them to sync data from cloud-based systems protected by a cloud firewall. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/images/icon_note.png) Note Datasets created by these connectors are deleted automatically after no less than 30 days. If any other features depend on these datasets, schedule the connections to update at least every 30 days.
Available in: Lightning Experience
Available with Salesforce Data Pipelines, which is available for an extra cost in Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create a remote connection: Add CRM Analytics Remote Connections, Edit CRM Analytics Dataflows, and Use CRM Analytics
To use, edit, or delete a remote connection: Edit CRM Analytics Dataflows and Use CRM Analytics
- **[Salesforce Connectors](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_group.htm&release=264.0.0&type=5)** Use these connectors to sync your data in systems that are part of the Salesforce ecosystem, including external Salesforce orgs, to Salesforce Data Pipelines. - **[Application Connectors](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_application_group.htm&release=264.0.0&type=5)** Use an application connector to sync data from an external application to Salesforce Data Pipelines. - **[Database Connectors](https://help.salesforce.com/s/articleView?id=xcloud.sdp_integrate_connectors_database_group.htm&release=264.0.0&type=5)** Use these connectors to sync data from your external database services to Salesforce Data Pipelines. - **[Object Store and No SQL Connectors](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_object_store_nosql_group.htm&release=264.0.0&type=5)** Use these connectors to sync data from your object store and non-SQL services to Salesforce Data Pipelines. - **[Pilot and Beta Connectors](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_pilot_beta.htm&release=264.0.0&type=5)** You can use these connectors as a pilot or beta feature to sync external data with Salesforce Data Pipelines. Before choosing a connector, review its pilot or beta instructions. - **[Add and Remove Remote Objects and Fields from Data Sync](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_replicate_connection.htm&release=264.0.0&type=5)** Update data sync for connected external data sources to keep up with your changing business by adding objects, removing objects, and managing which fields are synced. Synced data is stored in Salesforce Data Pipelines as objects that can be used in recipes. # Connect to Local Salesforce Data Use the prebuilt Salesforce Connector to manage the data synced between your local Salesforce org and Data Pipeline. Filter data synced to Data Pipelines, create more connections using the Salesforce Local connector, manage objects between connections, and add or remove objects and fields from sync. Use the Salesforce External connector to sync data from a remote Salesforce org. - **[Add and Remove Local Salesforce Objects and Fields from Data Sync](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_local_add_remove_objects.htm&release=264.0.0&type=5)** Update data sync to keep up with your changing business by adding local Salesforce objects, removing objects, and managing which fields are synced. Synced data is stored in Salesforce Data Pipelines as objects that you can use in recipes. - **[Create Another Salesforce Local Data Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_local_create.htm&release=264.0.0&type=5)** Create connections using the Salesforce Local connector to strategically manage when your Salesforce data syncs to Salesforce Data Pipelines using individually scheduled local connections. A local connection, SFDC\_LOCAL, is included when Salesforce Data Pipelines is activated. - **[Move Salesforce Objects Between Local Connections](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_local_move_object.htm&release=264.0.0&type=5)** You can reassign objects from one local connection to another local connection. - **[Filter Local Data Synced to Data Pipelines](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_local_filter.htm&release=264.0.0&type=5)** Exclude unnecessary or sensitive data from syncing to Data Pipelines with data sync filters. Filters run on the source object and speed up data sync by pulling only the data you need into Data Pipelines. If you want to use excluded data in the future, use a recipe filter to limit the dataset data instead of a data sync filter. - **[Salesforce Connector for Local Salesforce Data Considerations](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_local_considerations.htm&release=264.0.0&type=5)** Keep these behaviors in mind when working with the Salesforce Connector. - **[Optimize Recipes That Use the Local Salesforce Connection](https://help.salesforce.com/s/articleView?id=xcloud.sdp_connectors_salesforce_local_optimize_recipes.htm&release=264.0.0&type=5)** Improve the performance of recipes run after a local Salesforce object sync by choosing to optimize the synced data. Optimization is available for full, periodic full, and incremental syncs. # Connect Your External Apps to Salesforce Suites Before you can sync your data between Salesforce and external apps, establish a connection to the app. ### Required Editions
Available in: Lightning Experience
Available in: Starter Suite and Pro Suite Editions
User Permissions Needed
To add a connection to an external app: Admin user profile
Your setup path depends on whether you start from a prebuilt flow template. Follow the path that matches your integration. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/images/icon_note.png) Note Before you begin, make sure that you have administrator login credentials for the external app that you're connecting to. ## Set Up a Connection by Using a Prebuilt Template Use this path when you connect to an app that offers a prebuilt template, such as Google Sheets, HubSpot, Jira, QuickBooks Online, or Zendesk. 1. Add a connector to your external app with the guided wizard. See [Add a Connector to an External App With the Guided Wizard](https://help.salesforce.com/s/articleView?id=xcloud.add_a_connection_guided_wizard.htm&release=264.0.0&type=5 "Connect to an external app by using the guided connection wizard."). 2. Set your flow's input values for Jira and Google Sheets integrations. See [Set the Flow Input Values for Jira and Google Sheets Integrations](https://help.salesforce.com/s/articleView?id=xcloud.add_a_connection_edit_input_values.htm&release=264.0.0&type=5 "To finish setting up a Jira or Google Sheets flow, set its input values in Flow Builder so Salesforce knows exactly what data to sync."). 3. Turn on the flow so that your data starts syncing. See [Activate the Flow in Flow Builder](https://help.salesforce.com/s/articleView?id=xcloud.add_a_connection_activate_flow.htm&release=264.0.0&type=5 "Before you can sync your data between Salesforce Suites and your external apps, activate your flow in Flow Builder."). 4. Turn off a flow when you no longer need it, if applicable. See [Deactivate a Flow in Flow Builder](https://help.salesforce.com/s/articleView?id=xcloud.add_a_connection_deactivate_flow.htm&release=264.0.0&type=5 "To turn off a flow, deactivate it in Flow Builder."). If your flow uses custom fields, grant profile access so that your users can see the fields on their record pages. See [Grant Profile Access to Custom Fields](https://help.salesforce.com/s/articleView?id=xcloud.add_a_connection_profile_access.htm&release=264.0.0&type=5 "If your flow uses custom fields, grant field-level access so that users assigned to a profile can see the fields on their record pages."). ## Set Up a Connection Without a Template Use this path to build a flow from scratch when connecting to an app that doesn't offer a prebuilt template. 1. Add a connector to your external app without the guided wizard. See [Add a Connector to an External App Without the Guided Wizard](https://help.salesforce.com/s/articleView?id=xcloud.add_a_connection_no_wizard.htm&release=264.0.0&type=5 "Connect to an external app by using direct configuration."). 2. Build a flow to move data between Salesforce and your external app. See [Build a Flow to Move Your Data](https://help.salesforce.com/s/articleView?id=xcloud.build_a_flow_to_move_your_data.htm&release=264.0.0&type=5 "Set up the triggers and actions that move data between Salesforce Suites and your connected external app."). 3. Turn on the flow so that your data starts syncing. See [Activate the Flow in Flow Builder](https://help.salesforce.com/s/articleView?id=xcloud.add_a_connection_activate_flow.htm&release=264.0.0&type=5 "Before you can sync your data between Salesforce Suites and your external apps, activate your flow in Flow Builder."). 4. Turn off a flow when you no longer need it, if applicable. See [Deactivate a Flow in Flow Builder](https://help.salesforce.com/s/articleView?id=xcloud.add_a_connection_deactivate_flow.htm&release=264.0.0&type=5 "To turn off a flow, deactivate it in Flow Builder."). If your flow uses custom fields, add them to your page layout and grant profile access so that your users can see the fields on their record pages. See [Add Custom Fields to Your Page Layout](https://help.salesforce.com/s/articleView?id=xcloud.add_a_connection_custom_fields_layout.htm&release=264.0.0&type=5 "If your flow uses custom fields, add them to your record page layout so that your users can see them. For example, if you created a custom Jira Status field that belongs on the Case page, use Lightning App Builder to add it to that page layout.") and [Grant Profile Access to Custom Fields](https://help.salesforce.com/s/articleView?id=xcloud.add_a_connection_profile_access.htm&release=264.0.0&type=5 "If your flow uses custom fields, grant field-level access so that users assigned to a profile can see the fields on their record pages."). # Connect Your External Calendar from Your Partner Site Connect your Google or Microsoft account so that customers see appointment times that reflect your current availability. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions with Partner Ecosystem Management - Members or Partner Ecosystem Management - Login
User Permissions Needed
To connect an external calendar: Partner EAC User
Ask your Salesforce admin for access to the partner site and confirm which Google or Microsoft account to connect. Einstein Activity Capture uses your connected calendar to help Salesforce Scheduler avoid times when you're unavailable. 1. Log in to the partner Experience Cloud site. 2. Open the page that contains **Connected Accounts**. 3. Select the option to connect your Google or Microsoft account. 4. Log in to your external account and approve the requested access. 5. Return to the partner site and verify that the account shows as connected. # Connect Your OmniOut App (Managed Package) For the managed package runtime, OmniOut connects your CMS to Salesforce through a proxy or directly. Configure a connection object to connect to the Salesforce Connected App. Connections are unique to your app's requirements and must be configured outside the scope of OmniOut. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). View the connection object template and sample apps in this section to see examples of how to configure a connection. Before You Begin Add your Omniscript or Flexcard to OmniOut. For Omniscripts, see [Add an Omniscript Lightning Web Component to OmniOut (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_an_omniscript_lightning_web_component_to_omniout.htm&release=264.0.0&type=5 "For the managed package runtime, download and configure an Omniscript to use it off-platform in OmniOut. Download your Omniscript LWC from the LWC Omniscript Designer, add the component folder to the OmniOut project, and configure files for HTML and CSS."). For Flexcards, see [Add a Flexcard LWC to OmniOut (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_flexcard_lwc_to_omniout.htm&release=264.0.0&type=5 "For the managed package runtime, download and configure a Flexcard to use it off-platform in your OmniOut project. Download your Flexcard LWC from the Flexcard Designer, add the component folder to the OmniOut project, and configure files for HTML and CSS."). [Create a Connection Object in OmniOut (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_connection_object_in_omniout.htm&release=264.0.0&type=5 "For the managed package runtime, send and receive data to and from Salesforce by creating a connection object. A connection object must be present for every type of connection, including when a proxy is present. The connection object exposes the instance URL, namespace, and request function.") - **[Sample OmniOut App (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_sample_omniout_apps.htm&release=264.0.0&type=5)** For the managed package runtime, download, configure, and run a sample app to view an OmniOut app connection example. After running the sample app, modify it to host your LWC Omniscripts and Flexcards. - **[Create a Connection Object in OmniOut (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_connection_object_in_omniout.htm&release=264.0.0&type=5)** For the managed package runtime, send and receive data to and from Salesforce by creating a connection object. A connection object must be present for every type of connection, including when a proxy is present. The connection object exposes the instance URL, namespace, and request function. - **[Create a Connection Object in OmniOut for Flexcards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_connection_object_in_omniout_for_flexcards.htm&release=264.0.0&type=5)** For the managed package runtime, send and receive data to and from Salesforce by creating a connection object. A connection object must be present for every type of connection, including when a proxy is present. The connection object exposes the instance URL, namespace, and request function. # Connect Your Salesforce Sandbox Org to Quip To pull in live Salesforce data from your Sandbox org into Quip, connect your Sandbox org to Quip. ### Required Editions
Available in: Lightning Experience
1. From your profile in Quip, click **Salesforce**. 2. Under Advanced Connection Options, find Connect to a Salesforce Sandbox, and click **Connect**. 3. Enter your Sandbox username and password and click **Log In to Sandbox**. 4. Select **Allow** and then **Done**. # Connected App and OAuth Terminology What’s a token? Consumer? Callback URL? To better understand OAuth-enabled connected apps, familiarize yourself with a few terms. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: All Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. Access Token Instead of using the user’s Salesforce credentials, a consumer (connected app) can use an access token to gain access to protected resources on behalf of the user. For OAuth 1.0.A, the access token must be exchanged for a session ID. For OAuth 2.0, the access token is a session ID and can be used directly. Authorization Code Only used in OAuth 2.0 with the web server flow, the authorization code is a token that represents the access granted by the end user. The authorization code is used to obtain an access token and a refresh token. It expires after 15 minutes. For OAuth 1.0.A, see [RequestToken](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_terminology.htm&release=264.0.0&type=5). Authorization Server The authorization server is the server that authorizes a resource owner, and upon successful authorization, issues access tokens to the requesting consumer. Callback URL A callback URL is the URL that is invoked after OAuth authorization for the consumer (connected app). In some contexts, the URL must be a real URL that the client’s web browser is redirected to. In others, the URL isn’t actually used, but the value between your client app and the server (the connected app definition) must be the same. For example, you might want to use a value that identifies the app, such as https://MyCompany.Myapp. Consumer A consumer is the website or app that uses OAuth to authorize both the Salesforce user and itself on the user’s behalf. Referred to as `client` in OAuth 2.0. Consumer Key A consumer uses a key to identify itself to Salesforce. Referred to as `client_id` in OAuth 2.0. Consumer Secret A consumer uses a secret to establish ownership of the consumer key. Referred to as `client_secret` in OAuth 2.0. OAuth Endpoint OAuth endpoints are the URLs that you use to make OAuth authorization requests to Salesforce. Nonce Nonce is a number, often a random number, used during authorization to ensure that requests cannot be reused. OAuth Open Authorization (OAuth) is a standard, token-based protocol for authorization. Refresh Token Only used in OAuth 2.0, a consumer can use a refresh token to obtain a new access token, without having the end user approve the access again. Request Token Only used in OAuth 1.0.A, a consumer (connected app) can use a request token to obtain authorization from the end user. It exchanges the token for an access token. For OAuth 2.0, see [Authorization Code](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_terminology.htm&release=264.0.0&type=5). Resource Owner The resource owner is the entity (usually the end user) that grants access to a protected resource. Resource Server The resource server is the server that hosts the protected resource. Your Salesforce org is the resource server that protects your data. Token Secret A consumer uses this secret to establish ownership of a given token, both for request tokens and access tokens. User An individual who has a Salesforce login. #### See Also - [Authorize Apps with OAuth](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_authenticate.htm&release=264.0.0&type=5 "OAuth is an open protocol that authorizes a client application to access data from a protected resource through the exchange of tokens. OAuth tokens are essentially permissions given to a client application.") # Connected App IP Relaxation and Continuous IP Enforcement For security reasons, if you relax IP restrictions for your connected app, and your org has enabled **Enforce login IP ranges on every request**, users can’t access the app in some circumstances. This access restriction applies to all OAuth-enabled connected apps, including mobile devices. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. SAML-enabled connected apps aren’t affected, unless they are also OAuth-enabled for single sign-on. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note IP restrictions are enforced only when they’re configured on a user’s profile. SAML bearer assertion and JWT bearer token flows always enforce IP restrictions regardless of the connected app policy.
Connected App IP Relaxation Settings and Continuous IP Enforcement
IP Relaxation When Continuous IP Enforcement Is Disabled (Default) When Continuous IP Enforcement Is Enabled
Enforce IP restrictions A user running this app is subject to the org’s IP restrictions, such as IP ranges set in the user’s profile. A user running this app is subject to the org’s IP restrictions, such as IP ranges set in the user’s profile.
Enforce IP restrictions, but relax for refresh tokens A user running this app is subject to the org’s IP restrictions, such as IP ranges set in the user’s profile, during initial login. These restrictions are relaxed when the app later uses a refresh token to obtain a new access token.

A user running this app is subject to the org’s IP restrictions, such as IP ranges set in the user’s profile, during initial login. These restrictions are relaxed when the app later uses a refresh token to obtain a new access token. However, for security reasons, users can’t:

  • Change their password
  • Register a verification method
  • Access pages in a login flow
Relax IP restrictions for activated devices

A user running this app bypasses the org’s IP restrictions when either of these conditions is true.

  • The app has a list of allowed IP ranges and is using the web server OAuth authorization flow. Only requests coming from these IPs are allowed.
  • The app doesn’t have a list of allowed IP-ranges, but it uses the web server authentication flow, and the user successfully completes identity verification if accessing Salesforce from a new browser or device.

A user running this app bypasses the org’s IP restrictions when either of the OAuth conditions in the previous column is true. However, for security reasons, users can’t:

  • Change their password
  • Register a verification method
  • Access pages in a login flow
Relax IP restrictions A user running this connected app is not subject to any IP restrictions.

A user running this connected app is not subject to any IP restrictions. However, for security reasons, users can’t:

  • Change their password
  • Register a verification method
  • Access pages in a login flow
# Connected App to External Client App Migration Create an external client app based on one of your existing connected apps. External client apps provide many of the features of connected apps while offering increased security. See [Comparison of Connected Apps and External Client Apps Features](https://help.salesforce.com/s/articleView?id=xcloud.connected_apps_and_external_client_apps_features.htm&release=264.0.0&type=5 "Connected apps offer a framework to provide external applications with your Salesforce data. However, there are aspects of the framework that make it impossible to define separate user roles and difficult to package connected apps. External client apps were designed to be as useful at connecting external applications with your data as connected apps while addressing these shortcomings."). ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_tip.png) Tip Setup with Agentforce can help you migrate connected apps more efficiently. For more information, see [Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_overview.htm&language=en_US) and [Identity Management in Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_identity.htm&language=en_US). ## Migration Availability In Setup, go to App Manager and view your connected app. If the app meets all eligibility requirements, you see the **Migrate to External Client App** button. If you don't see the button, your connected app has one or more conditions that prevent migration. ## Eligibility Requirements Your connected app is eligible for migration if all of the following are true. - User Provisioning is not enabled. Disable User Provisioning before you migrate. - No Custom Apex Handler is configured. Remove the Connected App Handler (Apex plugin) before you migrate. - Canvas is not enabled. You can't migrate connected apps with Canvas enabled at this time. - Dynamic Client Registration (DCR) is not enabled. You can't migrate apps with DCR configured. - SAML does not use Triple DES encryption. Change the SAML encryption type to AES before you migrate. - No standard notification subscriptions are configured for non-internal apps. Only custom notification types are supported for migration. ## If Your App Is Not Eligible If you can’t migrate due to one of the prohibited conditions, create a new external client app with equivalent settings, and then update your integration to use the new external client app’s consumer credentials. ## After Migration When you migrate a connected app to an external client app, keep these details in mind. - Migration preserves your consumer key and secret, so existing integrations continue to work. - Refresh tokens remain valid. - The original connected app is saved as a read-only version. - The migrated external client app is local to your org. ## Current Limitations Keep these limitations in mind when migrating connected apps. - You can't migrate single sign-on connected apps to external client apps. This approach causes issues with the contact center update. - You can migrate apps only through the user interface. Use the **Migrate to External Client App** button in App Manager. API and CLI support isn’t available. - Don’t delete the original connected app after migration. Both apps share the same consumer. We’ll provide safe deletion guidance in a future release. - The migration process can’t detect username-password flow. Confirm this flow isn’t in use during migration. - External client apps don’t support username-password flow. If you migrate a connected app that uses this flow, it won’t work on the external client app. Instead, use the OAuth 2.0 web server flow with Proof Key for Code Exchange (PKCE) or the OAuth 2.0 client credentials flow. - **[Migrate a Local Connected App to an External Client App](https://help.salesforce.com/s/articleView?id=xcloud.migrate_connected_app_to_external_client_app.htm&release=264.0.0&type=5)** Use the automated process to create a local external client app that replaces your existing local connected app. After migration, the old connected app remains as a read-only version in App Manager. External client apps created through migration are secure. # Connected App Use Cases There are four main use cases for which your org can implement connected apps. You can use a connected app to integrate external applications with the Salesforce API, such as a web-based app that pulls in order status data from your Salesforce org. You can also use connected apps to integrate service providers with your Salesforce org, and to set security policies to control what data a third-party app can access from your org. And you can configure a connected app to provide authorization for external API gateways, such as API gateways hosted on MuleSoft’s Anypoint Platform. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. ## Access Data with API Integration You can use a connected app to request access to Salesforce data on behalf of an external application. For a connected app to request access, it must be integrated with the Salesforce API using the OAuth 2.0 protocol. OAuth 2.0 is an open protocol that authorizes secure data sharing between applications through the exchange of tokens. Developers and independent software vendors (ISVs) use OAuth authorization flows to integrate their app with the Salesforce API. These authorization flows enable a user to work in one app but see the data from another. For more information about configuring a connected app for API integration, see [Enable OAuth Settings for API Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&release=264.0.0&type=5 "You can use a connected app to request access to Salesforce data on the behalf of an external application. For a connected app to request access, it must be integrated with the Salesforce API using the OAuth 2.0 protocol. OAuth 2.0 is an open protocol that authorizes secure data sharing between applications through the exchange of tokens. When developers or independent software vendors (ISV) want to integrate their app with Salesforce, they use OAuth APIs. These OAuth APIs enable a user to work in one app but see the data from another."). ## Integrate Service Providers with Your Salesforce Org When Salesforce acts as your identity provider, you can use a connected app to integrate your service provider with your Salesforce org. Use one of these methods to configure a connected app for a service provider. You can use a connected app with SAML 2.0 to integrate a service provider with your Salesforce org. Salesforce supports SAML single sign-on (SSO) when the service provider or the identity provider initiates the flow. For example, you build a custom Your Benefits web app that implements SAML 2.0 for user authentication. You want your users to be able to log in to this app with their Salesforce credentials. To set up this SSO flow, configure the Your Benefits web app as a connected app. Define your Salesforce org as the SAML identity provider for the connected app. Your users can now log in to the Your Benefits web app with their Salesforce credentials. For more information about configuring a connected app for SAML SSO, see [Integrate Service Providers as Connected Apps with SAML 2.0](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_saml_sso.htm&release=264.0.0&type=5 "To integrate a service provider with your Salesforce org, you can use a connected app that implements SAML 2.0 for user authentication. Salesforce supports SAML single sign-on (SSO) when the service provider or the identity provider initiates the flow. To use this option, configure a connected app with SAML 2.0 enabled for your service provider. Define your Salesforce org as the SAML identity provider."). You can also use a connected app with OpenID Connect to integrate a service provider with your Salesforce org. To use this option, the service provider must accept OpenID Connect tokens. For example, you want your users to sign on directly from your Salesforce org to an external Wellness Tracker app that accepts OpenID Connect. So you create a connected app for the Wellness Tracker app. For the connected app, you enable OAuth settings, select the “Allow access to your unique identifier (openid)” scope, and configure an ID token. This configuration enables the SSO flow for your Wellness Tracker app by integrating the service provider with your Salesforce org. For more information about configuring a connected app for OpenID Connect SSO, see [Integrate Service Providers as Connected Apps with OpenID Connect](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_openid_connect.htm&type=5&language=en_US). ## Manage Access to Third-Party Apps Admins can set security policies to control what data a third-party app can access from your org. Admins can also define who can use the third-party app. For example, you install a third-party app that allows your org’s users to make travel reservations. By selecting the option “Admin approved users are pre-authorized” for the connected app, you can assign specific user profiles to the app. Only the users with this user profile can access the app. You can also set a refresh token policy to revoke the travel reservation app’s access to your Salesforce data after a set amount of time. In addition to setting security policies to manage third-party apps, you can uninstall, and—when necessary—block these apps from the Salesforce org. For more information about managing connected apps, see [Manage Access to a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage.htm&release=264.0.0&type=5 "After a connected app is installed in your org, you can manage access to it. Configure permissions and policies for the app, explicitly defining who can use the connected app and where they can access the app from. These permissions and policies, which include user-access, IP range restrictions, and multi-factor authentication (MFA), provide extra security for your org."). ## Provide Authorization for External API Gateways Salesforce can act as an independent OAuth authorization server to protect resources hosted on an external API gateway. Using OpenID Connect dynamic client registration, resource servers can dynamically create client apps as connected apps in Salesforce. Salesforce can then authorize these connected apps to access protected resources hosted by the third-party service. For example, Salesforce can act as the OAuth authorization server for API gateways that are hosted on MuleSoft's Anypoint Platform. MuleSoft’s Anypoint Platform, which is the resource server, can dynamically create client apps as connected apps. These connected apps can send a request to Salesforce asking for access to data protected by the API gateways. Salesforce can then authorize the connected apps, granting them access to the data protected by the API gateways. For more information about OpenID Connect dynamic client registration, see [OpenID Connect Dynamic Client Registration for External API Gateways](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oidc_dynamic_client_reg_flow.htm&release=264.0.0&type=5 "Although not a typical authorization flow, you can use OpenID Connect dynamic client registration to enable your Salesforce instance as an independent OAuth authorization server to protect resources hosted on an external API gateway."). ## Your Part in Creating and Managing Connected Apps It’s important to understand how you can work with a connected app. - Connected app developer—As a Salesforce developer or ISV, you build API integrations or external apps that can access Salesforce data as a connected app. As a developer, you can build a connected app for your org, but other Salesforce orgs can install it for use, too. - Connected app admin—As a Salesforce admin, you install, uninstall, and—when necessary—block connected apps from the Salesforce org. As an admin, you also configure permissions and policies for the apps, explicitly defining who can use the connected apps and where they can access the apps from. These permissions and policies, which include profiles, permission sets, IP range restrictions, and multi-factor authentication (MFA), provide extra security for your org. In addition, make sure that you understand whether your org is the connected app’s owner or consumer. - Connected App Owner—As a connected app owner, your Salesforce org built the app. You can edit the app’s characteristics and manage its access policies. For example, you decide the type of information (such as a client secret) that the connected app must provide to gain access to data in your Salesforce org. - Connected App Consumer—As a connected app consumer, your org installed the app from the AppExchange Marketplace or as a managed package from a third-party vendor’s website. You can only edit the app’s access policies, such as determining who can use the app and whether the app can access data from a remote location. #### See Also - [Create a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create.htm&release=264.0.0&type=5 "When you create a connected app, make sure that you understand how it’s going to be used so you can configure the appropriate settings. For example, if you’re creating a connected app to integrate an external application with your Salesforce API, configure the connected app with OAuth authorization settings. Or if you’re creating a connected app to act as a service provider in a SAML single sign-on (SSO) flow, configure SAML settings.") - [Manage Access to a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage.htm&release=264.0.0&type=5 "After a connected app is installed in your org, you can manage access to it. Configure permissions and policies for the app, explicitly defining who can use the connected app and where they can access the app from. These permissions and policies, which include user-access, IP range restrictions, and multi-factor authentication (MFA), provide extra security for your org.") - [Connected Apps](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_overview.htm&release=264.0.0&type=5 "A connected app is a framework that enables an third-party application to integrate with Salesforce by using APIs and standard protocols, such as SAML, OAuth, and OpenID Connect. Connected apps use these protocols to authenticate, authorize, and provide single sign-on (SSO) for third-party applications. The third-party applications that are integrated with Salesforce can run on the customer success platform, other platforms, other devices, or even SaaS subscriptions. For example, when you log in to your Salesforce mobile app and see your data from your Salesforce org, you’re using a connected app.") # Connected Apps A connected app is a framework that enables an third-party application to integrate with Salesforce by using APIs and standard protocols, such as SAML, OAuth, and OpenID Connect. Connected apps use these protocols to authenticate, authorize, and provide single sign-on (SSO) for third-party applications. The third-party applications that are integrated with Salesforce can run on the customer success platform, other platforms, other devices, or even SaaS subscriptions. For example, when you log in to your Salesforce mobile app and see your data from your Salesforce org, you’re using a connected app. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: all editions

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. By capturing metadata about an third-party application, a connected app tells Salesforce which authentication protocol—SAML, OAuth, and OpenID Connect—the third-party application uses and where the third-party application runs. Salesforce can then grant the third-party application access to its data and attach policies that define access restrictions, such as when the app’s access expires. Salesforce can also audit connected app usage. Connected apps are available in your Salesforce orgs and Experience Cloud sites. By default, your org and your Experience Cloud users can access connected apps. But you can restrict user access to a connected app with permissions and policies. For more information, see [Manage Access to a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage.htm&release=264.0.0&type=5 "After a connected app is installed in your org, you can manage access to it. Configure permissions and policies for the app, explicitly defining who can use the connected app and where they can access the app from. These permissions and policies, which include user-access, IP range restrictions, and multi-factor authentication (MFA), provide extra security for your org."). ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_tip.png) Tip Setup with Agentforce can help you manage connected apps more efficiently. For more information, see [Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_overview.htm&language=en_US) and [Identity Management in Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_identity.htm&language=en_US). - **[Connected App Use Cases](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_about.htm&release=264.0.0&type=5)** There are four main use cases for which your org can implement connected apps. You can use a connected app to integrate external applications with the Salesforce API, such as a web-based app that pulls in order status data from your Salesforce org. You can also use connected apps to integrate service providers with your Salesforce org, and to set security policies to control what data a third-party app can access from your org. And you can configure a connected app to provide authorization for external API gateways, such as API gateways hosted on MuleSoft’s Anypoint Platform. - **[Create a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create.htm&release=264.0.0&type=5)** When you create a connected app, make sure that you understand how it’s going to be used so you can configure the appropriate settings. For example, if you’re creating a connected app to integrate an external application with your Salesforce API, configure the connected app with OAuth authorization settings. Or if you’re creating a connected app to act as a service provider in a SAML single sign-on (SSO) flow, configure SAML settings. - **[Edit a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_edit_parent.htm&release=264.0.0&type=5)** After you create a connected app, you can make changes to it’s configuration. The actions that you can perform depend on the type of connected app. Use the App Manager to get a list of apps available in your org, including connected apps. From here, you can edit, reconfigure, or delete the connected app. - **[Manage Access to a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage.htm&release=264.0.0&type=5)** After a connected app is installed in your org, you can manage access to it. Configure permissions and policies for the app, explicitly defining who can use the connected app and where they can access the app from. These permissions and policies, which include user-access, IP range restrictions, and multi-factor authentication (MFA), provide extra security for your org. - **[Send Notifications to a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_notifications.htm&release=264.0.0&type=5)** Keep users of your custom app up to date with timely information and reminders. With the connected app framework, you can use the Notification Builder Platform or Apex Push to send custom notifications. - **[OAuth Authorization Flows](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_flows_ca.htm&release=264.0.0&type=5)** OAuth authorization flows grant a client application restricted access to protected resources on a resource server. Each OAuth flow offers a different process for approving access to a client app, but in general the flows consist of three main steps. To initiate an authorization flow, a client app requests access to a protected resource. In response, an authorizing server grants access tokens to the client app. A resource server then validates these access tokens and approves access to the protected resource. #### See Also - [_First-Generation Managed Packaging Developer Guide_: Package and Test Your Solution](https://developer.salesforce.com/docs/atlas.en-us.pkg1_dev.meta/pkg1_dev/packaging_testing.htm) # Connected Assets Transform asset operations with real-time IoT intelligence. Automate responses to critical asset events, eliminate manual workflows, and make data-driven service decisions that maximize asset uptime and lifetime value across industries. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
Connected Asset empowers companies orchestrate real-time actions on assets and transform their asset operations. Build a touchless, sophisticated process to detect relevant events from assets and perform rules-driven actions in Salesforce by using Actionable Event Orchestration. - **[Connected Assets Editions](https://help.salesforce.com/s/articleView?id=xcloud.ca_editions.htm&release=264.0.0&type=5)** Review the supported products and editions for Connected Assets features. - **[Actionable Telematics Framework for Connected Assets](https://help.salesforce.com/s/articleView?id=xcloud.ca_aeo_actionable_event_orchestration_parent.htm&release=264.0.0&type=5)** The actionable event orchestration framework empowers companies to build sophisticated orchestrations for processing event data generated from assets and take actions in Salesforce. Design orchestration processes that respond to key asset events, such as sensor faults, high ambient temperatures, and battery failures, by setting rules and conditions. After the asset sends the event data, the framework determines the orchestration process to execute. Use these orchestrations to create and update records, including work orders, asset milestones, cases, milestones, and record alerts. Service teams monitor these records in real time and take the required actions, such as offering assistance to customers and performing on-site services. - **[Data Cloud Experiences for Connected Assets](https://help.salesforce.com/s/articleView?id=xcloud.ca_setup_workflow.htm&release=264.0.0&type=5)** Connect, unify, and analyze the data for your connected assets at scale by using Data Cloud. Harmonize, query, and segment asset usage and operations data in a standard data model. Ingest asset operations data from different systems such as telematics providers. Analyze multidimensional metrics for assets, such as asset lifetime value, asset case load, and critical events. Get your Data Cloud implementation up and running by installing the Asset Management Starter data kit. Visualize data that's stored in Data Cloud to improve asset uptime and identify potential faults. - **[Stay Ahead of Asset Downtime with Proactive Asset Service](https://help.salesforce.com/s/articleView?id=xcloud.pfs_pas_intro.htm&release=264.0.0&type=5)** To proactively monitor asset health and performance, explore our intelligent dashboards and analytics. - **[Telemetry Definition and Action Management](https://help.salesforce.com/s/articleView?id=xcloud.ca_telemetry_parent.htm&release=264.0.0&type=5)** Use telemetry definitions to manage the data from connected assets. These definitions create a logical structure for an asset's sensors and actuators. Enable seamless communication for a connected asset to send data from its sensors and receive commands for its actuators. Configure telemetry action definitions to perform remote operations. Automate service process generation for an efficient customer experience. # Connected Assets Data Model Objects Model and store information on asset operations, operator behavior, types of faults, and other asset data in Data Cloud by using data model objects (DMOs). The Salesforce Standard Data Model SSOT package contains asset telematics data model objects that companies use to store data for assets. Use the asset data for segmentation, activation, analytics, or any other operation in Data Cloud. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
After you import your asset data into Data Cloud, map the data to the required DMOs before using it in Data Cloud. To get started with data mapping, add a connected data source to Data Cloud. After you connect a source, Data Cloud accesses the source so that you can create mapping sets between objects and fields within it and the Customer 360 Data Model. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-connected_assets-264-0-0-production-enus/eb4c6dd7-4aef-4e97-9c56-46929d5b166e/images/icon_note.png) Note To see a list of all data model objects in the Customer 360 Data Model, see [Standard Data Model Objects (DMOs)](https://developer.salesforce.com/docs/atlas.en-us.c360a_api.meta/c360a_api/c360dm_DataModelObjects.htm). Create data streams to ingest the asset telematics data from external systems, such as telematics service companies, into Data Cloud. Data ingested by all data streams is written to data lake objects (DLOs). You can then map the data lake objects to the predefined data model objects to organize the unrefined data. You don’t need to store this high-volume data in your CRM org. You can keep refreshing this data in Data Cloud in near real-time, and create critical insights around asset operations and operator performance. The insights help you make data-driven decisions and create personalized and targeted customer services. # Connected Assets Editions Review the supported products and editions for Connected Assets features. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions with Automotive Cloud
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Communications Cloud
Available in: Enterprise, Unlimited, and Developer Editions with Consumer Goods
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Energy and Utilities Cloud
Available in: Enterprise, Unlimited, and Developer Editions with Manufacturing Cloud
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Media Cloud
# Connecting Salesforce Cloud Services with Adobe Experience Manager (Managed Package) For the managed package runtime, after setting up and configuring Adobe Experience Manager to use with Omniscript, connect AEM to Salesforce. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The steps on this page outline how to connect Salesforce and AEM. The connection setup is not part of the Vlocity package. For more information on connecting Salesforce to AEM, see [Integrating with Salesforce](https://helpx.adobe.com/experience-manager/6-4/sites/administering/using/salesforce.html). 1. Log into your Salesforce org and [create your Connected App](https://developer.salesforce.com/page/Connected_Apps). In the API section, check **Enable OAuth Settings**, and add **Full access(full)**, and **Perform request on your behalf at any time (refresh\_token, offline\_access)** to your Selected OAuth Scopes. 2. Enter a Contact Email, and leave the tab open. 3. After creating app, it can take up to ten minutes to take effect. Click **Manage** to set up connection policies. Once the page loads, click **Edit Policies**. 4. Ensure that the **Refresh Token Policy** is set to **Refresh token is valid until revoked** and under Session Policies the Timeout value is set to **\--None–**. You need the Consumer key and Consumer secret for step 6 of this process. 5. Open your AEM instance and click the main logo in the top left corner. 6. Click the **Tools** icon, and select **Deployment**. 7. Select the Cloud Services card and scroll down to the Salesforce section. Click **Show Configurations**. 8. Click the **\[+\]** link located to the right of Available Configurations and enter the necessary information and click **Create**. This opens a new page and modal for the **Cloud Services Configuration**. 9. To create consistency across platforms, enter the name of the Connected App that you created in Salesforce into the **Title** and **Name** fields of the AEM Configuration modal. Leave the modal open. 10. Navigate back to the **Connected App** page in Salesforce. 11. In **Callback URL**, enter the AEM URL that has Administrator Access: `http://localhost:4502/etc/cloudservices/salesforce/testsalesforceconnect.html` where **testsalesforceconnect** is the title of your Cloud Services connection. 12. Navigate back to the Connected App page and paste the URL into the **Callback URL** field. 13. Click Save. 14. From the Connected App record page, copy the Consumer Key. 15. Return to the AEM modal and paste the **Consumer Key** into the **Customer Key** field. 16. From the Connected App record page, copy the Consumer Secret. 17. Return to the AEM modal and paste the **Consumer Secret** into the **Customer Secret** field. 18. Click **Connect to Salesforce**. This brings you to a login screen for Salesforce. Log in to the appropriate org and click **Allow**. A modal window will pop up indicating that the connection was successful. If you receive an error, wait 10 minutes and attempt to connect again. 19. Click **Ok** to save the settings. 20. Applying the configuration to your website: 1. In AEM, navigate to your site home page and click the site where you want to add the Salesforce connection. 2. In the toolbar that appears at the top of the page, click **View Properties**. 3. From the site properties page, click the **Cloud Services** tab. 4. Click **Add Configuration**, and select **Salesforce**. 5. Click on **Configuration Reference**, and select the configuration that is titled the same as your **Connected App**. 6. Click **Save**. # Consent Attributes and Legacy Object Mapping Review the attributes that make up a consent record and see how they map to the standard Salesforce consent objects. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires the Privacy Center license.
Global Consent Manager stores consent as a set of attributes on a single consent record instead of spreading it across separate objects. Some attributes store a snapshot, which is a point-in-time copy of a referenced value that's captured when the consent record is created. A snapshot keeps the consent record accurate even if the source record changes later. Attributes that reference external data come in pairs. The ID attribute identifies a source reference, and the Value attribute stores a snapshot of that value at the time the consent record is created. For example, Data Subject ID can point to the data subject's Individual record, and Data Subject Value can capture the data subject's name from that same Individual record. Map each ID and Value attribute pair to the same parent object. System-generated attributes are set automatically and aren't included in mapping. ## Consent Attribute Schema Global Consent Attributes | Attribute Label | API Name | API Type | Event Stream Name | Event Stream Type | Description | | --- | --- | --- | --- | --- | --- | | Global Consent Key | GlobalConsentKey | TEXT (255) | GlobalConsentKey | TEXT | The Global Consent Key is the Primary Key that defines the unique consent record. Comprised of Global Consent Definition segment attribute values. | | Global Consent Definition | GlobalConsentDefinition | TEXT (18) | GlobalConsentDefinition | TEXT | The Global Consent Definition ID associated with the consent record. | | Data Subject ID | DataSubjectId | TEXT (255) | DataSubjectRecord | TEXT | Data subject associated with the consent. Mapped as part of the Consent Definition setup. One complete pair is required: either Data Subject ID and Data Subject Value, or Contact Point ID and Contact Point Value. | | Data Subject Source ID | DataSubjectRecordId | TEXT (255) | DataSubjectSourceRecord | TEXT | Captured automatically from the associated data subject record so the originating record ID is retained if the Data Subject ID is mapped to something else. | | Data Subject Value | DataSubjectValue | TEXT (255) | DataSubject | TEXT | Snapshot of the data subject at the time the consent record was created. One complete pair is required: either Data Subject ID and Data Subject Value, or Contact Point ID and Contact Point Value. | | Consent Giver ID | ConsentGiverId | TEXT (50) | ConsentGiverRecordId | TEXT | The person who provided consent. Usually the same as the data subject, but can differ when consent is given on behalf of another person. | | Consent Giver Value | ConsentGiverValue | TEXT (50) | ConsentGiver | TEXT | Snapshot of the consent giver at the time the consent record was created. | | Residency Country | ResidencyCountry | TEXT (50) | ResidencyCountry | TEXT | Reserved for future use. | | Residency State/Province | ResidencyState/Province | TEXT (50) | ResidencyStateProvince | TEXT | Reserved for future use. | | Consent Method | ConsentMethod | PICKLIST (50) | ConsentMethod | TEXT | Whether consent was captured as explicit or implied. Values assigned through Residency Rules are implicit consent. | | Consent Status | ConsentStatus | PICKLIST (255) | ConsentStatus | TEXT | Current status of consent given by a data subject. | | Consent Type | ConsentType | PICKLIST (50) | ConsentType | TEXT | The use case consent was captured for, such as Communication or Action. | | Consent Capture Time | ConsentCaptureTime | DATETIME (UTC) | ConsentCaptureTimestamp | DATETIME | Date and time consent was granted. | | Consent DOI Capture | ConsentDOICapture | DATETIME (UTC) | ConsentDoiCapture | DATETIME | Date and time Double Opt In (DOI) consent was granted. | | Consent Effective From | ConsentEffectiveFrom | DATETIME (UTC) | ConsentEffectiveFrom | DATETIME | Date and time when consent becomes valid. Can't be later than Consent Effective To. | | Consent Effective To | ConsentEffectiveTo | DATETIME (UTC) | ConsentEffectiveTo | DATETIME | Date and time when consent is no longer valid. Can't be earlier than Consent Effective From. | | Consent Capture Source | ConsentCaptureSource | TEXT (255) | ConsentCaptureSource | TEXT | Source through which consent was captured. | | Consent Capture Source Type | ConsentCaptureSourceType | TEXT (255) | ConsentCaptureSourceType | TEXT | A specific source name and version, such as a preference form. | | Consent Captured Engagement Channel ID | ConsentCapturedEngagementChannelID | TEXT (255) | ConsentCaptureSource | TEXT | The specific engagement channel through which consent was captured. | | Consent Captured Engagement Channel Value | ConsentCapturedEngagementChannelValue | TEXT (255) | ConsentCapturedEngagementChannelValue | TEXT | Snapshot of the engagement channel through which consent was captured. | | Brand ID | BrandID | TEXT (50) | BrandRecord | TEXT | The brand or business unit associated with consent, used for segmentation at the time the consent record was created. | | Brand Value | BrandValue | TEXT (50) | Brand | TEXT | Snapshot of the brand or business unit associated with consent, used for segmentation. | | Consent Purpose | ConsentPurpose | PICKLIST (255) | ConsentPurpose | TEXT | The specific reason or context for which consent is collected. | | Data Use Purpose ID | DataUsePurposeId | TEXT (255) | DataUsePurposeRecord | TEXT | The specific Data Use Purpose associated with consent at the time the record was created. | | Data Use Purpose Value | DataUsePurposeValue | TEXT (50) | DataUsePurpose | TEXT | Snapshot of the Data Use Purpose value at the time the record was created. | | Engagement Channel ID | EngagementChannelId | TEXT (50) | EngagementChannelSourceRecord | TEXT | The specific engagement channel associated with consent at the time the record was created. | | Engagement Channel Value | EngagementChannelValue | TEXT (50) | EngagementChannel | TEXT | Snapshot of the engagement channel type at the time the record was created. | | Contact Point ID | ContactPointId | TEXT (50) | ContactPointSourceRecord | TEXT | The specific contact point associated with consent at the time the record was created. One complete pair is required: either Data Subject ID and Data Subject Value, or Contact Point ID and Contact Point Value. | | Contact Point Value | ContactPointValue | TEXT (50) | ContactPoint | TEXT | Snapshot of the contact point associated with consent at the time the record was created. One complete pair is required: either Data Subject ID and Data Subject Value, or Contact Point ID and Contact Point Value. | | Additional Partition ID | AdditionalPartitionId | JSON BLOB (10 MB) | AdditionalPartition | TEXT(10000) | Reserved for non-standard identifiers required to reconcile or segment records separately from a standard identity. | | Additional Consent Parameters | AdditionalConsentParameters | JSON BLOB (10 MB) | AdditionalConsentParameters | TEXT(10000) | Attributes that affect post-processing or core reconciliation of the consent event. These parameters define the rules of the consent. | | Additional Consent Options | AdditionalConsentOptions | JSON BLOB (10 MB) | AdditionalConsentOptions | TEXT(10000) | Supplementary metadata that adds detail on how consent is executed but doesn't affect the uniqueness or reconciliation of the record. | ## Legacy Object Mapping If you currently track consent in the standard Salesforce consent objects, use this table to find where each field maps in the Global Consent Manager attribute model. Attributes that aren't listed are new to Global Consent Manager and have no legacy equivalent. Legacy consent object field mapping | Global Consent Attribute | Party Consent | Contact Point Type Consent | Contact Point Consent | Communication Subscription Consent | | --- | --- | --- | --- | --- | | Data Subject ID | PartyId | PartyId | PartyRoleId (links to Individual via PartyId) | ConsentGiverId | | Consent Status | PrivacyConsentStatus | PrivacyConsentStatus | PrivacyConsentStatus | PrivacyConsentStatus | | Consent Capture Time | CaptureDate | CaptureDate | CaptureDate | ConsentCapturedDateTime | | Consent DOI Capture | DoubleConsentCaptureDate | DoubleConsentCaptureDate | DoubleConsentCaptureDate | — | | Consent Effective From | EffectiveFrom | EffectiveFrom | EffectiveFrom | EffectiveFrom | | Consent Effective To | EffectiveTo | EffectiveTo | EffectiveTo | EffectiveTo | | Consent Capture Source | CaptureSource | CaptureSource | CaptureSource | ConsentCapturedSource | | Consent Captured Engagement Channel ID | CaptureContactPointType or CaptureSource | CaptureContactPointType or CaptureSource | CaptureContactPointType or CaptureSource | — | | Consent Captured Engagement Channel Value | CaptureContactPointType | CaptureContactPointType | CaptureContactPointType | — | | Brand ID | BusinessBrandId | BusinessBrandId | BusinessBrandId | BusinessBrandId | | Brand Value | Name | Name | Name | Name | | Engagement Channel ID | — | EngagementChannelTypeId | EngagementChannelTypeId | EngagementChannelTypeId | | Engagement Channel Value | — | Name | Name | Name | | Contact Point ID | — | — | ContactPointId | ContactPointId | | Contact Point Value | — | — | Varies by contact point type (for example, EmailAddress for Contact Point Email) | Varies by contact point type (for example, EmailAddress for Contact Point Email) | # Consent Event Stream Control Streams near real-time events whenever consent-related fields change, providing an auditable feed of consent updates that downstream systems can subscribe to for timely enforcement of privacy choices. ## Control Name Consent Event Stream ## Control Overview Streams near real-time events whenever consent-related fields change, providing an auditable feed of consent updates that downstream systems can subscribe to for timely enforcement of privacy choices. ## Description When enabled, the consent event stream publishes events for creations and updates to consent records and key consent fields, so external platforms, marketing tools, and internal services can react immediately (for example, stop messaging after an opt-out) without relying solely on batch synchronization. ## Recommended Configuration Select 'Use the consent event stream'. ## Security Impact Improves enforcement of consent and data protection policies across integrated systems by making sure that changes to consent are quickly propagated, reducing the window where processing might occur against an individual’s current wants. ## Business Impact Helps keep communication and personalization in sync with customer and patient preferences, reducing regulatory exposure and improving trust by minimizing cases where individuals receive communications after opting out. ## Security Risk If Not Configured Lack of change visibility to consent fields through missing consent event stream setup. ## Threat Scenarios Consent revocations or preference changes are not propagated promptly to downstream or third-party systems, resulting in unauthorized processing or communications that violate regulatory requirements and user expectations. ## Estimated CVSS Score Range Medium (4.0–6.9). ## Risk Impact Considerations Impact increases with the number of integrated systems relying on consent data, the sensitivity of the data being processed (for example, health or financial), and the regulatory regimes applicable to the company. ## Higher Risk When Multiple external marketing, analytics, or engagement platforms consume consent data from Salesforce, consent changes are frequent, or the company operates in highly regulated jurisdictions, such as GDPR or HIPAA-covered environments. ## Low Risk When Salesforce is the primary system of engagement with few or no external processors relying on streamed consent updates, and consent changes are infrequent or handled through tightly controlled manual workflows. ## Business and Integration Considerations N/A ## Security Health Review Guidance Good to have. ## Who Is Impacted Privacy and compliance teams, integration architects, marketing operations, and application owners whose systems rely on timely and accurate consent information from Salesforce. #### See Also - [Use the Consent Event Stream](https://help.salesforce.com/s/articleView?id=xcloud.consent_event_stream.htm&type=5&language=en_US) # Consent Management Before you send promotional emails, make sure that you’re in compliance with regulations such as CAN-SPAM. After you update consent data, allow time for your data to sync before you send messages. ### Required Editions
Available in: Lightning Experience
Available in: Free, Starter and Pro Suite Editions.
## Glossary Communication Subscription The kind of marketing content someone signs up to receive, such as product updates. Subscriptions can store consent for a marketing channel, such as email. You have access to an editable default marketing communication subscription called Marketing Email. When you import leads and contacts with consent data, their consent status is updated only for the default communication subscription. In Starter and Pro Suite, you can create additional communication subscriptions as needed and import consent data from the Consent tab in the Marketing app. Consent Check A requirement to select a communication subscription when you send a message. It makes sure that each recipient is opted in, since consent is required when you send a promotional email. For transactional emails, consent checks are disabled by default. Consent Status Whether someone is opted in to receive email marketing. The corresponding field is called Privacy Consent Status, and accepted values are OptIn and OptOut. Contact Point A piece of contact information for someone, such as an email address. A unified individual can have multiple contact points. Email Preference Page Where subscribers can manage their own communication preferences when they click the Preference Center link in an email. After they click the link, they can select which communication subscriptions they want to receive emails for. For example, someone can opt in to product update emails and also opt in to your weekly newsletter. Unified Individual A consolidated record of multiple leads and contacts associated with the same person. These records are matched based on contact point email address and used to create segments. ## Consent Imports and Edits Import new leads and contacts via the Import button on lead and contact tabs. If you include consent data in this initial import, the consent status value for these customers is updated for the default Marketing Email communication subscription only. Use the same date format based on your Salesforce locale settings for the consent date column, and use OptIn or OptOut for the consent value column. ![Contacts tab with Import button highlighted.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/easy_new_import_buttons.png) Import data from the Consent tab in the Marketing app to bulk update consent data for leads or contacts. Importing data from the Consent tab can mass update consent data for contact points, such as an email address, but it can’t create leads or contacts. ![Consent tab with Import button highlighted.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/consent_tab_import.png) You can also edit the consent status for an individual lead or contact. To change this status, find the consent component on the record, and then click Update Consent. Select the new value, and save. ![Contact Point table with dropdown icon highlighted.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/easy/images/starter_consent_dropdown.png) Because of the background processes that sync lead and contact data, editing a consent status for a contact point can create cascading changes across records with the same contact point value. A consent status can change when one of these actions occurs. - A lead or contact edits their subscription on a preference center form. - A record is created with the same contact point value and a different consent status. - A user edits a contact point on a lead or contact record. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-easy-264-0-0-production-enus/85637838-197d-42ec-93c2-1ad43a7c3e30/images/icon_example.png) Example Jun receives a list of manual requests to be removed from his company’s mailing list. He searches for Jessica Nowak and changes the consent status for jnowak@provider.net to OptOut. The next time records sync and create unified individuals, the system finds two records with the same email address (Jessica Novak and Jess Nowak). The consent statuses those records are updated to OptOut. ## Consent and Segmentation You can create segments in Segment Builder. If you edit consent statuses and then create a segment, allow time for the sync to update the related contact points. As you create segments, keep in mind that background syncing can take some time. To see the most accurate segment population values, trigger a manual sync by performing one of these tasks. - Open the Campaigns page. - Open the Segments page. - Activate a campaign. Immediately before queuing emails for send, all of your latest data is synced. If you have time to wait before your email is scheduled, you don’t need to trigger a sync manually. #### See Also - [Import Consent Data](https://help.salesforce.com/articleView?id=mktg.mktg_consent_import_create.htm&type=5&language=en_US) - [Formatting Marketing Consent Import Files](https://help.salesforce.com/articleView?id=mktg.mktg_consent_import_format.htm&type=5&language=en_US) # Consent Management for Account Engagement Honor and respect your customers’ wishes when they request only specific forms of contact from your company or to opt-out of certain types of data sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: all editions
Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data. - General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Canada’s Anti-Spam Law (CASL) If you have customers or users who request specific methods of contact from your company, review these common requests and related procedures.
Actions to Consider Things to Consider  
Some of our prospects and customers don’t want to hear from my company, unless they specifically opt in. Set Up a Confirmed Opt-In Process Use a confirmed opt-in process to have prospects explicitly opt in to communications.
Some of my prospects don’t want to receive email messages from my company.

Manually opt out the prospect from marketing emails.

Direct prospects to email preference center pages to let them manage their own email subscriptions.

Configure Salesforce Engage to respect opt-out status on 1:1 messages.

My prospect doesn’t want their activity to be tracked when they interact with my marketing content. Control Tracking Opt-in Preferences

Configure opt-in preferences for your account to let prospects opt out of tracking.

Add disclosure statements to marketing forms and landing pages that indicate prospects are opting in to tracking by submitting their information.

A prospect is interested in our services, but is in the process of moving out of state.

The prospect asked that we give them a couple months before we continue soliciting.

Delete or Undelete Prospects Send the prospect to the recycle bin to suppress emails and activity tracking. Undelete the prospect to resume soliciting them.
One of my prospects in California asked that I not share their data with other companies or use it for marketing purposes.

Archive the prospect data in the recycle bin and then delete the prospect.

Manually opt out the prospect from marketing emails.

Direct prospects to email preference center pages to let them manage their own email subscriptions.

Configure Salesforce Engage to respect opt-out status on 1:1 messages.

How do I make sure a prospect’s data isn’t used in machine learning or predictions? Exclude People's Personal Data from Modeling and Predictions

To exclude a prospect, associate them with a lead that’s excluded using AI_HasOptedOutProfiling__c.

How can I find out if a visitor or prospect has Global Privacy Control (GPC) enabled in their browser and doesn’t want their data shared with third parties? Collect this information via the Account Engagement API Prospect GPC status is available for read and query endpoints in Account Engagement API v5, and for export endpoints in v3 and v4.
# Consent Management for Analytics Track your customers’ approval for how your company interacts with them and honor their requests to opt-out of certain types of data-sharing. To help you assess your compliance with various data protection and privacy regulations, we give you examples of common customer requests. And we provide details to help you determine the best way to comply with the regulations that apply to your company. ### Required Editions
Available in: All Editions
Data protection and privacy regulations can require you to delete customers’ personal data when customers request it, or when it’s no longer necessary to keep. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data. - General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Privacy Act, Australia If your customers or users want the data that you’ve collected on them deleted, review these common requests and the procedures related to them.
Common Customer Request Actions to Consider Things to Consider
My customer doesn't want us to include her data in some of my reports and dashboards. After you define a filter related to the customer for a report, be sure to refresh the report.
My customer doesn't want us to make predictions or inferences about her, such as her loyalty to our company's products and services. Edit, Share, or Delete a Dataset When you create a new analysis, the analysis will no longer include the deleted data.
My customer doesn't want her personal data included in my company's analytics using CRM Analytics. Security predicates can restrict access to data, but a copy of that customer’s data remains in CRM Analytics.
One of my customers in California is no longer associated with my company, and I want to delete their data from Einstein Prediction Builder. Delete records containing that customer's personal data from Sales Cloud, Service Cloud, or Salesforce Platform. When you delete a record in Sales Cloud, Service Cloud, or Salesforce Platform, associated personal data is automatically deleted from Einstein Prediction Builder.
My customer located in California doesn't want her personal data included in my company's analytics using Einstein Prediction Builder. Create a segment excluding records associated with that customer. Excluded records aren't used to build predictive models or predictions.
# Consent Management for B2C Commerce Honor and respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: All Editions
Track your shoppers’ approval for how your company interacts with them. Data subjects have the right to consent to the use of their personal data and can object to the processing of their personal data with respect to receiving marketing communications, online tracking, and user profiling. To help you assess your compliance with various data protection and privacy regulations, we give you examples of common shopper requests. And we provide details to help you determine the best way to comply with the regulations that apply to your company. For instance, a shopper visits a website and doesn’t want any of their information tracked while visiting the site. Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data. - General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Personal Information Protection Act (PIPA), Japan - Privacy Act, Australia - Personal Information Protection and Electronic Documents Act (PIPEDA), Canada If you have shoppers who request specific methods of contact from your company, review these common requests and the procedures related to them.
Common Customer Request Actions to Consider Things to Consider
I don't want your site to track my personal information for marketing or other purposes.

Set the Tracking site preference

Programmatically override the site preference using the Script API

Read about a sample consent tracking implementation in SGJC (SiteGenesis JavaScript Controllers)

A new site preference, Tracking, lets you set default tracking behavior for each storefront.

If you want to override this behavior for an individual shopper, you can implement your own consent management solution by calling the

dw.system.Session.isTrackingAllowed()

and

dw.system.Session.setTrackingAllowed(boolean)

methods.

Session cookies are used by default, so you might want to discuss them with your legal team.

I don't want your app to track my personal information for marketing or other purposes. Determine shopper's tracking preference using the Shop API HTTP/HTTPS headers. Search for the OCAPI Global HTTP Headers topic. Shop API resources let you set the HTTP(s) header DNT, which indicates whether personal information should be tracked.
I want to know which cookies your site uses to store information about me.

Review the local browser storage topic to understand the usage and lifespan of data stored locally.

Inform the shopper of cookies that might be relevant to their usage.

Many cookies are automatically deleted at the end of each session, but some have longer lifespans. A system or browser crash can prevent deletion.
# Consent Management for Data Cloud Honor and respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: All Editions
Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data.If you have customers or users who request specific methods of contact from your company, review these common requests and the procedures related to them.
Common Customer Request Actions to Consider Things to Consider
A consumer in California asked my business not to sell their data.
  • Apply the Restriction of Processing flag to the individual profile that includes your customer's personal information.
  • For Unified Individuals, apply this flag to each individual linked profile.
Review your processing activities with your legal counsel to determine how regulations that matter to your company affect your business.
My customer has requested their personal data no longer be processed for marketing purposes. I store customer data in Data Cloud and other Salesforce platforms. Requesting Restriction of Processing Submit Restrict processing requests to all the Salesforce clouds you use to store your customer’s personal data.
- General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Personal Information Protection Act (PIPA), Japan - Privacy Act, Australia - Personal Information Protection and Electronic Documents Act (PIPEDA), Canada # Consent Management for Education Cloud Honor your constituents’ wishes when they request only specific forms of contact from your institution or opt-out of certain types of data-sharing. ### Required Editions
Available in: Performance, Enterprise, Unlimited Editions, and Developer
Many data protection and privacy regulations require you and your institution to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many institutions collecting and processing their constituents’ data. - General Data Protection Regulation (GDPR), European Union - Family Educational Rights and Privacy Act (FERPA), United States - California Consumer Privacy Act (CCPA), United States - Canada’s Anti-Spam Law (CASL) If you have constituents or users who request specific methods of contact from your institution, review these common requests and the procedures related to them.
Common Customer Request Actions to Consider Things to Consider
An applicant or student has informed you that they don’t want to receive calls, emails, or postal mail from your institution.

Manage Accounts and Contacts

Manage Leads

Delete information in phone, mobile, and email fields for lead, person account, and contact records.

In those records, select Do Not Call.

Some of your applicants and students don’t want to hear from your institution, unless they specifically opt in.

Manage Accounts and Contacts

Manage Leads

For person accounts, contacts and leads, consider these options:

Consider deleting phone numbers, email addresses, and mailing addresses, unless your constituents give you consent to use them. Refrain from sending marketing materials.

# Consent Management for Experience Cloud Sites Honor your customer’s request to receive only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: All Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note Beginning in Summer ’26, Chatter is turned off by default in all new orgs. For any features in these orgs that require access to Chatter functionality or the Chatter APIs, turn on Chatter by going to **Setup** | **Chatter Settings** and selecting **Enable**. For details, see [Chatter Is Turned Off by Default in New Orgs Beginning in Summer ’26](https://help.salesforce.com/s/articleView?id=experience.collab_chatter_default_off.htm&type=5&language=en_US). Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data. - General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Canada’s Anti-Spam Law (CASL) If you have customers or users who request specific methods of contact from your company, review this common request and the related procedures.
Common Customer Request Actions to Consider Things to Consider
My customer doesn’t want to be part of a group he was added to. Join or Leave Groups Do your customers know how groups work and how to control how they receive notifications from them?
My customer wants to be able to control how often she gets Chatter notifications. Update Your Email Notifications in Chatter
  • Are there other ways you communicate with customers? Do customers have options for controlling how other communications are received?
  • Do your customers have access to email notification settings?
My customer wants to be notified when his email address is changed. Edit Your Email Settings
  • Are there other ways you communicate with customers?
  • Do customers have options for controlling how the communications are received?
My customer followed a topic and only wants updates on it once a week unless she’s mentioned on it. Update Your Email Notifications in Chatter
  • Are there other ways you communicate with customers?
  • Do customers have options for controlling how the communications are received?
I want to track my customers’ preferences for receiving marketing materials. Store Customers' Data Privacy Preferences.
  • How quickly must you act on your customers’ requests? Would setting a schedule help you keep track of when to act?
  • How do you determine which customers you’ve set privacy preferences for?
    • You can retrieve updates to data privacy records when you set an Apex trigger on the Individual object.
    • Using the SOAP API, you can run a query for record updates based on the Individual object.
I want to track my customers’ preferences for processing and deleting their data. Store Customers' Data Privacy Preferences.
  • How quickly must you act on your customers’ requests? Would setting a schedule help you keep track of when to act?
  • How do you determine which customers you’ve set privacy preferences for?
    • You can retrieve updates to data privacy records when you set an Apex trigger on the Individual object.
    • Using the SOAP API, you can run a query for record updates based on the Individual object.
My customer wants to delete a comment that they posted in the feed of a public-facing site.
  • FeedItem
  • Review and Approve Posts and Comments in Your Experience Cloud Site
Review Salesforce’s policies for deleting content on public-facing site pages.
If I’m using an internal site, am I subject to the same compliance as I would be for a public-facing site? Check out the standards and limitations of use for external and internal Experience Cloud sites.
  • Does the site store information on other clouds?
  • Has the customer purchased Experience cloud along with other clouds?
# Consent Management for Financial Services Cloud Honor and respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: Professional, Enterprise, and Unlimited Editions
Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data.If you have customers or users who request specific methods of contact from your company, review these common requests and the procedures related to them.
Common Customer Request Actions to Consider Things to Consider
My customer wants to opt out of phone and email communications. Manage Contacts

Delete information in these fields for customer records.

  • Phone
  • Mobile
  • Email

And in those records, select these options.

  • Email Opt Out
  • Do Not Call
My customer wants to opt out of cross-selling. Manage Contacts

Delete Lead and Opportunity records for the customer, along with any related Tasks and Calendar events.

Add a note to the customer’s record to indicate that they don’t want to be part of future cross-selling.

A consumer who lives in California asked us not to sell or transfer her personal or financial data to third parties.

Honor your customers' wishes when they request specific forms of contact from your company or opt-out of certain types of data-sharing. The data privacy fields help you track a wide range of opt-out and privacy preferences.

To reduce the chances of inadvertently revealing sensitive information, encrypt fields that contain personal information using Shield Platform Encryption.

If any third-party integrations are within the scope of the request, pass the request along to those vendors.

A consumer who lives in California withdrew his loan application, and asked us to delete his personal data.

Honor your customers' wishes when they request restricting or deleting their personal data. Look for customer data in other records, including leads, accounts, and groups, such as households.

To identify customers who previously asked your company to delete their data, Select Forget this Individual in data privacy records.

Offer customers an exported copy of their data before your company deletes it.

If any third-party integrations contain the customer’s personal data, ask those vendors to delete it. That way, you prevent the data from repopulating into Financial Services Cloud.

- General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Canada’s Anti-Spam Law (CASL) # Consent Management for Health Cloud Respect your customers’ wishes when they request only specific types or hours of contact or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: All Editions
Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data.If you have customers or users who request specific methods of contact from your company, review these common requests and the procedures related to them.
Common Customer Request Actions to Consider Things to Consider
A patient wishes to be contacted only by email, not by phone or any other channel.

Delete information in the Phone and Mobile fields for lead, account, and contact records.

In those records, select Do Not Call.

Ask your patient about which forms of communication she allows for patient care purposes, and retain the information specific to those forms. Consider deleting information related to the ways in which she prohibits contact.
A participant in a drug trial wishes to stop participating. Set an expiration date for the participant’s consent. You may not be able to delete some data, such as participant e-signatures, even when the consent that they certify is withdrawn. For example, participant data for some drug trials must be stored until a required retention period expires.
- General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Canada’s Anti-Spam Law (CASL) # Consent Management for Heroku Honor your customers’ wishes to receive only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: All Editions
Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data. - General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Canada’s Anti-Spam Law (CASL) If you have customers or users who request specific methods of contact from your company, review this common request and the related procedures.
Common Customer Request Actions to Consider Things to Consider
I want to be able to request and track our users’ consent to store their personal data and marketing, data processing, and data deletion preferences. Heroku Services give you the ability to fully manage the development, design, and functionality of applications you deploy. Using Heroku Services, you can design and develop application-layer functionality that allows your organization to obtain and track consent and preferences for your application’s end users. Work with your legal team to design a consent management system that works for your specific customer needs.
I want to utilize third-party add-ons from the Heroku Elements Marketplace to store and/or manage our users’ personal data. Salesforce Heroku provides the ability for your organization to deploy third-party add-ons from the Heroku Elements Marketplace to extend and enhance capabilities of applications your organization deploys to Heroku Services. Work with your legal team to ensure that you have the appropriate contractual terms in place with the provider of the add-on. Also make sure that you have the right processes to help manage your GDPR compliance obligations when using the add-on.
How do I minimize our users’ personal data from being output to logs generated by applications our organization deploys to Heroku Services?

Salesforce Heroku aggregates logs from your application’s running processes, system components, and backup services as described in the documentation into a single channel known as Heroku Logplex.

Your organization can minimize transmission of sensitive data into the Heroku Logplex log stream by:

  • Turning off logging for your Heroku Postgres database by using the --block-logs option when creating the database.
  • Excluding such data in URLs or query strings submitted to web processes.
  • Not configuring application processes to print such data to stdout.

Shield Private Spaces also includes the feature Private Space Logging which enables you to configure log capture at the space level instead of the app level. This feature allows your organization to forward all log events from applications and Heroku system services in the space to a single external log capture destination as described in the documentation.

If the Shield Private Spaces feature Private Space Logging is utilized, then logs are not stored within Heroku Services.

If a third-party add-on is utilized to store logs, then your organization needs to work with the add-on provider to determine steps to minimize your users’ personal data from being captured by the third-party add-on. Work with your legal team to ensure that you have the appropriate contractual terms in place with the provider of the add-on. Also make sure that you have the right processes to help manage your GDPR compliance obligations when using the add-on.

A customer in California sent us an opt-out request so that we don’t refer to or share her personal data. Work with your developer on tracking customers’ consent and deleting their personal data.

Consult your legal team about designing a consent management system.

Develop application-layer functionality that fulfills consent management and data deletion requests from your applications.

# Consent Management for Loyalty Management Honor and respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: Professional, Enterprise, Developer, and Unlimited Editions.
Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data.If you have customers or users who request specific methods of contact from your company, review these common requests and the procedures related to them. - General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Canada’s Anti-Spam Law (CASL)
Common Customer Request Actions to Consider Things to Consider
My loyalty program member wants to opt out of phone and email communications.

Manage Contacts

Delete information in these fields for customer records.

  • Phone
  • Mobile
  • Email

And in those records, select these options.

  • Email Opt Out
  • Do Not Call
A customer in California asked us not to sell or transfer their data to third parties.

Set Up Tracking and Storage of Certain Data Privacy Preferences

Use the Consent API

Strengthen Your Data's Security with Shield Platform Encryption

Honor your customers' wishes when they request specific forms of contact from your company or opt-out of certain types of data-sharing. The data privacy fields help you track a wide range of opt-out and privacy preferences.

To reduce the chances of inadvertently revealing sensitive information, encrypt fields that contain personal information using Shield Platform Encryption.

If any third-party integrations are within the scope of the request, pass the request along to those vendors.

A loyalty program member who lives in California canceled membership in the program, and asked us to delete their personal data.

Set Up Tracking and Storage of Certain Data Privacy Preferences

Data Deletion for Loyalty Management

Data Access and Export for Loyalty Management

Honor your customers' wishes when they request restricting or deleting their personal data. Look for customer data in other records, including Contact, Account, and Member.

Offer customers an exported copy of their data before your company deletes it.

If any third-party integrations contain the customer’s personal data, ask those vendors to delete it. That way, you prevent the data from repopulating into Loyalty Management.

# Consent Management for Marketing Cloud Engagement Honor and respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. Customers can also request that you restrict tracking and analytical processing using their data. These functions can occur when deciding what content to deliver to customers or using that data to predict future behavior. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data.If you have customers or users who request specific methods of contact from your company, review these common requests and the procedures related to them.
Common Customer Request Actions to Consider Things to Consider
  • Email Studio users need to obtain consent for contacts receiving marketing communications.
  • MobileConnect users need to obtain consent for contacts receiving marketing communications, including double opt-in best practices and compliance with local regulations.
  • MobilePush users need to obtain consent for contacts receiving push notifications. Consent is not required to send inbox or in-app messages to contacts.
  • GroupConnect users need to obtain consent for contacts receiving marketing communications.
  • Audience Studio users need to obtain consent for contacts receiving marketing communications.
  • Use profile and preference center functionality for Email Studio to capture consent and opt-in confirmation for your marketing messaging activities. These consent mechanisms also govern access to email data used in Einstein Engagement Frequency and Send Time Optimization.
  • MobileConnect, MobilePush, and GroupConnect users should use your website or messages to notify subscribers of privacy changes and reestablish consent.
  • Review consent management information for Audience Studio.
  • Collection of compliance requests takes place outside of Marketing Cloud Engagement functionality. Determine the best process for your business to receive and store this information as part of your data protection and privacy regulation review.
  • Make sure your consent language corresponds to your privacy notices and policies. Provide explicit information about the data you collect.
  • Consent must be specific, informed, and unambiguous. Collect positive consent and avoid automatically selected checkboxes.
  • The process for obtaining consent regarding messaging to children is stricter.
  • Contacts must be able to withdraw consent at any time.
  • Contacts must freely give consent, and you cannot base usage of your website on provision of consent.
  • Consent to use data must be specific for each purpose for which you use data.
I do not want Marketing Cloud Engagement to track my messaging and online behavior.
  • Create a mechanism for receiving a Do Not Track request, such as a preference center.
  • Use the DoNotTrack preference attribute to suppress subscriber-level events, such as opens, clicks, and replies.
  • This process does not affect messages or tracking sent before the Do Not Track request.
  • Review any ENS subscriptions that contain engagement events.
  • This process permits continued sending to contacts with the DoNotTrack preference attribute enabled.
  • You cannot track related behavioral interactions.
  • This function applies only to Email Studio and as a preference attribute.
  • Messages sent to contacts with the DoNotTrack preference attribute enabled do not appear in tracking reports and can cause incomplete or inaccurate reporting.
  • The Do Not Track feature stops your account from receiving open and link tracking data for a data subject for any sends after the request date. Sends from before the request date continue to return this data. We plan to stop reception of this data for all sends in a future release.
  • Contact records receive a value for the DoNoTrack attribute upon creation of the record. Any import after that creation does not overwrite that value. Any change requires a specific update in Marketing Cloud Engagement or via an API call.
  • The Do Not Track process doesn’t stop subscriber data events from emitting to your Event Notification Service Callback if you’re subscribed to events that contain subscriber data. Events can be emitted from before and after the Do Not Track request if the subscriber continues to engage with Marketing Cloud Engagement content with tracking. Users should carefully opt-in and understand the implications to using the ENS engagement events.
One of my customers in California asked me to delete her information. How do I delete their personal data from the contact record? Contact Delete in Contact Builder
  • Deleting a contact in MobilePush and MobileConnect also deletes opt-out preferences associated with the contact.
  • Identify whether you track this customer in other Salesforce Clouds, and consider removing his contact data from them.
What data fields do Marketing Cloud Engagement Einstein features process? Learn about Marketing Cloud Engagement Einstein Data sets vary by feature, but Marketing Cloud Engagement Einstein processes data as needed for generating outputs of any specific feature. For example, to generate recommendations, Send Time Optimization and Engagement Frequency features look at email engagement data.
How do opt-out and rights request tools in Marketing Cloud Engagement affect Marketing Cloud Engagement Einstein features? Data Deletion for Marketing Cloud Engagement Marketing Cloud Engagement Einstein features process a rolling 90-day window of data.
A customer in California requested that I restrict his information. If I restrict or delete that contact in Marketing Cloud Engagement, is his information also removed from Advertising Studio segments? Data Deletion for Marketing Cloud Engagement To fully address a contact's rights request, consider any actions to take on social network platforms for which you've sent audience segments.
My customer in California wants to know what information we disclose to social network partners when I transfer an audience segment from Advertising Studio. Where do I find this information? Get Started with Advertising Audiences Review social network partners' privacy statements and compliance tools, as well as customer's privacy statement. Advertising Studio sends data to Facebook and Twitter and presents information to the data subject. These social media services act as the data controller.
What data fields do you collect in Marketing Cloud Engagement for statistical data based on clicks and opens?

Review the column to the right for detailed information about what information is collected by Marketing Cloud Engagement application.

Some data that may be collected by click or open in Marketing Cloud Engagement for statistics includes:

  • IP Address
  • Country
  • Region
  • City
  • Postal Code
  • Latitude
  • Longitude
  • Metro Code
  • Area Code
  • Application used to click to open an email
  • The deivce’s operating system used to open an email
  • Whether a mobile device is used to open an email
- General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Telephone Consumer Protection Act (TCPA), United States - Canada’s Anti-Spam Law (CASL) - Personal Information Protection Act (PIPA), Japan Marketing Cloud Engagement collects different information based on the apps you use.
App Data Collected
Advertising Studio Advertising Studio sends data to Facebook and Twitter and presents information to the data subject. These social media services act as the data controller.
Audience Studio
  • Three email pixels contained in Audience Studio content capture the hashed email address, the subscriber or contact ID value, and media content. Audience Studio uses this data for audience creation or segmentation.
  • A web tracking pixel obtained during login to a web site identifies a person. This function treats each different browser as an independent login and identifier.
Email Studio
  • An open pixel determines when an email recipient opens a Marketing Cloud Engagement email. Marketing Cloud Engagement uses this data for email job statistics and reporting.
  • Marketing Cloud Engagement uses link tracking to log information about which links the email recipient clicks. Marketing Cloud Engagement uses this link tracking data for email job statistics and reporting.
Marketing Cloud Engagement Einstein Platform
  • Einstein imports email templates, standard data tables such as data views, some user agent data, and the members_ subscriber list. Email content is not imported.
  • Einstein imports personalization strings, but not the data called by those strings.
  • Einstein does not import custom object data or data stored in custom data extensions.
GroupConnect The LINE messaging service acts as the data controller. Collect consent for messaging using the LINE service.
MobileConnect MobileConnect does not collect this kind of behavioral information.
MobilePush
  • MobilePush records the geographic location of a device when the customer mobile app is used.
  • MobilePush records a message receipt that reports back on the messages the data subject received through the customer mobile app.
  • MobilePush tracks how many times the customer mobile app is opened, how long it is used, and other app usage statistics.
  • Your app must use the latest version of the MobilePush SDK to implement Do Not Track functionality.
  • If a data subject makes a data compliance request via Marketing Cloud Engagement, we send a silent push to the customer app to indicate the applicable change. The SDK also makes the customer app check in daily for data compliance changes. If Marketing Cloud Engagement sends the silent push and the device does not process it before the next check-in, the device may not comply with regulations until then.
  • Mobile app developers can consult the Android and iOS data protection and privacy documents for MobilePush SDK.
Personalization Builder
  • Web & Mobile Analytics records the sites from which web site users come.
  • Web Recommendations uses a web tracking pixel to track web site user behavior. This information only includes links to the web site user browsing the web site if that web site user logged into that site. Web Recommendations uses the data to provide more relevant recommendations for purchase. If the web site user does not log into the site, then the data is collected and returned anonymously.
  • Personalization Builder apps use an in-app interface to deal with Do Not Track and Do Not Profile requests from data subjects. This action prevents Marketing Cloud Engagement from collecting tracking or profiling information on a data subject.
  • You can make Do Not Track and Do Not Profile preferences available in a customer profile center.
Data protection and privacy compliance can require you to encrypt all data during transit. We recommend taking these steps to ensure compliance. - To help ensure TLS compliance, use the latest version of your browser and HTTPS addresses to connect to Marketing Cloud Engagement. - Use OAuth [access token](https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-getting-started.meta/mc-getting-started/get-access-token.htm) authentication for REST and SOAP API calls. - Follow our [API security best practices](https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/api-security.htm). - Use [SSL certificates](https://help.salesforce.com/articleView?id=000232477&type=1&language=en_US) for all landing pages. #### See Also - [Deliverable Name: DMP Documentation Portal](https://konsole.zendesk.com/hc/en-us/sections/360000109694) - [Do Not Track Script](https://help.salesforce.com/s/articleView?id=mktg.mc_ctc_do_not_track.htm&type=5&language=en_US) - [Marketing Cloud Engagement Data Protection and Privacy Tools](https://help.salesforce.com/s/articleView?id=mktg.mc_overview_data_protection_privacy.htm&type=5&language=en_US) - [Marketing Cloud Engagement Add Contact Preferences REST API Documentation](https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/addContactPreferences.htm) - [Marketing Cloud Engagement Add Contact Preferences by ID REST API Documentation](https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/addContactPreferencesById.htm) - [Marketing Cloud Engagement Get Contact Preferences by ID REST API Documentation](https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/getContactPreferencesById.htm) - [Marketing Cloud Engagement Get Contact Preferences by Key REST API Documentation](https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/getContactPreferencesByKey.htm) - [Marketing Cloud Engagement Search Contact Preferences by Reference Type REST API Documentation](https://developer.salesforce.com/docs/atlas.en-us.noversion.mc-apis.meta/mc-apis/searchContactPreferencesByReferenceType.htm) # Consent Management for Quip We can help you honor your customer’s request to receive only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: All Editions
Data protection and privacy regulations can require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data. - General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Canada’s Anti-Spam Law (CASL) If you have customers or users who request specific methods of contact from your company, review these common requests and the related procedures.
Common Customer Request Actions to Consider Things to Consider
My customer wants to be in control of which notifications she gets. Manage Notifications in Quip Customers can fine-tune their notification preferences. Direct your customers to the Quip documentation for managing notifications.
My customer doesn’t want others to see what she is viewing or editing in Quip. Make a copy of the documents and place them in Private folders.

Site members can use Private folders to work on documents in privacy. Tell your customer to:

  1. Copy the shared document to their Private folder.
  2. Read and make edits to the copied document in the Private folder.
  3. Copy any changes in the Private folder to the original shared document.

Users can manage sharing of any particular document, spreadsheet, or chat room. They can share documents with their entire company, with a smaller team within their company, or with no one.

My customer in California sent us an opt-out request so that we don’t refer to or share her personal data. To locate personal data, use Quip search tools.

Delete any comments and documents that include your customer's personal data. Quip Search finds unstructured personal data in:

  • Documents and conversations
  • Direct messages
  • Chat rooms
  • Spreadsheets
  • Slides

If you connect external data through a Quip Live App or live data connections, deleting personal data in Quip doesn’t delete it from those external connections. If you need help with identifying references to personal data, contact Quip Support.

# Consent Management for Sales Cloud Honor and respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: All Editions
Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data. - General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Canada’s Anti-Spam Law (CASL) If you have customers or users who request specific methods of contact from your company, review these common requests and the procedures related to them.
Common Customer Request Actions to Consider Things to Consider

Some of my prospects don’t want to receive calls or email messages from my company.

They specifically prohibit us from calling, sending email messages, and sending sales materials through the post.

Delete information in these fields for lead records.

  • Phone
  • Mobile
  • Email
  • Mailing Address

And in those records, select these options.

  • Email Opt Out
  • Do Not Call

If you don’t see those options for leads and contacts, add them to your lead and contact page layouts, or ask your admin for help.

One of my customers asked that we don’t track if and when she opens email from us. Enable Email Tracking for Individuals Opening Email from Your Company

Turn off tracking for whether and when your customers open email that you send from Salesforce.

Also ask your customer whether it’s OK for you to send her email from your company. If it’s not, open her contact, lead, or person account record and:

  • Delete the email address.
  • Select Email Opt Out.
One of my customers in California has requested that we not share her personal data. Manage Contacts If you shared your customer's personal data with other parties, ask them to delete her personal data. The customer's personal data might be stored in other locations, including other areas in Salesforce.
Some of our prospects and customers don’t want to hear from my company, unless they specifically opt in.

When working with leads and contacts, select options for:

  • Email Opt Out
  • Do Not Call

If you don’t see those options for leads and contacts, add them to your lead and contact page layouts, or ask your admin for help.

Consider deleting phone numbers, email addresses, and mailing addresses, unless your customers give you consent to use them. And refrain from sending marketing and sales materials through the post.

I use Salesforce Inbox and want to exclude specific prospects and contacts from receiving mass email distributions from me.
For Salesforce Inbox or Einstein Activity Capture, we decided to not receive read receipts when our customers open our email messages. Disable Email Tracking for Inbox Users

Turning off read receipts prevents all your Salesforce users from receiving read receipts.

If you don’t disable read receipts for all users, individual users control whether to include a read receipt for email messages they send.

A prospect of mine doesn’t want us to store her email address and phone number. Manage Leads

Delete any fields that store your prospect’s email address and phone number.

Start with the lead record. If you’ve created other records or activities related to your prospect, remove her email address and phone number from those records too.

A lead I’m pursuing is interested in our services, but she’s in the process of moving out of state.

She asked that we give her a couple months before we continue soliciting her.

Manage Leads

Don’t send email, schedule meetings, or call those customers.

Select these options in the lead or contact record.

  • Email Opt Out
  • Do Not Call

If you don’t see those options for leads and contacts, add them to your lead and contact page layouts, or ask your admin for help.

Also, set a reminder to contact your prospect at the time your customers specify.

I use Sales Cloud Einstein.

My customer asked us to exclude his personal data from factoring into machine learning models. That’s because he doesn’t want us to generate predictions based on his personal data.

For any of the following objects, create a custom field using the type Checkbox, and give it the API name AI_HasOptedOutProfiling__c.

  • Account (applies to person accounts only)
  • Contact
  • Contact Role
  • Lead
  • Opportunity
  • Activity

And if you’re using Salesforce Inbox or Einstein Activity Capture, consider excluding email data from machine learning models. For details, see Exclude People's Personal Data from Modeling and Data Enrichment.

For Salesforce Inbox or Einstein Activity Capture, I want to exclude a specific customer’s personal data from being used by other Salesforce features. Exclude People's Personal Data from Modeling and Data Enrichment

When you exclude your customer’s data from third-party data enrichment, his standard profile data still appears.

When you exclude his data from modeling, we no longer show recommended connections based on conversations with him.

# Consent Management for Service Cloud Respect your customers’ requests to limit types and hours of contact. And honor customer wishes when they opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: All Editions
Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data. - General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Canada’s Anti-Spam Law (CASL) If you have customers or users who request specific methods of contact from your company, review these common requests and the procedures related to them.
Common Customer Request Actions to Consider Things to Consider
Some of my customers don’t want to receive calls or email messages from my company. Delete Fields

Delete information in these fields for lead records.

  • Phone
  • Mobile
  • Email
  • Mailing address

And in those records, select these options.

  • Email Opt Out
  • Do Not Call
A customer in California asked us not to share his personal data with other divisions and third parties. Manage Contacts

It’s possible that your company stored your customer’s personal data in other areas of Salesforce.

If you shared your customer's personal data with other parties, ask them to honor the request and delete the customer’s personal data.

My customer doesn't want my company to contact her for any sales-related reasons, just customer service.

She specifically prohibits us from calling, sending email messages, and sending sales materials through the post.

Delete Fields Ask your customer about which forms of communication she allows for customer service purposes, and retain the information specific to those forms. Consider deleting information related to the ways in which she prohibits contact.
As a Field Service mobile app user, I want to control when Salesforce uses my mobile phone to track my location. Track Service Resources with Geolocation Admins can turn geolocation tracking on and off for all Field Service mobile app users, and exclude specific individuals from geolocation tracking. Individual mobile users can also turn off location tracking for the mobile app from their phone’s operating system settings.
My Field Service customer doesn’t want to provide signatures electronically. Manage Service Reports To make field technicians aware of the customer’s request before they arrive, create a custom field on service appointments to identify customers that need hard copies of their service reports.

I use Service Cloud Einstein.

My customer asked us to exclude his personal data from factoring into machine learning models. That’s because he doesn’t want us to generate predictions based on his personal data.

Let service agents exclude a case from the predictive model. Add a custom field on the Case object using the type Checkbox, and give it the API name AI_HasOptedOutProfiling__c.
My customer in California wants all the information he provided in one or more of his cases so he can share it with a third party. Export Data Consider which available data format best suits your customer’s needs. You can use Data Loader to download and share CSV files of a customer’s data. If the customer no longer wants you to keep the personal data you’ve collected, delete it.
# Consent Management for the Salesforce Platform Respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. ### Required Editions
Available in: All Editions
Many data protection and privacy regulations require you and your company to honor people’s requests about how you use their data. We’ve listed a few of the regulations that are important to many companies collecting and processing their customers’ data. If you have customers or users who request specific methods of contact from your company, review these common requests and the procedures related to them.
Common Customer Request Actions to Consider Things to Consider
A customer has asked to not receive emails that I send using a flow. How do I prevent a flow from sending an email? Edit the flow to remove the user’s contact information. Consider periodically reviewing your contacts’ contact preferences to make sure that your flow includes only those contacts who wish to receive emails.
A customer in California sent me an opt-out request so that we don’t refer to or share her personal data. Build a Flow

Build a flow that:

  • Accepts a contact ID.
  • Finds all data associated with that contact ID.
  • Deletes the data.

If you connect to external sources, consider deleting the data from those sources. Keep in mind that flows don’t necessarily identify all the data to delete.

After your flow finishes, run a report to identify any remaining information, and then delete it.

I want to be able to track customers’ preferences for receiving marketing solicitations. How can I do that? Store customers’ data privacy preferences.

Work with your legal team to understand how quickly you must act on your customers’ requests. Keep in mind that the preferences you set simply help you track your customers’ requests. And it’s up to you and your company to determine a way for honoring those customers’ requests. You can identify the customers for which you’ve set privacy preferences by either: Consider setting a schedule for these tasks based on how quickly you must act on your customers’ requests.

  • Retrieving updates to data privacy records when you set an Apex trigger on the Individual object.
  • Running queries for updates to records based on the Individual object using the SOAP API.
I want to be able to track customers' preferences regarding processing or deleting their data. How can I do that? Store customers’ data privacy preferences.

Work with your legal team to understand how quickly you must act on your customers’ requests. Keep in mind that the preferences you set simply help you track your customers’ requests. And it’s up to you and your company to determine a way for honoring those customers’ requests. You can identify the customers for which you’ve set privacy preferences by either: Consider setting a schedule for these tasks based on how quickly you must act on your customers’ requests.

  • Retrieving updates to data privacy records when you set an Apex trigger on the Individual object.
  • Running queries for updates to records based on the Individual object using the SOAP API.
- General Data Protection Regulation (GDPR), European Union - California Consumer Privacy Act (CCPA), United States - Canada’s Anti-Spam Law (CASL) # Consent Management: Track Customer Consent and Honor Opt-Out Requests Track your customers’ approval for how your company interacts with them. Comply with customer requests to opt-out of sharing their personal information with third parties. To help you assess your compliance with data protection and privacy regulations, we give you examples of common customer requests. And we provide details to help you determine the best way to comply with the regulations that apply to your company. ### Required Editions
Available in: All Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note Beginning in Summer ’26, Chatter is turned off by default in all new orgs. For any features in these orgs that require access to Chatter functionality or the Chatter APIs, turn on Chatter by going to **Setup** | **Chatter Settings** and selecting **Enable**. For details, see [Chatter Is Turned Off by Default in New Orgs Beginning in Summer ’26](https://help.salesforce.com/s/articleView?id=experience.collab_chatter_default_off.htm&type=5&language=en_US). - **[Consent Management for Sales Cloud](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_sales.htm&release=264.0.0&type=5)** Honor and respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. - **[Consent Management for Service Cloud](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_service.htm&release=264.0.0&type=5)** Respect your customers’ requests to limit types and hours of contact. And honor customer wishes when they opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. - **[Consent Management for Experience Cloud Sites](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_communities.htm&release=264.0.0&type=5)** Honor your customer’s request to receive only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. - **[Consent Management for the Salesforce Platform](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_platform.htm&release=264.0.0&type=5)** Respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. - **[Consent Management for Marketing Cloud Engagement](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_marketing.htm&release=264.0.0&type=5)** Honor and respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. - **[Consent Management for B2C Commerce](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_commerce.htm&release=264.0.0&type=5)** Honor and respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. - **[Consent Management for Data Cloud](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_c360_audiences.htm&release=264.0.0&type=5)** Honor and respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. - **[Consent Management for Education Cloud](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_edu.htm&release=264.0.0&type=5)** Honor your constituents’ wishes when they request only specific forms of contact from your institution or opt-out of certain types of data-sharing. - **[Consent Management for Financial Services Cloud](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_finserv.htm&release=264.0.0&type=5)** Honor and respect your customers’ wishes when they request only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. - **[Consent Management for Health Cloud](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_health.htm&release=264.0.0&type=5)** Respect your customers’ wishes when they request only specific types or hours of contact or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. - **[Consent Management for Account Engagement](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_pardot.htm&release=264.0.0&type=5)** Honor and respect your customers’ wishes when they request only specific forms of contact from your company or to opt-out of certain types of data sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. - **[Consent Management for Analytics](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_analytics.htm&release=264.0.0&type=5)** Track your customers’ approval for how your company interacts with them and honor their requests to opt-out of certain types of data-sharing. To help you assess your compliance with various data protection and privacy regulations, we give you examples of common customer requests. And we provide details to help you determine the best way to comply with the regulations that apply to your company. - **[Consent Management for Quip](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_quip.htm&release=264.0.0&type=5)** We can help you honor your customer’s request to receive only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. - **[Consent Management for Heroku](https://help.salesforce.com/s/articleView?id=xcloud.consent_management_heroku.htm&release=264.0.0&type=5)** Honor your customers’ wishes to receive only specific forms of contact from your company or opt-out of certain types of data-sharing. We provide details to help you determine the best way to comply with the data protection and privacy regulations that apply to your company. #### See Also - [Data Deletion: Delete Personal Data](https://help.salesforce.com/s/articleView?id=xcloud.data_deletion.htm&release=264.0.0&type=5 "Get guidance on deleting personal data as you comply with various data protection and privacy regulations. We give you examples of common customer requests and things to consider. That way, you can determine how to best comply with the regulations that apply to your company.") - [Restriction of Processing: Restrict How to Process Personal Data](https://help.salesforce.com/s/articleView?id=xcloud.restriction_of_processing.htm&release=264.0.0&type=5 "Prevent the processing of your customers’ data when situations require you to do so. We give guidance on how to restrict forms of data processing. That way, you can work toward complying with the laws that are important to your company.") - [Data Access and Portability: Give Customers Their Data when They Want It](https://help.salesforce.com/s/articleView?id=xcloud.data_portability.htm&release=264.0.0&type=5 "Export customer-related data when customers request it, so that you can work toward complying with various data protection and privacy regulations. We give you examples of common customer requests and things to consider when you evaluate your compliance with the regulations that apply to you.") - [Privacy Center: Satisfy Customer Requests and Data Privacy Laws](https://help.salesforce.com/s/articleView?id=xcloud.about_privacy_center.htm&release=264.0.0&type=5 "Honor customer requests on how their sensitive data is handled, and manage components of data privacy laws like the General Data Protection Regulation (GDPR). Use the Privacy Center app to create unique policies, manage requests, and monitor the status and results of scheduled jobs.") - [Legacy Privacy Center: Satisfy Customer Requests and Data Privacy Laws](https://help.salesforce.com/s/articleView?id=xcloud.privacy_center.htm&release=264.0.0&type=5 "Manage components of data privacy law such as the General Data Protection Regulation (GDPR), and fulfill customer requests on how their personally identifiable information (PII) is stored, deleted, and transferred.") - [Use Preference Manager to Gather Communication Preferences](https://help.salesforce.com/s/articleView?id=xcloud.preference_center_about.htm&release=264.0.0&type=5 "As privacy law continues to define individual data rights and data use regulations, it’s important to establish consent with your customers. Use the Preference Manager app within Privacy Center to meet regulatory requirements and build trust with your customers. Securely capture their preferences for how, why, and when you can contact them.") - [Policy Center: Control Data Security and Management Policies](https://help.salesforce.com/s/articleView?id=xcloud.policy_center_intro.htm&release=264.0.0&type=5 "Policy Center is your home for creating and managing different policy types across the Salesforce platform.") - [Data Export and Portability Across Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.data_export_portability_across_salesforce.htm&release=264.0.0&type=5 "Export customer-related data, so that you can work toward compliance with various data protection and privacy regulations.") - [Set Up Tracking and Storage of Certain Data Privacy Preferences](https://help.salesforce.com/s/articleView?id=platform.individuals_setup_data_privacy.htm&type=5&language=en_US) - [Store Customers’ Data Privacy Preferences](https://help.salesforce.com/s/articleView?id=platform.individuals_store_data_privacy.htm&type=5&language=en_US) # Consider Alternative Process Flows during Downtime Design alternative processes, especially for business-critical processes, in the unlikely event of downtime. For business-critical processes, think about how your users engage with your org and the potential impact if Salesforce was unavailable to them. Consider where you can make adaptations to your own processes and your org to workaround downtime. ## Create Meaningful Error Messages Default error messages tend to be generic and describe what happened in technical terms. When an error occurs that affects a user’s workflow for business-critical operations, consider creating error messages that provide meaningful, contextual information so that the user can act beyond escalating to your internal IT team. - Use contextual error messages that tell users how to fix user entry errors. For example, if a record can’t be saved due to missing information, provide instructions directly in the error message on what information is still required before they’re able to continue. - If a feature is unavailable, provide workarounds, links to relevant business continuity planning instructions, or an alternative process in an error message so users can continue their task. - To eliminate the need for a user to manually notify your IT support team, consider creating a process that alerts your team when a user encounters an error. ## Develop Automated Alternative Processes Instead of designing a singular process path that rejects user interaction at the first point of failure, consider building an alternative process into the system in those potential failure points. Especially for potential failure points that depend on other systems or services that occasionally fail, an alternative strategy can help users work around specific system issues and minimize business impact. A common example is the use of an external address validation system in Salesforce. If the validation system is temporarily unavailable, provide an alternative process where the user can enter the address manually, and flag the address as unvalidated so that it can be revalidated when the system comes back online. - Give users the ability to save their work in a temporary status and then auto-process the data when the issue is resolved. - For business-critical processes using third-party validation services, consider engaging a secondary validation service in the event that the validation service is unavailable or create a manual entry process. ## Bulk-Proof the Incident Recovery Process Create a bulk-proof recovery process, especially for high-volume environments, that efficiently processes the backlog of transactions that accumulated during downtime and incoming transactions following your org's recovery. A bulk-proof recovery process helps to reduce the risk of transaction delays that impact the user experience even after your org is online. If possible, design solutions to process records in bulk, not just one record at a time, so the system can effectively handle records in large volumes in batches. #### See Also - [Batch Management](https://help.salesforce.com/s/articleView?id=ind.concept_batch_management.htm&type=5&language=en_US) - [Batch Management Developer Resources](https://help.salesforce.com/s/articleView?id=ind.reference_batch_management_developer_resources.htm&type=5&language=en_US) - [_Blog_: Error Handling Best Practices for Lightning and Apex](https://developer.salesforce.com/blogs/2017/09/error-handling-best-practices-lightning-apex) - [_Trailhead_: Automate Your Business Processes with Salesforce Flow](https://trailhead.salesforce.com/content/learn/trails/automate_business_processes) # Considerations and Guidelines for Administering Kanban If your users work with kanban views, review considerations and guidelines for setup and customization. ### Required Editions
Available in: Lightning Experience
Available in: Essentials, Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
## Display and Editing - Kanban views show up to 200 cards. Kanban cards show up to four fields. - The fields at the top of the details panel in kanban views are the first four fields defined in the compact layout. - Users can move cards in kanban views even if their access to the field used for column grouping is read-only. - In the kanban details panel, users can't change a record’s record type or owner, regardless of whether the path includes those fields. - Suppose that the selected Group By and Summarize By fields are in a page layout assigned to a record type that the user can’t access. The kanban view doesn’t show records assigned to that record type. ## Subtabs A subtab is created for a record type if both of the following conditions apply: - The Group By and Summarize By fields are included in a page layout assigned to a record type that the user can access. - At least one record is assigned to the record type. ## Column Summaries Users can’t create column summaries from rollup summary or formula fields. ## Picklist Fields and Values Kanban views don’t show columns that are based on inactive picklist fields or records associated with inactive picklist values. ## Path Configurations Exposed in Kanban Views - When you configure key fields and success guidance in a path, kanban views configured for the same object, record type, and picklist also show the information. - When you configure celebrations in a path, the confetti animation is also triggered in kanban views configured for the same object, record type, and picklist. - Whichever celebration frequency you select, the animation is triggered once until the page is reloaded. For example, suppose that you select Always, and a kanban user moves two records to the column that triggers the animation. The animation plays only the first time the user moves a record. - Celebrations don’t work on the lead status Converted. ## All Objects ## Activity Alerts on Opportunities Kanban cards on opportunities show alerts for overdue tasks, no open activities, and no activity in the last 30 days. When opportunities have no overdue tasks and Einstein Activity Capture is enabled, the alerts on Opportunity Kanban aren’t shown. Activity alerts in kanban views aren’t customizable. If the links New Event and New Task aren’t displayed in activity alerts, do the following. . - Add a Create a Record global action for events and tasks. Give the actions these exact names: NewEvent and NewTask. Label them New Event and New Task. - Assign a record type to each global action. New Event and New Task actions are each supported for only one record type. - Add the actions to Lightning Experience Actions. #### See Also - [Work in a Kanban View](https://help.salesforce.com/s/articleView?id=xcloud.kanban_use.htm&release=264.0.0&type=5 "Narrow the records you want to focus on by searching and filtering a kanban view, and view records by record type. Update records by dragging, or edit a card without leaving the kanban view. If your Salesforce admin has set up key fields and guidance, you see them in the details panel. If you’re viewing opportunities, alerts help you move deals ahead.") # Considerations and Guidelines for Complex Deployments (Managed Package) For the managed package runtime, review considerations and guidelines for using the Omnistudio Build Tool in complex deployments, including anonymous Apex and JavaScript, and with matching keys. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - **[Anonymous Apex and JavaScript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_anonymous_apex_javascript.htm&release=264.0.0&type=5)** For the managed package runtime, review considerations and guidelines for using the Omnistudio Build Tool with Anonymous Apex and JavaScript. - **[Matching Keys for Custom Data Models (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_build_tool_matching_keys_overview.htm&release=264.0.0&type=5)** For the managed package runtime, data packs use a custom metadata object called a Vlocity Matching Key to define the uniqueness of any SObject. # Considerations and Guidelines for Custom Report Types When creating a custom report type, keep these considerations and guidelines in mind. ## Considerations - If a report type’s primary object is a custom object and the custom object is deleted, the report type and reports created from it are deleted. - When you remove an object from a report type, all references to that object and its associated objects are removed from all reports and dashboards based on that report type. - If a parent record doesn’t have a related child record, the child object’s fields are blank in a report. For example, when you run a report on Accounts with or without Contacts, the Contact fields are blank for the accounts that don’t have contacts. - In a report where object A may or may not have object B, you can’t use the OR condition to filter across multiple objects. For example, you can’t apply Account Name starts with M OR Contact First Name starts with M. - If you add custom fields from different objects that have the same API name, only one of the fields displays when the report type metadata is deployed to another environment. For example, adding both `Account.Custom_Field__c` and `Opportunity.Custom_Field__c` results in one visible `Custom_Field__c`. ## Guidelines - Users can view roll-up summary fields on reports that include data from fields that they don't have access to view. For example, users who don't have access to view the Price field on an opportunity product can view the Total Price field on opportunity reports if they have access to the Total Price field. - You can add up to four levels of a relationship via lookup. For example, for an account, you can have the account owner, the account owner’s manager, the manager’s role, and that role’s parent role. - Reduce the amount of time it takes to find fields in a report by grouping similar fields together in the custom report type layout. You can create page sections to group fields that are related to one another, and you can group fields to match specific detail pages and record types. # Considerations and Limitations Review the system limits, feature boundaries, and operational requirements before you design and configure Penny Perfect Pricing. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise and Unlimited Editions in Manufacturing Cloud, Automotive Cloud, and Consumer Goods Cloud, with required add-ons.
## System Limits and Scalability Review the supported system thresholds and limits to ensure optimal calculation performance. | Dimension | Supported Limit | Operational Recommendation | | --- | --- | --- | | Line Items per Order | Up to 1,000 line items | Split orders with more than 1,000 line items into multiple transactions to prevent execution timeouts. | | Pricing Condition Master Records | Up to 40 million records per Sales Organization | Archive expired condition records by marking Status as Deleted (for records with **Valid To** in the past) to optimize consolidated lookup performance. | | Calculation Schema Steps | Up to 28 steps supported in production | Keep calculation schemas under 20 steps whenever possible to maximize processing speed. | | Search Strategy Hierarchy Depth | Up to 7 Account hierarchy levels / 5 Product hierarchy levels | Limit hierarchy lookup steps to 3-4 levels for faster runtime condition evaluation. | | Decimal Precision and Rounding | 2, 4, or 6 decimal places | Commercial rounding, round up, and round down modes are supported. | ## Feature Capabilities and Integration Support Understand product capabilities and functional boundaries prior to implementation. - **Financial Scope:** Penny Perfect Pricing determines net order and item prices. It does not post General Ledger (GL) accounting entries or generate tax invoice documents. - **Salesforce Promotions:** Integration with standard Salesforce Commerce or Loyalty promotions is not supported in this release. - **ERP Synchronization:** Pricing accuracy depends directly on maintaining valid condition data, validity dates, sales organization scopes, and account/product hierarchies aligned with your external ERP system. ## Operational and Configuration Requirements Follow these mandatory prerequisites to ensure successful price calculation: - **Initial Job Execution Required:** The **External Pricing Key Value Consolidation** data pipeline job must complete successfully at least once before the system can calculate prices on orders. - **Data Load Requirement:** Always re-run the External Pricing Key Value Consolidation job immediately after loading or updating condition master records in External Pricing Key Value or tier records in External Pricing Key Value Tier. - **Deleting External Pricing Key Value Records:** The **External Pricing Key Value Consolidation** job builds the **External Pricing Key Value Consolidated View** from each record's current **Status**. To remove a condition record from pricing evaluation, first set its **Status** to Deleted and run the Consolidation job so the removal is reflected in the consolidated view — then hard-delete the underlying **External Pricing Key Value** record if needed. Don't hard-delete a record before the job has run against its Deleted status; the job never gets the chance to process the removal, and the consolidated view can be left out of sync. - **Activation Requirement:** All expression set components (**Pricing Key Types**, **Search Strategies**, **Pricing Specifications**, and **Calculation Schemas**) and the Procedure Plan definition must be activated before they can evaluate calculations. - **Sandbox Testing:** Always validate custom calculation schemas, scale tier behavior, and procedures in a sandbox environment. Verify Salesforce calculated prices against reference ERP output invoices prior to deploying to production. - **Pricing Key Type Changes Aren't Retroactive:** Editing a **Pricing Key Type**'s key attributes after **External Pricing Key Value** records already reference it isn't tracked, and users aren't blocked from making the change. Any subsequent edit to an existing **External Pricing Key Value** record — even to an unrelated field such as **Valid To** — revalidates the record against the **Pricing Key Type**'s current configuration, and fails with "at least one key field required by the associated Pricing Key Type must have a value" if the record has no value for a newly required key. Treat **Pricing Key Type** changes as forward-looking only: they apply to new pricing condition records, not to ones created under the prior configuration. # Considerations and Limitations for Advanced Orders for Telesales Keep these considerations and limitations in mind as you set up and use Advanced Orders for Telesales. ### Required Editions

View supported editions

Before you configure and use Advanced Orders for Telesales, review the feature capabilities and scope, operational and configuration requirements, and system limits and scalability guidance. ## System Limits and Scalability | Dimension | Supported Limit | Operational Recommendation | | --- | --- | --- | | Pre-populated Assortment Items per order | Assortments view loads up to 2,500 products. The All Products view loads 500 products on initial load. | Scope assortments by store format or warehouse location to keep pre-populated proposal lists under 1,000 items for optimal rendering. | | Order line items per order | Up to 350 line items per order (Average: 14 lines; Tested range: 1–238 lines) | Limit single order documents to 350 line items. Split exceptionally large bulk orders into multiple transactions. | | Order View Response Time | Less than 3 seconds | Ensure Product Discovery search indexing is active to maintain sub-2-second grid load times. | | End-to-End Order Capture Action Time | 1–10 minutes per order | Leverage suggested quantities and pre-populated assortments to minimize live call duration. | | Daily Telesales Volume Throughput | 5,000–20,000 orders per day | Solution scales to support peak daily transaction volumes across high-volume sales units. | | Concurrent User Capacity | Up to 22,000+ multi-market concurrent users (PepsiCo baseline: 350–450 peak concurrent telesales reps) | Ensure system permissions and IOU sharing rules are scoped cleanly per market unit. | | Assortment Size & Modules | Up to 10,000 products per assortment / Up to 10 listing modules per assortment | Use listing modules to segment broad assortments by retail store format (e.g., Hypermarket vs. Supermarket). | | Historical orders evaluated for suggestions | Up to 200 past orders per call | Keep the lookback window tight enough that the account's relevant order history fits within 200 orders, so suggestions reflect recent buying patterns. | ## Feature Capabilities and Scope Order Capture Channel Advanced Orders for Telesales is designed for assisted, rep-driven order capture. It's not a self-service commerce storefront. Direct and Indirect Orders The framework supports both direct orders (fulfilled by the manufacturer) and indirect orders (fulfilled through a wholesaler or broker). Pricing Pricing is calculated through the pricing procedure and expression sets in the rules engine. The framework relies on your configured pricing decision tables and expression sets rather than performing pricing calculations independently. Product Discovery Product listings on the order entry grid are driven by assortments, listings, and search indexing through Product Discovery. Products that aren't authorized or indexed for the account's market unit don't appear. ERP Release Activated orders are released to your downstream ERP or fulfillment system through your configured integration. The framework doesn't handle ERP-side fulfillment or shipping. List View Filtering and Scoping The Orders by Business Unit list view shows orders whose Internal Organization Unit (IOU) matches any IOU assigned to the current user, whether default or non-default. Orders created without an Order Specification have no assigned IOU, so they don’t appear in this list view. This list view functionality requires the MACZ Advanced Order org permission to be enabled (MACZ refers to Manufacturing, Automotive, Consumer Goods, or Net Zero). ## Operational and Configuration Requirements Internal Organization Unit (IOU) Scoping Products, catalogs, accounts, order templates, and users must share a consistent IOU alignment. Misaligned IOU scoping is the most common cause of missing products and blocked order saves. Product Discovery Indexing Keep search indexing enabled and current. Enable Automatic Product Catalog Index Update so that assortment and listing changes are reflected on the order entry grid. Pricing Configuration Configure and activate the pricing procedure, decision tables, and expression sets before reps capture orders. Orders can't be priced without an active pricing configuration. Order and Item Specifications Define order specifications (OrderSpec) and order product specifications (OrderItemSpec) that reflect your ordering rules, including allowed orderer types, lead times, and lookback periods. Assortments and Listings Assign store assortments and location assortments to accounts and warehouses so that reps see the correct authorized products. Permissions Grant reps and admins the required permission set licenses and permission sets, including Order Capture for Manufacturing and the relevant Product Catalog Management and Business Rules Engine permissions. # Considerations and Limitations for Agentforce in Asset Service Lifecycle Management To use Asset Service Lifecycle Management, consider supported functionality, usage, limitations and allowances, limits, and other issues. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, Service Cloud, and Media Cloud. View edition availability.
## Language and Locale Support Agentforce for Manufacturing supports English in this locale. | LOCALE | CODE | | --- | --- | | English (United States) | en\_US | ## Agent Type The agent templates for Asset Service Management and Inventory Management are based on the Agentforce Employee Agent type. ## Billing Considerations for Agentforce Usage of Agentforce features can impact credit consumption against these credit types. - [Flex Credits](https://help.salesforce.com/s/articleView?id=ai.usage_flex_credits.htm&language=en_US&type=5) - [Einstein Requests](https://help.salesforce.com/s/articleView?id=ai.generative_ai_usage_einstein_requests.htm&type=5&language=en_US) - [Data Services Credits](https://help.salesforce.com/s/articleView?id=data.c360_a_data_usage_types.htm&type=5&language=en_US) Agentforce Employee agents use generative AI in prompt executions and use Data Cloud to ingest, store, and process data. Use of Agentforce Employee agents impacts the consumption of billing credits in these usage types. Before deployment, work with your Salesforce account team to confirm license availability and plan credit usage. ## More Considerations See the Large Language Model Support, Einstein Trust Layer Service Support, and Other Considerations sections in the [Considerations for Agentforce Employee Agent](https://help.salesforce.com/s/articleView?id=ai.agent_employee_agent_considerations.htm&type=5&language=en_US) topic. # Considerations and Limitations for Agentforce in Channel Revenue Management To use Agentforce for Channel Revenue Management, consider supported functionality, usage, limitations and allowances, limits, and other issues. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions with the Agentforce for Manufacturing add-on license or included in Agentforce 1 Manufacturing and Agentforce 1 Automotive Editions. Requires each user to have the Agentforce for Manufacturing add-on to access the action.
## Language and Locale Support Agentforce for Channel Revenue Management supports English in this locale. | LOCALE | CODE | | --- | --- | | English (United States) | en\_US | ## Agent Type The agent template for Channel Revenue Management is based on the Agentforce Employee Agent type. ## Billing Considerations for Agentforce Usage of Agentforce features can impact credit consumption against these credit types. - [Flex Credits](https://help.salesforce.com/s/articleView?id=ai.usage_flex_credits.htm&language=en_US&type=5) - [Einstein Requests](https://help.salesforce.com/s/articleView?id=ai.generative_ai_usage_einstein_requests.htm&type=5&language=en_US) - [Data Services Credits](https://help.salesforce.com/s/articleView?id=data.c360_a_data_usage_types.htm&type=5&language=en_US) Agentforce Employee agents use generative AI in prompt executions and use Data Cloud to ingest, store, and process data. Use of Agentforce Employee agents impacts the consumption of billing credits in these usage types. Before deployment, work with your Salesforce account team to confirm license availability and plan credit usage. ## More Considerations See the Large Language Model Support, Einstein Trust Layer Service Support, and Other Considerations sections in the [Considerations for Agentforce Employee Agent](https://help.salesforce.com/s/articleView?id=ai.agent_employee_agent_considerations.htm&type=5&language=en_US) topic. # Considerations and Limitations for Messaging in the Salesforce Mobile App Before starting your setup process, review the considerations and limitations for using the Salesforce mobile app when messaging customers. ### Required Editions
Available in: Lightning Experience. View required editions.
Checkmark icon indicating true This article applies to: Messaging for In-App, Messaging for Web, enhanced WhatsApp, enhanced Facebook Messenger, enhanced SMS, enhanced Apple Messages for Business, enhanced LINE, Bring Your Own Channel, and Bring Your Own Channel for CCaaS
X This article doesn’t apply to: Standard WhatsApp, standard Facebook Messenger, and standard SMS channels
- From mobile messaging, agents can: Send messages; transfer messages to other agents, bots or queues; send messaging components; send voice notes; and attach files. - From the mobile app, agents can’t: Conference; flag a supervisor; send quick text; and send emojis. - Enhanced Omni is required. - To use business-initiated outbound messaging, you’re not required to log into the Omni widget first. - For optimal performance, don't add additional components, beyond the Enhanced Conversation Component, to the mobile app agent console. - Omni presence statuses don’t work when you’re signed in to the Salesforce app and the desktop site with the same credentials at the same time. Agents must work from one or the other at a given time. - Drafts are not saved when you navigate away from an active messaging session. For example, if you draft a message, navigate back to omni inbox, and then return to the messaging session, then the draft is not persisted. - iOS won't render the .ogg WhatsApp voice message format inline in the conversation transcript. Instead, download and listen to the file on the desktop site. # Considerations and Limitations for Rebate Management Review these considerations and limitations before you start working with Rebate Management. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
## Considerations for Rebate Management - Rebate Management is supported only on desktop and mobile devices. - Run data processing engine jobs sequentially when you schedule a flow with Data Processing Engine action elements. If you clone the predefined Run Rebate DPE Jobs flow, it’s automatically implemented. - Predefined data processing engine jobs are designed to run for all active programs, payout periods, and rebate types for all active rebate program members. To run the data processing engine jobs for specific programs, periods, rebate types, or members, pass the specific records as inputs for the Run Rebate DPE Jobs flow. - It’s recommended to not associate more than 10,000 rebate types with over 100 unique rebate type filters with a single Data Processing Engine definition. Check the [Data Processing Engine Limits](https://help.salesforce.com/s/articleView?id=ind.dpe_limits.htm&type=5&language=en_US). Either associate the rebate types to multiple definitions or modify the inputs so that only a subset of program rebate types or payout periods is processed in a single run. - You can configure up to 100,000 benefits for a rebate type. When uploading large volumes of data using [Data Loader](https://help.salesforce.com/s/articleView?id=xcloud.data_loader_about.htm&language=en_US), it's recommended to use the [serial concurrency mode](https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/asynch_api_planning_guidelines.htm) to ensure consistent results. Serial concurrency mode for Bulk API jobs ensures that batches are processed one after another, in the order they are received, rather than in parallel. Internal validation has been performed with up to 10 benefits per rebate type. Using significantly more may impact processing efficiency and make it harder to trace payout calculation logic during analysis. - You can’t create reports on transaction journal records for Experience Cloud users. - If multiple benefits exist for a given rebate type, sort the underlying data by rebate type before uploading it using Data Loader. - In a multicurrency setup, set the same default currency for the Integration User and the Data Processing Engine Writeback User profiles. If you aren’t using a data processing engine writeback user, use the same default currency for the System Administrator profile assigned to the Data Pipelines Base User permission set. The Rebate Management objects use multicurrency constructs in this manner. - Transaction Journal: Transactions can be recorded in the desired transaction currency. - Rebate Member Product Aggregate: When a data processing engine job runs to compute aggregates, the currency from the Transaction Journal is converted into the Integration User profile’s currency. Then, the amounts are stored in the aggregate object in the Writeback User profile's currency. - Program Rebate Type Payout Source: Payout sources are created in the aggregate row's currency code after benefit computations. - Program Rebate Type Benefit: In the benefit setup, the maximum and minimum values provided are considered to be in the currency of the aggregate row and are evaluated accordingly. - When creating a Transaction Journal in an org where both Rebate Management and Channel Partner Inventory Management are enabled: - Specify the Journal Type for Channel Partner Inventory Management. The Journal Type determines how the Transaction Journal is used within Channel Partner Inventory Management processes. If the Journal Type is left blank during creation, the system defaults the Usage Type to Rebates. - Configure DPE filtering on Status for Rebates Transaction Journals. Rebates DPEs do not automatically exclude records based on the Transaction Journal Status field. If customers intend to use the Status field (for example, Approved, Rejected, or Pending) to control which records generate aggregates or payouts, they must explicitly configure filters in the Rebates DPE definitions. For example, to ensure that only eligible records are processed and to exclude any status other than Approved (such as Pending or Rejected), include filter logic such as: TransactionJournal.Status = 'Approved'. - Review legacy records for compatibility. If existing Rebates Transaction Journal records default to a Pending status, note that DPEs do not filter by Status by default and will process all PoS transactions. Ensure that the appropriate DPE filter logic is configured so that the correct records are processed and unintended records are not included or excluded. ## Rebate Management Limitations - [Data Processing Engine Limits](https://help.salesforce.com/s/articleView?id=ind.dpe_limits.htm&type=5&language=en_US) - [Troubleshoot Data Processing Engine Issues](https://help.salesforce.com/s/articleView?id=ind.dpe_troubleshoot.htm&type=5&language=en_US) - [Things to Keep in Mind While Using Batch Management](https://help.salesforce.com/s/articleView?id=ind.concept_batch_management_limits.htm&type=5&language=en_US) - [Flow Limits and Considerations](https://help.salesforce.com/s/articleView?id=platform.flow_considerations.htm&type=5&language=en_US) - [Get Member Details from Transaction Journals When Loyalty Management and Rebate Management Are Enabled](https://help.salesforce.com/s/articleView?id=xcloud.member_details_loyalty_rebate_flow.htm&type=5&language=en_US) - When syncing the RebateProgramPayoutPeriod object via a Data Manager connection, the derived fields Total Approved Amount, Total Rejected Amount, and Number of Member Payouts are computed using SOQL queries at sync time. In orgs with approximately 25,000 or more RebateProgramPayoutPeriod records, the sync job can fail with a QUERY\_TIMEOUT error. If this occurs, the Job Monitor may show the job status as In Progress even after the failure. Check the failure message in the job details to confirm the actual job status. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note Data Processing Engine isn’t available in Government Cloud or Government Cloud Plus. ## Rebate Management Guardrails Set up and maintain a rebate program with processes that calculate rebate amounts and generate payouts for rebate program members. These processes typically handle large volumes of rebate transactions across programs, periods, and members. - Set up and maintain a rebate program with processes that calculate rebate amounts and generate payouts for rebate program members. These processes typically handle large volumes of rebate transactions across programs, periods, and members. - Rebate Management supports high data volumes through batch processing using [Data Processing Engine (DPE)](https://help.salesforce.com/s/articleView?id=ind.dpe_intro.htm&language=en_US) and Batch Management. The recommended data volume guardrails have been tested and designed for scenarios where rebate payouts are issued to program members based on defined rebate types and associated benefits. These guardrails support effective planning and help ensure reliable performance during implementation. They are not strict technical limits, and actual results may vary depending on data size, complexity, and configuration. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note The guardrails for processing specific transaction journal volumes remain consistent across industries. When applying these guardrails in a different industry, replace the Order object and its related considerations and assumptions with the object that generates transaction journals and ledgers in that context. The guardrails may vary depending on the complexity of the customer's requirements. To view Rebate Management licensing and packaging details, see [here](https://www.salesforce.com/manufacturing/channel-revenue-management/). ## Guardrails for End-to-End Orchestration Using DPE The following scenario outlines an internally tested orchestration flow where transaction journals are processed through a data processing engine. - Scenario 1 Org Data Summary: Active counts of various data objects | Object | Count | Details | | --- | --- | --- | | Rebate Program | 5,000 |   | | Rebate Program Member | 15,000 | 3 members per program (two-level hierarchy with a parent) | | Rebate Periods | 60,000 | 12 monthly periods per program | | Rebate Type | 30,000 | 6 rebate types per program | | Program Rebate Type Benefits | 180,000 | 6 benefits per rebate type | | Rebate Filters | 90,000 | 3 eligibility conditions per rebate type | | Transaction Journal | 25 million | 140 journals per member per period | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note These limits were tested internally. For higher volumes, contact your Salesforce admin. Execution Summary - DPE Used: Aggregate By Member - Rebate Types Processed: 30,000 - Filters Processed: 90,000 - Recipe Size: 799.1 KB - Unique Filters: 200 Processing Summary: The table below shows the number of rows processed in this recipe. | Join Type | Total Rows (30K Rebate Type) | Node Description | | --- | --- | --- | | Rebate Program and Rebate Type | 30,000 | Provides active program rebate types of active rebate programs. | | Rebate Program, Rebate Type, and Rebate Payout Period | 180,000 | Provides valid payout periods for the selected active rebate types. | | Rebate Program Member, Rebate Payout Period, Rebate Program, and Rebate Type | 360,000 | Provides the valid program members for the selected active rebate types and payout periods. | | Transaction Journal,Rebate Program Member, Rebate Payout Period, Rebate Program, and Rebate Type | 1,166,400,000 | Adds rebate type and payout period information to the transaction journal data. | | Filter Data Valid Transaction Journal | 97,200,000 | Based on activity dates, these numbers of TJs are valid for further processing. Evaluation of eligibility criteria happens on this set. | | Final Data Valid Tansaction Journal | 97,200,000 | Post evaluation of eligibility criteria - these are the number of rows that are finally aggregated. | Calculation: 10,000 rebate types × 90 transaction journals/member × 3 members/program × 12 periods/program ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note These limits were tested internally. If your data exceeds these volumes or dimensions, clone and split the DPE jobs. For example, split 10,000 rebate types across two jobs of 5,000 each. For help, contact your Salesforce admin. ## Guardrails for Rebate Payout Calculations Org Summary - Aggregate Records: 18,000,000 - Payout Periods: 180,000 Execution Summary
ProcessScenario 1
Batch Size2000
Processed byAggregate Record
Active Rebate Program1
Count of Aggregate Records1,800,000
Active Rebate Program Members15,000
Active Payout Periods12
Total Records in Rebate Member Payout180,000
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-channel_revenue_mgmt-264-0-0-production-enus/0afcbbd8-b325-4d62-baa1-63243d1c10aa/images/icon_note.png) Note The numbers above reflect internal testing. Actual performance may vary based on the customer's environment, configurations, and customizations. For higher volumes, contact your Salesforce admin. The default batch size for rebate payouts is 2,000 records. You can adjust it between 200 and 2,000 based on data volume and custom logic. Reduce the size if Apex limits are hit, and adjust only after evaluating system needs. For help choosing a batch size, contact your Salesforce representative. ## Things to Consider When Choosing a Rebate Processing Method When deciding how to process rebates, evaluate the following: - Storage limits for involved objects. Use archiving where needed. - Org resource usage during external API calls. - Limits related to - [Flows](https://help.salesforce.com/s/articleView?id=platform.flow_considerations.htm&language=en_US) - [Apex](https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_apexgov.htm) - [APIs](https://developer.salesforce.com/docs/atlas.en-us.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_api.htm) - [Data Processing Engine](https://help.salesforce.com/s/articleView?id=ind.dpe_limits.htm&language=en_US) ## Best Practices Use the following practices to stay within guardrails and avoid performance bottlenecks: - Archive or purge Transaction Journal, Rebate Payout, Rebate Aggregate, and Rebate Payout Source records that you no longer require. - Process batches using Rebate Program or Program Rebate Type filters. - Use serial mode in Data Loader for high-volume benefit uploads. - The default batch size for processing rebate payouts is 2,000 records. You can adjust this value between 200 and 2,000 records, depending on your customizations and data volume. If Apex governor limits are encountered due to customizations, consider reducing the batch size. Adjust the value only after assessing your data and processing requirements. # Considerations and Limitations for Salesforce Data Mentions As you use Salesforce Data Mentions and Salesforce Template Data Mentions, keep in mind these considerations. ### Required Editions
Available in: Lightning Experience
## Salesforce Data Mentions Auto-Enabled All Quip sites have Salesforce Data Mentions and Salesforce Template Data Mentions enabled. ## Quip Integration Access User Permission With the Quip Integration Access user permission, users can refresh Salesforce Data Mentions manually through the live app or by refreshing the Quip document for particular Salesforce objects. Assign the permission to an entire Salesforce org rather than to individual users. By default, the Quip Integration Access user has Read and View All Records permissions on Salesforce objects. With Winter ’21, all Salesforce orgs connected to Quip are assigned the Quip Integration Access user permission. The permission doesn’t control which users can create Salesforce Data Mentions. Any Quip user with access to a Salesforce org connected to Quip can create Salesforce Data Mentions. For example, if your org is assigned the Quip Integration Access permission, a user can create a Salesforce Data Mention in Quip for the Account Name field of an account in Salesforce. Quip refreshes the data mention when the document is reloaded to show changes made in Salesforce in the Quip document. However, if you remove the Quip Integration Access permission or update it to exclude the Account object, Quip doesn’t refresh the data mention or show the corresponding Salesforce information after a page refresh or manual refresh of the data mention. ## Salesforce Data Permissions If Mirrored Salesforce Permissions (MSP) aren’t enabled: - Users with access to a Salesforce record or field can mention it in a document. - Users with access to the document can see its data mentions regardless of their own Salesforce permissions. Access to Salesforce Data Mentions is based on the inserting user’s access level, not the viewing user’s level. - Only users with edit permissions in Salesforce can sync changes to Salesforce. If MSP is enabled: - Users that are logged in to Salesforce but don’t have Salesforce access to the record can’t see any of its data. - Users that are logged in to Salesforce but don’t have access to certain fields of a record can’t see those fields. - Users that aren’t logged in to Salesforce can’t see any data mentions or data. - The Salesforce data mention refreshes on page load or manual live app refresh. Every time the data mention refreshes, it checks the viewing user’s access to the record and data. - Only users with edit permissions in Salesforce can sync changes to Salesforce. If MSP is enabled, live data mentions (LDM) are refreshed only in these two scenarios. - The user loads a document with a given LDM and the record hasn’t been refreshed in the last 10 minutes. - The user manually refreshes a data mention. ## Document, Chat Room, and Spreadsheet Limitations Data mentions added to the body of a document, a chat room, or a spreadsheet aren’t searchable. Salesforce Data Mentions data is hidden in the conversation pane and appear as Data Mention. You can’t insert a data mention in a comment, conversation pane, or chat. You can only use Salesforce Template Data Mentions in spreadsheets embedded in a document. The following spreadsheet functionality isn’t available when Mirrored Salesforce Permissions are enabled: - You can’t filter or sort Salesforce Data Mentions in a spreadsheet. - If a formula uses a Salesforce Data Mention you don’t have access to, you don’t see the calculated value. - Spreadsheets and documents exported to a PDF show empty cells for Salesforce Data Mentions. ## Salesforce Template Data Mentions - When you create a Salesforce Template Data Mention, you can display fields in the @mentioned object or fields in objects that are linked to the @mentioned object. For example, you can create a Salesforce Template Data Mention that displays the Account Name field of an Account that’s linked to an Opportunity by the Account ID field (**Opportunity** | **Account ID** | **Account** | **Account Name**). However, you can’t display fields in objects that are linked to the @mentioned object by more than one lookup field or two other types of fields. For example, you can’t create a Salesforce Template Data Mention that displays the Owner of the Account mentioned in the previous example (**Opportunity** | **Account ID** | **Account** | **Owner ID** | **Owner**). - When you create a document from a template that includes Salesforce Template Data Mentions, the @mentioned fields can be empty in Salesforce. If an @mentioned field is empty when you create a document, Quip automatically populates it when a user populates it in Salesforce unless the field is a lookup field. ## User-Connected Salesforce Orgs Salesforce orgs connected to Quip by users, and not by an admin in Salesforce, aren’t automatically assigned the Quip Integration Access user permission. Users can still use Salesforce Data Mentions from that Salesforce org, but the data doesn’t automatically refresh. ## Staged Edits You can’t stage edits for Salesforce Data Mentions. Any unsaved edits are lost. ## Redacted Fields Data that is redacted or hidden because of permissions are still saved in Quip’s database. ## Field Visibility Quip uses Salesforce page layouts to obtain field data for Salesforce Data Mentions. Before you can @mention a Salesforce field, it must appear in a page layout that you can modify with the original page layout editor. If a field is on a Lightning page but isn’t part of a page layout, Salesforce Data Mentions of the field don’t work. #### See Also - [Customize Page Layouts with the Original Page Layout Editor](https://help.salesforce.com/s/articleView?id=platform.customize_layoutcustomize_ple.htm&type=5&language=en_US) # Considerations and Limits for Agentforce and Generative AI in Salesforce Suites Before using Agentforce Coworker and generative AI for Salesforce Suites, make sure you review key factors that can affect your implementation and usage.
Agentforce Coworker and generative AI considerations and limits
CONSIDERATION DETAIL

Supported Large Language Models (LLMs)

OpenAI

Supported languages

English (US/UK), French, German, Italian, Japanese, Spanish, Spanish (Mexico), Portuguese (Brazil), Chinese, Korean, Dutch, Russian

Consumption-based pricing

No consumption-based costs for Salesforce Suite customers using Agentforce.

Usage limits

Agentforce Coworker: 4.15k tokens per hour (approx 12 queries) | 6,25 million tokens per month (approx 174 queries per month).

Trial orgs have limits of 75k tokens per hour and 350k tokens per month.

Employee Agent: 1.5 million tokens per hour | 27 million tokens per month.

If you reach a limit, agent responses temporarily pause and automatically resume at the start of the next hourly or monthly cycles. Users who exceed a limit will see a generic “Something went wrong. Try again” error. Wait an hour before trying again, or contact Salesforce about increasing your limits.

Agentforce features

Agentforce Coworker has access to all features included with Salesforce Suites.

Upgrade to Enterprise Edition or higher for access to Agent Builder and Prompt Builder.

To turn off Cowroker, go to Advanced Setup. Enter Coworker in the Search box and then click Get Started with Agentforce Coworker. Click the toggle at the top of the page.

Agent Actions is on by default with Coworker in Suites. This setting lets Coworker edit records. To disable record editing by Coworker, go to Advanced Setup. Enter Coworker in the Search box and then click Get Started with Agentforce Coworker. In the Manage Data section, uncheck Agent Actions on the Salesforce row.

Third party data ingestion for Agentforce Coworker is not supported in Starter Suite and Pro Suite Editions. An error message will appear in Coworker Advanced Setup under ‘Manage Data’ for Starter Suite and Pro Suite customers. The Coworker Skills feature is not supported in Starter Suite and Pro Suite editions.

Actions

Salesforce Suites provides a targeted set of actions. Upgrade to Enterprise Edition or higher to access more actions.

See Delivered Actions for Salesforce Suites

Access to third-party data

Agentforce Coworker can’t consume third-party data in Suites Editions.

Protected health information

The features included with Agentforce for Suites are not covered by the Business Associate Addendum Restrictions. You may not enable any Agentforce or generative AI features that could result in the submission or use of protected health information.

Custom user profiles

If you’ve created a custom user profile, you must add the required AI licenses (PSLs) and Permission Sets to the profile.

For more information about managing permissions, see:

Supported browsers

Google Chrome, Mozilla Firefox, Microsoft Edge, Apple Safari

# Considerations Before Changing Your Experience Cloud Site URL Before updating the Experience Cloud site URL for your branded Experience Cloud app, review the potential impacts of making the change. General Considerations Keep these considerations in mind when changing the Experience Cloud site URL through Mobile Publisher. - Changing the Experience Cloud site URL requires a new submission, build, and distribution of the updated branded Experience Cloud app. - Use the final branded App Name in a test project since the App Name gets tied to the Experience Cloud site URL (not the site). - Submit a beta app request when you know the final Experience Cloud site URL. - Work closely with your Experience Cloud site admins to ensure there’s no last-minute changes to the Experience Cloud site URL. - Use CDN for content storage and distribution that’s geographically closer to your users. CDN changes the URL for the Experience Cloud site. - Avoid making any URL changes after the Mobile Publisher for Experience Cloud app is live. - For orgs with multiple Experience Cloud sites, changing site URLs can cause deep linking issues to other Experience Cloud sites. - URL validation now includes both the domain and the specific Experience Cloud site path on Android and iOS. If you change your site path, update your URL Management configuration and test link behavior on both platforms to ensure links to your site and to other sites on the same domain open as expected. Testing Considerations Keep these considerations in mind on how changing the Experience Cloud site URL can affect testing. - Sandbox URLs can change after a sandbox refresh, so keep this possibility in mind. If the sandbox URL changes, a new beta app submission is required with the updated sandbox URL. # Considerations Before You Enable Mirrored Salesforce Permissions When enabling Mirrored Salesforce Permissions in Quip, keep these considerations in mind. ### Required Editions
Available in: Lightning Experience
## Live Apps After you enable Mirrored Salesforce Permissions, Salesforce live apps that are added to documents behave in the following way. Salesforce Record live app: - Users who are logged in to Salesforce but don’t have Salesforce access to the record can’t see any of its data. - Users who are logged in to Salesforce and have access to the record but not certain fields can see only the fields that they have access to in Salesforce. - All users with access to the document can see comments attached to fields, regardless of their level of access to the record. - Users who aren’t logged in to Salesforce can’t see any record data. - The Salesforce Record live app refreshes automatically when the page loads or refreshes. Every time the live app refreshes, it checks the viewing user’s access to the live app data. - Only users with edit permissions in Salesforce can sync changes made in Quip to Salesforce. Salesforce List live app: - Users that are logged in to Salesforce but don’t have Salesforce access to the list view can’t see any of its data. - Users that are logged in to Salesforce but don’t have access to certain records in the list can’t see those records. - Users that are logged in to Salesforce but don’t have access to certain fields in the list can’t see those fields. - All users with access to the document can see comments attached to fields, regardless of their level of access to the field or list. - Users that aren’t logged in to Salesforce can’t see any list view records or data. - The Salesforce List live app refreshes automatically on page load or refresh. Every time that the live app refreshes, it checks the viewing user’s access to the live app data. - Only users with edit permissions in Salesforce can sync changes made in Quip to Salesforce. Relationship Map live app: - Users who are logged in to Salesforce but don’t have Salesforce access to any cards can’t see any of its data. - Users who are logged in to Salesforce but don’t have access to certain cards in the relationship map can’t see those cards. - Users who are logged in to Salesforce but don’t have access to certain fields in the card can’t see those fields. - All users with access to the document can see comments attached to fields, regardless of their level of access to the field or record. - Users who aren’t logged in to Salesforce can’t see any Salesforce cards or data. - The Relationship Map live app refreshes automatically when the page loads or refreshes. Every time that the live app refreshes, it checks the viewing user’s access to the live app data. - Only users with edit permissions in Salesforce can sync changes made in Quip to Salesforce. ## Salesforce Reports After you enable Mirrored Salesforce Permissions, Salesforce reports added to documents behave in the following way. - To see the latest data, reports must be manually refreshed. The report data shown upon refresh is based on the refreshing user’s access. Users with access to the document see the report data from the last refresh. - If a user refreshes the report but doesn’t have access in Salesforce, they can’t see any of its data. The report data is removed until the report is refreshed by a user with access. - If a user refreshes the report but doesn’t have access to certain report cells, they can’t see those cells. The cell data is removed until the report is refreshed by a user with access. - If a user refreshes the report but isn’t logged in to Salesforce, they can’t see any report data. The report data is removed until the report is refreshed by a user with access. ## Salesforce Data Mentions After you enable Mirrored Salesforce Permissions, Salesforce data mentions behave in the following way. - Users who are logged in to Salesforce but don’t have Salesforce access to the record can’t see any of its data. - Users who are logged in to Salesforce but don’t have access to certain fields of a record can’t see those fields. - Users who aren’t logged in to Salesforce can’t see any data mentions or data. - Salesforce data mentions refresh automatically when the page loads or refreshes. Every time that the data mention refreshes, it checks the viewing user’s access to the record and data. - Only users with edit permissions in Salesforce can sync changes to Salesforce. ## Document-Record Linking After you enable Mirrored Salesforce Permissions, users can see only the document’s linked Salesforce records that they have access to. # Considerations for Adopting the ICU Locale Formats Learn why Salesforce chose to adopt the International Components for Unicode (ICU) locale formats. Understand why we recommend testing the new formats in a sandbox and enabling them in production before they’re enforced. Then review recommendations on handling installed packages, custom code, and notifying your users. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: all editions
## Why Is Salesforce Making This Change? Before Winter ’20, new Salesforce orgs used the locale formats included with Oracle’s Java Development Kit (JDK). This solution worked well, but it has a few issues. Most importantly, the JDK locale formats aren’t consistent with internationalization best practices, and these JDK formats aren’t updated regularly. ICU is an international standard, maintained and governed by a global community. The new formats provide a consistent experience across the Salesforce platform and improve integration with ICU-compliant applications across the globe. By adopting the ICU locale formats, we keep Salesforce—and your business on Salesforce—up to date with these international standards. ## Don’t Wait for Salesforce Enablement Salesforce orgs created in Winter ’20 or later have ICU locale formats enabled by default. Orgs that haven’t already switched to ICU locale formats are encouraged to manually update. Use the [Enable ICU Locale Formats](https://help.salesforce.com/s/articleView?id=release-notes.rn_customization_globalization_enable_icu_locale_formats_release_update.htm&release=252&type=5&language=en_US) release update on all orgs whose Apex Classes, Apex Triggers, and Visualforce Pages are all using API version 45 or higher. Locales control the formats for dates, times, currencies, addresses, names, and numeric values. Moving from JDK to ICU locale formats can affect your users and cause misinterpretation of data. For this reason, we recommend that customers using JDK locale formats test and enable this change before it’s enforced. ## Test in a Sandbox Before you enable the ICU locale formats in your production org, try them out in a sandbox org with API version 45.0 or higher. Testing in a sandbox can uncover any issues with custom code and third-party integrations. ## Impact of Adopting a New API Version For best results with the ICU locale formats, Apex classes, Apex triggers, and Visualforce pages that reference locale formats, use API version 45.0 or later. If your org contains items on API version 44.0 or earlier, update the API version to avoid data integrity issues and end-user confusion. Updating the API version can include structural and behavior changes for objects and other code components. For example, the update can include new fields on an object, removal of a field, and changed behavior. We recommend upgrading the API version and completing thorough testing of all related functionality in a sandbox before you update production. ## ICU and Inline Edits on Visualforce Pages Inline edits on Visualforce pages always use the latest API version. Because of that behavior, when ICU is enabled, inline edits on Visualforce pages always use ICU locale formats, regardless of the page's API version. When a user makes an inline edit on a Visualforce page on API version 44.0 or earlier and saves their changes, the user can receive a ParseException error. For example, "Invalid Date and Time." These errors don't cause data integrity issues, but the errors can frustrate users. To avoid these errors when ICU is enabled, ensure that your custom Visualforce pages use API version 45.0 or later. ## Installed Packages Before you start testing, check with your package providers to make sure that all your installed packages are compatible with the ICU locale formats. If your package provider indicates that a fix for one of your installed packages is pending, factor that into your testing and activation timeline. If you’re a package provider, update the Apex classes, Apex triggers, and Visualforce pages in your packages to API version 45.0 or later. Update any custom code that requires or passes data in specific locale formats. Then test your packages in an org with ICU enabled. Verify that all changed formats appear as expected, and update your code as needed. ## Custom Code Many orgs contain custom code. Lightning Components allow you to customize Lightning Experience, the Salesforce mobile app, or to build your own standalone apps. With Apex, the options are even broader. Apex is often used to: - Create Web services. - Create email services. - Perform complex validation over multiple objects. - Create complex business processes that aren’t supported by workflow. - Create custom transactional logic, which occurs over the entire transaction, not just with a single record or object. - Attach custom logic to another operation. For example, attach custom logic to saving a record, so that it occurs whenever the operation is executed, regardless of where it originates in the user interface. Also consider formula fields and areas where you can customize filters, such as object lookups. To search your Salesforce code, download the metadata. Then use a command-line interface such as [Salesforce CLI](https://developer.salesforce.com/docs/atlas.en-us.sfdx_setup.meta/sfdx_setup/sfdx_setup_intro.htm). For more information on the steps to take to review and update your custom code, see Custom Code and Locale Format Changes in Salesforce Help. This section also provides examples of errors that can occur when custom code relies on specific date, time, and currency formats. Use this information to understand how to test custom functionality. If an external developer or consultant created your custom code and you don’t have a developer who can perform the assessment, start by testing the custom functionality. If you find issues, consider contracting with an external developer or consultant to assist with the evaluation of the custom code in your org. ## Notify Your Users and Partners Let your users know when you plan to enable ICU in production and how the new locales can affect them. Otherwise, the differences between JDK and ICU locale formats can cause confusion. For example, with the Spanish (Honduras) locale, the short date format changes from MM-dd-yyyy to dd-MM-yyyy when you enable the ICU locale formats. Make sure that your users know about this change, or they can interpret 01-11-2021 as January 11, 2021 instead of November 1, 2021. Reaching everyone can require multiple reminders before and after you enable ICU in production. Also consider notifying your partners, especially if those partners send information to or extract information from Salesforce. Resolving issues related to integrations can require their assistance. ## Use of Locale Formats We provide a list of all possible locale formats, but not all formats are used in Salesforce. For example, almost all dates on standard Salesforce screens use the short date format, which can’t be modified on standard screens. Likewise, not all formats are available for use in custom code. In particular, the medium date format isn’t available in Apex at this time. #### See Also - [_Salesforce Knowledge Article_: JDK Locale Format Retirement and the Enable ICU Locale Formats Release Update](https://help.salesforce.com/s/articleView?id=000380618&type=1&language=en_US) - [Adopt the ICU Locale Formats](https://help.salesforce.com/s/articleView?id=xcloud.icu_migration_how.htm&release=264.0.0&type=5 "The ICU locale format release update is available for all orgs. Review the high-level process to successfully migrate to the new International Components for Unicode (ICU) locale formats. Some of the formats differ from the ones provided by Oracle’s Java Development Kit (JDK). Understand how to determine the impact of changes on your org, and learn about the updates required to support the new formats.") - [API Versions for Apex Classes, Apex Triggers, and Visualforce Pages](https://help.salesforce.com/s/articleView?id=xcloud.admin_locales_update_api.htm&release=264.0.0&type=5 "The International Components for Unicode (ICU) locale formats are available with API version 45.0 and later. To use the ICU locale formats in your customizations, all Apex classes, Apex triggers, and Visualforce pages must use API version 45.0 or higher..") - [Custom Code and Locale Format Changes](https://help.salesforce.com/s/articleView?id=xcloud.admin_locales_code.htm&release=264.0.0&type=5 "Address, currency, date, datetime, integer, name, and time formats can change when a user changes locales. These formats can also change when the locale format standard changes or formats are updated. Learn how to avoid errors by using locale-neutral methods in your code and review examples. Then understand how to verify that your integrations work with new or changed formats.") # Considerations for Agentforce in the Salesforce Mobile App Carefully review limitations and considerations when using Agentforce in the Salesforce mobile app. These considerations are in addition to [the ones in effect when using agents on desktop](https://help.salesforce.com/s/articleView?id=ai.copilot_considerations.htm&type=5&language=en_US). - Rich text components on the Salesforce mobile app don’t support the full set of HTML tags or styling provided in the Formatted Rich Text Lightning web component. - img tags aren’t rendered - Unsupported tags: li, ol, ul - Agentforce dictation services are only available for on-device languages. Download support for specific languages on your device to use Agentforce dictation. See [Apple supported languages for dictation](https://www.apple.com/ios/feature-availability/#dictation) and [Android language settings](https://support.google.com/gboard/answer/7068494) - Custom Lightning types on mobile support only top-level component overrides. Property-level and collection renderer overrides aren't supported. - LWC components used as custom Lightning type overrides on mobile must include the `Small` form factor in `supportedFormFactors`. Without it, the component doesn't render. # Considerations for Apple Safari Salesforce supports the latest stable version of Apple Safari. Apply all Apple software updates. If you use the Tab key to navigate, the tab order can be different when tabbing forward versus tabbing backward, and some UI elements can’t be focused. To ensure the tab order is consistent, and that each element can be focused, turn on **Press Tab to highlight each item on a webpage** in your browser settings. To protect user privacy, Apple Safari version 13.1 changed the default settings to block cookies in cross-domain iframes. The Prevent Cross-Site Tracking privacy setting is enabled by default. Visualforce pages embedded within page layouts and some pages in Setup rely on cross-domain cookies to work properly in Lightning Experience, so these pages aren’t displaying correctly. If you encounter issues with one of these Setup pages, click the link to reload the page in Salesforce Classic. ![Message containing link to reload page in Classic](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/embedded_classic_page_message.png) To display content for Visualforce pages, follow the steps in the [Cannot Load Images and Other Content When Using Safari](https://help.salesforce.com/articleView?id=000353584&type=1&mode=1&language=en_US) knowledge article to change your org’s metadata. You can also turn off these Safari settings. - Block All Cookies - Prevent Cross-Site Tracking ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_warning.png) Warning Salesforce isn’t responsible for any sharing of data based on this change from default settings. - Private Browsing - Block Pop-ups Pop-up blocking can prevent some pages from opening in a new tab. # Considerations for Autocompleting Addresses Get familiar with these considerations before you enable the autocomplete address fields feature. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Professional, Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To modify maps and location settings: Customize Application
- The autocomplete address fields feature is available for all versions of the Salesforce mobile app, Lightning Experience, Experience Cloud Aura, and Experience Cloud LWR sites. - To populate address details, Maps and Location Services uses the [Google Maps Geocoding API](https://developers.google.com/maps/documentation/geocoding/overview). - To use this API, add \*.forceusercontent.com to any existing allowlists for your network, firewalls, and proxies. - If the Geocoding API can’t map or parse an address component, then Maps and Location Services can’t autocomplete the address field. - Autocomplete address picklist results are optimized for these countries: - Australia - Brazil - Canada - France - Germany - Japan - Netherlands - Russia - Spain - Sweden - United Kingdom - USA - It’s possible for Autocomplete to work with additional countries, including new states added to State and Country Picklists, if they match Google Maps provided values. These aren’t optimized by Salesforce and must be reviewed and maintained by you. # Considerations for Cache-Only Keys These considerations apply to all data that you encrypt using the Shield Platform Encryption Cache-Only Key Service. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
## Named Credentials To use named principals with the Shield Platform Encryption Cache-Only Keys, create a permission set for external credential principal access, and assign that permission set to the `autoproc` user. See [Use a Named Principal-Based Credential for a Cache-Only Key](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_byok_use_an_aws_kms_key_for_cok.htm&release=264.0.0&type=5 "You can use an externally managed key as your cache-only key. External credentials create a secure connection between Salesforce and your external-key repository. For optimal security, set up an external credential that uses a named principal to authenticate into your external service on behalf of all users authorized to manage key material. Salesforce recommends you use this method instead of a legacy named credential if you use an external key management service along with cache-only keys."). ## Retry Policy If Salesforce can’t reach your external key service, the callout fails and your active cache-only key’s status is set to Destroyed. This policy prevents excessive loads on both services. The Cache-Only Key Service then periodically retries the callout to help you minimize down time. Retries occur one time per minute for five minutes, then one time every five minutes for 24 hours. If the Cache-Only Key Service can successfully complete a callout during this retry period, your cache-only key’s status is reset to Active. At any point during a retry period, you can activate your key material through Setup or the API pending remote key service availability. If you reactivate your key material during the retry period, all retry attempts stop. The RemoteKeyCalloutEvent object captures every callout to your key service. You can subscribe to this event with after insert Apex triggers, and set up real-time alerts that notify you when a callout fails. ## 401 HTTP Responses If there’s a 401 HTTP response, Salesforce automatically refreshes any OAuth token associated with your named credential, and retries the request. ## CRM Analytics Backups of CRM Analytics data are encrypted with your Shield Platform Encryption keys. If you encrypt data in CRM Analytics datasets with a cache-only key, make sure that the Analytics cache-only key is in the same state as your Fields and Files (Probabilistic) cache-only key. ## Setup Audit Trail Setup Audit Trail records activated cache-only key versions differently depending on whether a cache-only key with the Active status exists when you reactivate the key. However, if you reactivate a destroyed key and there’s already another key with the Active status, the Setup Audit Trail shows the reactivated key with an updated version number. ## Cache-Only Keys and Key Types Use a separate cache-only key for each type of data you want to encrypt. You can’t use a cache-only key with multiple key types. For example, you can’t use a cache-only key to encrypt both search indexes and CRM Analytics data. ## Service Protections To protect against Shield KMS interruptions and ensure smooth encryption and decryption processes, you can have up to 10 active and archived cache-only keys of each type. If you reach your key limit, destroy an existing key so that you can create, upload, reactivate, rearchive, or create a callout to another one. Remember to synchronize your data with an active key before destroying key material. ## Hyperforce Migration When your org moves from a non-Hyperforce platform to Hyperforce, you may need to revisit your AWS KMS IP connection settings. We recommend that Hyperforce customers adopt the best practices listed in the topic [Preferred Alternatives to IP Allowlisting on Hyperforce](https://help.salesforce.com/s/articleView?id=000394078&type=1&language=en_US) as soon as possible. # Considerations for Changing a Record’s Owner When you change a record’s owner, some items that are related to the record transfer to the new owner.
Available in: Salesforce Classic and Lightning Experience
Available in: Essentials, Group, Professional, Enterprise Performance, Unlimited, Developer, and Contact Manager Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note Automatic triggers that change record ownership can affect which object details users see. Sometimes, a user can enter information that is then immediately hidden from them when an automatic trigger changes the object's owner. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_important.png) Important Workflow rules that update owners _don’t_ also transfer associated items. To ensure transfer, click **Change** next to the owner’s name in a record and make your transfer selections.
Record Transferred Items
Account
  • Contacts owned by the previous account owner and are related to the account transfer to the new owner automatically.
  • The account owner’s open opportunities transfer automatically. To transfer open opportunities owned by others, select Transfer open opportunities owned by others. When you select this option, ownership of those opportunities transfers regardless of your access to them. The opportunity owner change doesn’t invoke any automations, such as flows or Apex triggers, because it cascades from an account owner change.
  • To transfer the account owner’s closed opportunities to the new account owner, select Transfer account owner’s closed opportunities. Closed opportunities owned by others don’t transfer. The opportunity owner change doesn’t invoke any automations, such as flows or Apex triggers, because it cascades from an account owner change.
  • Contracts with a status of Draft or In Approval transfer automatically. The new owner has read-only access to contracts with a status of Activated.
  • Orders with a status of Draft, with or without a transferring contract, transfer automatically. The new owner has read-only access to orders with a status of Activated.
  • To transfer the owner’s open cases, select Transfer account owner’s open cases. To transfer all of the owner’s cases, select Transfer all of this account owner’s cases.
  • Attachments and notes in Salesforce Classic transfer.
  • The owner’s open activities transfer automatically. Closed activities don’t transfer.
  • To keep account team members with an account when the owner changes, select Keep account team. To delete the team, deselect this option. This action only applies to team members added by a Salesforce admin, the account owner, or someone higher in the role hierarchy. Team members added by users with group-based access are removed even if Keep account team is selected.
  • To keep opportunity team members with an opportunity when the account owner changes, select Keep opportunity teams with transferred opportunities. To delete the team, deselect this option.
  • To transfer the account owner’s closed cases to the new account owner when the account owner changes, select Transfer account owner’s closed cases.
  • In Salesforce Classic only, divisions transfer to the new account owner’s division when you select Change division.
  • When changing the owners of multiple accounts via SOAP API, all accounts must have the same old owner and the same new owner. To change ownership of accounts with different owners, use separate API requests.
Campaign
  • Attachments and notes in Salesforce Classic
  • Open activities owned by the original record owner
Case
  • Attachments and notes in Salesforce Classic
  • Open activities that are owned by the original record owner. Closed activities don’t transfer.
  • To transfer ownership of a case, the new owner must already have at least Read access to its associated parent account via sharing features. Or, the user who is transferring the record must be able to share the associated parent account. The account owner, Salesforce admins, users who are above the account owner in the role hierarchy, and users with the Modify All Records permission on accounts have this ability. Otherwise, the ownership transfer can’t be completed.
Contact
  • Attachments and notes in Salesforce Classic
  • Open activities that are owned by the original contact owner. Closed activities don’t transfer.
  • To transfer ownership of a contact, the new owner must already have at least Read access to its associated parent account via sharing features. Or, the user who is transferring the record must be able to share the associated parent account. The account owner, admins, users who are above the account owner in the role hierarchy, and users with the Modify All Records permission on accounts have this ability. Otherwise, the ownership transfer can’t be completed.
Contract
  • Attachments and notes in Salesforce Classic
  • Open activities that are owned by the original record owner
  • Orders with Draft status
Custom object
  • Open activities that are owned by the original record owner (Salesforce Classic only)
  • Attachments and notes in Salesforce Classic
Knowledge
  • Changing an article's ownership is available in Lightning Experience only.
  • To change ownership, select Change Owner either from a Knowledge list view of draft articles or a draft article’s Knowledge home record.
  • When you change the ownership of a draft article from a Knowledge home record, you can also change the ownership of its archived and published versions at the same time.
  • You can change the ownership of multiple draft articles at once from a Knowledge list view.
  • You can change ownership to a queue and to a user.
  • Anyone in a queue can act as the article's owner.
  • A user can only change an article's ownership if their profile permissions allow it.
Lead
  • Attachments and notes in Salesforce Classic transfer. Files in Lightning don’t.
  • Open activities that are owned by the original record owner (except when you change lead ownership using the Assign using active assignment rule checkbox)
Opportunity
  • Open activities that are owned by the current opportunity owner transfer. Closed activities don’t transfer.
  • When you transfer ownership of a related account, you have the option to transfer open opportunities owned by others. This option transfers ownership of all of those opportunities, regardless of your access to them. This opportunity owner change doesn’t invoke any automations, such as flows or Apex triggers, because it cascades from an account owner change.
  • Opportunity team members only when the Keep Opportunity Team option is selected. When opportunity teams transfer, opportunity splits, opportunity product splits, custom field values, and any notes on splits are preserved and split percentages are assigned to the new owner.
  • Attachments and notes in Salesforce Classic transfer. Files in Lightning don’t.
  • To transfer ownership of an opportunity, the new owner must already have at least Read access to its associated parent account via sharing features. Or, the user who is transferring the record must be able to share the associated parent account. The account owner, admins, users who are above the account owner in the role hierarchy, and users with the Modify All Records permission on accounts have this ability. Otherwise, the ownership transfer can’t be completed.
Order
  • Open tasks
  • Future events
  • Items don’t transfer if either the original or new owner is a member of a queue.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note You can't transfer events you’re invited to and don't own. #### See Also - [Change a Record’s Owner](https://help.salesforce.com/s/articleView?id=xcloud.account_owner.htm&release=264.0.0&type=5 "You can give ownership of a record to another user as long as that user has at least Read permission for the type of record being transferred.") # Considerations for Collapsed Sections When collapsing sections in your Quip document, keep these considerations in mind. - You can’t collapse the document title or any content in columns. - Find and Replace works on collapsed sections. - Any content that you collapse or expand applies only to your view. Your teammates don’t see your selections. - By default, collapsed content is included when you print a document. To avoid printing collapsed content, from the Document menu, select **Print Options**, and then deselect **Print collapsed sections**. # Considerations for Creating Activity-Based Currencies with Mixed-Expiration Subcurrencies Here are some considerations for currencies that use the Activity With Mixed Subcurrencies expiration model. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Advanced
- The currencies don't support negative balances. This restriction exists because negative balances are evaluated at the parent currency level, whereas this model relies only on subtypes for point transactions. - The currencies use aggregate ledgers for tracing. See [Track Redemptions and Associated Accruals with Traceability](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_activity_mixed_expiration_track_redemptions_traceability.htm&release=264.0.0&type=5 "Trace consumed points to their originating source by using traceability loyalty ledger records. Traceability records map target debit ledgers to source Loyalty Aggregated Point Expiration Ledger records. If a single debit ledger consumes points from multiple aggregate ledgers, Loyalty Management creates a dedicated traceability record for each aggregate ledger from which points are consumed."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The currencies don't support ledger tracing. - You can't reinstate points for subcurrencies that use the fixed-duration expiration model. # Considerations for Deleting Your Trailblazer Account Before deleting your Trailblazer account, make sure that you’re aware of what happens to your profile and history. ### Required Editions
Available in: All Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trailblazer_identity-264-0-0-production-enus/ccc43018-73ae-4159-814a-676d2b189e1c/images/icon_note.png) Note A Trailblazer account is available to AppExchange, Commerce Cloud Developer Center, Events, IdeaExchange, Salesforce Help, Salesforce+, Trailblazer Community, Trailhead users, and Partner Community. Account deletion means that all your profile data is deleted. Deletion removes your badges, points, and superbadges from your profile, and they can’t be retrieved. Posts you wrote remain visible after you delete your account, but they show as posted by an anonymous alias. If you want your posts removed, delete them before deleting your account. Deleting your account is permanent and can’t be undone. To delete your account, go to the Account Deletion section on your Trailblazer settings page. ![Trailblazer account deletion section](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trailblazer_identity-264-0-0-production-enus/ccc43018-73ae-4159-814a-676d2b189e1c/trailblazer_identity/images/trailblazer_account_deletion_section.png) By selecting **Delete your Trailblazer account**, we inform you of the connected emails that are affected, and we outline the impacts of deleting your account. To move forward, acknowledge that account deletion is permanent, and click continue. ![Trailblazer account deletion impact](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trailblazer_identity-264-0-0-production-enus/ccc43018-73ae-4159-814a-676d2b189e1c/trailblazer_identity/images/trailblazer_account_deletion_impact.png) Before processing account deletion, we ask you to verify yourself. After you complete verification, you’re logged out of your Trailblazer account, and we process the account for deletion. To request an account deletion if you don’t have access to your account, [Submit a Case](https://trailhead.salesforce.com/help?support=home), then select **Trailhead/Certification Account**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-trailblazer_identity-264-0-0-production-enus/ccc43018-73ae-4159-814a-676d2b189e1c/images/icon_note.png) Note Deleting your Trailblazer account doesn’t automatically delete associated support case data. To hard delete support-related data, let us know you want that when you submit your ticket. #### See Also - [_Salesforce Help—Trailblazer Accounts_](https://help.salesforce.com/articleView?id=trailblazer_id.htm&language=en_US) - [_Salesforce Help—Trailblazer Account Merges_](https://help.salesforce.com/articleView?id=tbid_account_merges.htm&language=en_US) - [_Salesforce Help—Get Support for Trailblazer_](https://help.salesforce.com/articleView?id=get_tbid_support.htm&language=en_US) # Considerations for Design Registration Review the considerations for Design Registration. In Salesforce orgs created in Summer ’25 or earlier, the Design Registrations Awaiting Approval report is not visible by default. You must [create a new dashboard](https://help.salesforce.com/s/articleView?id=xcloud.review_and_approve_registered_designs.htm&release=264.0.0&type=5 "Use the new Design Registrations Awaiting Approval report to review and approve the design registrations done on partner sites.") to view the report and take any action on the registered designs. # Considerations for DKIM Keys Before you create DKIM keys, understand their purpose and how DKIM key rotation and domain matching work. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: all editions except Database.com
## Overview When you sign your emails digitally with a DomainKeys Identified Mail (DKIM), the key proves that the message came from your domain. That signature is an industry standard. Salesforce uses DKIM key pairs to sign outbound email sent on your company’s behalf, which increases your domain’s reputation as a legitimate sender. Each DKIM key pair consists of one private and one public key. Salesforce publishes the public key, and the private keys are stored in Salesforce. These linked keys verify your sending email domain and help verify the authenticity of your outbound emails. During mail transport, Salesforce uses your private key to generate a DKIM signature and then adds that signature to outbound emails. When the recipient receives the email, the DKIM signature is validated against the public key via your domain’s public DNS record. This validation proves that the sender is who they claim to be. In Salesforce, an active DKIM key also verifies that you own the domain. Salesforce can send email on behalf of your users only when both the domain and email address are verified. For more information, see [Requirements to Send Email from Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_requirements.htm&release=264.0.0&type=5 "To protect your org and brand, Salesforce requires domain-level and user-level email verification. To send email from Salesforce with your email domain, verify ownership of your email-sending domains."). ## DKIM Key Rotation For security, Salesforce rotates your DKIM keys every 30 days. The rotation cycle begins when a DKIM key pair is created and published. A DKIM key pair contains a public key and a private key. - Primary DKIM Key: Your active public-private DKIM key pair. - Alternate DKIM Key: Your secondary, inactive public-private key pair, used to replace the primary key pair during rotation. When you set up a DKIM key, you set up CNAME records that point to the primary and secondary private key pairs. Salesforce rotates the keys for you. ## Rotation Timeline Here’s the timeline of events starting the first time that a DKIM key is published. After you activate a DKIM key, Salesforce performs each of these actions for you. - Day 0: The primary DKIM key pair is published. - Day 25: Salesforce creates an alternate DKIM key pair in preparation for rotation. Salesforce publishes the alternate key pair to DNS, 5 days before rotation, so that all DNS servers know of the new key pair. - Day 30: Salesforce marks the alternate key pair as active and signs emails with the newly active key for the next 30 days. ## Multiple DKIM Key Pairs If multiple active DKIM keys match the sending domain, Salesforce uses the key with the longest matching domain match pattern. If multiple active keys have the same longest-matching pattern, Salesforce randomly selects one of the keys to use. Example: You send email from Salesforce with the sales.mail.example.com domain. If DKIM key pairs exist for these three domain match patterns, Salesforce uses the keys in this order. - .sales.mail.example.com - .mail.example.com - .example.com ## Query Your DKIM Keys To learn how to query your DKIM keys and authorized email domains, see [Get a List of Your Verified Email-Sending Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_domains_identify_verified.htm&release=264.0.0&type=5 "To identify your verified email-sending domains, use Salesforce Object Query Language (SOQL) and Tooling API. Query your DomainKeys Identified Mail (DKIM) keys and your authorized email domains.") ## DKIM for Domain-Level Email Verification Salesforce requires domain-level and user-level email verification. Salesforce can send email on behalf of your users only after both levels of verification are complete. For domain-level verification, an active DKIM key's domain name must match the entire domain shown in the 'From' address. To avoid delivery failures, activate a separate DKIM key for each email-sending domain and subdomain. See [Requirements to Send Email from Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_requirements.htm&release=264.0.0&type=5 "To protect your org and brand, Salesforce requires domain-level and user-level email verification. To send email from Salesforce with your email domain, verify ownership of your email-sending domains."). ## DKIM for User-Level Email Verification If a trusted integration or admin manages your users’ email addresses in Salesforce, use domain-level verification to bypass the requirement email address verification for addresses on any domain with an active DKIM key. This feature affects users’ ability to send email from Salesforce. It has no impact on user account verification or the user’s ability to log in to Salesforce. See [Use a Verified Domain for User-Level Email Verification](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_user_bypass.htm&release=264.0.0&type=5 "If a trusted integration or admin manages your users’ email addresses in Salesforce, specify which domains require address verification. For each authorized email domain, you can require email address verification only when users change their email address, or disable address verification entirely. Or use your active DomainKeys Identified Mail (DKIM) keys to verify addresses for new users and new organization-wide email addresses."). #### See Also - [DomainKeys Identified Mail (DKIM) Keys](https://help.salesforce.com/s/articleView?id=xcloud.emailadmin_setup_dkim_key.htm&release=264.0.0&type=5 "Use the DKIM key feature so Salesforce can sign outbound email sent on your company’s behalf. These signatures give recipients confidence that the email was handled in a way that’s consistent with your company. An active DKIM key also verifies your domain ownership so that Salesforce can send email for your users.") - [Requirements to Send Email from Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_requirements.htm&release=264.0.0&type=5 "To protect your org and brand, Salesforce requires domain-level and user-level email verification. To send email from Salesforce with your email domain, verify ownership of your email-sending domains.") # Considerations for Document Linking As you link your documents to Salesforce records, keep in mind these considerations. ## Connected Salesforce Orgs A user can see ![blue Salesforce Actions cloud](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_blue_salesforce_actions_icon.png) and link a document only if they connected their Salesforce org to Quip. - From the user profile in Quip, click **Salesforce**. - Click **Connect** and log in to Salesforce. ## Document Access - Only users with Full Access to a document can link it to a record from Quip. - Only users with Edit Access or Full Access to a document can open the Share window and see its linked records. - Only users with Edit Access or Full Access to a document can see ![blue Salesforce Actions cloud](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_blue_salesforce_actions_icon.png) and the document’s linked records. - A user with less than Full Access to a document can link it to a record from the Quip Associated Documents component in Lightning Experience. - Users who can view a document can copy its URL, go to a record in Lightning Experience, and link it to the record via the Quip Associated Documents component. - If the user who linked the document via the Quip Associated Documents component has less than Edit Access, they can’t see ![blue Salesforce Actions cloud](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_blue_salesforce_actions_icon.png) or the linked record from the document. ## Record Access Users can see only the linked records in Quip that they have access to in Salesforce. If User A with Full Access to a document links it to a record that User B doesn’t have access to, User B doesn’t see the linked record. This is true even if User B is the document creator. ## Object Types - You can’t link a document to a User record, like a Contact. - You can’t link to a [Chatter group](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_collaborationgroup.htm), [content library](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_contentworkspace.htm), [Exerience Cloud site](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_network.htm), or [Organization](https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_organization.htm) object. ## Synced Sharing - Synced Sharing is only enabled for a linked document if the user who links it has Full Access to it. - Because document linking isn’t supported for User records, Synced Sharing for User records also isn’t supported. ## Remove Record Link You can’t remove the record link from the document in Quip. To remove it, open the document in Salesforce, and remove it from the record via the Quip Associated Documents component or the Files component. # Considerations for Document Ranges As you set up document ranges in your templates, keep in mind these considerations. ### Required Editions
Available in: Lightning Experience
## Template Format You can see your document ranges only in templates. You can add automation to documents based on a document range, but you can’t click **Show Document Range** in a document to see the defined sections. Document ranges aren’t supported in spreadsheets or slides. ## Document Range Identification Document ranges are defined only by headers. Paragraphs, checklists, and other formats don’t define the start or end of a document range. If a header used for automation is edited, the automation can’t find the document range. To avoid broken automation, lock edits to headers you want to use for document ranges. @Mentions, data mentions, and mail merge syntax don’t work well with document range automation. For the best experience, use static headers to define your document ranges. If a document or template has multiple headers of the same name, automation endpoints use the first instance of that header. If a document or template has multiple columns, showing a document range from a column highlights the document width. Automation based on the document range header still works as expected. # Considerations for Enhanced Domains Before you enable and deploy enhanced domains, understand the prerequisites. Learn about how URLs, including public-facing URLs, change across your org with enhanced domains. Review recommendations for preserving access to your org during the change, learn about redirections, and understand how enhanced domains improve your Experience Cloud sites. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
## Enforcement Enhanced domains were enforced in Winter ’24. For more information, see [Enhanced Domains Timeline](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_enhanced_timeline.htm&release=264.0.0&type=5 "To prevent disruption for your customers and users, review the enhanced domains timeline and prepare for upcoming changes. Redirections for legacy host names stopped in production and demo orgs in Spring ’26. And in Winter ’27, Salesforce ends support for API traffic that uses an incorrect instanced URL."). The information in this topic is designed to assist customers who continue to test after deploying enhanced domains. ## Plan Your My Domain Change When you deploy enhanced domains, the URLs that Salesforce hosts for your org change. These changes require planning, coordination, and testing. For high-level steps, recommendations, and checklists, see [Plan for a My Domain Change](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_plan.htm&release=264.0.0&type=5 "Whether you change your My Domain to update your brand, to adopt enhanced domains, or to enable partitioned domains, the URLs that Salesforce hosts for your org change. Those changes can have a large impact, and making the required updates can seem like a daunting project. To make the process as smooth as possible for you, your users, and your customers, review the high-level steps, the recommended practices, and how to reduce the impact on your users and customers."). ## Preserve Access to Your Org When you deploy enhanced domains, the login URLs for your sites change. Your My Domain login URL changes when you deploy enhanced domains in a sandbox. Enhanced domains don’t change your My Domain login URL in production unless you also change your My Domain name or suffix. When your My Domain login URL or site URL changes, authentication methods such as SSO and multi-factor authentication (MFA) can stop working. Before you deploy a change to your My Domain, [preserve access](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_login_change_preserve_access.htm&release=264.0.0&type=5 "When your My Domain or site login URL changes, two multi-factor authentication (MFA) verification methods stop working: built-in authenticators and security keys. Without those methods, single sign-on (SSO) can also stop working. To preserve admin access to Salesforce and prevent end-user frustration, verify your backup authentication methods. In preparation for your My Domain change, determine the post-deployment steps to reestablish authentication for your org, including resetting the affected verification methods for your users.") for your users and admins. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important If you don’t follow this guidance before you deploy a change to your My Domain login URL, you can be locked out of your Salesforce org. ## URL Changes When you deploy enhanced domains, all URLs across your org contain your company-specific My Domain name, including Experience Cloud sites and Salesforce sites. Also, your URLs don’t change when your org is moved to another Salesforce instance. If your org was created before October 2020, you didn’t get a My Domain by default. In that case, your users accessed Salesforce with URLs that contained your instance name but not your My Domain name. If you hard-coded any of those old URLs in your org, update them to the enhanced domain format. For a full list of enhanced domain URL formats and tables listing the changed formats when you deploy enhanced domains, see [My Domain URL Formats](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_app_url_changes.htm&release=264.0.0&type=5 "Your My Domain name is a subdomain used in login URL and application URLs across your Salesforce org, including sites and Visualforce pages. Understand what determines your org’s URL formats and the structure of those formats."). Because your org’s URLs change, we recommend that you test your org’s functionality in a sandbox with enhanced domains before you deploy this feature in production. Pay particular attention to customizations that reference your old URLs. Note the changes required to complete successful tests, then use that list when deploying your My Domain with enhanced domains in production. For more information and guidance on the areas to update, see [Update Your Org and Test My Domain Changes](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_deploy_update_test.htm&release=264.0.0&type=5 "Before you deploy a change to your My Domain, work with your users to preserve their login access to your org. To test My Domain changes, deploy the change in a sandbox. If your My Domain login URL or site URL changes, update authentication. Review and make the required updates to support the new domains. Then test access to your org and your functional workflows in Salesforce. After you complete testing in a sandbox, use the same process to update your production org. Finally, update redirection behavior for your old URLs."). ## Differences Between Sandbox and Production When you deploy enhanced domains, your production My Domain login URL format, `MyDomainName.my.salesforce.com`, doesn’t change unless you also change your My Domain name or suffix. However, many other URLs change. When you enable enhanced domains in a sandbox, the word “sandbox” is added to all My Domain URLs, including the org’s My Domain login URL: `MyDomainName--SandboxName.sandbox.my.salesforce.com`. Similarly, the URL for your Lightning pages also changes in a sandbox, but not in production. Therefore, some changes are required in your sandbox to test enhanced domains that aren’t required in production unless you also change your My Domain name or suffix. The changes that apply only when your My Domain login URL changes are called out on [Update Your Org for My Domain Changes](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_guidelines.htm&release=264.0.0&type=5 "When you deploy a change your My Domain, your Salesforce org’s login URL and application URLs change. URLs that are dynamically constructed—for example, URLs generated via the DomainCreator Apex class—use the new URLs automatically. However, some Salesforce functionality requires an update to work with your new URLs. Similarly, custom code, your network configuration, and third-party integrations that use the old URLs require updates. To ensure a smooth transition to your new URLs, update references to your old URLs."). If you deploy enhanced domains in production without changing your My Domain name or suffix, those tasks don’t apply. ## Changes to Public-Facing URLs When you deploy enhanced domains, the URLs for your Experience Cloud sites and Salesforce Sites change. With enhanced domains, these URLs include your My Domain name. For this change, there are two important considerations. - Your My Domain name is now externally exposed. If Experience Cloud sites or Salesforce Sites are enabled, the default Salesforce URL contains your My Domain name. For example, `MyDomainName.my.site.com` for Experience Cloud sites. If your current My Domain name reflects an internal-only brand, you have two options. - (Recommended.) Use a custom domain such as www.externalbrandname.com to serve the Experience Cloud site or Salesforce Site. For more information, see [Custom Domains](https://help.salesforce.com/s/articleView?id=platform.domain_mgmt.htm&type=5&language=en_US). - Rename your My Domain so that it reflects your external brand when you deploy enhanced domains. Renaming your My Domain changes your login URL and other URLs that Salesforce hosts for your org. - These URLs can be used outside of Salesforce. Identify all locations where these public-facing URLs are used. For example, a site URL can be used on your website, social media pages, marketing materials, and templates, such as email signatures and automated responses. Then create a plan to update each location and announce the change to your users and customers. ## Redirection of Non-Enhanced My Domain URLs Before you deploy enhanced domains, consider the impact on any existing My Domain host name redirections. Salesforce only redirects your last set of previous My Domain URLs. If you previously changed your My Domain, your previous My Domain URLs redirect to your current My Domain URLs unless you disable those redirects. When you deploy another change to your My Domain, including enabling enhanced domains, existing redirections stop, and Salesforce redirects the My Domains in place before the latest deployment instead. After you deploy enhanced domains, your previous non-enhanced host names are redirected. In sandboxes, Developer Edition orgs, patch orgs, scratch orgs, and Trailhead Playgrounds, Salesforce stopped those redirections in Winter ’25. In production orgs and demo orgs, redirections for non-enhanced My Domain URLs stop in Spring ’26. For details on the changes related to these redirections and your options in each release, see [Enhanced Domains Timeline](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_enhanced_timeline.htm&release=264.0.0&type=5 "To prevent disruption for your customers and users, review the enhanced domains timeline and prepare for upcoming changes. Redirections for legacy host names stopped in production and demo orgs in Spring ’26. And in Winter ’27, Salesforce ends support for API traffic that uses an incorrect instanced URL."). To see if redirects are in place for a previous My Domain, check the Redirections section of the My Domain page. For more information on redirections, how to determine which My Domain host names are being redirected for your org, and which redirections for previous non-enhanced host names are temporary, see [My Domain Redirections](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_redirections.htm&release=264.0.0&type=5 "When you deploy a change to your My Domain, Salesforce redirects multiple host names automatically. Learn about the types of redirections, how to log redirections for the host names that Salesforce hosts for your org, and how you can control these redirections."). ## Experience Cloud Content Delivery Network (CDN) When you deploy enhanced domains, the format of your Experience Cloud site URL changes from `ExperienceCloudSitesSubdomainName.force.com` to `MyDomainName.my.site.com`. Your `*.my.site.com` domain includes the Experience Cloud Content Delivery Network (CDN). The Experience Cloud CDN reduces the page load time and provides availability features for your Experience Cloud sites. For more information, see [Content Delivery Networks (CDNs) and Salesforce](https://help.salesforce.com/s/articleView?id=platform.community_builder_cdn_overview.htm&type=5&language=en_US). This change requires some adjustments to your configuration. For details, see [Update Your Org for My Domain Changes](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_guidelines.htm&release=264.0.0&type=5 "When you deploy a change your My Domain, your Salesforce org’s login URL and application URLs change. URLs that are dynamically constructed—for example, URLs generated via the DomainCreator Apex class—use the new URLs automatically. However, some Salesforce functionality requires an update to work with your new URLs. Similarly, custom code, your network configuration, and third-party integrations that use the old URLs require updates. To ensure a smooth transition to your new URLs, update references to your old URLs."). If you disable enhanced domains, your Experience Cloud site URL reverts to its previous `ExperienceCloudSitesSubdomainName.force.com` format and it no longer uses the Experience Cloud CDN. Disabling enhanced domains can require reversing the updates outlined on [Update Your Org for My Domain Changes](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_guidelines.htm&release=264.0.0&type=5 "When you deploy a change your My Domain, your Salesforce org’s login URL and application URLs change. URLs that are dynamically constructed—for example, URLs generated via the DomainCreator Apex class—use the new URLs automatically. However, some Salesforce functionality requires an update to work with your new URLs. Similarly, custom code, your network configuration, and third-party integrations that use the old URLs require updates. To ensure a smooth transition to your new URLs, update references to your old URLs."). ## Testing Packaged-Delivered Functionality [AppExchange](https://appexchange.salesforce.com/) is the Salesforce marketplace, offering thousands of solutions and services that extend Salesforce. Through AppExchange, Salesforce and our partners offer those solutions through packages. Often those packages include functionality that references your org’s URLs. For example, a package-delivered Visualforce page can contain links to sites, content, or other Visualforce pages. In most cases, you can’t edit those package-delivered components. If you update one of those components, a future package update can overwrite your changes. We recommend that package developers use relative paths or dynamically generated host names to build links. If they follow that approach, updated links work after a My Domain change, such as enabling enhanced domains. However, it’s possible that a package developer included a hard-coded link in their package. If you find an issue with components or functionality delivered by a package, contact the package developer. Make them aware of the issue so that they can publish a new version of their package that works with enhanced domains and partitioned domains. ## Third-Party Cookie Errors Enhanced domains comply with browser settings that block third-party cookies, otherwise known as cross-site resources. However, in certain scenarios, you can still see errors related to cross-domain and third-party cookies in Salesforce, even when enhanced domains are deployed. To avoid these errors, we recommend that you use Lightning Experience. Also, let your users know that they can receive a warning that requires them to open the page in another tab or window, especially on older Setup pages. For more information on the conditions that can cause these errors, see [Why Enhanced Domains](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_enhanced_why.htm&release=264.0.0&type=5 "When you deploy enhanced domains, most of the application URLs for your Salesforce org change. Those changes require testing and impact public links, such as Experience Cloud sites. Understand why Salesforce requires that all customers adopt this new standard, and learn how enhanced domains meet the latest browser requirements."). ## Disable Enhanced Domains Now that enhanced domains have been enforced, you can’t disable the feature. ## Potential Impact If enhanced domains aren’t deployed in your Salesforce org before Salesforce deploys the feature for you, here are some issues that can arise. - Users can experience errors when attempting to access Salesforce, including but not limited to Experience Cloud sites, Salesforce Sites, and Visualforce pages. - Some embedded content stored in Salesforce no longer appears. - Third-party applications can lose access to your data. - Single sign-on integrations with sandboxes can fail. - Single sign-on integrations with orgs using the \*.cloudforce.com and \*.database.com domain suffixes can fail. To avoid these issues, we recommend that you test and deploy enhanced domains in a sandbox and deploy enhanced domains in production before Salesforce deploys the feature for you. For more information about what happens in each release, see [Enhanced Domains Timeline](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_enhanced_timeline.htm&release=264.0.0&type=5 "To prevent disruption for your customers and users, review the enhanced domains timeline and prepare for upcoming changes. Redirections for legacy host names stopped in production and demo orgs in Spring ’26. And in Winter ’27, Salesforce ends support for API traffic that uses an incorrect instanced URL."). #### See Also - [My Domain](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_overview.htm&release=264.0.0&type=5 "Showcase your company’s brand with a customer-specific subdomain name in your Salesforce org URLs. With My Domain, you can include your company name in your URLs, for example, https://mycompany.my.salesforce.com. With these org-specific URLs, you can set up a custom login page, set a custom login policy, offer single sign-on, and allow users to log in with a social account. My Domain also allows you to work in multiple Salesforce orgs in the same browser at the same time.") # Considerations for Google Chrome Salesforce supports the latest stable version of Google Chrome. The Use Strict Site Isolation setting in Chrome can cause some Salesforce features not to work. Disable the setting to restore the features. # Considerations for Granting Access Here’s some important information about sharing documents and folders with other users. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
- If a user already has access to a document or spreadsheet through a shared folder, you can increase their access at the document level. - If a user has access to a document or spreadsheet through multiple sources, the access level granted at the document level takes precedence. For example, if a user has Comment access at the document level, but Edit access from link sharing, the user has Comment access. - A user with Full Access to a document can revoke another user’s access to the document at the document level. However, users can have access to a document through multiple mechanisms, like document level access and access through a shared link. Revoking access at the document level doesn’t revoke access obtained by other means. - A user can only decrease their own access level, and they can’t increase it again for themselves. - If the only user with Full Access permissions on a document leaves your organization, contact Salesforce support for help. - You can restrict access to a subset of documents in a folder by putting them in a subfolder with different sharing settings than the parent folder. # Considerations for Inline Editing in a List View in Lightning Experience Consider these points when editing fields on records directly from a list view in Lightning Experience. These considerations also apply when editing records in a multiline layout in Lightning Experience. ### Required Editions ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_important.png) Important Where possible, we changed noninclusive terms to align with our company value of Equality. We maintained certain terms to avoid any effect on customer implementations.
Available in: Lightning Experience
Available in: All editions
## General Not all fields on records in a list view or multiline layout view can be inline edited. To find out whether a field supports inline editing, hover over it and look for the pencil ![Pencil icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/resources-global/_corporate/images/pencil.png). Non-editable cells have a lock ![Lock icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/lock_120.png). When making inline edits in a list view, required fields can’t be left blank. - By default, list views and multiline views that contain more than one record type aren’t inline editable. To inline edit across multiple record types, select **Make inline edits in list views with multiple record types** in User Interface Settings. Otherwise, filter your list view to contain only one record type. The exception is Pipeline Inspection, which supports inline editing across multiple record types by default. - Inline edit doesn’t apply to components in the small region. - You can inline edit in Recently Viewed or Team list views that are predefined to contain only one record type. You can also edit tasks on the tasks object home page even though they’re not in a list view. - You can’t inline edit in split view. - If Enable Automated Account Fields in Account Settings is enabled, you can’t inline edit Account Name. - Your changes show in the list view as soon as you finish an inline edit. However, so that you can review your changes and fix errors if needed, any filters applied to the list view don’t apply automatically to your inline edit. To apply the filter criteria to the updated record, refresh the page. - In list views rendered with Lightning Web Components (LWC), a number field can store more decimal places than it’s configured to show. For example, if you enter 90.678 in a number field that accepts two decimal places, the list view displays 90.68, but the full value of 90.678 is saved in the database. If you inline edit the same field later, you see the saved original input of 90.678. In list views rendered with Aura, if you enter 90.678 in a number field that accepts two decimal places, the value is saved and displayed as 90.68. - In orgs that use the Thai locale, the list view displays a date format with the Gregorian year. However, the date picker uses the Buddhist Era year. For example, when the list view shows 31/10/24 in Gregorian year format, the date picker that appears during inline edit shows 31/10/2567 in Buddhist Era format. - Disabling the Mass Edits from Lists user permission prevents a user from mass editing list views only in Salesforce Classic. If all other configurations and permissions allow it, then the user can still mass edit list views in Lightning Experience. ## Fields and Field Types Not Inline Editable These fields and field types aren’t inline editable. - Built-in fields like Record ID or Created Date (never editable from the user interface) - Compound fields including Name, address fields, and geolocation fields. To inline edit names, use the First Name and Last Name fields. - Controlling or dependent picklists. If you have access to the controlling picklist field but not the dependent picklist field, the controlling field is inline editable. - Custom date/time fields - Encrypted text fields on some objects. Encrypted text fields are editable only when the object’s list views render with Lightning Web Components (LWC). - For orgs with person accounts enabled, if your list view is filtered by the Person Account record type, the Account Name field isn’t inline editable. If your list view is filtered by the Business Account record type, Account Name is inline editable. By default, if your list view includes multiple record types, no fields are inline editable. Selecting **Make inline edits in list views with multiple record types** in User Interface Settings lifts this restriction, but your list view must still be filtered to include only Person Account records or to exclude Person Account records for inline editing to work. - Formula fields - Standard fields of type date/time, auto number, rollup summary, record type, master-detail, rich text, checkbox, or hierarchy - By default, fields that aren’t on the page layout—including fields added to a Dynamic Forms-based Lightning page—aren’t inline editable. To make these fields inline editable regardless of page layout, select **Remove list view inline edit dependencies on page layout** in User Interface Settings. ## Fields on Objects Not Inline Editable The fields aren’t inline editable on these objects.
Object Fields Not Inline Editable
Campaign Parent Campaign
Document All Fields
Event All Fields
Opportunity
    • Amount
    • Expected Revenue
    • Forecast Category
    • Probability
    • Quantity
Price Book
  • Active Field
  • Description
  • Price Book Name
Task
  • Name
  • Private
# Considerations for Link Sharing When you turn on link sharing for a document or folder, keep these points in mind. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
- The link is enabled for all users in your organization. - When a user opens the folder from the link, they become a member of the folder and have view, edit, and share access. - When a user becomes a member of the folder, they become members of the documents in the folder. - When you turn on link sharing for a folder, it doesn’t turn on link sharing for the documents in the folder. - If link sharing is turned off, new members can’t be added to the folder using the link. Existing members remain members and retain their access. # Considerations for List Views and Related Lists When you work with list views and related lists, keep these supported functionality, usage, limitations, and other considerations in mind. ## List Views - List views can’t be sorted by encrypted fields. - List views don’t automatically refresh after inline edits. - Your current locale determines a list view’s sort order. - If you have more than 2 million Salesforce users, you can’t sort list views for the Users object. - Text fields are sorted one character at a time, so text fields containing numbers can appear out of order. For example, Unit 1,000 comes before Unit 999 because 1 is before 9. - Checkboxes appear only on lists with mass actions or inline editing. By default, inline editing requires a list view to be filtered to a single record type. To inline edit across multiple record types, select **Make inline edits in list views with multiple record types** in User Interface Settings. Otherwise, edit your list view filters so the list contains only one record type. - Sometimes all the results for a set of filters are too large to calculate and display in a reasonable time period. Use more filters and more restrictive criteria so there are fewer records to check. - List views that render with Lightning Web Components (LWC) can have a time to live (TTL) of up to 30 seconds. This means that if you update a record, its changes can take 30 seconds to appear in a list view. To see fresh data faster, click ![Refresh](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/refresh_120.png). - Creating list views, editing existing list views, and searching within list views aren’t supported when accessing Experience Cloud from a mobile browser. - Long text area fields, such as Description, aren't supported as list view filter criteria or as columns in the list view. You also can't filter a list view by a rich text field or a formula field. - You can select up to 200 records in a list view at a time. - So that you can easily test and adjust the effects of a list view modification, the ![Charts](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/chart_120.png) and ![Filters](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/filterList_120.png) panels don’t trap focus when you navigate them by keyboard command. This means that when you reach the end of a panel, focus continues down the page and doesn't return to the top of the panel. To return to either panel from the list of records, or to return to the action bar from within a panel, use the key combination Shift+Tab. - If sort by multiple columns is enabled, then the option to reset column sorting is always available, even if you haven’t changed the list view’s sort order. - You can sort by multiple columns only on list views for objects that render with Lightning Web Components (LWC). If you don’t see ![Column sort](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/multisort_120.png), then sort by multiple columns isn’t supported for that list view. - Search terms entered in the list view search box don’t persist when you switch between list displays, such as from the standard table view to the kanban view. - List views can be shared with groups, roles, and territories only, not specific users. - With the Manage Shared List Views user permission, a user can remove a group from the list view’s sharing settings only if they're a member of that group. Also, a user with this permission can delete a list view or change it to private only if they're a member of all groups with which the list view is shared. ## Related Lists - Related lists can’t be sorted by encrypted fields. - Related lists that render with Lightning Web Components (LWC) can have a time to live (TTL) of up to 30 seconds. This means that if you update a record, its changes can take 30 seconds to appear in a related list. To see fresh data faster, click ![Refresh](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/refresh_120.png). - Your Salesforce admin controls the initial sort order of related lists, but your preferences override theirs. If you sort the related list on a different field or in a different order, your sort order is preserved the next time you view the list. - When you go to certain related lists from a bookmark or shared URL, if you haven’t viewed the list before, you’re redirected to the record detail page. To see the entire list, click **View All** again. - If you can’t drag documents to add them to Files or Notes & Attachments related lists, ask your Salesforce admin to update the related list type in the Lightning App Builder. - To add quick filters on the Account Record Type field in Account related lists, enter field values manually. Account Record Type field values aren’t available for selection in a dropdown list for related list quick filters. - Long text area fields, such as Description, aren’t supported as filter criteria or as columns in the related list. - You can select up to 200 records in a related list at a time. - You can sort by multiple columns only on related lists for objects that render with Lightning Web Components (LWC). If you don’t see ![Column sort](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/multisort_120.png), then sort by multiple columns isn’t supported for that related list. - If you sort a related list by multiple columns and then click the header of a column, your related list updates to sort by only the single column that you clicked. To reconfigure multiple-column sorting, return to the related list’s View All page. - When you hover over a related list quick link, the preview uses single-column sorting. You can’t apply multiple-column sorting to the preview. - In some cases, content from a rich text field on a record, such as a URL or hyperlinked text, shows as plain text when viewed in a related list. In general, content from a rich text field is more likely to show as rich text if the related list renders with LWC. - To prevent rendering issues, certain rich-text capabilities, like images and line breaks, aren't supported in list views or related lists. ## List Views in the Salesforce Mobile App Not every Lightning Experience feature is in the Salesforce mobile app. Consider these differences for list views. - Creating list views or editing existing list views isn’t supported. - Editing a record’s field in a list view isn’t available. Instead, users can open the record, and then tap the **Edit** action. - Selecting multiple records in list views isn’t supported. - Mass actions, which are used to apply an action to multiple records at the same time, aren’t available. - List views aren’t automatically updated. To see a new record, refresh the list by pulling down on the page. - Kanban and split view aren’t supported. - Some filter functionality for list views is limited on the Salesforce mobile app, including: - You can’t see or change existing list view filters, but to further narrow records, you can apply additional filters. These filters affect only your view in the mobile app and don’t impact list view data for other users. - Each filter in the mobile app supports only one operator. These operators can’t be changed. - Filters on checkbox, email, phone, picklist, text area, and URL field types use the equals operator. Filters on most other text field types use the contains operator. - To filter a list view by an address, you filter on individual address components. Most address field filters use the contains operator, but Street field filters use the equals operator. ## Related Lists in the Salesforce Mobile App Not every Lightning Experience feature is in the Salesforce mobile app. Consider these differences for related lists. - Related lists display the first four fields that are defined in the Related List section on an object’s page layout. The number of fields shown can’t be increased. - Related lists aren’t automatically updated. To see a new record, refresh the list by pulling down on the page. - Some related lists aren’t available in the mobile app, including: - Content Deliveries - External Sharing - Related Content - List buttons aren’t supported for some related lists, including: - Open Activities - Activity History - Approval History - Contact Roles - Partners - The Notes & Attachments related list isn’t fully supported. There are several issues, including: - Attachments added in the full Salesforce site aren’t guaranteed to open in the app, even if they appear in the related list. We recommend using Files instead. Documents that are uploaded to the Files tab in the full site are then viewable. - You can’t add or delete notes or attachments from the related list. But you can create a note and relate it to a record, using the Note (![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/noteQuickActionIcon.png)) action in the action bar. This action isn’t available for all objects, depending on how your Salesforce admin configures Notes. - Notes and attachments on child records don’t appear on the parent record’s related list. - Uploads using Files related lists aren’t supported. - If a related list is sorted by a text area field, it doesn’t display any records. #### See Also - [Considerations for Inline Editing in a List View in Lightning Experience](https://help.salesforce.com/s/articleView?id=xcloud.basics_customviews_lv_lex_considerations.htm&release=264.0.0&type=5 "Consider these points when editing fields on records directly from a list view in Lightning Experience. These considerations also apply when editing records in a multiline layout in Lightning Experience.") # Considerations for List Views in Quip As you add the Salesforce List live app to your documents, keep in mind these considerations. ## New Records You can’t create a record from a list view in Quip. ## Limits The Salesforce List live app version 1.4.0 and later include these limits. - Record Lists can include a maximum of 1,999 records. - Related Lists can include a maximum of 500 records. If you exceed a limit, a warning message appears. You can see the version of the live app in the Salesforce List menu. Version 1.4.0 was released in April 2022. Prior versions of the Salesforce List live app support a maximum of 4,000 records. ## Template Related Lists - Some related list types aren’t available in List Mode and must be added via Manual Mode. Reasons include: - The object isn’t set up as a related list in the selected record’s layout. - The authenticated user doesn’t have access to this data. - The UI API isn’t returning the data, possibly because it doesn’t support the related list type. ## Filters - You can filter a field by a string, picklist, or numbered range value. - String value filters use “includes” filter logic. - Picklist value filters use “exact match” filter logic. - String value filters are case insensitive. - You can add filters only to a list view with loaded Salesforce data. Filters in Quip aren’t dynamic and can’t be added to a templated list view. - You can apply filters only to visible fields. - Removing a field from a list view removes the field’s filter. - Filters added in Quip aren’t saved in Salesforce. - Filters applied to a list view are visible to all users with access to the document. Filters aren’t specific to the viewing user. - If Mirrored Salesforce Permissions are enabled, users without access to a field can’t see or edit filters added to it. - You can’t add or update filters on mobile. ## Locked Fields You can’t change locked fields in Quip. ## Refresh and Sync Functionality - The owner of a list view added manually to a document is the user who added it. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note Owner refers to the user whom the list view is based on. - The owner of a list view added by copying a template is the user who copied it. - The owner of a list view added using Process or Flow Builder is the first user to open the document. - When the Salesforce List live app refreshes, it uses the data that the list view owner has access to. To check who owns a list view, click **Salesforce List** in the top left-hand corner, and see which org and user the list view is connected to. - Any user can edit and comment on the list view fields in Quip. Only users with access to the fields in Salesforce can sync edits to Salesforce. - A list view owner can choose to discard or save changes made by non-owners. # Considerations for Live Paste When using Live Paste, keep these considerations in mind. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
- Live Paste doesn’t support: - Live Apps - Content from within the same document - When you Live Paste a multi-column layout from a source document, the content appears in a single column in the reference document. - Live Paste content containing people @mentions only sends notifications related to the source document. # Considerations for Managing Objectives for Joint Business Plans Before you create or edit objectives for joint business plans, review how records are selected, when scheduled jobs update them, and how eligible records are automatically linked or unlinked. ## Record Visibility and Scheduled Jobs When Records is enabled, only records that are shared with the partner user appear in objectives. Each objective uses two scheduled jobs that run once every 24 hours. One job updates the current value. The other job automatically links qualifying records and unlinks records that no longer qualify. ## Manual Record Selection You can manually link or unlink a total of up to 50 records for an objective at a time. For example, you can link 10 records and unlink 40 records in one update. To change more than 50 records, save the objective, and then edit it again to make additional changes. Even when Automatic Qualifying Record Management is enabled, you can manually select and deselect records while creating or editing an objective. Records that you manually select aren't automatically linked or unlinked by the scheduled job. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-partner_cloud-264-0-0-production-enus/cd9c08c3-2648-4867-ab9d-a0251a8a86a5/images/icon_note.png) Note Don't select a record when you create an objective. If you select one, the scheduled job doesn't remove it if the record no longer qualifies. ## Automatic Record Management When Automatic Qualifying Record Management is enabled, records qualify if they meet all these criteria: - They're shared with the partner user. - Their last modified date falls between the objective start and end dates. - They qualify for the calculation definition. A scheduled job runs every 24 hours to link or unlink records based on their eligibility. Records can change after you last review them. Before enabling Automatic Qualifying Record Management, make sure that the objective start and end dates are 1 through 90 days apart. ## Update Timing When you edit an objective, the timing of updates depends on how many records qualify. - If 50 or fewer records qualify, including manually selected and automatically selected records, the current value updates immediately. The records are linked the next time the scheduled job runs. - If more than 50 records qualify, the current value updates a few hours after the scheduled job links the qualifying records. Check the current value's last modified time to estimate when the next scheduled job runs. # Considerations for Microsoft Edge and Edge Chromium Salesforce supports the latest stable version of the Chromium version of Microsoft Edge for Salesforce Classic and Lightning Experience. Salesforce supports Microsoft Edge Chromium only on Windows. Internet Explorer Compatibility Mode in Microsoft Edge isn’t supported. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_important.png) Important Support for the non-Chromium version of Microsoft Edge in Lightning Experience and Salesforce Classic ended on December 31, 2020. ## How do I know which version of Edge I have? The Microsoft Edge Chromium browser uses the ![Edge Chromium icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/edge_chromium.png) icon, while non-Chromium Edge uses the ![non-Chromium Edge icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/edge_legacy.png) icon. ## Considerations for Microsoft Edge (Non-Chromium) The developer console doesn’t support Microsoft Edge. # Considerations for Microsoft Internet Explorer Salesforce ended support for Internet Explorer 11 in Lightning Experience and Salesforce Classic on December 31, 2022. Ending support for Internet Explorer 11 creates opportunities for Salesforce to focus on building our products using modern web technologies. For more information, see [_Salesforce Developers' Blog_: Ending support for IE11 on the Lightning Platform](https://developer.salesforce.com/blogs/2022/06/ending-support-for-ie11-on-the-lightning-platform). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_important.png) Important As of December 31, 2020, when using Lightning Experience in IE11, a permanent banner displays in your Salesforce org indicating that you're on an unsupported browser. IE11 has [significant performance issues](https://help.salesforce.com/apex/HTViewSolution?urlname=Internet-Explorer-Performance-Characteristics-for-Lightning-Experience&language=en_US) in Lightning Experience. To use Lightning Experience or Salesforce Classic, we recommend that you use the latest stable version of a supported browser. # Considerations for Mobile Builder for Agentforce (Beta) Keep these limitations and known issues in mind when using this feature. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_important.png) Important Mobile Builder for Agentforce is a pilot or beta service that is subject to the Beta Services Terms at Agreements - Salesforce.com or a written Unified Pilot Agreement if executed by Customer, and applicable terms in the Product Terms Directory. Use of this pilot or beta service is at the Customer's sole discretion. ## Apex Action Requirements | Limitation | Impact | Recommendation | | --- | --- | --- | | Nested or object-type output fields aren't supported. | The builder shows the field name as selectable, but mobile devices don't show anything for that field. | Use only simple field types in your Apex output (`String, Integer, Boolean, Decimal`). Keep the output flat, without any nested objects. | | Only Apex invocable actions that return a list are supported. | Apex actions that return a single flat object (not wrapped in a list) can't be configured in the builder. | Structure all Apex actions to return a list, even when only one item is expected. | | The **Show in Conversation** setting is ignored. | If you don't select **Show in Conversation** on the output variable, the action shows in the builder but can't be saved correctly. | Always select **Show in Conversation** on your Apex output variable. | ## Display | Limitation | Impact | Workaround / Guidance | | --- | --- | --- | | A red error may appear when adding an external image asset. | If your org doesn't have a third-party digital asset manager configured, the image selector shows a misleading error even though the image was added successfully. | Disregard the error. The image is added to your customization successfully. | ## Other Considerations - Deploying an Apex class with `@InvocableMethod` isn't sufficient on its own. After the Apex class is deployed, register it as an Agentforce Action of type Apex: 1. From Setup, enter Agentforce Assets in the Quick Find box and select it. 2. Click the Actions tab, then click New Agent Action. 3. In the modal, set Reference Action Type to `Apex`. 4. Set Reference Action Category to `Invocable Methods`. 5. Set Reference Action to your Apex class. 6. Click Next and complete the configuration. The Agentforce SDK responds with Agentforce Actions, which can be of different types (for example, Apex or Flow), so an unregistered Apex class won't be surfaced by the agent or appear as a selectable action in Mobile Builder for Agentforce. - Image URLs using authentication don't display for guest users. Make sure image URLs are publicly accessible. Add CMS images in a public channel. For external image links, add the domain to Trusted URLs in Setup. - Only one mobile customization is allowed per Agentforce action, and it is applied to all users accessing the Salesforce mobile app and external apps using the Agentforce Mobile SDK. To make changes, edit the existing customization. - An in-builder preview isn't available in beta. Publish your customization and test on a mobile device to verify the layout. - Only top-level fields from your Apex action's output appear as selectable fields in the builder. Keep the output flat. - References to nested data fields aren't supported in beta. - Mobile customizations apply to how Agentforce action responses are displayed only. User input isn't customizable. # Considerations for Mozilla Firefox Salesforce makes every effort to test and support the most recent version of Firefox. However, Lightning Experience currently doesn't support Private Browsing. Configure advanced preferences to maximize performance in Salesforce Classic. 1. Type about:config in the browser’s location bar, and press Enter. 2. If a warning displays, click **I'll be careful, I promise!** 3. Search for the following preferences and set them to the recommended value by double-clicking the preference name. Changes take effect immediately. 4. Enable tab focus on text fields, form elements, and links by setting this accessibility preference. | Preference | Recommended Value | Default Value | | --- | --- | --- | | accessibility.tabfocus | 7 | 1 | 5. Change how the browser retains common resources across requests by setting these caching preferences. | Preference | Recommended Value | Default Value | | --- | --- | --- | | browser.cache.check\_doc\_frequency | 3 | 3 | | browser.cache.disk.capacity | 50,000 or more; increase to use more hard disk space | 50,000 | | browser.cache.disk.enable | True | True | | browser.cache.disk\_cache\_ssl | True | False | | browser.cache.memory.enable | True | True | 6. Change how the browser retains common resources across requests by setting these caching preferences. You can set some of these preferences by clicking **Tools** | **Options** in the Firefox browser. Refer to [Firefox Help](http://support.mozilla.com) for details. Setting privacy.sanitize.sanitizeOnShutdown to “True” causes the cache to clear when Firefox shuts down. This increases privacy, but can decrease performance. To view the contents of your cache, type about:cache in the Firefox location bar and press Enter. Refer to [MozillaZine Knowledge Base](http://kb.mozillazine.org) and [Firefox Support Home Page](http://support.mozilla.com) for more information on these and other preferences. # Considerations for Named Credentials Keep these considerations in mind when configuring or working with named credentials. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: all editions
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important These considerations don’t apply to legacy named credentials. In Winter ’23, Salesforce introduced an improved named credential that’s extensible, customizable, and more secure. We strongly recommend that you use this preferred credential instead of legacy named credentials. ## Sandboxes Sensitive values in named credentials—including access tokens, API keys, and passwords—aren't copied from production environments when you create, refresh, or clone a sandbox org. The named credential parameters and external credential parameters from the production org are included so that you don’t have to recreate them manually in sandboxes. But user external credentials from the production org, which store the encrypted access tokens, aren’t included in cloned or refreshed sandboxes. For example, authentication parameters on an external credential's principal, such as an API key and value or a client ID and client secret, aren’t available in the sandbox. Not including user external credentials in a cloned or refreshed sandbox ensures that the sandbox isn’t connected to external production environments automatically. To test callouts after you create, refresh, or clone a sandbox, you must authenticate or enter credentials for a non-production environment in the external credential. We also recommend reviewing the named credential’s URL to make sure that you’re using the right endpoint for callouts to non-production environments. ## Org Migrations These parts of a named credential are included in org migrations from one instance to another. - Named credential - External credential - Named credential parameters - External credential parameters - User external credentials Because the user external credentials that store encrypted access tokens are included in the migration, Salesforce admins and users don’t reauthenticate to external systems. Users can still use named credentials to make authenticated callouts in the org’s new instance. ## Setup Audit Trail The Setup Audit Trail logs when named credentials and external credentials are created, updated, and deleted in your org. New and changed parameters on named credentials and external credentials are also tracked. For security reasons, the authentication parameters on external credential principals aren’t stored as metadata. The Setup Audit Trail can’t track what changes are made to these parameters or who made the change. #### See Also - [Named Credentials](https://help.salesforce.com/s/articleView?id=xcloud.named_credentials_about.htm&release=264.0.0&type=5 "Intended to secure and simplify authenticated API callouts to external systems, a named credential specifies the URL of a callout endpoint and its required authentication parameters in one definition. To streamline your Apex code and simplify the setup of authenticated callouts, specify a named credential as the callout endpoint.") - [Create Named Credentials and External Credentials](https://help.salesforce.com/s/articleView?id=xcloud.nc_named_creds_and_ext_creds.htm&release=264.0.0&type=5 "To simplify the setup of authenticated callouts, create an external credential to specify an authentication protocol and then specify a named credential as the callout endpoint. Add custom headers to cover more use cases and security requirements. Use a permission set or profile to grant access so that users can make authenticated callouts. You can create and configure named credentials programmatically or through the Salesforce UI.") # Considerations for Navigation Consider these points when navigating Salesforce. ## Lightning Experience on iPad Safari Setup isn’t supported, including anything accessed from the Setup Menu![Setup gear icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/lex_setup_gear.png) and Setup Home, like Lightning App Builder and Flow Builder. ## Salesforce Mobile App Not every Lightning Experience feature is in the Salesforce mobile app. Consider these differences. - On mobile devices, the Salesforce mobile app is supported in portrait orientation only. In Spring ’23, an opt-in beta allows for use of the Salesforce Mobile App in landscape orientation, with numerous known issues. - When using Salesforce for Android and Salesforce for iOS on tablets, both portrait and landscape orientation are supported. - The mobile browser app interface does rotate into landscape orientation but isn’t guaranteed to work in this orientation. - The Lightning Experience utility bar isn’t available in the Salesforce mobile app. # Considerations for Packaged External Client Apps with the Mobile, Notification, or Push Notification Plugin Learn the considerations for an external client app configured with the mobile, push notification, or notification plugin. ### Required Editions
Available in: Lightning Experience
Available in: Professional, Performance, Unlimited, and Developer Editions
If you installed an external client app with a managed package, note these considerations. - If you installed an external client app without the mobile plugin enabled, you can’t enable the mobile plugin after creation. - If you installed an external client app without the notification plugin enabled, you can’t enable the notification plugin after creation. Without the notification plugin enabled, you can’t subscribe the mobile app to custom notification types. # Considerations for Partner Cloud Get to know the potential caveats for Partner Cloud before you set up and start using Partner Cloud. ### Required Editions
Available for channel managers in Salesforce Classic and Lightning Experience in Enterprise, Performance, Unlimited, Developer Editions with Sales Cloud or Service Cloud. You must have at least one PRM add-on license.
Available for partners in supported Experience Cloud sites, accessed through Lightning Experience in Enterprise, Performance, Unlimited, Developer Editions with Sales Cloud or Service Cloud. A PRM add-on license is required for each partner user.
## Permission Sets for Enhanced List Views Partners can see records that are assigned to other partners who fall below them in the External Account Hierarchy of their site prior to assigning permission sets, assuming the partner has at least Read access to the record’s corresponding object. But partners can't see where in the hierarchy partners are positioned. The Contact Intelligence View for Partners, Lead Intelligence View for Partners, and Pipeline Inspection for Partners permission sets include the View Roles and Role Hierarchy permission. This permission gives partners visibility into the hierarchy of the partners that fall below them. ## Unavailable Enhance List View Features These Contact Intelligence, Lead Intelligence, and Pipeline Inspection features aren’t available for partners from the Enhanced List View component in Experience Cloud sites. - Account Insights - Einstein Activity Capture and features that required it, such as Email Insights and Activity Metric - Einstein Conversation Insights and features that require it, such as Conversation Insight. # Considerations for Partner Success Agent Before setting up the Partner Success Agent, consider supported functionality, usage, limitations and allowances, limits, and other issues. All the considerations for [Agentforce Service Agent](https://help.salesforce.com/s/articleView?id=ai.service_agent_considerations.htm&language=en_US) apply to the Partner Success Agent. ## Other Considerations - Don't create or update records when the org is in maintenance mode or read-only database mode. Partner Success Agents can currently bypass this restriction due to a known issue. A fix is in progress to align behavior with the expected limitation. - Adaptive Response for Agent is turned on by default for all newly created Partner Success Agents. When active, it overwrites the UI for messages inside MIAW Chat components, which can prevent partners from experiencing the intended behavior. To address this, turn off Adaptive Response before you activate the agent. If the agent is already active, deactivate it first, and then turn off Adaptive Response. - [Enforce Trusted URLs.](https://help.salesforce.com/s/articleView?id=005135034&type=1&language=en_US) # Considerations for Payout Periods Review these considerations when you define payout periods for a rebate program. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Rebate Management enabled.
- If the payout frequency of the rebate program is Custom, you can’t generate payout periods automatically. Create each payout period with start and end dates of your choice. - You can’t generate payout periods automatically when a rebate program is in Active status. However, you can create payout periods manually. - The names of the generated payout periods are shown in the Frequency Fiscal Year format. For monthly, quarterly, and yearly programs, the names of the periods are according to the program’s frequency and fiscal year of your org. For biannual programs, the names are according to the period start and end dates. - Total Approved Amount, Total Rejected Amount, and Number of Member Payouts are read-only fields. The application auto-populates the values in these fields based on the transactions in an active payout period. These fields are derived and computed via SOQL at sync time. Syncing this object via a Data Manager connection can result in a QUERY\_TIMEOUT error in orgs with large data volumes (~25,000+ records). See [Considerations and Limitations for Rebate Management](https://help.salesforce.com/s/articleView?id=xcloud.rebates_limits.htm&type=5&language=en_US). - When you create a payout period, the Last Calculation Date and Payout Amount fields aren't populated. You can view these details when the payout is calculated for the period. The application updates the payout amount whenever the scheduled flow runs. # Considerations for Price Protection Review the considerations to run a successful price protection program. - Timeframes: Claims must fall within the start and end dates of the price protection program. - Inventory Records: Make sure the Partner Unsold Inventory is accurate and up-to-date before submitting claims. - Automated Processes: Use BRE and DPE workflows to streamline claim validation and calculation. # Considerations for Privacy Center Data Retention When you process Salesforce records with Data Management or Right to Be Forgotten policies, you can copy the records to an external data store for retention. Review these guidelines and limitations when implementing data retention with Privacy Center. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Privacy Center license.
This topic applies to Privacy Center on the Salesforce platform, released in Winter ’24. For the managed-package version of Privacy Center that uses Heroku for retention, see [Legacy Privacy Center: Satisfy Customer Requests and Data Privacy Laws](https://help.salesforce.com/s/articleView?id=xcloud.privacy_center.htm&type=5&language=en_US). ## How to Configure Data Retention The data retention setup is available when you add an object to a Data Management or Right to Be Forgotten policy. You can select retention options after applying mask or deletion rules to the object’s records. For detailed instructions, see [Retain Records on an Object](https://help.salesforce.com/s/articleView?id=xcloud.retention_data_management_policies.htm&release=264.0.0&type=5 "Choose whether you want to copy records to an external data store for retention."). ## Data Retention Availability Data retention isn’t available in Government Cloud. ## Limitations The record retention process converts newline and tab characters in long or rich text fields. Newline characters become `\n` or `\r`, and tab characters become \\t. As a result, retained copies don't include the original line breaks or tab spaces. If your policy includes a [formula field](https://help.salesforce.com/s/articleView?id=platform.customize_formuladef.htm&language=en_US) with an invalid formula, data retention fails, and the job session can't complete. Either correct the formula field or remove it from your policy, and then rerun the policy. ## Retention Stores Your Salesforce org creates a data retention store automatically when executing a data retention job for the first time. Alternatively, you can create a production org data retention store manually from the Privacy Center app Data Stores tab. Retention stores are built on Hyperforce infrastructure and are maintained in the same region as your Salesforce org. While you can create only one data retention store for each production org, you can create multiple sandbox data stores for development and testing. Production data stores have storage volume limits, while sandbox data stores have no storage limit. If you have a data retention store associated with your production org, you can create a sandbox store directly from your production org's UI. From the Data Stores tab, click **Create Sandbox Store**. Your sandbox store appears as a new row in the list view. To delete the data retention store that’s associated with your production org, contact Salesforce Customer Support. To view records in your retention store, use the [Salesforce Connect adaptor for Privacy Center](https://help.salesforce.com/s/articleView?id=platform.salesforce_connect_privacy_center.htm&type=5&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note Retention store usage includes stored records, files, and their associated metadata. Because metadata snapshots contribute to the total usage, the metadata table size can appear disproportionately larger than the actual record data, particularly when storing a small amount of data. ## Data Encryption Privacy Center retention data is stored in the nearest Hyperforce region to your org instance and is fully integrated and compliant with Salesforce’s security and data classification policies. All data transfers use the TLS 1.3 security protocol, and data is encrypted at rest using the AES-256 algorithm. Your retained data never leaves the Salesforce trust boundary. # Considerations for Private Connect with AWS Before provisioning an inbound or outbound connection with an AWS VPC (Virtual Private Cloud), check these considerations. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
## Required User Permissions Users who aren’t admins can modify inbound and outbound Private Connections using the Tooling, Metadata, and Connect APIs. They can also use third-party tools that are built on these APIs, such as Amazon AppFlow. But before users can use these APIs or tools to modify Private Connections, they must be assigned these user permissions. - Allow user to modify Private Connections - Modify Metadata Through Metadata API Functions Enable these user permissions by creating or modifying a [permission set](https://help.salesforce.com/s/articleView?id=platform.perm_sets_overview.htm&language=en_US) and assigning it to the user. In Setup, these permissions are listed in the System Permissions section of the Permission Sets page. Creating a separate permission set with these permissions is useful for users who use third-party tools to modify Private Connections but don’t need other administrative permissions. ## Current Availability For a list of the supported AWS regions, see this [knowledge article](https://help.salesforce.com/s/articleView?id=000396845&type=1&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note The AWS Regions dropdown in the Private Connect Setup page shows only the regions that your Salesforce org can access. If you don’t see your targeted VPC region in the dropdown, contact AWS support to discuss the best network architecture options. Private Connect inbound supports only port 443 (HTTPS). Private Connect inbound doesn’t support port 8443, because that port is used by mTLS. Private Connect is a platform-level network capability. Any Salesforce cloud or managed package that routes callouts through named credentials is supported, including but not limited to: - Communications Cloud - Experience Cloud - Financial Services Cloud - Health Cloud - Platform Cloud - Sales Cloud - Service Cloud ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Private Connect also supports AppExchange Partners on each of the listed clouds. Supported Salesforce Features - Inbound: All supported public APIs - Outbound: - Agent Actions backed by External Services - Apex Callouts - Change Data Capture - External Services - OData 4.01 Adapter for Salesforce Connect - Platform Events - Salesforce Connect Custom Adapter - Salesforce Connect SQL Adapter for Amazon Athena - Salesforce Connect SQL Adapter for Snowflake - CRM Analytics Unsupported Salesforce Features - [Locked sessions to the IP address from which they originated](https://help.salesforce.com/articleView?id=admin_loginrestrict.htm&type=5&language=en_US) - [Asynchronous callouts with Apex continuations](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_continuation_overview.htm) ## Licensing Each Private Connect license allows for one provisioned connection in each direction, inbound and outbound. Each connection represents a one-to-one mapping between an org ID and a VPC Endpoint ID. Every provisioned connection requires a Private Connect license. For example, four inbound connections require four licenses, leaving four available outbound connections. There’s a per-org limit of 1,000 connections per direction. Connections in an unprovisioned state don’t count toward your license. ## Rate Limits The data rate limit is managed on an hourly basis. Data doesn’t roll over after an hour or accumulate. Rate limits are managed separately for inbound connections and outbound connections. - Inbound connections are used by tools like MuleSoft or Amazon AppFlow to call in to the standard enterprise APIs. - Outbound connections are used by Apex code or platform tools like Flow and External Services to fetch data from external systems. The initial license purchase entitles the org to 225 MB of data per hour. Usage is expressed in hourly terms because the `PrivateConnectOutboundCalloutHourlyLimitMB` limit returned by the [Limits API](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_limits.htm) allows you to track the remaining outbound allocation on a per-hour basis. If you reach the outbound connection limit, outbound traffic stops until the counter resets at the beginning of the next hour. The inbound connection limit is contractual, not technical. You must monitor and enforce the inbound connection limit for your Salesforce org. Standard enterprise API limits also apply to inbound connections. Contact Salesforce to purchase a separate add-on license for more data. Outbound connections can’t transfer more than 56.48 GB of data per hour. | Direction | Default Rate Limit Per Org Per Hour | Max Rate Limit Per Org Per Hour | | --- | --- | --- | | Inbound | 225 MB | 56.48 GB | | Outbound | 225 MB | 56.48 GB | ## Sandbox, Scratch Org, and Developer Org Limitations | Environment | Limitations | | --- | --- | | Full and Partial Copy Sandboxes | Private connections aren’t copied from production orgs and must be recreated in sandbox environments. You can create and provision connections. | | Developer and Developer Pro Sandboxes | Private connections aren’t copied from production orgs and must be recreated in sandbox environments. You can create connections, but you can’t provision them. | | Scratch Orgs | You can create connections, but you can’t provision them. | | Developer Orgs | Private connections aren’t copied from production orgs and must be recreated in sandbox environments. You can create connections, but you can’t provision them. You must request a new full or partial copy sandbox by contacting your account executive. | ## Standards Compliance Private Connect maintains compliance with these standards: - ISO 27001, 27017, 27018 - SOC 2 Type II - ASIP Santé HDS - NEN 7510 - PCI-DSS If you want to build health care applications on Salesforce that comply with the US Health Insurance Portability and Accountability Act (HIPAA), contact your account executive about signing a Business Associate Addendum. See [Compliance engineered for the Cloud](https://compliance.salesforce.com/en) for more information about these standards. #### See Also - [_Knowledge Article_: Private Connect in Salesforce Government Cloud Plus](https://help.salesforce.com/s/articleView?id=000395778&type=1&mode=1&language=en_US) - [_Knowledge Article_: Troubleshoot and fix Salesforce Private Connect inbound connection issues](https://help.salesforce.com/articleView?id=000356346&language=en_US&type=1&mode=1) # Considerations for Processing Objects To achieve your data management goals more effectively, review key concepts around ordering objects and deleting data with privacy policies. And be aware of how errors or missing data can affect your implementation. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Privacy Center license.
## Configuring Multiple Objects on a Policy You can add multiple parent and child objects to a Data Management policy. Parent objects are processed in the order that they appear on the policy details page, under Active Objects. You can adjust the order by using the Up or Down arrow buttons. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note You can only add one parent object to a Right to Be Forgotten (RTBF) policy. After adding a parent object, you can configure any of its child objects by clicking **Add Child Object**. Child objects are processed before their associated parent object. ## Child Objects and Data Deletion When you delete data on a parent object, child objects with a master-detail relationship to the parent object are deleted automatically. Child objects with a lookup relationship to the parent object remain in your org, and their parent record fields are set to a null value. To delete child lookup objects, add them to your policy and specify that you want their data deleted. Policy previews and job metrics capture only the objects that are defined on the policy, as shown under Active Objects on the policy page. Records that are cascade-deleted and not part of a defined object aren’t included in the count of deleted records. To learn more about policy previews and affected records for jobs, see: - [Preview a Data Management Policy](https://help.salesforce.com/s/articleView?id=xcloud.preview_data_management_policies.htm&release=264.0.0&type=5 "Generate and acknowledge a preview of your Data Management Policy configuration. Previews estimate the number of records and files that are affected by your policy, helping you evaluate its impact on the data in your org.") - [View and Manage Privacy Jobs](https://help.salesforce.com/s/articleView?id=xcloud.view_policy_job_sessions.htm&release=264.0.0&type=5 "See details about the jobs for your Data Management and Right to Be Forgotten policies. You can also cancel, reschedule, or immediately run privacy jobs.") ## How Errors and Missing Data Affect Object Processing If a referenced object or field gets removed from your org, Salesforce updates your policy automatically so that it no longer references the missing object or field. Sometimes, a missing field can cause an entire object to be removed from your policy. You’re alerted to the change when you open the policy details page. This behavior is designed as a safety precaution to reduce the risk of unintentionally modifying or deleting records. If a top-level object has job errors and fails to process, the job stops completely, and the remaining top-level objects and their children aren't processed. This behavior avoids the risk of processing data erroneously, for example updating records that you intended to mark for exclusion in the previous step. If you don’t want to have this safeguard in place, use separate policies to process top-level objects independently. ## Object Processing Limitations These objects and data types aren't supported in Privacy Center. - External objects - Big objects - Setup objects - Unstructured data (such as data within an attached PDF) ## Search Layouts in Salesforce Classic For some objects (for example, contact point address), search layout customizations made in Lightning Experience don’t appear in Salesforce Classic. To view customized search layouts, use Lightning Experience. # Considerations for Quip in Salesforce Review some important information about products, features, and availability to get the most out of Quip in Salesforce. ### Required Editions
Available in: Enterprise, Performance, Professional, Developer, and Unlimited Editions
- **[What Is Quip in Salesforce?](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_anywhere_features.htm&release=264.0.0&type=5)** There are two Quip feature sets in Salesforce: Quip Advanced (previously Salesforce Anywhere Advanced) and Quip for Customer 360. - **[When Do Quip Features Become Available?](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_releases.htm&release=264.0.0&type=5)** Quip features become available at different times, depending on the platform. - **[Which Quip Features Work in VPC and Salesforce Sandbox?](https://help.salesforce.com/s/articleView?id=xcloud.quip_vpc_support.htm&release=264.0.0&type=5)** See what Quip Advanced features are supported in VPC or Salesforce sandbox. Enable Synced Sharing, live Salesforce data in documents, SSO, and more. # Considerations for Referenced Documents in Quip When viewing referenced documents in Quip, keep these considerations in mind. - Only the documents that you have access to appear in the References window. The list also includes the documents that are shared with you via link sharing. Documents that are shared with you via link sharing but that you haven’t opened yet don’t appear in the list. - The References button appears even if there are no links to or from the document. - The number on the References button represents only the documents that link to the current document, not the number of links within the current document. If the References button doesn’t show a number, no documents reference the current document. Or, you don’t have access to the related documents. - You can see up to 99 documents that reference the current document. The documents that were referenced most recently appear at the top of the list. - If a document includes more than one reference to the current document, it’s included in the References window only one time. # Considerations for Restoring Records from the Recycle Bin Know what happens to a record’s associations when you restore it from the Recycle Bin. ### Required Editions
Available in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
When you restore a record, Salesforce restores the record associations for some relationships. - Parent accounts (as specified in the Parent Account field on an account) - Indirect account-contact relationships (as specified on the Related Accounts related list on a contact or the Related Contacts related list on an account) - Parent cases (as specified in the Parent Case field on a case) - Master solutions for translated solutions (as specified in the Master Solution field on a solution) - Managers of contacts (as specified in the Reports To field on a contact) - Products related to assets (as specified in the Product field on an asset) - Opportunities related to quotes (as specified in the Opportunity field on a quote) - All custom lookup relationships - Relationship group members on accounts and relationship groups, with some exceptions - Tags - An article's categories, publication state, and assignments ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note Salesforce restores only lookup relationships that have not been replaced. For example, if an asset is related to a different product prior to the original product record being restored, that asset-product relationship is not restored. # Considerations for Salesforce Activities in Quip As you log your Salesforce activities from Quip, keep in mind these considerations. ## Activity Types Only the Log a Call, New Task, and New Event activity types are currently supported in Quip. ## Activity Type Fields Only the fields available in the Log a Call, New Task, and New Event Quick Actions are available in Quip. ## Mobile Support Log Activity isn’t available on the Quip mobile app. ## Document Type You can log activities only from Quip documents and spreadsheets. The Salesforce Actions cloud isn’t available from a Quip slide or chat room. # Considerations for Salesforce Classic As you use Quip features in Salesforce Classic, keep in mind these considerations. ### Required Editions
Available in: Enterprise, Performance, Professional, Developer, and Unlimited Editions
- **[Set Up the Quip Associated Documents Component for Salesforce Classic](https://help.salesforce.com/s/articleView?id=xcloud.admin_files_quip_set_up_quipcard_salesforce_classic.htm&release=264.0.0&type=5)** Let users add documents to accounts, opportunities, leads, and most other records based on standard and custom objects. # Considerations for Salesforce Edge Network Learn how to maintain access to your custom domain during the move to Salesforce Edge Network. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
## Understand the Exceptions in URL Routing When your org adopts Salesforce Salesforce Edge Network, your My Domain URLs are routed through it. However, review these exceptions. - URLs that contain your Salesforce instance name. - URLs associated with custom domains, such as https://www.example.com, that serve your org’s Salesforce sites or Experience Cloud sites and don’t use the HTTPS option: Serve the domain with your HTTPS certificate on Salesforce servers. - Salesforce sites and Experience Cloud sites with domains ending in .force.com. - URLs associated with Customer 360 Data Manager that end with .admin.salesforce-hub.com and .my.salesforce-hub.com. - URLs associated with Live Agent Chat that end with .my.salesforcescrt.com. - URLs associated with untrusted content domains. - URLs associated with orgs in Government Isolated Architecture (GIA) data centers. ## Route Custom Domains Through Salesforce Edge Network All your custom domains that serve your Experience Cloud, Digital Experiences, or Salesforce sites, such as https://www.example.com, can route through the Salesforce Edge Network. Review what’s needed to maintain domain availability based on your domain configuration option. - With the **Serve the domain with your HTTPS certificate on Salesforce servers** option, Salesforce automatically manages HTTPS delivery and routing for your domain by using Salesforce Edge Network. To determine whether your qualifying custom domain uses Salesforce Edge Network, inspect the domain’s HTTP response headers or resolve the domain name to look for references to `edge`. - With the **Use a third-party service or CDN to serve the domain** option, the routing path uses a third-party CDN. Work with your third-party provider to update the target host name. If you don’t update the target host name, your domain doesn’t get the always-on threat protection provided by Salesforce Edge Network. Third-party services use a target hostname to point your domain to your org. To find the target host name for your custom domain, from Setup, in the Quick Find box, enter `My Domain`, and then select **My Domain**. Select the custom domain. On the Domain Detail page, review the Target Hostname.Work with your third-party provider to update the target host name. If you don’t update the target host name, your domain doesn’t get the always-on threat protection provided by Salesforce Edge Network. ## Routing Considerations for Sandboxes Review how sandbox refreshes and environment inheritance affect your Salesforce Edge Network routing configurations. - Because the org ID changes, a sandbox refresh disables Regional routing. If your production org uses Regional routing, re-enable it from the My Domain Setup page after every refresh. To know more about Regional Routing, see [Route My Domain Through Salesforce Edge Network](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_edge_network_route_my_domain.htm&type=5&language=en_US). - If Global Selective Routing is required for custom domains, enable it in the production org before creating or refreshing associated sandboxes. Sandboxes inherit the production org’s routing settings for custom domains. To know more about Global Selective Routing, see [Route My Domain Through Salesforce Edge Network](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_edge_network_route_my_domain.htm&type=5&language=en_US). #### See Also - [My Domain URL Formats](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_app_url_changes.htm&release=264.0.0&type=5 "Your My Domain name is a subdomain used in login URL and application URLs across your Salesforce org, including sites and Visualforce pages. Understand what determines your org’s URL formats and the structure of those formats.") - [Custom Domains](https://help.salesforce.com/s/articleView?id=platform.domain_mgmt.htm&type=5&language=en_US) - [Route My Domain Through Salesforce Edge Network](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_edge_network_route_my_domain.htm&release=264.0.0&type=5 "Route your My Domain through Salesforce Edge Network to improve security and user experience. Salesforce Edge Network is required to ensure a consistent experience for your users regardless of their location.") - [Understand Salesforce Edge Network](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_edge_network_what_is.htm&release=264.0.0&type=5 "Salesforce Edge Network is a network technology that improves download times for users around the globe and provides security protection to Salesforce organizations. Users get a better network experience while remaining on the Salesforce trusted infrastructure, which protects, uses, and processes data appropriately and in accordance with the law.") # Considerations for Salesforce Foundations Before deploying Salesforce Foundations, make sure you review key factors that can affect your implementation. ### Required Editions
Available in: View supported editions.
- **[Setup Considerations](https://help.salesforce.com/s/articleView?id=xcloud.base_considerations_setup.htm&release=264.0.0&type=5)** When planning your Salesforce Foundations implementation, you have the flexibility to choose which features to turn on, whether it's the entire suite or a tailored subset. - **[Managing Your Salesforce Foundations Compliance](https://help.salesforce.com/s/articleView?id=xcloud.base_manage_your_compliance.htm&release=264.0.0&type=5)** If you’re using Salesforce Foundations, you’re responsible for your Health Insurance Portability and Accountability Act (HIPAA) compliance. Manage your compliance by enabling only HIPAA-ready Salesforce features and implementing them securely. - **[User Interface Settings Considerations](https://help.salesforce.com/s/articleView?id=xcloud.base_considerations_user_interface.htm&release=264.0.0&type=5)** There are important permission and navigation considerations related to enabling Quick Settings and vertical navigation. - **[Service Console Considerations](https://help.salesforce.com/s/articleView?id=xcloud.base_considerations_service.htm&release=264.0.0&type=5)** Service console is the app where customer service reps and supervisors work. Service Cloud comes with different versions of the service console. - **[Marketing Considerations](https://help.salesforce.com/s/articleView?id=xcloud.base_considerations_marketing.htm&release=264.0.0&type=5)** Marketing for Salesforce Foundations gives you access to tools that help you collect, track, and store consent data. - **[Data Cloud Considerations for Salesforce Foundations](https://help.salesforce.com/s/articleView?id=xcloud.base_considerations_data_cloud.htm&release=264.0.0&type=5)** Data Cloud powers campaign segmentation and unified customer profiles for marketing and commerce use cases in Salesforce Foundations. With Data Cloud, users can take advantage of flexible consent data tools and create audiences for order confirmation emails and marketing messages. - **[Allocations for Salesforce Foundations](https://help.salesforce.com/s/articleView?id=xcloud.base_considerations_allocations.htm&release=264.0.0&type=5)** Review important allowances for Salesforce Foundations. - **[Usage-Based Pricing in Salesforce Foundations](https://help.salesforce.com/s/articleView?id=xcloud.base_usage_pricing.htm&release=264.0.0&type=5)** Review important information about usage-based pricing in Foundations. Learn about your included credits and how to purchase more. # Considerations for Salesforce Mobile App Notifications Before you begin sending notifications, learn about the considerations specific to in-app and push notifications. ## Approval Requests A user can receive approval requests in Salesforce mobile app notifications only when the user receives approval requests as email notifications. You or your user can change the Receive Approval Request Emails user field to set this preference. ## Content Limits Notification titles and bodies are trimmed after merge fields are expanded. - In-app notification titles have a maximum of 250 characters and the bodies have a maximum of 750 characters. - Character limits for mobile push notifications depend on the Display full content push notifications setting on the Salesforce for iOS or Salesforce for Android external client apps pages in Setup. | Setting | Title Maximum | Body Maximum | | --- | --- | --- | | Enabled | 35 characters | 255 characters | | Not Enabled | 100 characters | No body displayed | ## Data Privacy All Universal Notification System notifications are automatically deleted after 30 days. All push registrations are automatically deleted when refresh tokens have been revoked. When a feed item is removed or deleted, the associated notification remains visible. # Considerations for Salesforce Reports in Quip As you add Salesforce reports to your documents, keep in mind these considerations. ## Row Limits You can see up to 2,000 rows for Salesforce reports in Quip. ## Performance Recommendations - Include no more than 20 live reports and data references in a document. - In large documents and documents that include both Salesforce reports and data references, disable automatic refresh. For reports, you can do so from the Salesforce Report menu in the formula bar. For data references, you can do so from the More Options menu. To get an up-to-date view of your reports and data references, use the Refresh option in the same menu where you disabled automatic refresh. - If a document contains more than 50,000 spreadsheet cells, split it into smaller documents to improve reliability and performance. - Grant edit access to as few members of a document as possible. Document members with full access can revoke edit access as needed. Having many users with edit access causes frequent refreshes, which can negatively impact performance. ## Salesforce Report Filters - Only custom Salesforce filters are currently supported in Quip. You can’t see your report’s standard filters in Quip. - Filter operators (like `equals` and `greater than`) can't be modified. - You can’t add or remove filters in Quip. You can only modify existing filters. - You can’t change locked filters in Quip. - After you change your report’s filter values within Quip, they won’t update with the latest Salesforce values. To use the updated Salesforce filter values, reimport the Salesforce report and configure the filters during setup. - Customizing filters in Quip doesn’t affect your report filters in Salesforce. ## Refresh Behavior After opening a document, report data automatically refreshes approximately every two hours for up to 36 hours. After the document is open for 36 hours, you can manually refresh the report data by clicking **Refresh Now**. # Considerations for Sending Email from Salesforce Review the recommended method for verifying your email-sending domains and considerations if you use a single email-sending domain in multiple orgs. Allowlist a Salesforce-owned email domain, and understand why email address verification is important to your security. ## Recommended Domain Verification Method To send email from Salesforce, each domain and subdomain requires separate verification via either an active DomainKeys Identified Mail (DKIM) key or a verified entry in the Authorized Email Domains list in Setup. Salesforce recommends that you verify your email-sending domains with a DKIM key. To determine the best option for you, see [Determine How to Verify Your Email-Sending Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification_domain_auth.htm&release=264.0.0&type=5 "To send email from Salesforce on domains that you own, verification is required for each of your email-sending domains. Determine the best method to verify your email domains: DomainKeys Identified Mail (DKIM), authorized email domains, or both options."). ## Email Domain Verification in Sandboxes To send email from Salesforce, every org requires email domain verification, including sandboxes. To verify email domains in a sandbox, use one or more of these options. - Enable the Deliverability setting, **Use a substitute email address for unverified domains**. See [Send Email for Users with Unverified Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification_substitute_domain.htm&release=264.0.0&type=5 "Enable Salesforce to send email for users with email domains that you can't verify, such as site users, consultants, and users with public email addresses like yahoo.com or icloud.com. With these options, the user's display name and reply-to address remain unchanged, but the From address uses an organization-wide email address or site-specific sender address of your choice."). - [Set up DKIM keys](https://help.salesforce.com/s/articleView?id=xcloud.emailadmin_create_secure_dkim.htm&release=264.0.0&type=5 "DomainKeys Identified Mail (DKIM) is a security standard that attaches a digital signature to your emails to prove that they came from you. With this signature, the receiving server can verify that the message content wasn’t altered or faked during transit. DKIM builds trust with email providers, so your messages are more likely to land in the inbox instead of the spam folder. An active DKIM key verifies your domain ownership so that Salesforce can send email for your users.") in the sandbox. To maintain the security of DKIM key email signatures, you can’t copy a DKIM key to a sandbox. - Import authorized email domains from production into the sandbox. See [Copy Authorized Email Domains into a Sandbox](https://help.salesforce.com/s/articleView?id=xcloud.security_email_auth_domain_copy.htm&release=264.0.0&type=5 "To avoid a second round of DNS verification, import your authorized email domains from production to a sandbox. In production, specify the authorized email domains to copy to a sandbox. Then, in a sandbox, import the available domains with one click."). If you use DKIM keys in production, also set up an authorized email domain in production for each domain that you want to copy to a sandbox. - Set up [authorized email domains](https://help.salesforce.com/s/articleView?id=xcloud.security_email_auth_domain_setup.htm&release=264.0.0&type=5 "To verify your email-sending domain without DomainKeys Identified Mail (DKIM), set up an authorized email domain. For example, if your users’ email addresses are in the format name@example.com, set up an authorized email domain for example.com.") in the sandbox. ## Use an Email-Sending Domain in Multiple Orgs If you have multiple Salesforce orgs or configure Salesforce for multiple customers, each of those orgs can have users with your email-sending domain in their email addresses. For this situation, the options to verify each email-sending domain remain the same: an active DKIM key or a verified entry on the Authorized Email Domain list for each org where Salesforce sends email. Because a DKIM key improves the deliverability of your email, Salesforce continues to recommend that you set up a DKIM key for each email-sending domain. When you configure a DKIM key, Salesforce publishes two DKIM public keys to DNS TXT records for a Salesforce-owned domain: a primary and alternate key. Salesforce uses the alternate key during key rotation. Then add CNAME and Alternate CNAME records to your domain’s DNS record. See [Create a DKIM Key](https://help.salesforce.com/s/articleView?id=xcloud.emailadmin_create_secure_dkim.htm&release=264.0.0&type=5 "DomainKeys Identified Mail (DKIM) is a security standard that attaches a digital signature to your emails to prove that they came from you. With this signature, the receiving server can verify that the message content wasn’t altered or faked during transit. DKIM builds trust with email providers, so your messages are more likely to land in the inbox instead of the spam folder. An active DKIM key verifies your domain ownership so that Salesforce can send email for your users."). If configuring DKIM keys across multiple orgs presents a problem, authorized email domains support verification via a single DNS TXT entry per domain, with or without the `_sfdv.` or the `orgId._sfdv.` prefix. If a DNS TXT record already exists for one or more of these names, you can create a second TXT record for that name or append the verification code to the value list. See [Determine How to Verify Your Email-Sending Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification_domain_auth.htm&release=264.0.0&type=5 "To send email from Salesforce on domains that you own, verification is required for each of your email-sending domains. Determine the best method to verify your email domains: DomainKeys Identified Mail (DKIM), authorized email domains, or both options."). Although authorized email domains verify your domain ownership so that you can send email from Salesforce, they don’t provide the additional security and deliverability benefits of a DKIM key. If the volume of DNS updates is prohibitive, consider enabling the substitute email domain for emails with unverified domains. See [Send Email for Users with Unverified Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification_substitute_domain.htm&release=264.0.0&type=5 "Enable Salesforce to send email for users with email domains that you can't verify, such as site users, consultants, and users with public email addresses like yahoo.com or icloud.com. With these options, the user's display name and reply-to address remain unchanged, but the From address uses an organization-wide email address or site-specific sender address of your choice."). ## Send Email for Users with Email Domains That You Can’t Verify For these reasons, Salesforce recommends that you use a substitute email address for unverified email domains. - Verification of email domain ownership requires an update to the domain’s DNS record, which can take time. - Sometimes the user can verify their email address, but you can’t verify the email domain. - A user with an email address that uses a public email domain like yahoo.com or icloud.com. - A consultant whose email address uses their company's email domain. - A user who logs in to your sites. With this option, the user's display name remains unchanged, but the From address uses `email@UniqueId.sfcustomeremail.com`, where UniqueId is your org ID or Experience Cloud site ID. See [Send Email for Users with Unverified Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification_substitute_domain.htm&release=264.0.0&type=5 "Enable Salesforce to send email for users with email domains that you can't verify, such as site users, consultants, and users with public email addresses like yahoo.com or icloud.com. With these options, the user's display name and reply-to address remain unchanged, but the From address uses an organization-wide email address or site-specific sender address of your choice."). ## Allowlist Salesforce Email Domains for Sending Email If “Use a substitute email address for unverified domains” is enabled on the Deliverability page in Setup, Salesforce sends email from this email address: `email@UniqueId.sfcustomeremail.com`, where UniqueId is your org ID or Experience Cloud site ID. Or you can specify an organization-wide email address to use as the From address for those emails. Even if you don’t use this option, other Salesforce customers use that email format. Also, Salesforce temporarily sends some email alerts with that email format. If you filter inbound email, work with your IT team or networking team on these tasks. - Add the `OrgId.sfcustomeremail.com` domain to your spam filter allowlists, where OrgId is your 18-digit org ID. - Add the `siteId.sfcustomeremail.com` domain to your spam filter allowlists for each of your Experience Cloud sites, - Evaluate whether to add the sfcustomeremail.com domain to your spam filter allowlists. ## Manage Email Address Verification Requirements To send email from Salesforce, every user, including single sign-on (SSO) provisioned users, is required to verify their Salesforce email address. If a user sets a different return email address, they must verify that address separately. Salesforce also requires email domain and email address verification for shared email addresses, such as [organization-wide email addresses](https://help.salesforce.com/s/articleView?id=sales.orgwide_email.htm&type=5&language=en_US), Email-to-Case [routing addresses](https://help.salesforce.com/s/articleView?id=service.customizesupport_configuring_routing_addresses.htm&type=5&language=en_US), and Experience Cloud site [sender email addresses](https://help.salesforce.com/s/articleView?id=experience.networks_customize_email.htm&type=5&language=en_US). If a trusted integration or admin manages your users’ email addresses in Salesforce, admins can bypass the requirement for email address verification via an authorized email domain. Or you can verify all email addresses that use a domain with an active DKIM key. Both options affect users’ ability to send email from Salesforce, and have no impact on user account verification or the user’s ability to log in to Salesforce. See [Use a Verified Domain for User-Level Email Verification](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_user_bypass.htm&release=264.0.0&type=5 "If a trusted integration or admin manages your users’ email addresses in Salesforce, specify which domains require address verification. For each authorized email domain, you can require email address verification only when users change their email address, or disable address verification entirely. Or use your active DomainKeys Identified Mail (DKIM) keys to verify addresses for new users and new organization-wide email addresses."). ## Sender Email Verification for Experience Cloud Sites To prevent security vulnerabilities, the sender email address for an Experience Cloud site must be a verified email address, and you can’t update it via Metadata API. Previously, Salesforce granted exceptions that let some customers update the sender email address via the `emailSenderAddress` field in Network Metadata API without verifying that the email address had an active inbox. Now, updates to this field are ignored and fail silently. To update the sender email address for an Experience Cloud site, go to the site’s **Administration** workspace, and then select **Emails**. If you don’t have an active inbox associated with the email domain that your Experience Cloud site uses, create a temporary inbox to verify the email address. After verification, disable the inbox if you no longer need it. If you previously added a sender email address via Metadata API and never verified it, Salesforce doesn’t send messages from that address. Add the sender email address from your site’s Administration page, and then verify it. See [Customize Email Sent from Experience Cloud Sites for Email Verification](https://help.salesforce.com/s/articleView?id=experience.networks_customize_email.htm&language=en_US). #### See Also - [Enable Salesforce to Send Email](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification.htm&release=264.0.0&type=5 "Before Salesforce can send email on behalf of your users, domain-level and user-level verification is required. Salesforce admins verify the domains that you own, and users verify their email and return email addresses.") - [Determine How to Verify Your Email-Sending Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification_domain_auth.htm&release=264.0.0&type=5 "To send email from Salesforce on domains that you own, verification is required for each of your email-sending domains. Determine the best method to verify your email domains: DomainKeys Identified Mail (DKIM), authorized email domains, or both options.") - [Send Email for Users with Unverified Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification_substitute_domain.htm&release=264.0.0&type=5 "Enable Salesforce to send email for users with email domains that you can't verify, such as site users, consultants, and users with public email addresses like yahoo.com or icloud.com. With these options, the user's display name and reply-to address remain unchanged, but the From address uses an organization-wide email address or site-specific sender address of your choice.") - [Use a Verified Domain for User-Level Email Verification](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_user_bypass.htm&release=264.0.0&type=5 "If a trusted integration or admin manages your users’ email addresses in Salesforce, specify which domains require address verification. For each authorized email domain, you can require email address verification only when users change their email address, or disable address verification entirely. Or use your active DomainKeys Identified Mail (DKIM) keys to verify addresses for new users and new organization-wide email addresses.") # Considerations for Sending Email Invitations to Gather Feedback on Support Cases Review these considerations and follow these best practices when you send survey invitation emails to customers to get feedback on their support experience.
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
Keep in mind these considerations when you send survey email invitations to gather feedback on cases. - In Surveys Setup, make sure that you've selected a default Experience Cloud site for public survey invitations. - You can generate survey invitations only for cases with a related contact. The contact receives the invitation. - With the survey open in Survey Builder, go to Default Settings to specify the content of the email invitation. If you don't define the survey's email settings, the content of the invitation depends on the types of questions in the survey. - If the survey contains one Net Promoter Score (NPS), one rating, and one score question, the email invitation includes all of the questions. - If the survey contains multiple Net Promoter Score (NPS), rating, and score questions, the email invitation includes one question of each type. - If the survey doesn't contain a Net Promoter Score (NPS), rating, or score question, the invitation includes a link to the survey. - Each invitation is unique. When a participant responds, their contact name is included in the response record. - Each invitation is related to the case record and to the case owner record. - Cases can't be closed when the associated survey’s owner is inactive. - A survey invitation record can’t be created for a case when the associated survey’s owner is inactive. - Invitations expire in 90 days. # Considerations for Setup with Agentforce When using Setup with Agentforce, keep these supported functionality, usage, limitations, and other considerations in mind. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Foundations or Agentforce 1 Editions
## General - To use Setup with Agentforce, you must delete any agents created with the [Agent for Setup tile](https://resources.docs.salesforce.com/rel1/doc/en-us/static/pdf/setup_agent_original.pdf) or Enhanced Agent For Setup (Pilot) tile. - Only objects that are available in Object Manager and searchable can be referenced in conversations and retrieved in responses. To make a custom object searchable, admins must enable the Allow Search attribute in Object Manager when creating or editing a custom object. Any custom objects created via Agentforce are searchable by default. - Components generated in the canvas, such as list views, record pages, and metadata previews, don’t automatically update to reflect changes in other tabs. For example, you have a list view of users that shows each user’s name and email address. If you open one of the user records in another tab and update the email address, the list view still shows the original email address. To refresh your list view with the updated information, click ![Refresh icon.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/refesh.png) to refresh. - For more accurate results, use specific and deterministic language in your requests. For example, instead of “Show details of John,” use “Show user details of John Smith” or “Show phone number field of user John Smith.” - Changes you make via the Setup agent are tracked in the Setup Audit Trail. - Agentforce respects only standard Salesforce Lightning Design System (SLDS) 2 branding and themes in Setup, not custom SLDS 2 themes. If you have a standard SLDS 2 theme enabled in your org, then the new Setup Home and the rest of Setup reflect that theme, except for dark mode. Dark mode isn’t supported. If you’re using an SLDS 1 theme, enabling Setup with Agentforce doesn’t activate SLDS 2 for your org. Agentforce respects your SLDS 1 styling in Setup. For more information, see [Salesforce Cosmos Theme and SLDS 2 Availability](https://help.salesforce.com/s/articleView?id=xcloud.customize_ui_enhancedlex.htm&release=264.0.0&type=5 "Salesforce Cosmos is the first theme available in Salesforce Lightning Design System 2 (SLDS 2). Salesforce Cosmos was released as beta in Winter ’25 with the temporary name Enhanced Lightning User Interface (UI). It's a new design that makes Salesforce simpler to use with circular patterns, easy-to-understand icons, new colors, and better typography. Salesforce Cosmos is the default theme of Salesforce Lightning Design System 2.") and [Personalize Your Org with Themes and Branding](https://help.salesforce.com/s/articleView?id=xcloud.brand_your_org_in_lightning_experience.htm&release=264.0.0&type=5 "A theme is a collection of visual styles that defines the look and feel of a user interface, and it sets the tone for your users’ Salesforce experience. You can choose one of the built-in Salesforce themes, or create your own custom theme that reflects your brand with just a few clicks.") in Salesforce Help. ## Navigation - Each conversation tab has a unique chat session ID embedded in the browser URL. If you click between conversation tabs, you can see the chat IDs change in the browser URL. When a conversation with the agent is in progress, right-clicking the browser tab and selecting **Duplicate** to copy the conversation session into a new browser tab links both tabs to the same conversation chat ID. This means that the second browser tab is aware of questions or prompts from the original active conversation tab, and vice versa. However, the message history isn’t shared between the browser tabs, so updates made in one tab don’t appear in the other. Copying a conversation browser tab link and pasting it into a new browser tab doesn't maintain the connection between the conversation sessions. - When working in Setup with agent tabs open, if you open Lightning Experience via the App Launcher and then navigate back to Setup, it opens in the default state with only the Home and Object Manager tabs present. Previous Setup agent chat sessions and tabs are lost. To avoid this, open Lightning Experience in a new browser tab and keep Setup open in the original tab. ## Records - To add fields to a displayed record, request the additional field information in the chat. The record then updates to include them. - If a record contains many fields, scroll within the form to view all the field information without leaving the page. - When a request matches multiple records, the agent shows a list of possible matches. The specific record details or form appear only after you select and confirm a record. ## List Views Setup with Agentforce uses list views to show records for users, flows, and other Setup-related objects. For example, if you ask to see users that have a specific permission assigned, then Agentforce provides those users in a list view with columns that include the relevant record fields. List views in Agentforce-enabled Setup have some differences from list views in other areas of Salesforce. Keep these considerations and limitations in mind. - A list view can contain up to 15 columns. - To refine or filter a generated list view in the conversation, enter a prompt with your requirements. - List views don’t support actions and views like sort by multiple columns, charts, and alternative displays. - You can navigate directly to a user record from a list view. To navigate to a specific record for any other supported object, enter a prompt with your request. - Not all objects support search within a list view. - Inline edit isn’t supported. - Bulk actions are available only for the User object. ## Language and Locale Support Setup with Agentforce supports these languages and locales.
Language Locale Code
English English (Australia) en_AU
English (United Kingdom) en_UK
English (United States) en_US
Catalan (Beta) None ca
Danish (Beta) None da
Dutch (Beta) None nl
Finnish (Beta) None fi
French (Beta) French (Canada) fr_CA
French (France) fr_FR
German (Beta) German (Germany) de_DE
Italian (Beta) Italian (Italy) it_IT
Japanese (Beta) Japanese (Japan) ja_JA
Norwegian (Beta) None no
Portuguese (Beta) Portuguese (Brazil) pt_BR
Portuguese (Portugal) pt_PR
Spanish (Beta) Spanish (Spain) es_ES
Spanish (Mexico) es_MX
Swedish (Beta) None sv
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note If you talk with the agent in a language that doesn't match the language on your user profile, the language the agent uses in responses can be inconsistent. ## Large Language Model Support Setup with Agentforce supports only the Salesforce Default model option. Choosing or switching to a different Agentforce model prevents enablement or causes the feature to be disabled. ## Einstein Trust Layer Service Support Setup with Agentforce supports the Trust Layer services provided on the Salesforce generative AI platform, as described in [Einstein Trust Layer](https://help.salesforce.com/s/articleView?id=ai.generative_ai_trust_layer.htm&language=en_US). # Considerations for Ship and Debit Process Management Review these considerations before you start working with Ship and Debit Process Management. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Ship and Debit Process Management enabled.
- Ship and Debit Process Management is supported only on desktop devices. - Review these considerations about the preconfigured Calculate Payouts for Ship and Debit Rebate Claim and Claim Aggregate flow template. - If your organization uses advanced currency management, you must edit the preconfigured flow to support multiple currencies. - To build a claims validation process using the preconfigured flow and the Validate and Calculate Rebate Claim and Claim Aggregate expression set template, you must edit the preconfigured flow. - If you extend the Ship and Debit Process Management data model, like by adding custom picklist values to the Processing Status field on the Rebate Claim object, you must edit the preconfigured flow to work with your data model. # Considerations for Single-Language Omniscripts Omnistudio provides translations for system labels, such as standard error messages. In your single-language Omniscripts, these translations automatically appear based on the user's locale. For example, if the user’s locale is set to Japanese, all system-generated error messages also appear in Japanese. In the Omnistudio managed package runtime, you can add translations for the system labels using custom labels. In the standard runtime, Omniscripts use autotranslated system labels. After migrating to the Omnistudio standard runtime, custom label translations set up in the managed package runtime are overridden by the autotranslated labels. The autotranslated system labels don't affect multi-language Omniscripts. These Omniscripts continue to use the translations defined using custom labels. # Considerations for Synced Sharing When setting up Synced Sharing for your Salesforce org, keep in mind these considerations. ## Org-Wide Setting Synced Sharing is an org-wide setting that assigns users with access to a Salesforce record a level of access to documents linked to that record. ## Admin Access The Quip site admin that enables Synced Sharing for a Salesforce org must also be the Salesforce admin for that particular Salesforce org. ## Document Membership Users that access a document via Synced Sharing become permanent document members when they edit or comment on the document. If their Synced Sharing access changes, they keep their member level of access. To make Synced Sharing document access dynamic, [restrict Synced Sharing access](https://help.salesforce.com/s/articleView?id=xcloud.quip_synced_sharing_restrict_access.htm&release=264.0.0&type=5 "Make document access granted through Synced Sharing dynamic. Users who can access a document with Synced Sharing aren’t permanent document members. When their Synced Sharing access level changes, so does their document access."). A user has access to a document via Synced Sharing and _edits_ the document. Then, that user loses access to the record that the document is associated with.
Synced Sharing Access Restrict Synced Sharing Access is Enabled Restrict Synced Sharing Access is Disabled
View Access N/A N/A
Comment, Edit, and Full Access

Loses document access

N/A for Comment Access

Full Access users can edit and share the document

Edit Access users can edit the document

N/A for Comment Access

Salesforce Record Access Loses document access Can access and edit the document
A user has access to a document via Synced Sharing and _comments on_ the document. Then, that user loses access to the record that the document is associated with.
Synced Sharing Access Restrict Synced Sharing Access is Enabled Restrict Synced Sharing Access is Disabled
View Access N/A N/A
Comment, Edit, and Full Access Loses document access

Full Access users can edit and share the document

Edit Access users can edit the document

Comment Access users can comment on the document

Salesforce Record Access Loses document access Can access and edit the document
A user has access to a document via Synced Sharing and _views_ the document. Then, that user loses access to the record that the document is associated with. | Synced Sharing Access | Restrict Synced Sharing Access is Enabled | Restrict Synced Sharing Access is Disabled | | --- | --- | --- | | View Access | Loses document access | Loses document access | | Comment, Edit, and Full Access | Loses document access | Loses document access | | Salesforce Record Access | Loses document access | Loses document access | ## Notifications Users who can access a document via Synced Sharing get notified of @mentions only after they open the document for the first time. ## Retroactive Access Synced Sharing is retroactive and applies to both new and existing documents linked to a Salesforce record. After you turn on Synced Sharing, all previously linked documents are shared with record members at the access level chosen. ## Quip Associated Documents Component Synced Sharing is based on documents linked to the Quip Associated Documents component. Only documents linked to the component have Synced Sharing enabled. ## Linked Document Access Synced Sharing is enabled for a document if the user who links the document to a record has Full Access to it. If a user with Can Edit, Can Comment, or Can View access to a document links it to a Salesforce record, Synced Sharing isn’t enabled. Users with access to a record can’t access documents linked by users with less than Full Access to the document. ## Link Sharing Settings If a document has link sharing set to view, comment, and edit and a user edits the document, they’re now a Full Access user. Even if Synced Sharing is set to less than Full Access, the user keeps the directly shared Full Access level. ## Automation Documents created via the Copy Document action in Flow Builder don’t have Synced Sharing enabled by default. For Synced Sharing to take effect, the copied documents must either be manually linked to the record, or linked via the Attach Document to Record action in Flow Builder. ## User Records Synced Sharing isn’t enabled for documents linked to user records, like Contacts. If a user links a document to a user record, users with access to the record can’t access the document via Synced Sharing. ## Connected Salesforce Orgs A user can access a linked document via Synced Sharing only if they connected their Salesforce org to Quip. - From the user profile in Quip, click **Salesforce**. - Click **Connect** and log in to Salesforce. ## Documents Shared in Quip If a linked document is shared with a user in Quip, the access granted in Quip overrides the access granted via Synced Sharing. If the user has Can Comment access in Quip but Synced Sharing is set to Edit Access, then the user has comment access to the document. ## Access Removal If a user is removed from a Salesforce record that has Synced Sharing enabled, the user’s access to linked documents isn’t revoked. You can manage user access in Quip. ## Salesforce Reports To see the latest data, you must manually refresh Salesforce reports in Quip documents that are linked to Salesforce records. #### See Also - [_Knowledge Article_: Synced Sharing Scenarios, Salesforce Anywhere Advanced (Quip)](https://help.salesforce.com/articleView?id=000356489&type=1&mode=1&language=en_US) # Considerations for the Relationship Map Live App As you use the Relationship Map live app, keep in mind these considerations. ## Mobile Support The Relationship Map live app is view-only on mobile and shows only the Map Builder view. ## Live Paste You can’t live paste a relationship map. To copy the live app, copy and paste it. ## Salesforce Data - You can create cards only from existing Salesforce data. You can’t create a record from the Relationship Map live app. - You can import records from only one Salesforce org per relationship map. You can’t add cards from different Salesforce orgs to the same relationship map. - By default, cards created from Salesforce records show the record’s primary compact layout fields. If an object with multiple record types has multiple compact layouts, some fields can be marked as unsupported. This labeling is necessary when the primary compact layout doesn’t match a specific record’s compact layout. - If Mirrored Salesforce Permissions are disabled, the relationship map doesn't automatically refresh. To get the latest Salesforce data, manually refresh it. To see when the relationship map was last refreshed, check the refresh timestamp. ## Supported Objects The Relationship Map live app supports standard Salesforce objects and all custom objects that are searchable, queryable, and retrievable. ## Map Sizing There aren’t any size limitations for your relationship maps. For the best performance and to prevent document scrolling, keep your relationship maps lightweight. You can also split up a larger map into multiple smaller ones, or collapse the cards in the Tree Map. # Considerations for the Salesforce Mobile App Before you set up and use the Salesforce mobile app, learn about security, limitations, accessibility, and more to ensure a smooth mobile experience for your users. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note The Salesforce Mobile App isn’t available in the Apple App Store in mainland China. - **[Salesforce Mobile App Rollout Strategy](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_rollout_strategy.htm&release=264.0.0&type=5)** To learn more about best practices and to get the most out of the Salesforce mobile app, check out our resources on Trailhead. - **[Data Available in the Salesforce Mobile App](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_data.htm&release=264.0.0&type=5)** The Salesforce mobile app uses your organization’s Salesforce edition, your user license type, and your assigned user profile and permission sets to determine the data that’s available to you. You see most of the objects, record types, fields, and page layouts that you do when working in the full Salesforce site. But not all Salesforce data is available in the app. - **[What’s Different or Not Available in the Salesforce Mobile App](https://help.salesforce.com/s/articleView?id=xcloud.limits_mobile_sf1_parent.htm&release=264.0.0&type=5)** The Salesforce mobile app doesn’t include all the functionality that’s available in Lightning Experience on desktop. Learn about the Salesforce features that aren’t available, that have functional gaps from what you’re used to in Lightning Experience on desktop, or that work differently. - **[Salesforce Mobile App Considerations for Tablets](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_ipad_considerations.htm&release=264.0.0&type=5)** Learn about the layout and special considerations for using the Salesforce mobile app on tablets. - **[Salesforce Mobile App Accessibility Considerations](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_accessibility_considerations.htm&release=264.0.0&type=5)** The Salesforce mobile app provides users working with screen readers and other accessibility features a fully accessible mobile experience. If you use the Salesforce mobile app with an assistive device, keep these tips in mind. - **[Salesforce Mobile App Language Considerations](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_language_considerations.htm&release=264.0.0&type=5)** The Salesforce mobile app gets language support from the language and region settings on the mobile device, the language setting for the mobile device’s default browser, and the language and region settings in the user’s Salesforce user profile. If these settings differ, users can see different languages in the app. # Considerations for Themes and Branding Keep these considerations in mind when working with themes and branding. ### Required Editions
Available in: Lightning Experience
Available in: Essentials, Group, Professional, Enterprise, Performance, and Unlimited Editions
- Your org can have only one active theme, which applies to the entire org. - By default, an org uses the built-in Lightning Blue theme or Salesforce Cosmos theme based on when the org was created. See [Salesforce Cosmos Theme and SLDS 2 Availability](https://help.salesforce.com/s/articleView?id=xcloud.customize_ui_enhancedlex.htm&type=5&language=en_US). - You can create up to 300 custom themes, but you can’t modify or clone the built-in themes provided by Salesforce. - Themes don’t apply to Salesforce Classic or to native mobile apps. - Chatter External users see the built-in Lightning Blue theme only. - Even if you haven’t selected the option to override themes in the App Manager, your app’s brand image and color always override the Lightning Lite and Lightning Blue themes. - For optimum visibility, we use an accessible version of your brand colors. To use your own colors in links and branded buttons in custom Salesforce Lightning Design System (SLDS) 1 themes, from the edit theme page, select the **Override accessibility brand color** checkbox. You can’t override accessible brand colors in the Global Navigation Divider and status and flow components. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip Selecting the **Override accessibility brand color** checkbox can cause accessibility issues in some areas of the UI, and can make text harder to read. - When you activate an SLDS 2 theme, you enable SLDS 2 for your org. If you change your active theme from an SLDS 2 theme to an SLDS 1 theme, you disable SLDS 2 for your org. - Not all Salesforce apps support SLDS 2. If an app or area of Salesforce doesn’t support SLDS 2, it’s displayed with SLDS 1 styling even when SLDS 2 is activated. - Some features, such as background color, background image, and global header color are unavailable in SLDS 2 themes due to accessibility implications. - When you add or remove a theme's brand image, the theme can take some time to reflect your changes. To see your updated brand image faster, empty your cache and hard reload your browser. # Considerations for Updating Company Information in Quip As you update your company’s Quip site information, keep these considerations in mind. - Changing your company’s quip.com subdomain doesn’t break old URLs. Anyone trying to visit a URL with the old domain is sent to the URL at its new domain. - Changing your company name doesn’t automatically rename your Quip site’s default group folder. To update the group folder name, rename the folder. # Considerations for Using a Custom One-Time Password Delivery Provider Before you configure a custom one-time password (OTP) delivery handler to send SMS messages for Experience Cloud use cases, review these considerations. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: Professional, Enterprise, Unlimited, and Developer Editions
## Security Considerations - If you use custom OTP providers, your Apex implementation has access to the OTP, which isn't the case if you use the Salesforce default provider. With a custom OTP provider, your Apex handler implementation, not Salesforce, performs identity verification. You're responsible for the security and integrity of your code and implementation. - You can choose to deliver OTPs via alternative delivery methods, such as iMessage, Rich Communication Services (RCS), and WhatsApp. Before choosing any alternative delivery methods, carefully consider the security implications. - If you send an SMS message via a custom provider, and the user's phone number isn't verified, Salesforce doesn't attempt to verify it. Salesforce can’t make sure that the OTP gets delivered to a phone number that's verified by Salesforce. As a security best practice, we recommend that you verify all phone numbers and configure your handler to send OTPs only to verified phone numbers. To understand differences in verification for custom OTP providers and the default Salesforce provider, review these tables.
Custom OTP Provider Verification
Use Case Apex System.UserManagement Methods TwoFactorMethodsInfo Verification Requirement TwoFactorMethodsInfo Post-Verification Result
User-Verified Number (HasUserVerifiedmobileNumber) Admin-Verified Number (HasVerifiedMobileNumber) User-Verified Number (HasUserVerifiedmobileNumber) Admin-Verified Number (HasVerifiedMobileNumber)
Self-registration initSelfRegistration and verifySelfRegistration Not required Unchanged true
Passwordless login initPasswordlessLogin and verifyPasswordlessLogin One of these fields must be true Unchanged true
Verification method registration Not required Unchanged true
Verification (including multi-factor authentication) initVerificationMethod and verifyVerificationMethod One of these fields must be true Unchanged true
Default OTP Provider Verification
Use Case Apex System.UserManagement TwoFactorMethodsInfo Verification Requirement TwoFactorMethodsInfo Post-Verification Result
User-Verified Number (HasUserVerifiedmobileNumber) Admin-Verified Number (HasVerifiedMobileNumber) User-Verified Number (HasUserVerifiedmobileNumber) Admin-Verified Number (HasVerifiedMobileNumber)
Self-registration initSelfRegistration and verifySelfRegistration Not required true Unchanged
Passwordless login initPasswordlessLogin and verifyPasswordlessLogin Required Not required true Unchanged
Verification method registration Not required true Unchanged
Verification (including multi-factor authentication) initVerificationMethod and verifyVerificationMethod Required Not required true Unchanged
## Other Implementation Considerations - This feature is supported only for Salesforce Customer Identity. You can't use it for internal users, also known as employees. - This feature is supported for all [Experience Cloud user licenses](https://help.salesforce.com/s/articleView?id=platform.users_license_types_external_identity.htm&type=5&language=en_US) and the [External Identity license](https://help.salesforce.com/s/articleView?id=platform.users_license_types_external_identity.htm&type=5&language=en_US). It doesn't require the [Identity Verification Credits add-on license](https://help.salesforce.com/s/articleView?id=xcloud.identity_licenses.htm&type=5&language=en_US). - Because this feature relies on a custom provider to deliver the message, Salesforce Customer Support can't troubleshoot issues with delivery. To fix delivery issues, work with your provider. - You must contact Salesforce Customer Support to use this feature. If Support gives you access to this feature, you have the option to configure a custom OTP provider for all Experience Cloud sites in your org. To keep your OTP delivery method consistent, if you request access to this feature, we recommend using a custom OTP provider for all your Experience Cloud sites. However, if you don't configure a custom OTP delivery Apex handler for a site, it continues to use the Salesforce default delivery service. - If Support gives you access to this feature, it isn't automatically enabled. To use this feature, you must add a working custom OTP delivery handler to your Experience Cloud site's settings. - If you switch to a using a custom OTP provider, we don't recommend that you switch back to the Salesforce default provider. # Considerations for Using Deterministic Encryption These considerations apply to data encrypted with Shield Platform Encryption’s deterministic encryption scheme. Some considerations manifest differently depending on whether data is encrypted with the case-sensitive or case-insensitive deterministic encryption scheme. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.
Available in: Enterprise, Performance, and Unlimited Editions with the Salesforce Shield or Shield Platform Encryption licenses.
Available for free in Developer Edition.
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Shield Platform Encryption. Read about implementing field-level encryption using Shield Extension in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). ## API Options to Identify Filterable Fields Fields encrypted by using the deterministic encryption scheme are filterable. You can use the `isFilterable()` method to determine the encryption scheme of a particular encrypted field. If the field is filterable, the method returns true. However, you can’t explicitly detect or set the deterministic encryption scheme via the API. ## Available Fields and Other Data Deterministic encryption is available for custom URL, email, phone, text, and text area field types. It isn’t available for other types of data, including: - Custom date, date/time, long text area, rich text area, or description field types - Chatter - Files and attachments ## Case Sensitivity When you use case-sensitive deterministic encryption, case matters. In reports, list views, and SOQL queries on encrypted fields, the results are case-sensitive. Therefore, a SOQL query against the Contact object, where LastName = Jones, returns only Jones, not jones or JONES. Similarly, when the case-sensitive deterministic scheme tests for uniqueness, each version of “Jones” is unique. ## Chat The Utterance field on the Utterance Suggestion object supports case-insensitive deterministic encryption only. While the UI shows both case-sensitive deterministic and case-sensitive probabilistic encryption, those schemes aren't currently functional. The Actor Name field on the Conversation Entry object supports case-sensitive deterministic encryption, but not case-insensitive deterministic encryption. ## Compound Fields Even with deterministic encryption, some kinds of searches don’t work when data is encrypted with case-sensitive deterministic encryption. Concatenated values, such as compound names, aren’t the same as the separate values. For example, the ciphertext for the compound name “William Jones” isn’t the same as the concatenation of the ciphertexts for “William” and “Jones”. So, if the First Name and Last Name fields are encrypted in the Contacts object, this query doesn’t work. ``` Select Id from Contact Where Name = 'William Jones' ``` But this query does work. ``` Select Id from Contact Where FirstName = 'William’ And LastName ='Jones' ``` Case-sensitive and case-insensitive deterministic encryption schemes support compound fields, but only with individual column queries. ## Converting Account and Contact Records to Person Accounts When you convert account and contact records to Person Accounts, synchronize your data. Syncing resets the indexes that allow case-insensitive filtering. ## Can’t Search by Using Merge Account Tool When the Account Name or Contact Name field is encrypted with probabilistic or deterministic encryption, searching for duplicate accounts or contacts to merge doesn’t return any results. ## Custom Field Allocations To support case-insensitive queries, Salesforce stores a lowercase duplicate of your data as a custom field in the database. These duplicates are necessary for case-insensitive queries, but they count against your total custom field count. For example, if you have 200 custom fields in your org, and you choose to encrypt one with case insensitive deterministic encryption, your custom field total is 201. ## External ID Case-insensitive deterministic encryption supports Text and Email external ID custom fields but not other external ID custom fields. When you create or edit these fields, use one of the recommended field setting combinations. | External ID Field Type | Unique Attributes | Encrypted | | --- | --- | --- | | Text | None | Use case-insensitive deterministic encryption. | | Text | Unique and case sensitive | Use case-sensitive deterministic encryption. | | Text | Unique and case insensitive | Use case-insensitive deterministic encryption. | | Email | None | Use case-insensitive deterministic encryption. | | Email | Unique | Use case-sensitive deterministic encryption. | You can’t save changes to Unique - Case-Sensitive and Encrypted options at the same time. Change one setting, save it, and then change the next. ## Filter Operators In reports and list views, the operators “equals” and “not equal to” are supported with case-sensitive deterministic encryption. Other operators, like “contains” or “starts with,” don’t return an exact match and aren’t supported. Features that rely on unsupported operators, such as Refine By filters, also aren’t supported. Case-insensitive deterministic encryption supports list views and reports. However, the user interface displays all operators, including operators that aren’t supported for encrypted data. To review the list of supported operators available in Salesforce Classic, see [Use Encrypted Data in Formulas](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_formulas.htm&release=264.0.0&type=5 "Use custom formula fields to quickly find encrypted data. Shield Platform Encryption is compatible with several operators and functions, and can render encrypted data in text, date, and date/time formats, and reference quick actions."). ## Filter Records by Strings You can search for records by using strings. However, commas in strings act as OR statements. If your string includes a comma, use quotation marks around the string. For example, a search for “Universal Containers, Inc, Berlin” returns records that include the full string, including the comma. Searches for Universal Containers, Inc, Berlin returns records that include “Universal Containers” or “Inc” or “Berlin.” ## Formulas Fields encrypted with the probabilistic encryption scheme can’t be referenced in SOQL WHERE queries. However, you can use SOQL WHERE queries with non-formula fields encrypted with the deterministic encryption scheme. Name is an example of a non-formula field. ## Indexes ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important When your encryption scheme includes encrypting fields that are used in indexes, use deterministic encryption for those fields. There are significant ramifications if you choose to encrypt fields that are part of an index or which have uniqueness requirements. Read this section carefully so that you understand the issues. Both case-sensitive and case-insensitive deterministic encryption are supported. - Case-sensitive deterministic encryption supports single-column indexes, single-column case-sensitive unique indexes, two-column indexes, and custom indexes on standard and custom fields. - Case-insensitive deterministic encryption offers limited support for standard indexes on these standard fields. - Contact—Email - Email Message—Relation - Lead—Email - Name Be aware of these performance considerations before you plan to encrypt index fields. - Poor query performance: Queries against fields encrypted with case-insensitive deterministic encryption can perform poorly with large tables. For optimal query performance, use custom indexes instead of standard indexes. To set up custom indexes, contact Salesforce Customer Support. - Lookup field filtering: Lookup fields that reference the Name field also rely on indexes. To filter on the Name field in list views and reports, filter against the standard Name field instead of a lookup field. - Long enablement process: Expect the enablement process to take longer when you apply deterministic encryption to a field with a large number of records. The enablement process also rebuilds field indexes. Use these best practices if you do elect to encrypt index fields. - Ensure consistent encryption: When using deterministic encryption on indexed fields or fields that have uniqueness requirements, ensure all values are encrypted with the same deterministic key. This ensures reliable identification of duplicates across records. - Perform Encryption Sync: We recommend performing an Encryption Sync soon after making any changes that could affect the uniqueness of indexes, such as changing the encryption scheme or rotating the Deterministic Encryption tenant secret. - Plan for downtime: Plan these changes during off-peak hours to minimize disruption. The Encryption Sync runs in batches and can take varying amounts of time depending on the entity’s structure, record volume, and the fields involved. Work with our support team to plan the necessary downtime. ## Key Rotation and Filter Availability Adding, removing, or changing a deterministic encryption scheme rebuilds your indexes. User activity on encrypted fields causes duplicate data in indexes, which can interfere with sync operations. After you rotate deterministic key material or change a field’s encryption scheme to case-sensitive deterministic encryption or case-insensitive deterministic encryption, sync your data to your active key as soon as possible. Syncing applies the active key material to existing and new data. If you don’t sync your data, filtering and queries on fields with unique attributes don’t return accurate results. You can sync data in standard and custom fields yourself on the Encryption Statistics and Data Sync page in Setup. To sync all other data or large volumes of data, contact Salesforce Customer Support. Read more about data synchronization at [Synchronize Your Data Encryption with the Background Encryption Service](https://help.salesforce.com/s/articleView?id=xcloud.security_pe_mass_encryption.htm&release=264.0.0&type=5 "Periodically, you change your encryption policy. Or you rotate your keys. To get the most protection out of your encryption strategy with Shield Platform Encryption, synchronize new and existing encrypted data under your most recent encryption policy and keys. You can do this yourself or ask Salesforce for help."). ## Next Best Action Recommendations When you use deterministic encryption, you can use encrypted fields in load conditions only with the equals or not equals operator. ## Removing Deterministic Encryption from Fields If you remove encryption from a field encrypted with deterministic encryption, Shield Platform Encryption needs some time to decrypt that field throughout your org. The size of your org determines how long this process takes, so the field won’t have the filtering and sorting characteristics of an unencrypted field until that update completes. ## SOQL GROUP BY Statements Assemble where clauses according to the rules on The SOQL/SOSL Reference Page [Comparison Operators.](https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_select_comparisonoperators.htm) Deterministic encryption doesn’t support the GROUP BY clause. If you do specify GROUP BY using a deterministic field, your groupings won’t be accurate or consistent. ## SOQL LIKE and STARTS WITH Statements Deterministic encryption only supports exact, case-sensitive matches. Comparison operators that return partial matches aren’t supported. For example, LIKE and STARTS WITH statements aren’t supported. ## SOQL ORDER BY Statements Because deterministic encryption doesn’t maintain the sort order of encrypted data in the database, ORDER BY isn’t supported. # Considerations for Using Event Monitoring Keep these considerations in mind as you set up and use Real-Time Event Monitoring. ### Required Editions
Available in both Salesforce Classic (not available in all orgs) and Lightning Experience.

Available in: Enterprise, Unlimited, and Developer Editions

Requires Salesforce Shield or Salesforce Event Monitoring add-on subscriptions.

## Salesforce Classic versus Lightning Experience Some events apply only to Salesforce Classic or Lightning Experience. The following objects support only Salesforce Classic: - URIEvent - URIEventStream The following object supports only Lightning Experience: - LightningUriEvent - LightingUriEventStream ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Real-Time Event Monitoring objects sometimes contain sensitive data. Assign object permissions to Real-Time Events accordingly in profiles or permission sets. ## Transaction Security - With Transaction Security, you can create policies using either Condition Builder or Apex code. - Transaction Security policies support both standard and custom objects. - The multi-factor authentication action isn’t available in the Salesforce mobile app, Lightning Experience, or via API for any events. Instead, the block action is used. For example, if a multi-factor authentication policy is triggered on a list view performed via the API, Salesforce blocks the API call. - A value of 0 for the RowsProcessed field in an object (such as ApiEvent) indicates that a query was performed and nothing was returned. This scenario is possible if a user doesn’t have the correct permissions for a data row or the query doesn’t return results. In this case, the QueriedEntities field is empty. - Let’s say you create both an Apex and a Condition Builder policy on the same event. You also specify the same action (Block or multi-factor authentication) for both policies. In this case, the Apex policy executes before the Condition Builder policy. The PolicyId field of the event reflects the last policy that was executed and triggered. - You can’t use the same Apex class on policies with the same event. When you create an Apex policy using Condition Builder, the list of available Apex classes can differ based on the policies you already created. - Let’s say you enable a transaction security policy for an event in which the action is None. As a result, when an event satisfies the policy conditions, the policy isn’t triggered. However, these event fields are still populated: - EvaluationTime—The time it took for the policy to be evaluated. - PolicyOutcome—Set to `NoAction`. - PolicyId—Set to `null`. ## Recommended Usage of Event Objects Real-Time Event Monitoring objects have three primary uses: streaming data, storing data, and enforcing policies on data. But these uses don’t apply to all objects. Here’s guidance on which objects are available for each use case. For details, see [Stream and Store Event Data](https://help.salesforce.com/s/articleView?id=xcloud.real_time_event_monitoring_details.htm&release=264.0.0&type=5 "Explore how you can use the objects in Real-Time Event Monitoring to stream and store event data."). | Streaming | Storage | Policy | | --- | --- | --- | | ApiEventStream | ApiEvent | ApiEvent | | LightningUriEventStream | LightningUriEvent | n/a | | ListViewEventStream | ListViewEvent | ListViewEvent | | LoginAsEventStream | LoginAsEvent | n/a | | LoginEventStream | LoginEvent | LoginEvent | | LogoutEventStream | LogoutEvent | n/a | | ReportEventStream | ReportEvent | ReportEvent | | UriEventStream | UriEvent | n/a | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Real-Time Event Monitoring Platform Events aren't a system of record for user activity. They're a source of truth but event notifications aren’t always available or guaranteed. For more reliable data storage, use [Real-Time Event Monitoring Storage Events](https://help.salesforce.com/s/articleView?id=xcloud.real_time_event_monitoring_storage.htm&release=264.0.0&type=5 "With Real-Time Event Monitoring, you can store and query event data in Salesforce objects. Many of the storage events are Salesforce big objects, which are ideal for storing large volumes of data for up to six months. A big object stores the data natively in Salesforce so you can access it for reporting and other uses. Some storage events, such as for Threat Detection, are standard Salesforce objects."). # Considerations for Using Kanban Views If you use kanban views, review considerations for using them with certain objects and other features. ### Required Editions
Available in: Lightning Experience
Available in: Essentials, Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
## Editing (All Objects) - If you don’t have Edit access to a record, you can’t drag its card to a different kanban column. - In the kanban details panel, you can’t change a record’s record type or transfer it to a different owner. To edit those fields, navigate to the record or, to transfer ownership, use the kanban card. - You can’t perform mass actions in a kanban view. ## Currency (All Objects) - If your company uses multiple currencies in Salesforce, kanban views show amounts in your personal currency. - You can’t use the Currency field to group records in a kanban view. ## Contracts - You can’t activate a contract in a kanban view. - Kanban views don’t show columns for the standard contract status of Activated. - You can’t group contracts by the Owner Expiration Notice field in a kanban view. ## Knowledge - You can only group Knowledge articles by owner in a kanban view. Grouping by the other standard knowledge fields isn’t supported. ## Leads - You can’t convert a lead in a kanban view. - Converted leads are hidden in kanban views. ## Opportunities - You can’t group opportunities by the Forecast Category field. - Kanban cards on opportunities show alerts for overdue tasks, no open activities, and no activity in the last 30 days. - When opportunities have no overdue tasks and Einstein Activity Capture is enabled, the alerts on opportunity kanban aren’t shown. - Closed Lost opportunities are hidden in kanban views. - The opportunity kanban view shows up to 200 records. When you have Closed Lost opportunities, you see fewer than 200 opportunities because Closed Lost opportunities are hidden. #### See Also - [Work in a Kanban View](https://help.salesforce.com/s/articleView?id=xcloud.kanban_use.htm&release=264.0.0&type=5 "Narrow the records you want to focus on by searching and filtering a kanban view, and view records by record type. Update records by dragging, or edit a card without leaving the kanban view. If your Salesforce admin has set up key fields and guidance, you see them in the details panel. If you’re viewing opportunities, alerts help you move deals ahead.") # Considerations for Using Member Engagement Widgets Keep these points in mind when working with Member Engagement widgets. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
## Images - Check the size of images and ensure that the images fit in the real estate available on the widget. - Ensure that the image URLs that you use aren’t placed behind authentication. ## Widgets on Experience Cloud Site Pages - [Provide customers and members permission to view widgets on site pages](https://help.salesforce.com/s/articleView?id=xcloud.os_configure_community_profiles_for_flexcards_42091.htm&type=5&language=en_US). - Provide customers and members the permission to view and update data site pages. For example, customers need the Create permission on the Loyalty Program Member object and the Person Account object to join a loyalty program by using the Join Program widget template. Members need the View permission on the Transaction Journal object to view their recent transactions on the View Transaction History widget. ## Benefit Selection on Select Member Benefits Widget Currently, members can’t select benefits on widgets that are cloned by using the Select Member Benefits widget template. # Considerations for Using Promotion Setup Here are a few things to keep in mind while using Promotion Setup. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
- Loyalty program processes can process transactional, nontransactional, and tier processing, business API tasks. - A loyalty program process can have a maximum of 200 active rules. - Three and a half million transaction journals can be processed per hour. - A maximum of 500,000 API calls can be made per hour. - Loyalty program processes ignore custom validation rules that you have added to objects while processing records and data. - The Transaction Journal Execution API and Batch Management jobs can't execute processes that consist of rules with the Redeem Voucher action when the transaction journals provided as input are associated with members who cumulatively have more than 10,000 vouchers in the Issued status. # Considerations for Using Quip in Flow Builder Review some important information about requirements and limitations to get the most out of Quip actions in Process Builder and Flow Builder. ### Required Editions
Available in: Enterprise, Performance, Professional, Developer, and Unlimited Editions
## Availability To use Quip actions, enable Quip for your Salesforce org. Admins are the only users able to use Quip actions in Flow Builder and Process Builder. ## End-User Limitations If a flow or process is triggered by a user that hasn't connected to Quip, the flow or process doesn’t run because the user doesn’t have a valid access token. ## Flow Type Limitations For now, Quip actions don’t work with scheduled flows. # Considerations for Working with Embedded Documents You can generally work with an embedded document like any other document, and there are a few things to keep in mind. ### Required Editions
Available in: Lightning Experience
- To view and participate in the document conversation of an embedded document, click the expand button (![Icon to expand document.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/admin_files_quip_expand_icon.png)) at the top right of the component. - To view and edit the live apps in a document, click **Open in Quip** at the top right. - To work with the document in Quip rather than in Salesforce, click **Open in Quip**. # Considerations to Disable Traceability Learn how to manage unprocessed redemption records and understand the impact of disabling traceability on existing records. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management - Advanced
- If there are any unprocessed traceable redemption transactions, run the Map Traceable Points for Redemption Transactions invocable action before you disable traceability. - Before you disable the global traceability setting for currencies with a specific expiration model, deselect the Allow Ledger Tracing checkbox on every currency record that uses that model. For example, before you disable Point Tracing for Fixed Duration Currencies, deselect Allow Ledger Tracing for each currency that use the fixed-duration expiration model. - After you disable traceability, Loyalty Management no longer uses subtype information to process records. All existing points with subcurrencies are treated as the base currency. # Considerations to Use Quick Promotions Wizard in Loyalty Management Each step of the Quick Promotion wizard provides marketing managers a set of options to design promotions based on your company’s marketing strategy. Here are the loyalty-specific considerations to use the various steps of the wizard. - **[Select Personalization Configuration: Loyalty Management Considerations](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_select_personalization_configuration_considerations.htm&release=264.0.0&type=5)** On the Select Personalization Configuration step of the Quick Promotion wizard, marketing managers choose which values to personalize and select the predictive AI source that generates the values. For Loyalty Management, you can select Salesforce’s Predictive AI Models or External Model. - **[Enter Primary Information: Loyalty Management Considerations](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_gpm_enter_primary_information_considerations.htm&release=264.0.0&type=5)** On the first step of the Quick Promotion wizard, marketing managers enter the promotion’s name, duration, code, and business unit. For loyalty promotions, you can select the loyalty program that the promotion belongs to. - **[Define Promotion Eligibility: Loyalty Management Considerations](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_gpm_define_promotion_eligibility.htm&release=264.0.0&type=5)** On the Define Promotion Eligibility step in the Quick Promotion guided flow, marketing managers decide the products, channels, customer groups, and customer events that are eligible for the promotion. For loyalty promotions, you have additional options in the various sections of this step. - **[Select Promotion Template: Loyalty Management Considerations](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_gpm_select_promotion_template.htm&release=264.0.0&type=5)** The Select Promotion Template step in the guided flow lists the templates that marketing managers and loyalty program managers use to create the promotion’s rules. When using Global Promotions Management templates on this step, you can also offer loyalty-specific rewards. In addition, you also have access to loyalty-specific templates. - **[Loyalty Management Promotion Limits](https://help.salesforce.com/s/articleView?id=xcloud.global_promotions_management_loyalty_limits.htm&release=264.0.0&type=5)** To keep promotions within budget and prevent fraud, marketing managers can set limits for both the overall promotion and individual customers on the Add Promotion Limits step of the wizard. In addition to Global Promotions Management limits, you can also add limits on the points awarded. - **[Design Distribution Assets: Loyalty Management Considerations](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_gpm_design_distribution_assets.htm&release=264.0.0&type=5)** On the Design Distribution Assets step of the wizard, marketing managers design and activate the launch email for pricing promotions. # Considerations When Using Joins In Salesforce Data Pipelines, unlike a lookup, a join creates a separate record for each match in the target dataset when multiple rows match. Before using a join, ensure that you understand the implications of duplicate rows. Review the following tips. Don’t double count measures when aggregating records from a join. Consider the following two data streams that feed the recipe’s target dataset. Both input data streams have duplicate key values. ![The left data stream shows the opportunity ID, customer name, and opportunity amount. The right data stream shows the opportunity ID and educational level.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipeTransformations_join_doubleCountIssue_dataStreams.png) A left join duplicates the Opp\_ID 1 record in the left data stream because it has multiple matches in the right data stream. ![The new dataset contains columns from both data streams.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipeTransformations_join_doubleCountIssue_results.png) Notice that the duplicated records repeat the opportunity amount for Alice. If you added all opportunity amounts to get the total, double count the amount for Alice. To prevent duplicate records, use a lookup instead of a join. Refrain from using joins when the join keys have a many-to-many relationship. When the join keys have a many-to-many relationship, the target dataset can become significantly larger than the input data streams. For instance, if four records on the left and five records on the right have the same key value, the join adds 20 (4\*5) records to the target dataset. In a more extreme case, if 10,000 records on the left and 5,000 on the right share a key value, the join creates 50 million records in the target dataset. To illustrate why this occurs, consider the following two data streams that feed the recipe’s target dataset. Both input data streams have duplicate key values. ![The left data stream shows the opportunity ID, customer name, and opportunity amount. The right data stream shows the opportunity ID and educational level.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipeTransformations_join_dataExplosionIssue_dataStreams.png) A left join duplicates each record in the left data stream five times because it has five matches in the right data stream. ![The new dataset contains columns from both data streams.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_recipeTransformations_join_dataExplosionIssue_results.png) To prevent duplicate records, use a lookup instead of a join. If you must use a join, try adding more key fields to make the keys have more unique values. # Console Card and Layout Templates (Managed Package) For the managed package runtime, console card and layout templates enable multiple records to be accessible and actionable all from the same view. Apply console cards and layouts to service Vlocity Service Console apps. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ## Console Card Layout Template Console card layout templates are containers for console cards and control how console cards display.

Card Layout Template

Description

Template Preview

Compatible Card Templates

storyCardCanvas

Displays story cards inside a one-column container that has a header, which includes a title and a search box.

Vlocity Customer Story LWC Card

storyNormalState, storyOngoingState

## Console Card Templates Console card templates control how information on a console card displays.

Card Template

Description

Template Preview

Compatible Card Templates

leftAccountInfoState

Displays account data listed in rows.

image

Any

leftProfileState

Displays account information as a static google map, up to three data fields, and up to three actions.

image

Any

profileCardState

Displays profile information as a static google map, data fields, and actions.

image

Any

storyNormalState

Displays a story item as an image in the first column, and the title and data fields in the second column.

image

storyCardCanvas

storyOngoingState

Displays a story item as an image in the first column, and the title, subtitle, and fields in the second column.

image

storyCardCanvas

# Consolidate Your Data with Unified Analytics Unified Analytics is your home base for all your analytics on your iOS and Android devices. Go to the section for your operating system to get more details about Unified Analytics, such as navigation and finding items. ### Required Editions
Setup for the Salesforce mobile app available in: Lightning Experience
Setup available in Lightning Experience in: Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
A CRM Analytics license is required to view and access CRM Analytics items.
Unified Analytics is enabled from the full desktop site, which turns it on for mobile and desktop. 1. From Setup, in the Quick Find box, enter analytics, and then select **Settings**. 2. Select **Enable the Unified Experience for Analytics Home**. - **[Navigate Unified Analytics on iOS](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_unified_analytics_ios.htm&release=264.0.0&type=5)** Unified Analytics is a modern and welcoming environment on iOS to organize, locate, and share your analytics. - **[Navigate Unified Analytics on Android](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_unified_analytics_android.htm&release=264.0.0&type=5)** Unified Analytics is a modern and welcoming environment on Android to organize, locate, and share your analytics. # Consolidation of Fixed-Type, Non-Qualifying Points for Expiration Automate the consolidation and expiry of fixed-type, non-qualifying points of members. You can consolidate members' points in the Loyalty Aggregated Point Expiration Ledger object in real time or in batches. By aggregating non-qualifying points in the Loyalty Aggregated Point Expiration Ledger object, you can decouple the points expiration process from the Loyalty Ledger records. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled
![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip Salesforce recommends consolidating and expiring member points. Some advantages of consolidating points are: - The expiration date of points credited back to members for canceled redemption is automatically calculated. - The points that are debited from members for canceled accruals are deducted based on the activity date of the canceled transaction and points aren’t deducted using the first-in, first-out model. - Members can be provided a simple break-up of their points by their expiration date. Records are created in the Loyalty Aggregated Point Expiration Ledger object based on: - Loyalty program member - Currency associated with the member - Expiration date of the points A record is created for each member when their points for a currency expire on a particular date. A record is updated when the associated member is credited points that are of the associated currency and have the same expiration date. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The Loyalty Aggregated Point Expiration Ledger object can't be customized. The object isn't available in the Object Manager or in the Loyalty Management app. Here are the scenarios where you can consolidate points for expiration in the Loyalty Aggregated Point Expiration Ledger object: - Points credited by multiple ledgers expire on the same date. For example, multiple Loyalty Ledger records are created for a transaction because multiple promotions are applied to the transaction. - Expiration of member points is extended until the end of the month. - Loyalty Ledger records must be archived to ensure that your org remains within the record limit. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_important.png) Important Don't archive loyalty ledgers: - If the currency has an escrow period, points credited by the ledgers are rolled to the members' points balance. - Until the associated transaction journals' reversal period is over. ## Consolidate Points in Real Time You can consolidate member points in the Loyalty Aggregated Point Expiration Ledger object as soon as points are credited to members. To consolidate member points in real time, turn on the Consolidate members’ fixed non-qualifying points in real-time setting. After you turn on the setting, clone the Aggregate Fixed Non-Qualifying Points in Expiration Ledgers Data Processing Engine definition and run the definition one time. This run ensures that points credited to members before you turned on the setting are consolidated in the Loyalty Aggregated Point Expiration Ledger object. To expire member points, clone the Expire Fixed Non-Qualifying Points Using Aggregated Expiration Ledgers Data Processing Engine definition and run it based on your requirements. You can use a scheduled flow to run the definition to expire points based on your loyalty program’s non-qualifying currency expiration model. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip Salesforce recommends that you consolidate points in real time when you have a high volume of member transactions every day. Consolidation of points in real time is a more efficient process than consolidating members’ points in batches by using Data Processing Engine. ## Consolidate Points in Batches You can consolidate member points in batches. For example, consolidate member points one time a day or at a frequency of your choice. To consolidate member points in batches, clone the Aggregate Fixed Non-Qualifying Points in Expiration Ledgers Data Processing Engine definition and use a scheduled flow to run it based on your requirement. To expire member points, clone the Expire Fixed Non-Qualifying Points Using Aggregated Expiration Ledgers Data Processing Engine definition and run it based on your requirements. You can use a scheduled flow to run the definition to expire points based on your loyalty program’s non-qualifying currency expiration model. ## What Happens When Points Are Adjusted and When Transactions Are Canceled? Here’s how members’ points are adjusted when transactions are canceled or points are adjusted:
Scenario Result
Points are credited to a member for a canceled redemption
  • If a Loyalty Aggregated Point Expiration Ledger record is available for the member and if the expiration date isn’t the same as the expiration date of the credited points, the credited points are added to the record.
  • If a Loyalty Aggregated Point Expiration Ledger record is available for the member and if the expiration date is the same as the expiration date of the credited points, a record is created for the expiration date.
Points are credited to a member for positive points adjustment
Points are debited from a member’s point balance for a canceled accrual Points are deducted from the Loyalty Aggregated Point Expiration Ledger record where the expiration date is the same as the expiration date of the points that were initially credited to the member.
Points are debited from a member’s point balance for negative points adjustment Points are deducted from the Loyalty Aggregated Point Expiration Ledger record with the latest points expiration date.
![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_example.png) Example Maria Jimenez, a loyalty program member, recently placed an order with two order lines, creating one transaction journal for each order line. The first transaction credits Maria 200 Reward Points. The second transaction journal credits Maria 100 Reward Points. Reward Points is a non-qualifying currency that expires based on a fixed model at the end of January 2023. After points are credited to members, a Loyalty Aggregated Point Expiration Ledger record is created: | Member | Currency | Expirable Points | Expiration Date | Status | | --- | --- | --- | --- | --- | | Maria Jimenez | Reward Points | 300 | January 31, 2023 | Active | Maria places another order with one order line a couple of days later. Maria is credited 300 Reward Points for this transaction. These points also expire at the end of January 2023. Maria's Loyalty Aggregated Point Expiration Ledger records look like this after points are consolidated for the transaction: | Member | Currency | Expirable Points | Expiration Date | Status | | --- | --- | --- | --- | --- | | Maria Jimenez | Reward Points | 600 | January 31, 2023 | Active | The Expire Fixed Non-Qualifying Points Using Aggregated Expiration Ledgers definition is run on January 31, 2023. Here's what Maria's Loyalty Aggregated Point Expiration Ledger records look like: | Member | Currency | Expirable Points | Status | | --- | --- | --- | --- | | Maria Jimenez | Reward Points | 600 | Inactive | - **[Enable Consolidation of Fixed-Type, Non-Qualifying Points of Members in Real Time](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_points_consolidation_real_time.htm&release=264.0.0&type=5)** You can consolidate members’ fixed-type, non-qualifying points as soon as they’re credited to members. - **[Enable Consolidation of Fixed-Type, Non-Qualifying Points of Members in Batches](https://help.salesforce.com/s/articleView?id=xcloud.enable_points_consolidation.htm&release=264.0.0&type=5)** You can choose to consolidate member points in batches. After points are credited to members, you can run a Data Processing Engine definition to consolidate members’ fixed-type, non-qualifying points. You can run another Data Processing Engine definition to expire members’ fixed-type, non-qualifying points. When you enable this setting, the system adds two template Data Processing Engine definitions to your org. - **[Aggregate Fixed Non-Qualifying Points in Expiration Ledgers](https://help.salesforce.com/s/articleView?id=xcloud.aggregate_fixed_non_qualifying_points_dpe.htm&release=264.0.0&type=5)** Run the Aggregate Fixed Non-Qualifying Points in Expiration Ledgers Data Processing Engine definition if you decide to consolidate members’ fixed-type, non-qualifying points in batches. Before you run the definition, make sure that there are no duplicate loyalty aggregated points expiration ledgers. - **[Expire Fixed Non-Qualifying Points by Using Aggregated Expiration Ledgers](https://help.salesforce.com/s/articleView?id=xcloud.expire_aggregated_fixed_non_qualifying_points_dpe.htm&release=264.0.0&type=5)** Use the Expire Fixed Non-Qualifying Points Using Aggregated Expiration Ledgers Data Processing Engine definition to expire members’ fixed-type, non-qualifying points. Run the definition to expire member points regardless of whether you’re consolidating member points in real time or in batches. - **[Expire Fixed Non-Qualifying Points by Using Aggregation Ledgers and Traceable Ledgers](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_expire_aggregated_traceable_fixed_nqp_dpe.htm&release=264.0.0&type=5)** Use the Expire Fixed Non-Qualifying Points Using Aggregation Ledgers and Traceable Ledgers Data Processing Engine definition to expire fixed-type, non-qualifying points for members and currencies without pending traceability ledgers. Run the definition to expire member points regardless of whether you’re consolidating member points in real time or in batches. #### See Also - [_Salesforce Help_: Enable Consolidation of Members' Fixed-Type, Non-Qualifying Points](https://help.salesforce.com/s/articleView?id=xcloud.enable_points_consolidation.htm&release=264.0.0&type=5 "You can choose to consolidate member points in batches. After points are credited to members, you can run a Data Processing Engine definition to consolidate members’ fixed-type, non-qualifying points. You can run another Data Processing Engine definition to expire members’ fixed-type, non-qualifying points. When you enable this setting, the system adds two template Data Processing Engine definitions to your org.") # Consumption Analytics Consumption Explorer The Consumption Analytics dashboard’s Consumption Explorer section contains visualizations that drill down deeper to show consumption based on a specific dimension, such as agent, agent action, or Data 360 source. Each viz description includes a table that indicates the standard consumption tags and calculated fields used to build the visualization. The Consumption Insights Semantic Model (SDM) leverages the fields (standard tags) in the Consumption Insights data model object (DMO). The fields in this DMO are the same as the ones in the TenantEnrichedUsageEvent DLO. See [TenantEnrichedUsageEvent Data Lake Object](https://help.salesforce.com/s/articleView?id=xcloud.wallet_teue_reference.htm&release=264.0.0&type=5 "The TenantEnrichedUsageEvent Data Lake Object (DLO) is an enriched version of the TenantBillingUsageEvent DLO, specifically created and optimzed for consumption reporting. In addition to capturing raw usage data, it contains standard consumption tags that provide metadata alongside billing usage to enable further slicing and dicing for more advanced insights. This DLO fuels the data provided in the Digital Wallet out-the-box-reports and dashboards, and enables you to build your own custom reports. And best of all, you can create reports directly from it, and you don’t incur any costs when building a report based on it.") for a description of each standard tag. ## Consumption by Data Cloud Source The Consumption by Data Cloud Source viz shows total consumption for Data Cloud source per usage type. | Option | Consumption Tags and Calculated Fields | | --- | --- | | Filters | Entitlement Org ID, Card Definition Developer Name (Data Services Credits and Segmentation and Activations only) | | Marks (group by) | Resource ID Or Api Name | | Columns (x-axis) | Usage Type Developer Name | | Rows (y-axis) | SUM (Units Consumed) | ## Consumption by Feature The Consumption by Feature viz shows total consumption per feature. | Option | Consumption Tags and Calculated Fields | | --- | --- | | Filters | Feature Developer Name | | Marks (group by) | Card Name | | Columns (x-axis) | SUM (Units Consumed) | | Rows (y-axis) | Feature Developer Name | ## Flex Credits Consumption by Agent The Flex Credits Consumption by Agent viz show total consumption by agent, and from which consumption card the usage was deducted. | Option | Consumption Tags and Calculated Fields | | --- | --- | | Filters | Root Resource Type (BotDefinition), Entitlement Org ID | | Columns (x-axis) | SUM (Units Consumed) | | Rows (y-axis) | Root Resource Id or Api Name | ## Flex Credits Consumption by Agent Action The Flex Credits Consumption by Agent Action viz shows total consumption by agent action. | Option | Consumption Tags and Calculated Fields | | --- | --- | | Filters | Resource Type (GenAiFunctionDefinition), Entitlement Org ID | | Columns (x-axis) | SUM (Units Consumed) | | Rows (y-axis) | Resource Id or Api Name | ## Consumption Forecast by Agent The Consumption Forecast by Agent viz show the forecasted trend for consumption per agent per month. The forecast period extends 3 months into the future. If a forecast report indicates “we couldn’t display this content," it’s likely due to insufficient historical data. Generally, you need at least 3 data points in the time series to estimate a trend. | Option | Consumption Tags and Calculated Fields | | --- | --- | | Filters | Root Resource Type, Entitlement Org ID | | Marks (group by) | Root Resource Id or Api Name | | Analytics | SUM (Units Consumed) | | Columns (x-axis) | MONTH (Consumption by Date) | | Rows (y-axis) | SUM (Units Consumed) | To see how a forecast is configured in Tableau Next, see “Comsumption Forecast” in Salesforce Help: [Consumption Analytics Consumption Overview](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_analytics_overview_tab.htm&release=264.0.0&type=5 "The Consumption Analytics dashboard’s Consumption Overview section contains a metric and visualizations that give you a high-level overview of what’s driving consumption. This information includes total credits consumed, daily credits consumed by consumption card, sources and usage types that use the most consumption, as well as a consumption forecast by consumption card."). #### See Also - [_Salesforce Help_: Forecasting with Tableau Next](https://help.salesforce.com/s/articleView?id=analytics.tua_create_viz_forecasting_about.htm&language=en_US) # Consumption Analytics Consumption Overview The Consumption Analytics dashboard’s Consumption Overview section contains a metric and visualizations that give you a high-level overview of what’s driving consumption. This information includes total credits consumed, daily credits consumed by consumption card, sources and usage types that use the most consumption, as well as a consumption forecast by consumption card. Each viz description includes a table that indicates the standard consumption tags and calculated fields used to build the visualization. The Consumption Insights Semantic Model (SDM) leverages the fields (standard tags) in the Consumption Insights data model object (DMO). The fields in this DMO are the same as the ones in the TenantEnrichedUsageEvent data lake object (DLO). See [TenantEnrichedUsageEvent Data Lake Object](https://help.salesforce.com/s/articleView?id=xcloud.wallet_teue_reference.htm&release=264.0.0&type=5 "The TenantEnrichedUsageEvent Data Lake Object (DLO) is an enriched version of the TenantBillingUsageEvent DLO, specifically created and optimzed for consumption reporting. In addition to capturing raw usage data, it contains standard consumption tags that provide metadata alongside billing usage to enable further slicing and dicing for more advanced insights. This DLO fuels the data provided in the Digital Wallet out-the-box-reports and dashboards, and enables you to build your own custom reports. And best of all, you can create reports directly from it, and you don’t incur any costs when building a report based on it.") for a description of each standard tag. The dashboard shows usage for the org that holds the entitlements, as indicated by the Entitlement Org ID filter for each visualization. ## Total Consumption Over Time The Total Consumption Over Time metric shows a graph of the total number of credits consumed for all consumption cards over a specific time range, by default, Current Year to Date. The metric shows a cumulative total, not per day, so you get a true view of the usage trends over time. The metric includes a set of granular dimensions, so you can leverage Tableau Next features. You can use the Card Name, Usage Type, and Environment Type filters to narrow the results. We also remove usage types that use the MAX aggregation type, such as Data Storage Allocation and Data Cloud Real-Time Profiles. To learn more about metrics insights, see Salesforce Help: - [Explore Metrics and Insights](https://help.salesforce.com/s/articleView?id=analytics.tua_metric_explore_insights.htm&language=en_US&type=5) - [Metric Insights in Tableau Next](https://help.salesforce.com/s/articleView?id=analytics.tua_metrics_insights_about.htm&language=en_US) ## Daily Consumption by Consumption Card The Daily Consumption by Consumption Card viz provides a vertical bar chart that shows daily number of credits consumed for all consumption cards. | Option | Consumption Tags and Calculated Fields | | --- | --- | | Filters | Usage Type Developer Name (all usage types except Data Cloud Storage or Data Cloud Real-time Profile), Entitlement Org ID | | Marks (group by) | Card Name | | Columns (x-axis) | Consumption by Date (calculated field) | | Rows (y-axis) | SUM (Units Consumed) | ## Top Sources with Consumption The Top Sources with Consumption viz shows the tagged sources or features that consumed the most credits. A source can be, for example, any agent action, prompt, Data Cloud resource, and so on. Source consumption is ranked in descending order. | Option | Consumption Tags and Calculated Fields | | --- | --- | | Filters | Resource ID Or Api Name, Entitlement Org ID, Usage Type Developer Name (all usage types except Data Cloud Storage or Data Cloud Real-time Profile) | | Marks (group by) | Resource ID Or Api Name | | Columns (x-axis) | SUM (Units Consumed) | | Rows (y-axis) | Resource ID Or Api Name | ## Top Usage Types with Consumption The Top Usage Types with Consumption viz shows the usage types that consumed the most credits across consumption cards. Usage type consumption is ranked in descending order | Option | Consumption Tags and Calculated Fields | | --- | --- | | Filters | Entitlement Org ID, Usage Type Developer Name (all usage types except Data Cloud Storage or Data Cloud Real-time Profile) | | Marks (group by) | Usage Type Developer Name | | Columns (x-axis) | SUM (Units Consumed) | | Rows (y-axis) | Usage Type Developer Name | ## Consumption Forecast The Digital Wallet Consumption Forecast viz shows a forecasted trend for consumption by month for each consumption card. You can see forward-looking consumption data so you can plan and budget your Salesforce products’ credit spend, for example, for Data 360 credits and Agentforce Flex Credits. The forecast period extends 3 months into the future. If a forecast report indicates “we couldn’t display this content," it’s likely due to insufficient historical data. Generally, you need at least 3 data points in the time series to estimate a trend. | Option | Consumption Tags and Calculated Fields | | --- | --- | | Filters | Usage Type Developer Name (all usage types except Data Cloud Storage or Data Cloud Real-time Profile), Entitlement Org ID | | Marks (group by) | Card Name | | Analytics | SUM (Units Consumed) | | Columns (x-axis) | MONTH (Consumption by Date) | | Rows (y-axis) | SUM (Units Consumed) | This forecast was configured to use the Holt-Winters model with a forecast period of 3 months. ![The Forecast dialog that shows the details for this visualization: Holt-Winters model, 3 months of Forecast Periods, and 95% for Prediction Interval.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-consumption-forecast.png) #### See Also - [_Salesforce Help_: Forecasting with Tableau Next](https://help.salesforce.com/s/articleView?id=analytics.tua_create_viz_forecasting_about.htm&language=en_US) # Consumption Analytics Dashboard (Tableau Next) The Consumption Analytics dashboard, powered by Tableau Next, provides deeper and actionable usage insights. It enables you to drill down to granular analysis for standard consumption tags, for example, flex credits usage per agent or action, and Data 360 consumption by resource. Visualizations are interactive, where you can instantly transform your view with a click, allowing you to seamlessly delve deeper and pivot to reveal the underlying details. Furthermore, you can optimize business planning with consumption forecasting, due to the Tableau Next out-of-the-box prediction capabilities. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/images/icon_note.png) Note Digital Wallet includes 10 free Tableau Next Limited Consumer licenses per org for your users, which provides read-only access to this dashboard. It’s possible that you have more licenses from other products you’ve purchased. Contact your Account Executive if you require additional licenses. And best of all, you don’t incur any costs when viewing this dashboard or querying the data associated with it, or creating your own custom dashboards and visualizations based on the underlying Digital Wallet data objects: - TenantEnrichedUsageEvent data lake object (DLO) - Consumption Insights data model object (DMO) - Consumption Insights Semantic Model (SDM) - Consumption Insights Extended Semantic Model (SDM) Before you begin, you must install the Consumption Tagging app, which provides the metadata, objects, and Tableau Next workspace and assets required to view the dashboard. It's also important to understand the permissions required to install the app and to allow users to view the dashboard and access its underlying data. - Salesforce Help: [Digital Wallet Permissions](https://help.salesforce.com/s/articleView?id=xcloud.wallet_permissions.htm&release=264.0.0&type=5 "To access Digital Wallet and its features, users require a combination of user permissions, permission sets, and licenses. To access Digital Wallet, you must have a Data 360 license and not a Customer Data Platform (CDP) license.") - Salesforce Help: [Data 360 Standard Permission Sets](https://help.salesforce.com/s/articleView?id=data.c360_a_userpermissions.htm&language=en_US) - Salesforce Help: [Tableau Next Permission Sets and Licenses](https://help.salesforce.com/s/articleView?id=analytics.tua_admin_permsets_licenses.htm&language=en_US) Here are the high-level steps to install and view the dashboard. 1. [Install the Consumption Tagging app](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_tagging_app_install.htm&release=264.0.0&type=5 "The Consumption Tagging app contains the required metadata and objects (data lake objects and semantic data models) for consumption tags and the Tableau Next assets for the Consumption Analytics dashboard. This Tableau Next dashboard uses billing data and standard consumption tags to provide you with granular insights, interactive visualizations, and usage forecasts."). 2. Assign non-admin users the appropriate Tableau Next license and [permissions](https://help.salesforce.com/s/articleView?id=xcloud.wallet_permissions.htm&release=264.0.0&type=5 "To access Digital Wallet and its features, users require a combination of user permissions, permission sets, and licenses. To access Digital Wallet, you must have a Data 360 license and not a Customer Data Platform (CDP) license.") to view or manage the dashboard and consumption data. 3. From the Digital Wallet app, select Consumption Analytics to [access the Consumption Analytics dashboard](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_analytics_access.htm&release=264.0.0&type=5 "After you install the Consumption Tagging app, you can access Consumption Analytics in Digital Wallet."). - **[Install the Consumption Tagging App](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_tagging_app_install.htm&release=264.0.0&type=5)** The Consumption Tagging app contains the required metadata and objects (data lake objects and semantic data models) for consumption tags and the Tableau Next assets for the Consumption Analytics dashboard. This Tableau Next dashboard uses billing data and standard consumption tags to provide you with granular insights, interactive visualizations, and usage forecasts. - **[Access and View the Consumption Analytics Dashboard](https://help.salesforce.com/s/articleView?id=xcloud.wallet_consumption_analytics_access.htm&release=264.0.0&type=5)** After you install the Consumption Tagging app, you can access Consumption Analytics in Digital Wallet. # Consumption Insights Dashboard (Data 360 Reports) As part of Data Cloud provisioning, the Consumption Insights dashboard is installed. This Data 360 dashboard contains several predefined (out-of-the-box) reports that were built using standard consumption tags. How you complete the configuration to view the reports depends on if you're a new or existing Data 360 customer. We'll make several attempts to install the dashboard in your org. If an error occurs with the report installation, we attempt at least once a day to install the reports. In this situation, check back the next day. If you don't see reports within a couple days, contact Salesforce Customer Support for assistance. ## Provide Users Access to View the Dashboard ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/images/icon_note.png) Note Data Cloud governance features are enabled by default for new orgs, but you must create policies to grant data access. Create an Allow All policy if granular control isn’t needed. In existing orgs, Data Cloud includes a day zero Allow All policy out of the box to preserve access based on current permission sets and data space mappings. Review [Data Governance Considerations](https://help.salesforce.com/s/articleView?id=data.c360_a_before_you_begin_data_gov.htm&type=5&language=en_US) to learn about data spaces, permission sets, and access policies. To allow users to view the dashboard and reports, be sure that users have these permissions, or ask a Salesforce admin to add them to a new or existing permission set: - System permission: Allow access to view reports in Data Cloud Reporting - System permission: Allows user access Data Cloud - Access to the data space that contains the TenantEnrichedUsageEvent data lake object (DLO) ## Share the Dashboard and Report Folders with New Users When the reports are installed, all Digital Wallet users have access to the dashboard and report folders. After installation, a Salesforce admin must manually share the dashboard and report folders with any newly-added users. ## Add the TenantEnrichedUsageEvent DLO to a Data Space The dashboard and reports are built from data and consumption tags from the TenantEnrichedUsageEvent DLO, which enables the reports to provide deeper insights beyond just standard consumption summaries. Add the TenantEnrichedUsageEvent DLO to the default data space or any existing data space: - If you have associated the TenantEnrichedUsageEvent DLO with a data space, then you're good to go. You have access to the data you need to view the Consumption Insights dashboard, or create your own custom reports using consumption tags. - If you haven't associated the TenantEnrichedUsageEvent DLO with a data space, add it to the default data space or any existing one based on your data segregation and governance strategy. See Salesforce Help: [Add Data to a Data Space Using Data Lake Objects](https://help.salesforce.com/s/articleView?id=data.c360_a_add_data_lake_objects_to_a_data_space.htm&language=en_US). If you don't already have an existing data space that you want to use for this purpose, you can [create a new one](https://help.salesforce.com/s/articleView?id=data.c360_a_data_spaces_create.htm&language=en_US) (whether you require an add-on license depends on your edition). - **[Access and View the Consumption Insights Dashboard](https://help.salesforce.com/s/articleView?id=xcloud.wallet_ootb_reports_view.htm&release=264.0.0&type=5)** The Digital Wallet Consumption Insights dashboard gives you an easy entry point to the out-of-the-box (predefined) reports that leverage standard consumption tags. These reports give you a granular view of your consumption by agent, action, and other consumption sources. Each dashboard widget shows a bar chart so you can quickly visualize consumption information, and has a link to its corresponding report. #### See Also - [_Salesforce Help_: Manage Data Spaces](https://help.salesforce.com/s/articleView?id=data.c360_a_data_spaces.htm&language=en_US) - [_Salesforce Help_: Share a Lightning Report or Dashboard Folder](https://help.salesforce.com/s/articleView?id=analytics.rd_folders_share_enhanced.htm&language=en_US) # Consumption Overviews in the Monthly Account Summary The Monthly Account Summary email is a monthly usage statement you can use to get an overview of your org’s consumption. Learn more about it on this page. If you’re the primary billing contact or another notification contact listed on a contract, you receive the Monthly Account Summary email. The Monthly Account Summary summarizes all usage during the previous monthly billing window. Each contract that contains a consumption-based product gets a separate Monthly Account Summary email. Monthly Account Summaries aren’t to be confused with invoices that get issued if you’ve exceeded your purchased allowance. In the event of a discrepancy, the invoice prevails over any inconsistent information in the Monthly Account Summary. To learn more about Monthly Account Summaries and to be added to the list of recipients, see [Monthly Account Summaries and Multiplier Notification Emails FAQ](https://help.salesforce.com/s/articleView?id=000390885&type=1&language=en_US). ![Monthly Account Summary email](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-wallet-264-0-0-production-enus/8f6c2159-a132-459e-a003-b12a22cdab5e/wallet/images/wallet-monthly-account-summary.png) # Contact Salesforce Help for this feature is currently not available. Please contact Salesforce for assistance. # Contact Salesforce About Accessibility Have a question, need guidance, or want to report an issue regarding Salesforce accessibility? Here are some resources and links to help you navigate. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note Salesforce Customer Support is not available for Personal and Developer edition users. In addition, knowledge base access is not available for Developer Edition users. ## Find an Answer in Help For general questions about accessibility features that affect end users, search for an answer in the [accessibility overview](https://help.salesforce.com/s/articleView?id=xcloud.accessibility_overview.htm&release=264.0.0&type=5 "Learn about the standards for low-vision users and deaf or hearing impaired users that Salesforce follows to design applications with accessibility in mind."). ## Report an Issue To report an accessibility issue or to get additional support, see [How to Create a Product Accessibility Case on Salesforce Help](https://help.salesforce.com/s/articleView?id=000382999&type=1&language=en_US). ## Check on Accessibility Status and Provide Audit Findings Some results of Salesforce product accessibility audits are available on our [product accessibility status page](https://www.salesforce.com/company/legal/508_accessibility/). To provide your product accessibility compliance audit to Salesforce, refer to this [documentation](https://help.salesforce.com/articleView?id=000316803&type=1&mode=1&language=en_US). ## Learn More About Accessibility To learn more accessibility and accessible Salesforce design, testing, and development best practices, take our [Get Started with Web Accessibility Trail](https://trailhead.salesforce.com/content/learn/trails/get-started-with-web-accessibility). These modules provide links to many further relevant resources. # Content Security Policy (CSP) Directive Rendering Control Enabling CSP (Content Security Policy) Directive Rendering allows your Salesforce org to adopt the latest, most restrictive security standards for how resources are loaded on Lightning pages. ## Control Name CSP Directive Rendering ## Recommended Configuration - Apply CSP directives for less common browsers - Adopt updated CSP directives On the Trusted URLs Setup page, click **New Trusted URL**. In the Content Security Policy (CSP) Settings section, select the **CSP Directives** that Lightning components, third-party APIs, and WebSocket connections can load from this trusted URL. ## Control Overview Enabling CSP (Content Security Policy) Directive Rendering allows your Salesforce org to adopt the latest, most restrictive security standards for how resources are loaded on Lightning pages. By activating this control, the platform enforces strict browser-level rules that prevent cross-site scripting (XSS) and code injection by blocking any external scripts, images, or iframes that have not been explicitly authorized in your Trusted URLs allowlist. ## Security Risk If Not Configured Without CSP Directive Rendering, your organization lacks a robust, browser-level defense against Cross-Site Scripting (XSS) and unauthorized data exfiltration. This omission allows malicious actors to execute unverified scripts or load harmful external resources within your Lightning pages, potentially leading to the theft of session cookies, credential harvesting, or the silent manipulation of sensitive record data. ## Threat Scenarios In a typical threat scenario, an attacker exploits the absence of strict CSP enforcement by injecting a malicious script into a vulnerable field or URL parameter to execute a Stored or Reflected Cross-Site Scripting (XSS) attack. Without these updated directives, the browser can permit the script to execute inline or "phone home" to an untrusted external domain, allowing the attacker to silently exfiltrate sensitive record data or capture user input in real-time while operating under the victim's active session. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations The risk impact encompasses a critical failure in browser-level data protection, potentially allowing attackers to execute unauthorized code that can steal user credentials, manipulate sensitive records, and cause widespread data exfiltration. ## Higher Risk When The risk increased with failing to enable Lightning Web Security (LWS) or Lightning Locker significantly heightens the risk, as it removes the essential namespace isolation that prevents a single compromised component from accessing data across your entire UI. Furthermore, combining weak Profile and Permission Set hygiene—such as granting unnecessary "View All Data" rights or allowing unauthenticated Guest User API access—creates a "perfect storm" where an attacker can use a basic XSS vulnerability to rapidly escalate privileges and exfiltrate the organization's entire database. ## Low or No Risk When To minimize the risks associated with disabled CSP Directive Rendering, you can rely on Lightning Web Security (LWS) or Lightning Locker, which provide a robust architectural sandbox that isolates component namespaces and prevents malicious scripts from accessing data in other parts of the UI. Additionally, utilizing Salesforce Shield Event Monitoring allows you to detect and block anomalous data exfiltration attempts in real-time, effectively providing a defense-in-depth layer that catches threats even if browser-level content restrictions are not fully enforced. ## Business and Integration Considerations Implementing CSP Directive Rendering requires a meticulous audit of all third-party scripts, images, and iframes to make sure they are added to the Trusted URLs list, as failing to add these external dependencies to the allowlist will break critical business integrations and UI components. ## Recommended Remediation Enable CSP Directives that aligns with security standards in the organization. ## Security Health Review Guidance Security Health Review inspects the Trusted URLs CSP settings including CSP Directives to align with security standards on how resources are loaded on lightning pages. #### See Also - [Modify Session Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.admin_sessions.htm&release=264.0.0&type=5 "Use the Session Settings screen to configure session security. You can configure settings such as the session connection type, timeout restrictions, and IP address ranges to protect against malicious attacks.") # Content Security Policy Protection Control Prevent users from bypassing security checks when viewing templates in Salesforce Classic using Internet Explorer, and enforce a rigorous framework that blocks unauthorized scripts and resources from executing within the platform. ## Control Name Content Security Policy ## Recommended Configuration - Disable Override Restriction on Accessing Email Templates in Salesforce Classic Using Internet Explorer - Enable Stricter Content Security Policy On the Session Settings Setup page, in the “Content Security Policy protection” section, deselect **Override Restriction on Accessing Email Templates in Salesforce Classic Using Internet Explorer** and select **Enable Stricter Content Security Policy**. ## Control Overview Disabling **Override Restriction on Accessing Email Templates in Salesforce Classic Using Internet Explorer** prevents users from bypassing security checks when viewing templates in Salesforce Classic using Internet Explorer, while **Enable Stricter Content Security Policy** enforces a rigorous framework that blocks unauthorized scripts and resources from executing within the platform. Together, they ensure that sensitive content is protected from execution-based attacks regardless of the user's browser or interface choice. ## Security Risk If Not Configured By leaving these protections disabled, you're essentially keeping a "backdoor" open for legacy Internet Explorer exploits that can bypass email template security and execute malicious code within a user's session. Additionally, without a stricter CSP, your org lacks the up to date security protection needed to block sophisticated Cross-Site Scripting (XSS) attacks, making it far easier for unauthorized scripts to hijack sessions or silently scrape sensitive record data. ## Threat Scenarios An attacker leverages a legacy browser’s vulnerabilities to bypass email template restrictions and execute a malicious payload within the Salesforce Classic interface. Without Stricter CSP to act as a gatekeeper, this script is free to "phone home" by exfiltrating session tokens or sensitive record data to an external domain, effectively turning a simple page view into a silent, automated data breach. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations The risk impact centers on a critical breach of data integrity and confidentiality, as attackers can leverage legacy browser exploits and cross-site scripts to hijack sessions or exfiltrate sensitive company information. ## Higher Risk When Beyond the settings mentioned, the risk is significantly compounded by disabling Lightning Web Security (LWS) or Lightning Locker, as this removes the critical namespace isolation that prevents a single compromised component from accessing data across your entire UI. Additionally, misconfigurations such as allowing "unsafe-inline" scripts in your CSP Trusted URLs or failing to implement IP session locking and clickjack protection create an environment where session-hijacking and "man-in-the-browser" attacks can bypass standard authentication. Furthermore, overly permissive Guest User profiles or broad "View All Data" permissions can turn a minor script injection into a full-scale automated data breach. ## Low or No Risk When Transitioning all users to the Lightning Experience and modern browsers acts as a primary deterrent by effectively deprecating the legacy Salesforce Classic and Internet Explorer attack vectors. Additionally, enforcing Multi-Factor Authentication (MFA) and Trusted or LOgin IP Range Restrictions ensures that even if a session is compromised via a cross-site script, it cannot be easily weaponized from an unauthorized device or location. ## Business and Integration Considerations Implementing these controls requires a comprehensive audit of legacy browser usage and third-party dependencies, as stricter CSP and template restrictions can disrupt custom Lightning components, external integrations, and legacy workflows. ## Recommended Remediation Update the Session Settings to enable Stricter Content Security Policy. ## Security Health Review Guidance Security Health Review inspects the session settings including stricter CSP to align with security standards on how resources are loaded on lightning pages. #### See Also - [Modify Session Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.admin_sessions.htm&release=264.0.0&type=5 "Use the Session Settings screen to configure session security. You can configure settings such as the session connection type, timeout restrictions, and IP address ranges to protect against malicious attacks.") # Content Sniffing Protection Control To prevent browsers from incorrectly interpreting files as executable scripts, Salesforce admins should enable "Enable Content Sniffing Protection" within the Session Settings menu. ## Control Name Content Sniffing Protection ## Recommended Configuration On the Session Settings Setup page, in the “Content Sniffing protection” section, select **Enable Content Sniffing protection**. ## Control Overview To prevent browsers from incorrectly interpreting files as executable scripts, Salesforce admins should enable **Enable Content Sniffing protection** within the Session Settings Setup page to enforce the X-Content-Type-Options: nosniff header. ## Security Risk If Not Configured Not enabling Content Sniffing Protection allows browsers to ignore the server's declared file type and "guess" the MIME type based on a file's content, creating a vulnerability where a browser can execute a harmless-looking file (like an image or text file) as a malicious script. This oversight significantly increases the risk of Cross-Site Scripting (XSS) and drive-by download attacks. ## Threat Scenarios An attacker uploads a malicious JavaScript payload disguised as a harmless .png or .txt file to a Salesforce Case or Experience Cloud portal. Without content sniffing protection enabled, an unsuspecting user's browser "guesses" the file's true nature and executes the hidden script, allowing the attacker to silently steal the user’s active session cookies and exfiltrate sensitive data. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations N/A ## Higher Risk When The risk of MIME sniffing is significantly compounded by a lack of a robust Content Security Policy (CSP), which would otherwise serve as a secondary defense to block the execution of unauthorized scripts. ## Low or No Risk When To offset the absence of content sniffing protection, organizations should implement a strict Content Security Policy (CSP) that explicitly blocks the execution of unauthorized or inline scripts, acting as a secondary firewall against "sniffed" payloads. Also, deploying automated malware and file-type scanning for all uploads ensures that malicious files—scripts disguised as images—are intercepted and neutralized before a browser ever has the chance to misinterpret them. ## Business and Integration Considerations N/A ## Recommended Remediation Enable content sniffing protection. ## Security Health Review Guidance Security Health Review inspects the Session Settings configuration to verify Content Sniffing Protection is enabled, aligning with industry best practice. #### See Also - [Modify Session Security Settings](https://help.salesforce.com/s/articleView?id=xcloud.admin_sessions.htm&release=264.0.0&type=5 "Use the Session Settings screen to configure session security. You can configure settings such as the session connection type, timeout restrictions, and IP address ranges to protect against malicious attacks.") # Context Definition for Stock Rotation Use the preconfigured context definition, StockRotationExecutionContext, to provide the data structure and mapping required to identify eligible inventory and calculate stock rotation benefits. This definition allows for the execution of Stock Rotation rules, ensuring integration between Stock Rotation Executions, Stock Rotation Execution Line Items, and Stock Rotation Claims. ### Required Editions
Available in: Enterprise, Unlimited, and Developer Editions that have Stock Rotation enabled.
The system calls the context definition whenever a user clicks **Simulate** or **Generate Claim** on the Stock Rotation Execution page. The context definition maps the data from Stock Rotation Execution Line Items (SREIs) and ensures it is persisted correctly. While the context definition handles the data mapping, the actual calculation of the "Calculated Amount" or the rebate claim is performed by the associated Expression Set. By default, the system automatically uses the StockRotationExecutionContext template. You can customize the context definition to suit your specific business requirements. Users can clone or extend the default context definition to add extra fields. For more information, see [Context Definitions](https://help.salesforce.com/s/articleView?id=ind.context_service_context_definitions.htm&type=5&language=en_US). # Context Definitions for Actionable Event Orchestrations for Connected Assets When an event is triggered in an asset, the event details are sent to Actionable Event Management via the Inbound Event API or the Actionable Orchestration Source Event platform event. The event's request payload contains the event's details. Create a context definition to represent the structure of an event's request payload. Then, use the context definition to supply the required event data to the execution procedure that perform the actions for the event. The nodes and attributes of the context definition must match the event attributes in the API payload. For example, if the request payload contains parameters for asset identifier, output power, health score, and activation status for a sensor error event, create a context definition with nodes that map to these parameters. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Consumer Goods, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
Context definitions contain a set of information required to execute a process and help in the efficient retrieval and usage of data across applications in Salesforce. To learn how to create a context definition, see [Create Context Definitions](https://help.salesforce.com/s/articleView?id=ind.context_service_create_context_definitions.htm&type=5&language=en_US). You can create multiple context definitions depending on the type of request payload structure you expect for each event type and subtype. You can also create multiple context mappings for the same context definition. You can add a context tags as variables in an execution procedure. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-connected_assets-264-0-0-production-enus/eb4c6dd7-4aef-4e97-9c56-46929d5b166e/images/icon_example.png) Example Durkheim Coolers is a food processing technologies company that wants to trigger orchestrations for critical issues in their air distribution systems, such as low airflow rate, high particulate matter level, and malfunctioning filters. The events originate in the telematics system, are sent to the integration layer, and then sent to Salesforce. The type of data that’s sent from the external telematics system for such events has fixed attributes that describe the event. Here’s a typical request payload. `{ "eventId" : "123", "assetUniqueIdentifier": "FOA1234", "eventType": "PerformanceAndDiagnostic", "eventSubtype": "MalfunctioningFilters", "eventCategory" : "Notification", "event data": [{ "priority": "High", "eventProviderId": "P123", "airflowRate" : "1001", "particulateMatterLevel" : "1001", "filterStatus" : "string", "ambientTemperature" : "1001", "ventilationPerformance" : "1001", "eventTriggeredDate": "2023-05-16T15:13:41.236Z" }], "faults": [{ "code": "string", "type": "string", "description": "string", "resolutionType": "string", "codeSensorValues": "string", "freezeFrameId": "string" }], }, "signals": [{ "value": "string", "timeStamp": "2023-05-16T15:13:41.236Z", "dataType": "string", "unit": "string", "name": "string"}` The admin creates a context definition called Air Distribution System Diagnostics Events. Review the node structure of the context definition that corresponds to the event data attributes in the request payload.
Node Name Node Level Attributes
Event Parent Node
  • correlationId
  • assetUniqueIdentifier
  • assetType
  • eventId
  • id
  • priority
  • eventProviderId
  • eventTriggeredDate
Faults Child of Event Node
  • ParentReference
  • faultCode
  • faultType
  • faultDescription
  • faultResolutionType
  • faultCodeSensorValues
  • freezeFrameId
  • code
Event Data Child of Event Node
  • ParentReference
  • priority
  • airflowRate
  • particulateMatterLevel
  • filterStatus
  • ambientTemperature
  • ventilationPerformance
  • eventTriggeredDate
Signal Child of Event Node
  • ParentReference
  • value
  • unit
  • name
  • timestamp
  • dataType
Additional Event Attributes Child of Event Node
  • ParentReference
  • key
Actions Child of Event Node
  • ParentReference
  • recordAlertSubject
  • recordAlertDescription
  • actionName
The admin can specify which attributes are used as input and which attributes are used as output in the execution procedure. For example, the Event Provider ID is an input value used to identify the external telematics system as the source of the event. But the Asset Unique Identifier is both an input and an output because Durkheim Coolers wants to create a record alert for each malfunctioning filters event triggered for a specific asset. Each node and attribute of the context definition has a corresponding context tag. When designing the execution procedures, users can easily identify the attributes from the context tags # Continuation in Long-Running Calls To support long-running calls, Salesforce provides Apex Continuations. If your Omniscript calls a long-running Integration Procedure or Apex class, you can enable continuation. If your Flexcard calls a long-running Integration Procedure that has an HTTP action or a Remote Action, you can enable continuation. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Beginning Winter ‘23, Flexcards supports long-running calls from an Integration Procedure that have an HTTP Action or a Remote Action. For Flexcards that call long-running Integration Procedures that have an HTTP Action or a Remote Action, enable continuation support by adding a new Options Map to the Integration Procedure data source. Enter `useContinuation` as the key and `true` as the value. For Omniscripts that call long-running Integration Procedures, check the **Use Continuation** setting in the Integration Procedure Action. For Omniscripts that call Apex classes using Remote Actions, you have two options: - [Make a Long-Running Remote Call Using VlocityContinuationIntegration](https://help.salesforce.com/s/articleView?id=xcloud.os_make_a_long_running_remote_call_using_vlocitycontinuationintegration_56432.htm&release=264.0.0&type=5 "To support long-running remote calls, Vlocity supports the use of the Salesforce Continuation object. The VlocityOpenInterface2 interface and VlocityContinuationIntegration class support normal Remote Calls and Remote Calls that use the Continuation Object. For the new Apex classes, don’t use VlocityOpenInterface.") — This approach is older, still supported but deprecated. - [Make a Long-Running Remote Call Using Omnistudio.OmniContinuation](https://help.salesforce.com/s/articleView?id=xcloud.os_make_a_long_running_remote_call_using_omnistudio_omnicontinuation_56479.htm&release=264.0.0&type=5 "To support long-running remote calls, Vlocity supports the use of the Salesforce Continuation object.") — This approach is recommended because it's namespace-independent. - **[Make a Long-Running Remote Call Using VlocityContinuationIntegration](https://help.salesforce.com/s/articleView?id=xcloud.os_make_a_long_running_remote_call_using_vlocitycontinuationintegration_56432.htm&release=264.0.0&type=5)** To support long-running remote calls, Vlocity supports the use of the Salesforce Continuation object. The VlocityOpenInterface2 interface and VlocityContinuationIntegration class support normal Remote Calls and Remote Calls that use the Continuation Object. For the new Apex classes, don’t use VlocityOpenInterface. - **[Make a Long-Running Remote Call Using Omnistudio.OmniContinuation](https://help.salesforce.com/s/articleView?id=xcloud.os_make_a_long_running_remote_call_using_omnistudio_omnicontinuation_56479.htm&release=264.0.0&type=5)** To support long-running remote calls, Vlocity supports the use of the Salesforce Continuation object. # Continuation in Long-Running Calls (Managed Package) For the managed package runtime, to support long-running calls, Salesforce provides Apex Continuations. If your Omniscript calls a long-running Integration Procedure or Apex class, you can enable continuation. If your Flexcard calls a long-running Integration Procedure that has an HTTP action or a Remote Action, you can enable continuation. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Beginning Winter ‘23, Flexcards supports long-running calls from an Integration Procedure that have an HTTP Action or a Remote Action. For Omniscripts that call long-running Integration Procedures, check the **Use Continuation** setting in the Integration Procedure Action. For Omniscripts that call Apex classes using Remote Actions, you have two options: - [Make a Long-Running Remote Call Using VlocityContinuationIntegration (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_make_a_long_running_remote_call_using_vlocitycontinuationintegration.htm&release=264.0.0&type=5 "For the managed package runtime, to support long-running remote calls, Vlocity supports the use of the Salesforce Continuation object. The VlocityOpenInterface2 interface and VlocityContinuationIntegration class support normal Remote Calls and Remote Calls that use the Continuation Object. For the new Apex classes, don’t use VlocityOpenInterface.") — This approach is older, still supported but deprecated. - [Make a Long-Running Remote Call Using Omnistudio.OmniContinuation (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_make_a_long_running_remote_call_using_omnistudio_omnicontinuation.htm&release=264.0.0&type=5 "For the managed package runtime, to support long-running remote calls, Vlocity supports the use of the Salesforce Continuation object.") — This approach, available in Summer '21 or later, is recommended because it's namespace-independent. - **[Make a Long-Running Remote Call Using VlocityContinuationIntegration (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_make_a_long_running_remote_call_using_vlocitycontinuationintegration.htm&release=264.0.0&type=5)** For the managed package runtime, to support long-running remote calls, Vlocity supports the use of the Salesforce Continuation object. The VlocityOpenInterface2 interface and VlocityContinuationIntegration class support normal Remote Calls and Remote Calls that use the Continuation Object. For the new Apex classes, don’t use VlocityOpenInterface. - **[Make a Long-Running Remote Call Using Omnistudio.OmniContinuation (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_make_a_long_running_remote_call_using_omnistudio_omnicontinuation.htm&release=264.0.0&type=5)** For the managed package runtime, to support long-running remote calls, Vlocity supports the use of the Salesforce Continuation object. # Continue in Agentforce to Ask About the AI Relationship Research Graph Pass the relationship graph context to Agentforce to ask follow-up questions and take action on the connections surfaced by AI Relationship Research. 1. Click **Ask** in the AI Relationship Research component. The Agentforce side panel opens with the relationship context pre-loaded. 2. Enter your question. Agentforce responds based on the relationship data surfaced by AI Relationship Research. # Control Access and Security for Customizable Mobile Home Page Customizable Mobile Home Page is a beta feature, and you enable it before using. 1. From Setup, in the Quick find box, enter Mobile. 2. Select **Salesforce Mobile App**. 3. Enable **Customizable Mobile Home Page (Beta)**. Users are allowed to make their own customizations by default when you enable this feature. If you don't want them to customize their own apps, you can disable the **Allow users to customize their Salesforce Mobile App home page based on their business needs** option. When creating a configuration in the mobile builder, you assign the configuration to user profiles. For more information, see [Control Access and Security for the Salesforce Mobile App](https://help.salesforce.com/s/articleView?id=xcloud.salesforce_app_security.htm&type=5&language=en_US). # Control Access and Security for the Salesforce Mobile App By default, all users in your organization can log in to Salesforce for Android and iOS. However, you can control access to all versions of the Salesforce mobile app and configure security policies through a mix of settings and connected app attributes. ### Required Editions
Setup for the Salesforce mobile app available in: both Salesforce Classic and Lightning Experience
Setup available in Salesforce Classic in: all editions except Database.com
Setup available in Lightning Experience in: Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To edit your Salesforce for Android and Salesforce for iOS settings: Customize Application
To view your Salesforce for Android and Salesforce for iOS settings: View Setup and Configuration
## Settings You can turn on and turn off onboarding tips, feedback, and the importing of contacts from the Salesforce Settings page. These settings apply to your full org. From Setup, enter Settings in the Quick Find box, then select **Salesforce Settings**. ## Connected Apps You can control security and access for the Salesforce mobile app using settings components that are installed from the managed Salesforce connected apps package. You can view and edit the settings for each of the apps, including controlling user access with profiles, permissions, and IP range restrictions, from the Manage Connected Apps page. The Salesforce for Android and Salesforce for iOS components are automatically installed when one of your users installs the Salesforce mobile app from the App Store or Google Play on a mobile device and authenticates with your organization by logging in to the Salesforce mobile app. Alternatively, you can manually install [Salesforce and Chatter Apps connected apps package](https://appexchange.salesforce.com/listingDetail?listingId=a0N3000000B4cUuEAJ) so you can review and modify the default security and access settings before rolling out the Salesforce mobile app to your users. From Setup, enter Connected Apps in the Quick Find box, then select **Manage Connected Apps**. Click **Edit** for the app you want to modify. ## Connected App Attributes You can use connected app custom attributes to manage in-app security policies, such as disabling copying and pasting from the Salesforce mobile app. Several of the Salesforce mobile app custom attributes have a default value that automatically applies when a user logs in to Salesforce for Android or Salesforce for iOS. If the values are appropriate for your org, you’re all set. To change a default value, or configure an attribute that doesn’t have a default setting, go to Setup. Enter Connected Apps in the Quick Find box, select **Manage Connected Apps**, then click the name of the connected app you want to modify. In the Custom Attributes section on the connected app page, click **New** and enter the attribute name and value. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_important.png) Important Remember to wrap attribute values in quotation marks.
Attribute Key Attribute Value Platform Description
DISABLE_ACTIVITY_TIMELINE
  • TRUE
  • FALSE
iOS
  • If set to TRUE, disables the mobile activity timeline on supported record types.
  • If set to FALSE, enables the mobile activity timeline for leads, opportunities, accounts, and contacts. On these record types, iOS users can view all of the tasks, events, and emails associated with a record in one convenient feed.
DISABLE_EXTERNAL_PASTE
  • TRUE
  • FALSE
Android, iOS
  • If set to TRUE, disables copying and pasting within and outside of the Salesforce mobile app.
  • If set to FALSE (default if attribute value isn't defined), lets users copy and paste within and outside of the Salesforce mobile app.
  • The DISABLE_EXTERNAL_PASTE attribute doesn’t affect Share extensions on iOS.
ENABLE_SHARE
  • TRUE
  • FALSE
Android, iOS
  • If set to TRUE (default if attribute value isn’t defined), lets users share a direct link to a page via the share icon.
  • If set to FALSE, removes the share icon from all shareable pages in the Salesforce mobile app.
  • Note that users can still select "share" in the iOS popup menu. The ENABLE_SHARE attribute only removes the share icon from the Salesforce mobile app. For information on controlling the "Share" menu on iOS, see Enhanced Mobile App Security.
FORCE_EMAIL_CLIENT_TO

The email app’s URI scheme.

Can differ by platform. For example, here's an Android URI scheme example for Blue Mail, and an iOS URI scheme example for Gmail.

Android:

https://play.google.com/store​/apps/details?id​=me.bluemail.mail&hl

iOS:

googlegmail:///​co?to=

Android, iOS

If a user taps on an email action in the Salesforce mobile app, the user is directed to the email app specified in the attribute value.

You can specify one email app only.

The attribute value that you enter depends on the email app and the device platform.

  • For Android, use the URI listed in the Google Play Store for the desired email app.
  • For iOS, do an Internet search to locate the URI scheme for the desired email app. For example, search for iOS Mail URI scheme.
  • On 3D Touch® devices, a user is able to select from all available email clients when they touch and hold an email address on Visualforce pages and record pages.
HIDE_SEARCH_ICON_FOR_LIGHTNING_APP
  • ”APP_NAME_1,APP_NAME_2”
  • The value is a string wrapped in quotes containing one or more lightning app developer names, separated by commas. Don’t include spaces. Example value: “gCRM_Relationship_360,GCRM_Global_CRM”
Android, iOS

With this custom attribute defined and set for an app developer name, users don’t see the global search icon in the top navigation of that app.

Note that this attribute only hides the global search icon for the specified Lightning apps. It doesn’t hide the global search icon from the Salesforce mobile app itself (Chatter for iOS or Chatter for Android).

SHOW_OPEN_IN
  • TRUE
  • FALSE
Android, iOS
  • If set to TRUE, lets users share a file from the Salesforce mobile app via a link to the file, or open a Salesforce file in a third-party app.
  • If set to FALSE, disables users from sharing a file from the Salesforce mobile app or opening a Salesforce file in a third-party app.
SHOW_PRINT
  • TRUE
  • FALSE
iOS
  • If set to TRUE, lets users print from the Salesforce mobile app.
  • If set to FALSE, disables printing from the Salesforce mobile app.
![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_tip.png) Tip Connected app attribute changes take effect when users force quit the Salesforce mobile app or when they log in to a new session. To make sure that new or modified settings take effect for all users, we recommend that you revoke access to the Salesforce mobile app so everyone is required to log in again. We also recommend that you warn users about the changes you intend to make, especially if you’re going to restrict activities that were previously available. The Salesforce mobile app doesn’t show messages or indicators that connected app settings have changed. # Control Access to Browser Features To control whether requests to an external (non-Salesforce) server or URL can access the user’s camera and microphone, enable the Permissions-Policy HTTP header. Then select when to allow access to each of these browser features. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Contact Manager, Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To modify session security settings: Customize Application
1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Session Settings**. 2. In the Browser Feature Permissions section, select **Include Permissions-Policy HTTP header**. When this setting is disabled, all external apps and websites loaded from Salesforce can access the user’s camera and microphone. 3. For Camera and Microphone, select when requests from Salesforce can access the browser feature. 1. For the most granular control over access to this browser feature, select **Trusted URLs Only**. After you select this recommended setting, specify trusted URLs and the browser features that they can access from the Trusted URLs Setup page. 2. To grant access to this browser feature for all external apps and websites loaded from Salesforce, select **Always**. 3. To block access to the browser feature for all external apps and websites loaded from Salesforce, select **Never**. If you select Never, even scripts from Salesforce domains can’t access the browser feature. 4. Save your changes. #### See Also - [Manage Trusted URLs](https://help.salesforce.com/s/articleView?id=xcloud.security_trusted_urls_manage.htm&release=264.0.0&type=5 "Specify the URLs that you trust to interact with your users and network. Use Content Security Policy (CSP) directives to control the types of resources that Lightning components, third-party APIs, and WebSocket connections can load from each trusted URL. If you enabled the Permissions-Policy HTTP header in Session Settings, you can also control which URLs can access browser features from Salesforce.") # Control Authorization with Custom Profiles and Roles In identity and access management, it's important to control who is authorized to access resources. You can manage authorization by assigning your users profiles and roles. Profiles define how users access data and what they can do in Salesforce. Roles allow you to create a user hierarchy so that users can access data owned or shared by subordinates. Salesforce provides standard profiles with pre-configured permissions and settings that define authorization. For more fine-grained control, you can clone a standard profile and edit its permissions. To modify a standard profile and assign it to a user, take these steps. 1. From Setup, in the Quick Find box, enter Profiles, then select **Profiles**. 2. Next to External Identity User, click **Clone**. 3. Enter a name for the profile and save. 4. To customize the profile, click **Edit**. You can modify the permissions associated with the profile. 1. Click **Edit**. 2. Search for API Enabled, and then select the checkbox next to this permission. API Enabled gives users API access to your org’s data through any back-end mechanism. 3. Click **Save**. 5. Create a role structure. Sites require a user role hierarchy to help control how users share Salesforce data. Assign a role to the user who manages your site. 1. From Setup, enter Role in the Quick Find box, then select **Roles**. 2. From the dropdown list, select **Product-based Sample**, then select **Set Up Roles**. 3. Under CEO, click **Add Role**. 4. For the role label, enter Customer Manager. 5. Click **Save**. 6. Add the Customer Manager role to the user site manager so that the manager can modify the Customer profile. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note The person who manages the site for your company must have a role. However, you can’t assign roles to users who have the External Identity license, which enables access to the Salesforce Customer Identity product. 1. From Setup, enter Users in the Quick Find box, then select **Users**. 2. Next to your username, click **Edit**. 3. Under Role, select **Customer Manager**. 4. Click **Save**. You’ve now learned the basics of authorizing users. For more information about configuring authorization, check out the [Data Security](https://trailhead.salesforce.com/module/data_security) Trailhead module. For more information about creating users and securing access, see the [User Management](https://trailhead.salesforce.com/module/lex_implementation_user_setup_mgmt) Trailhead module. # Control Authorization with Custom Profiles and Roles Control This control requires Salesforce admins to clone the standard "External Identity User" profile to create a custom version. ## Control Name Control Authorization with Custom Profiles and Roles ## Recommended Configuration Clone and customize "External Identity User". ## Control Overview This control requires admins to clone the standard "External Identity User" profile to create a custom version, so that only the absolute minimum permissions needed for a specific community are enabled. ## Security Risk If Not Configured Overly permissive access controls grant unnecessary data access to unauthorized users. ## Threat Scenarios Experience Cloud (Community) users assigned the standard or default External Identity User profile scrape sensitive PII or perform internal member reconnaissance for spear-phishing. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Relying on uncustomized profiles leads to over-permissioning, where sensitive data is inadvertently exposed to thousands of external users, resulting in a significant breach of privacy and non-compliance with data residency laws. ## Higher Risk When The standard profile is used for high-traffic public portals or when the company has not yet enforced a "Private" external sharing model across all objects. ## Low Risk When The custom profile is paired with Permission Set Groups to add back specific access, allowing the base profile to remain "locked down" to almost zero permissions. ## Business and Integration Considerations Customizing profiles requires a thorough mapping of the community user's "Journey" to make sure that removing standard permissions doesn't break essential features like password resets or self-registration. ## Recommended Remediation Go to Profiles, clone the "External Identity User" profile, name it according to its specific function, and then systematically disable all non-essential object, field, and system permissions. ## Security Health Review Guidance Security Health Review identifies the use of custom, "cloned" profiles as a foundational step in creating a secure external perimeter, making sure that no guest or customer user ever inherits default Salesforce "Standard" permissions. #### See Also - [External Identity License Details](https://help.salesforce.com/s/articleView?id=platform.users_license_types_external_identity.htm&type=5&language=en_US) - [Control Authorization with Custom Profiles and Roles](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_set_up_profiles.htm&type=5&language=en_US) # Control Login Access Policies Control whether your users are prompted to grant account access to Salesforce admins, and whether users can grant access to publishers. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Available in: all editions

Granting administrator access available in: Enterprise, Performance, Unlimited, Developer, and Database.com Editions

User Permissions Needed
To control login access policies: Manage Login Access Policies
1. From Setup, enter Login Access Policies in the Quick Find box, then select **Login Access Policies**. 2. To allow admins to log in as any user in the org without first asking them to grant access, enable **Administrators Can Log in as Any User**. To have this feature removed from your org, contact Salesforce. If you remove the feature, a user must grant login access before an admin can log in to that user’s account for troubleshooting. 3. To prevent users from granting access to a publisher—for example, to comply with regulatory or privacy concerns—click **Available to Administrators Only** for that publisher. 4. Click **Save**. Users can’t grant login access to managed packages that are licensed to your entire Salesforce org. Only admins with the Manage Users permission can grant access to these publishers. Also, some managed packages don’t have login access. If a package isn’t listed on the Login Access Policies page, login access isn’t available for that package. The org listed in the Support Organization column, is the [License Management Org](https://developer.salesforce.com/docs/atlas.en-us.pkg2_dev.meta/pkg2_dev/lma_install_app.htm) that owns the managed package. When multi-factor authentication (MFA) is enabled for your org, admins can still log in as another user. There’s only one scenario where an admin needs to coordinate with a user to have them respond to an MFA challenge: when the user's profile requires a High Assurance session at login, but the admin is logged in with a standard security session level. To avoid this situation, admins should always log in using MFA, which automatically results in a High Assurance session. See [Multi-Factor Authentication](https://help.salesforce.com/s/articleView?id=xcloud.security_overview_2fa.htm&type=5&language=en_US). # Control User Access to Your Experience Cloud Site Set your Experience Cloud site’s profile to control customer and partner access. The external identity profile enables single sign-on access to your site. After you add the external identity profile, all customers and partners assigned to that profile become members of the site. You can also assign new users to the profile when they sign up. 1. If you haven’t already done so, clone and customize the external identity profile as described in [Control Authorization with Custom Profiles and Roles](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_set_up_profiles.htm&type=5&language=en_US). 2. Set up site membership from the Members page of the Administration workspace. 1. From Setup, enter Digital Experiences in the Quick Find box, select **All Sites**, and click **Workspaces** next to your site. 2. Select **Members**. 3. From the search list, select **All**. 4. From the list of available profiles, locate the Customers profile that you created earlier, and click **Add** to add it to the selected profiles. 5. Click **Save**. Salesforce updates the membership for your Experience Cloud site. When done, Salesforce sends an email to your site members. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note If you prefer, you can control user access using permission sets. # Control User Access to Your Experience Cloud Site Control This control involves explicitly adding specific Profiles or Permission Sets to the "Members" section of a site’s Administration settings to define exactly which user groups are authorized to log in. ## Control Name Control User Access to Your Experience Cloud Site ## Recommended Configuration Set the Experience Cloud site’s profile to control customer and partner access. ## Control Overview This control involves explicitly adding specific Profiles or Permission Sets to the "Members" section of a site’s Administration settings to define exactly which user groups are authorized to log in. ## Security Risk If Not Configured If you do not add the appropriate profiles or permission sets to your Experience Cloud site’s membership, users (customers or partners) cannot access the site. Unintended data exposure may occur through Guest user access, or misconfigured Experience site profiles. ## Threat Scenarios An internal employee or an external partner with a valid Salesforce login discovers the URL of a highly sensitive "Executive Portal" and successfully logs in because their profile was broadly included in the site’s membership list. ## Estimated CVSS Score Range High (7.0–8.9). ## Risk Impact Considerations Improper membership management results in cross-site data exposure and unauthorized access to proprietary community content, potentially compromising sensitive data. ## Higher Risk When - The site handles sensitive data. - Standard or default profiles are used, or other high-privilege internal profiles are added to external-facing sites, as this creates a bridge for internal data to leak into the public-facing community. ## Low Risk When - The site is intended to be a public informational knowledge base. - The company uses a unique profile to site mapping, making sure that a user’s permissions are tailored to the specific community they are accessing. ## Business and Integration Considerations Balancing ease of access with the need for data protection. ## Recommended Remediation Define a custom profile with the minimum access required, following the principle of least privilege that grants access to your Experience cloud site. Navigate to Experience Workspaces>Administration>Members, and make sure only the specific custom Profiles and Permission Sets required for that site are moved to the "Selected Profiles" list. ## Security Health Review Guidance Security Health Review identifies if you have not configured a profile to control login access to your Experience Cloud site, and recommends defining using a custom profile following the principle of least privilege. #### See Also - [Control User Access to Your Experience Cloud Site](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_create_community_profiles.htm&type=5&language=en_US) - [Control Authorization with Custom Profiles and Roles](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_set_up_profiles.htm&type=5&language=en_US) - [Securely Share Your Experience Cloud Sites with Guest Users](https://help.salesforce.com/s/articleView?id=platform.networks_secure_community.htm&type=5&language=en_US) # Control Where You Send Users for Authorization When you set up a Salesforce authentication provider, use an authorization endpoint host request parameter to send users to a specific page to approve authorization requests. You can use this parameter only for Salesforce authentication providers. You can’t use it to send users to an authorization page outside of a Salesforce domain. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

In an authentication provider single sign-on (SSO) flow, the relying party initiates authorization by redirecting the user to the authorization endpoint. To direct users to an authorization endpoint for a custom domain, such as a My Domain login URL, add an authorization endpoint host parameter to a Salesforce client configuration URL. For example, you set up a Salesforce authentication provider and configure SSO with your custom Your Benefits connected app. You add an authorization endpoint host request parameter to your SSO client configuration URL to send users to a specific Salesforce domain for authorization. A user goes to the Your Benefits app to log in. The user is redirected to the authorization endpoint to provide their Salesforce credentials. At this endpoint, Salesforce asks the user to approve access to data in the Your Benefits app. To direct your users to a specific Salesforce authorization endpoint, add the provAuthorizeEndpointHost request parameter to a client configuration URL with a valid HTTPS host. Query strings appended to the host URL are ignored. However, you can specify a site path. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_example.png) Example Here’s an example of a provAuthorizeEndpointHost parameter added to the Single Sign-On Initialization URL to send users to a My Domain for authorization, where: ``` https://login.salesforce.com/services/auth/sso/orgID/ URLsuffix?provAuthorizeEndpointHost=https://MyDomainName.my.salesforce.com ``` - orgID is your Salesforce Authentication Provider ID. - URLsuffix is the value you specified when you [set up your Salesforce authentication provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_sfdc.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) between two Salesforce orgs, configure a Salesforce authentication provider. Your users can log in to one org, the relying party, by using credentials from an identity provider org."). Here’s an example of the provAuthorizeEndpointHost parameter being used to direct users to a site URL for authorization. ``` https://login.salesforce.com/services/auth/sso/orgID/ URLsuffix?provAuthorizeEndpointHost=https://MyDomainName.my.site.com%2Fbilling ``` If you don’t specify an authorization endpoint, Salesforce uses the default authorization endpoint for the Salesforce authentication provider. If no default is set for the authentication provider, Salesforce uses the endpoint for login.salesforce.com. Changing the authorization endpoint doesn’t influence the token endpoint, which remains the configured or default host. For sandbox and production instances, it’s important for the authorization endpoint and token endpoint to match. For example, your provider is set to use a production token endpoint. If you set the authorization endpoint to a sandbox instance, the flow fails because only the sandbox instance granted authorization. To fix this error, change the authorization endpoint to a production instance to match the token endpoint. #### See Also - [Add Functionality to an Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params.htm&release=264.0.0&type=5 "After you set up single sign-on (SSO) with an authentication provider, Salesforce generates several client configuration URLs, such as the Single Sign-On Initialization URL. These client configuration URLs support request parameters, which you can use to add functions to your authentication provider. For example, use these parameters to get customized permissions from the third party or direct users to a specific location after authenticating.") # Control Who Sees What Salesforce uses a layered security model where Object and Field Permissions define the baseline for data access (CRUD), while Administrative, User, and Custom Permissions grant specific functional capabilities and system-level authority. ## Control Name Permission Control ## Recommended Configuration - User Permissions - Permission Sets | App Permissions | System Permissions - Object Permissions - Object Access | Enable Reports | Track Activities | Track Field History - Field Permissions - Set Field-Level Security - Visible | Read-Only - Revoke Permission - Setup | Select A User | View Summary | Manage Assignments ## Control Overview Salesforce uses a layered security model where Object and Field Permissions define the baseline for data access (CRUD), while Administrative, User, and Custom Permissions grant specific functional capabilities and system-level authority. To maintain a secure environment, these permissions are managed through Profiles and Permission Sets, allowing administrators to define precisely user scope and use revocation mechanisms to strip access immediately when it is no longer required or if a security threat is identified. ## Security Risk If Not Configured Failure to properly configure object, field, and administrative permissions creates a significant risk of privilege access and unauthorized data exposure, where users can view or modify sensitive business records and system settings far beyond their job requirements. Compromised accounts may retain persistent access, leading to unauthorized data exfiltration. ## Threat Scenarios A malicious insider accessing through a compromised account and because administrative and object-level permissions were not strictly managed or revoked upon the user's role change, the attacker quietly exfiltrates proprietary intellectual property and sensitive financial records without triggering traditional security alerts. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Risk severity depends on the type of users, user population size, type of data stored. ## Higher Risk When When the foundational controls for Object, Field, and Administrative permissions are misconfigured, several items below can increase the risk such as lack of API access control, excessive System Administrator, Modify All Data and View All Data permission assignment, lack of IP login restriction, and unrestricted export and reporting permission. ## Low or No Risk When This control can be considered low risk when one or more of the following are implemented: - Transaction Security Policies (Salesforce Shield): Create policies that trigger an MFA challenge or block the action entirely if a user attempts a high-risk activity, such as exporting more than a certain number of records or accessing sensitive data from an unrecognized IP address. - Login IP Ranges and MFA: By enforcing Login IP Ranges at the Profile level, make sure that users can only access the system from trusted corporate networks (or VPNs). Combined with Multi-Factor Authentication (MFA), this drastically reduces the risk of credential-based attacks. ## Business and Integration Considerations Perform a thorough business impact analysis to make sure that tightening object and field access doesn't inadvertently block critical cross-departmental workflows or cause high-priority automated integrations to fail. ## Recommended Remediation Implement the principle of least privilege when assigning permissions, perform periodic review to analyze and report on user permissions to identify "over-privileged" users. ## Security Health Review Guidance N/A - Currently not inspected by the Security Health Review tool. #### See Also - [Revoke Permissions and Access](https://help.salesforce.com/s/articleView?id=platform.permissions_revoking_access.htm&type=5&language=en_US) - [Custom Permissions](https://help.salesforce.com/s/articleView?id=platform.custom_perms_overview.htm&type=5&language=en_US) - [Field Permissions](https://help.salesforce.com/s/articleView?id=platform.users_profiles_field_perms.htm&type=5&language=en_US) - [Object Permissions](https://help.salesforce.com/s/articleView?id=platform.users_profiles_object_perms.htm&type=5&language=en_US) - [User Permissions](https://help.salesforce.com/s/articleView?id=platform.admin_userperms.htm&type=5&language=en_US) # Control Who Sees What in Loyalty Management Your Salesforce admin enables Loyalty Management in your org. When enabled, users have edit access to loyalty objects and records. Users can create profiles and assign permissions to access loyalty application as appropriate. - **[Loyalty Management Permission Sets](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_permission_sets.htm&release=264.0.0&type=5)** Give users in your org the required access to Loyalty Management features. Use the permission sets provided by Salesforce, or clone the default permission sets to create role-based custom permission sets for the users. - **[Loyalty Management Permissions](https://help.salesforce.com/s/articleView?id=xcloud.sharing_rules.htm&release=264.0.0&type=5)** Provide permissions to invocable actions, user interface actions, and connect APIs. Use sharing rules to share and control access of loyalty records for users. - **[Implement Field-Level Security in Loyalty Management](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_fls.htm&release=264.0.0&type=5)** Field-level security settings let you restrict users’ access to view and edit specific fields. # Control Workloads Using Scheduling Constraints Constraints establish maximum boundaries for work hours and shift assignments. Attach constraints directly to individual service resource records or broader service territory records. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-shift_management-264-0-0-production-enus/56d2b978-c392-4b70-abea-2bde01cc67c9/images/icon_note.png) Note You can create up to 50 scheduling constraints. A scheduling rule looks first for a constraint on the service resource. If there isn't one, then the rule looks for a scheduling constraint on the service territory. If you don't know what limits to set, it's OK to set up constraints with empty values. 1. Open **Scheduling Constraints** in the App Launcher. 2. Click **New**. 3. Name your scheduling constraint, and fill in the related details. 4. Save your changes. 5. Open **Service Resources** or **Service Territories** from the App Launcher. 6. Click to open an individual service resource or service territory page. 7. Scroll to the Scheduling Constraints field, add your constraint, and save your changes. #### See Also - [Accelerate Implementation with the Configuration Checklist](https://help.salesforce.com/s/articleView?id=xcloud.shifts_setup_checklist.htm&release=264.0.0&type=5 "Configure these core items before creating and assigning shifts.") - [Match Qualified Talent Using Skills and Certifications](https://help.salesforce.com/s/articleView?id=xcloud.shifts_create_assign_skills.htm&release=264.0.0&type=5 "Create and assign skills that represent certifications and expertise, like Electrician Certification or Tier 2 Support. Assign skills to worker records so scheduling tools match qualified candidates to shifts that require those skills.") - [Enforce Hard Boundaries with Scheduling Rules](https://help.salesforce.com/s/articleView?id=xcloud.shifts_create_sched_rule.htm&release=264.0.0&type=5 "Rules establish strict requirements that candidates must pass to be considered for a shift.") - [Drive Strategic Goals Through Scheduling Objectives](https://help.salesforce.com/s/articleView?id=xcloud.shifts_create_sched_objective.htm&release=264.0.0&type=5 "Objectives score eligible candidates based on business priorities. Planners and administrators set scheduling objectives to optimize scheduling.") # Control Your Authentication Provider User Experience When you set up single sign-on (SSO) with an authentication provider for your Salesforce Experience Cloud site, use the expid request parameter to deliver different experiences to users. ### Required Editions
Available in: Lightning Experience and Salesforce Classic
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view the settings: View Setup and Configuration
To edit the settings:

Customize Application

AND

Manage Auth. Providers

For example, you set up a Facebook authentication provider and configure SSO with your site as the relying party. You want to send Spanish-speaking users through a different registration process than Italian-speaking users. So you modify the registration handler and add the expid parameter to your SSO client configuration URL. The registration handler can now detect whether a user comes from the Spanish or Italian version of Facebook. When a Spanish-speaking user signs up for your site with their Facebook credentials, the registration handler records the user’s minimum age. If the user comes from the Italian version of Facebook, the handler doesn’t. To deliver different user experiences, add the expid parameter to a client configuration URL. - For the Single Sign-On Initialization URL, Salesforce provides the experience specified by the expid parameter after they log in with their third-party credentials. - For the Existing User Linking URL, the **Continue to Salesforce** link on the confirmation page leads to the experience specified by the expid parameter. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_example.png) Example Here’s an example of an expid parameter added to the Single Sign-On Initialization URL, where: - site-url is the URL for the site. - auth\_provider is the name of the authentication provider. - expid=sp indicates that the user comes from the Spanish version of the website. ``` site-url/services/auth/sso/auth_provider/?expid=sp ``` ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note In Spring ’18, we optimized authentication provider URLs to improve performance and reduce the number of redirects. To make sure that you have the correct URLs, from [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. Click the name of your authentication provider, and find the client configuration URLs in the Salesforce Configuration section. #### See Also - [Configure a Salesforce Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_sfdc.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) between two Salesforce orgs, configure a Salesforce authentication provider. Your users can log in to one org, the relying party, by using credentials from an identity provider org.") - [Add Functionality to an Authentication Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params.htm&release=264.0.0&type=5 "After you set up single sign-on (SSO) with an authentication provider, Salesforce generates several client configuration URLs, such as the Single Sign-On Initialization URL. These client configuration URLs support request parameters, which you can use to add functions to your authentication provider. For example, use these parameters to get customized permissions from the third party or direct users to a specific location after authenticating.") # Controlled Setting Edition: What’s Different or Unavailable in Controlled Setting Edition Controlled Setting Edition and Controlled Setting products are versions of Salesforce applications that give customers enhanced control of data flows within Salesforce. The Controlled Setting Edition restricts the use of features that require connections outside of Salesforce. Because of this isolation restriction, some features are unavailable. Controlled Setting Products also restrict the use of features that require external connections or that are turned off by default. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note This document details the features that require outbound or external connections. Customers and their system administrators that choose to enable a feature turned off by default will need to verify if any external connection(s) become enabled prior to turning on that previously disabled feature as described below. As the Controlled Setting offerings evolve, the list of unavailable or disabled features might change. Check this document after each release for the most current information. ## Unavailable or Disabled Products, Features, and Settings
Product, Feature, or Setting Available with Differences Not Available Notes
AI Platform
Agentforce   Checkmark icon indicating true Includes all agent related features and functionality
AI Platform (Einstein for Platform)   Checkmark icon indicating true AI platform and related products and features are not available.
Einstein 1 Editions   Checkmark icon indicating true  
Einstein Activity Capture   Checkmark icon indicating true Activity capture functionality is not available.
Einstein Bots   Checkmark icon indicating true  
Einstein Co-Pilot   Checkmark icon indicating true  
Einstein Next Best Action   Checkmark icon indicating true  
Einstein Prediction Builder   Checkmark icon indicating true Prediction Builder and related features are unavailable.
Einstein Prompt Builder   Checkmark icon indicating true  
Einstein Recommendation Builder   Checkmark icon indicating true Recommendation builder and related Article/Reply Recommendations are unavailable.
Generative AI   Checkmark icon indicating true All Generative AI capabilities including; Sales Emails, Call Summaries, Call Explorer, Service Replies and Knowledge-Grounded Emails, Conversation Summaries and Conversation Catch Up, Search Answers for Customers and Agents, and Knowledge Creation, are not available.
Analytics
CRM Analytics Checkmark icon indicating true   Recipes are not available in Government Cloud Premium.
Data Processing Engine Checkmark icon indicating true   Data Processing Engine is disabled in the CRMA runtime.
Tableau Cloud   Checkmark icon indicating true  
Tableau Next   Checkmark icon indicating true  
Commerce
Commerce Cloud   Checkmark icon indicating true B2B and B2C commerce cloud and associated products are not available.
Core Platform
Adoption Apps Checkmark icon indicating true   Salesforce1 banner in Salesforce Classic is unavailable.
Adoption Assistance Checkmark icon indicating true  

These features aren’t available because they rely on external resources:

  • Optimizer app
  • Access to the Transition Assistant
  • Lightning Experience Welcome Mat
Auth Providers Checkmark icon indicating true

Can’t create authentication providers.

Outbound connections for authentication aren’t allowed.

Experience Cloud (Communities) Checkmark icon indicating true Out of Office, Trailhead Badges, CMS Connect, Sentiment Analysis, Content Hub, Slack for Sales, Google Analytics for CMS, ReCaptcha
Salesforce Foundations   Checkmark icon indicating true  
Developer Services
CDN for Digital Experiences   Checkmark icon indicating true  
Developer Productivity   Checkmark icon indicating true  
Salesforce AppExchange Apps   Checkmark icon indicating true  
Salesforce Mobile App Plus   Checkmark icon indicating true  
Salesforce Private Connect   Checkmark icon indicating true  
Scratch Orgs Checkmark icon indicating true   Requires a support case to enable for Controlled Setting Edition orgs.
Scale Center and Test   Checkmark icon indicating true  
CodeBuilder   Checkmark icon indicating true  
DevOps Center Checkmark icon indicating true  
Industries
Document Generation   Checkmark icon indicating true  
Communications Cloud   Checkmark icon indicating true  
Consumer Goods Cloud   Checkmark icon indicating true  
Education Cloud   Checkmark icon indicating true  
Energy and Utility Cloud   Checkmark icon indicating true  
Financial Service Cloud   Checkmark icon indicating true  
Health Cloud for Life Sciences: Home Health   Checkmark icon indicating true  
Manufacturing and Automotive Cloud   Checkmark icon indicating true  
Media Cloud   Checkmark icon indicating true  
Nonprofit Cloud   Checkmark icon indicating true  
Revenue Intelligence   Checkmark icon indicating true  
Service Intelligence   Checkmark icon indicating true  
Marketing
Marketing Cloud   Checkmark icon indicating true ExactTarget and Marketing Cloud Growth & Advanced and related products are not available.
Platform Fundamentals
Email Checkmark icon indicating true   Compliance BCC Email, DKIM Keys, Gmail Integration and Sync, Outlook Integration and Sync, Send through External Email Services, and Test Deliverability are disabled.
Data Cloud Checkmark icon indicating true  
Help Links   Checkmark icon indicating true Embedded help links throughout the platform will not redirect to Salesforce Help.
Heroku   Checkmark icon indicating true  
Net Zero Cloud   Checkmark icon indicating true  
Sales
B2B Order Management   Checkmark icon indicating true  
Billing   Checkmark icon indicating true  
Salesforce Contracts Checkmark icon indicating true   Document generation capabilities are not available.
Contract Lifecycle Management   Checkmark icon indicating true  
CPQ   Checkmark icon indicating true  
Einstein Conversation Insights   Checkmark icon indicating true  
Einstein for Sales   Checkmark icon indicating true Einstein capabilities for Sales are not available. This includes following Einstein features; Lead Scoring, Opportunity Scoring, Automated Contacts, Recommended Connections, Forecasting, Email Insights, and Activity Metrics.
Enablement Checkmark icon indicating true   In-App Walkthroughs are available.
High Velocity Sales   Checkmark icon indicating true  
Lending   Checkmark icon indicating true  
LinkedIn Integration   Checkmark icon indicating true  
Loyalty Management   Checkmark icon indicating true  
Pipeline Inspections   Checkmark icon indicating true  
Revenue Cloud   Checkmark icon indicating true  
Revenue Lifecycle Management   Checkmark icon indicating true  
Sales Dialer   Checkmark icon indicating true  
Sales Engagement   Checkmark icon indicating true  
Sales Performance Management   Checkmark icon indicating true  
Sales Planning   Checkmark icon indicating true  
Salesforce Maps   Checkmark icon indicating true  
Salesforce Spiff   Checkmark icon indicating true  
Microsoft Teams Integration   Checkmark icon indicating true  
Salesforce Meetings   Checkmark icon indicating true  
Salesforce Guardian
Own Products   Checkmark icon indicating true  
Privacy Center Checkmark icon indicating true  
Salesforce Archive Checkmark icon indicating true  
Salesforce Authenticator   Checkmark icon indicating true  
Salesforce Backup   Checkmark icon indicating true  
Salesforce Data Mask   Checkmark icon indicating true  
Security Center   Checkmark icon indicating true  
Salesforce Shield Checkmark icon indicating true Data Detect and Threat Detection are not available.
Service      
Customer Experience Intelligence   Checkmark icon indicating true  
Digital Engagement   Checkmark icon indicating true Enhanced Chat, SMS, and WhatsApp are not available.
Einstein for Service Checkmark icon indicating true Einstein capabilities for Service are not available. This includes following Einstein features; Case Classification, Case Routing, Case Wrap-Up, Article Recommendations, and Reply Recommendations.
Field Service   Checkmark icon indicating true Field Service and related products are not available.
Salesforce Contact Center   Checkmark icon indicating true  
Service Cloud Voice Checkmark icon indicating true  
Slack      
Quip Checkmark icon indicating true  
Slack Checkmark icon indicating true This includes the Slack product and any CRM related integrations.
# Controlling Access Using the Role Hierarchy Control In the role hierarchy, users have access to records owned by or shared with users in roles below them. Roles within the hierarchy affect access to components, such as records and reports. ## Control Name Controlling Access using the role hierarchy, groups, and sharing rules ## Recommended Configuration Grant Access Using Hierarchies - Selected on the Sharing Settings page: Setup>Sharing Settings>Organization-Wide Sharing Defaults Edit>Selected Object enable “Grant Access Using Hierarchies”. ## Control Overview In the role hierarchy, users have access to records owned by or shared with users in roles below them. Roles within the hierarchy affect access on components, such as records and reports. ## Security Risk If Not Configured Not enabling the "Grant Access Using Hierarchies" setting for custom objects prevents managers and superiors from automatically inheriting access to records owned by their subordinates, leading to significant data silos and fragmented visibility. This lack of automated access forces administrators to rely on complex, manual sharing rules to maintain oversight, which increases the risk of configuration errors and over-provisioning "View All" or "Modify All" permissions as a risky workaround to restore necessary visibility. ## Threat Scenarios A manager attempts to generate an urgent compliance report but is blocked because hierarchical access is disabled for a custom object, prompting an administrator to grant "View All" permissions as a quick workaround. This excessive privilege allows the manager—or a threat actor who compromises their account—to bypass all row-level security and access sensitive records across the entire company that they were never intended to see. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Increased risks depending on the company structure, number of users and roles and profiles in the orgs. ## Higher Risk When The risk of disabling hierarchical access is further compounded by a lack of granular permission set governance, which often drives administrators to grant broad "View All" or "Modify All" permissions to managers as a quick but insecure visibility workaround. Furthermore, a lack of an automated sharing strategy (such as dynamic sharing rules or Apex sharing) and the absence of periodic access review to make sure manual "one-off" sharing assignments become unmanageable, eventually leading to significant over permission and data overexposure. ## Low or No Risk When To minimize the risk of data silos when hierarchical access is disabled, companies can implement Criteria-Based Sharing Rules or Manual Sharing to explicitly grant record visibility to specific managers or public groups based on business needs. Additionally, using Apex Managed Sharing for complex scenarios or using Public Groups and Teams makes sure that oversight is maintained through granular, documented exceptions rather than relying on broad and risky "View All" administrative permissions. ## Business and Integration Considerations User access and permission based on roles. ## Recommended Remediation Implement periodic access review and enable access using hierarchies. ## Security Health Review Guidance N/A - Currently not inspected by the Security Health Review tool. #### See Also - [Create a User Role](https://help.salesforce.com/s/articleView?id=platform.admin_roles.htm&type=5&language=en_US) - [Guidelines for Success with Roles](https://help.salesforce.com/s/articleView?id=platform.setup_roles_guidelines.htm&type=5&language=en_US) # Controlling Field Property (Managed Package) For the managed package runtime, the Controlling Field Property on a Select Element can display Select Field Values based on the selection of another value from a Controlling Select field. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Both the controlling and dependent fields must pull their field values from a field in Salesforce using the sObject property and those fields must have a Field Dependency setup between one another via Salesforce Field Dependency feature. **Example Controlling Field Setup** ![Example controlling field setup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_omniscript_controllingfieldsetup.png) **Controlling Field Configuration** ![Controlling field configuration](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_omniscript_controllingfieldconfiguration.png) **Dependent Field Configuration** ![Dependent field configuration](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_omniscript_dependentfieldconfiguration.png) **Defined Field Dependency in Salesforce** ![Defined field dependency in Salesforce](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/salesforce_omniscript_definedfielddependency.png) ## Using Option Source Custom When using Custom as an option source, you can define an Apex class that will pull in the Picklist values source. See [Populating Picklist Values From Apex (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_populating_picklist_values_from_apex.htm&release=264.0.0&type=5 "For the managed package runtime, you can populate Select, Multi-select, and Radio elements from an Apex class that implements Callable and Vlocity Open Interface. The values for the element are obtained during the Omniscript's activation."). #### See Also - [Dependent Picklists](https://help.salesforce.com/s/articleView?id=platform.fields_about_dependent_fields.htm&type=5&language=en_US) # Convert a List of Objects to a List of Values You can convert a list of JSON objects (key-value pairs in braces) to a list of single values, regardless of the length of the list. The trick is to use a formula to remove the second level of the hierarchy. ## Create Settings | Field | value | notes | | --- | --- | --- | | Interface Type | Transform |   | | Input Type | JSON | In this example, the input is provided as JSON and not pulled from another source. | | Output Type | JSON |   | ## Formula Settings | Field | value | notes | | --- | --- | --- | | Formula | `ObjectList:Property` |   | | Formula Result Path | `FormulaList` |   | ## Transform Settings In the Manage Input/Output Type window, use these values.
Field value notes
Input JSON
{
   "ObjectList": [
      {
        "Property": "P9034"
      }
   ]
}
            
 
Expected JSON Ouput
{
   "PropertyValueList": [
     "P9034"
   ]
}
            
 
Then, create a mapping for the top-level nodes. | Field | value | notes | | --- | --- | --- | | Input JSON Path | FormulaList |   | | Output JSON Path | PropertyValueList |   | If you check the **Current JSON Output** view, the content is similar to this example: ```json {   "PropertyValueList": "Text" } ``` ## Transformation Preview In Preview, enter the sample JSON as input. ```json {   "ObjectList": [     {       "Property": "P9034"     },     {       "Property": "P6538"     },     {       "Property": "P1234"     },     {       "Property": "P5678"     },     {       "Property": "P2345"     },     {       "Property": "P7654"     }   ] } ``` After you execute the sample Data Mapper in Preview, the input is transformed into a list, as indicated by the square brackets. ```json {   "PropertyValueList": [     "P9034",     "P6538",     "P1234",     "P5678",     "P2345",     "P7654"   ] } ``` Add or subtract list items in the JSON data in the Input pane and click **Execute** again. The output changes accordingly. # Convert a List of Objects to a List of Values (Managed Package) For the managed package runtime, you can convert a list of JSON objects (key-value pairs in braces) to a list of single values, regardless of the length of the list. The trick is to use a formula to remove the second level of the hierarchy. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To download a data pack of this example for Omnistudio for Managed Packages, click [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m0000005ucB/MdLGS.8_Jlkh6WxXtdoanMEdPnnuRDBC3lpj1UB5YoA). To create an Omnistudio Data Mapper Transform that converts a list of objects to a list of values: 1. Go the Data Mapper Designer tab and click **New**. The Create dialog is displayed. 2. Specify a name for the Data Mapper and configure its settings as follows: - **Interface Type** — Transform - **Input Type** — JSON - **Output Type** — JSON 3. Click **Save**. The Transforms tab of the Data Mapper Interface page is displayed. 4. Go to the Formulas tab. In the **Formula** field, enter `ObjectList:Property`. In the **Formula Result Path** field, enter `FormulaList`. 5. Go to the Transforms tab. Expand the **Input JSON** pane and paste the following JSON data into it: ``` {   "ObjectList": [     {       "Property": "P9034"     }   ] } ``` 6. Expand the **Expected JSON Output** pane and paste the following JSON data into it: ``` {   "PropertyValueList": [     "P9034"   ] } ``` 7. Click the **+** icon and add the following mapping: - **Input JSON Path** — FormulaList - **Output JSON Path** — PropertyValueList Note that you only have to create a mapping between the top-level nodes. 8. Expand the **Current JSON Output** pane. Its contents should look like this: ``` {   "PropertyValueList": "Text" } ``` 9. Go to the Preview tab and paste the following JSON data into the **Input** pane: ``` {   "ObjectList": [     {       "Property": "P9034"     },     {       "Property": "P6538"     },     {       "Property": "P1234"     },     {       "Property": "P5678"     },     {       "Property": "P2345"     },     {       "Property": "P7654"     }   ] } ``` 10. Click **Execute**. The Response should look like this: ``` {   "PropertyValueList": [     "P9034",     "P6538",     "P1234",     "P5678",     "P2345",     "P7654"   ] } ``` 11. Add or subtract list items in the JSON data in the **Input** pane and click **Execute** again. Note that the output changes accordingly. # Convert a Single Item to a List with One Item Sometimes, a component requires input as a list, but the input isn’t a list. You can use the Output Data Type setting in an Omnistudio Data Mapper Transform to convert JSON data to a list. Use a formula to remove the second level of the hierarchy. ## Create Settings | Field | value | notes | | --- | --- | --- | | Interface Type | Transform |   | | Input Type | JSON | In this example, the input is provided as JSON and not pulled from another source. | | Output Type | JSON |   | ## Transform Settings | Field | value | notes | | --- | --- | --- | | Input JSON Path | Contact | You only need to create a mapping for the top-level node. | | Output JSON Path | Contact |   | | Output Data Type | List | The Apex key-value pair converts to a list. | ## Transformation Preview In Preview, enter the sample JSON as input. ```json { "Contact": { "Id": "0036100000423z8AAA", "FirstName": "Amy", "LastName": "Smith" } } ``` After you execute the sample Data Mapper in Preview, the input map is transformed into a list, as indicated by the square brackets. ```json { "Contacts": [ { "LastName": "Smith", "FirstName": "Amy", "Id": "0036100000423z8AAA" } ] } ``` # Convert a Single Item to a List with One Item (Managed Package) For the managed package runtime, in some cases, a component's output that isn't in list format must pass to another component that only accepts a list. You can use the **Output Data Type** setting in an Omnistudio Data Mapper Transform to perform this conversion. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To download a data pack of this example for Omnistudio for Managed Packages, click [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m0000005uTx/UYFJnROoSVhUuC9glpQBp9rXrZz1F4pADepGa1MQ358). To create a Data Mapper Transform that puts an item in a list: 1. Go the Data Mapper Designer tab and click **New**. The Create dialog is displayed. 2. Specify a name for the Data Mapper and configure its settings as follows: - **Interface Type** — Transform - **Input Type** — JSON - **Output Type** — JSON 3. Click **Save**. The Transforms tab of the Data Mapper Interface page is displayed. 4. Expand the **Input JSON** pane and paste the following JSON data into it: ``` { "Contact": { "Id": "0036100000423z8AAA", "FirstName": "Amy", "LastName": "Smith" } } ``` 5. Click the **+** icon and add the following mapping: - **Input JSON Path** — Contact - **Output JSON Path** — Contacts - **Output Data Type** — List Note that you only have to create a mapping for the top-level node. 6. Expand the Current JSON Output pane. Its contents should look like this: ``` { "Contacts": [ {} ] } ``` 7. Go to the Preview tab and click **Execute**. The Response should look like this: ``` { "Contacts": [ { "LastName": "Smith", "FirstName": "Amy", "Id": "0036100000423z8AAA" } ] } ``` # Convert an Angular Omniscript to an LWC Omniscript (Managed Package) For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model. Before you begin, review the ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). [LWC Omniscript Considerations](https://help.salesforce.com/s/articleView?id=xcloud.os_lwc_omniscript_considerations.htm&release=264.0.0&type=5 "For the managed package runtime, beginning with the Vlocity Insurance and Health Summer '19 and Vlocity Communications, Media, and Energy Fall '19 releases, Vlocity supports the Salesforce Lightning Web Component programming model.") page to ensure LWC Omniscripts support the same elements and functionalities present in your Angular Omniscript. Enable the use of custom Lightning web components for an existing Angular Omniscript by converting the Omniscript to an LWC Omniscript. LWC compatible elements display a Lightning icon in the Available Components panel of an Omniscript. 1. Beginning with Vlocity Insurance and Health Spring '20, LWC Omniscripts may begin with an uppercase letter. If the Omniscript is in an earlier package: In the Vlocity Insurance and Health Summer '19-Winter '20 and Vlocity CME Fall '19-Winter '20 releases, an LWC Omniscript's Type must begin with a lowercase letter. If the Omniscript's Type begins with an uppercase letter, change the **Type** to a unique name that begins with a lowercase letter. You cannot use case-sensitivity to convert the Angular Omniscript's Type. For example, if you have an Angular Omniscript with an existing Type named Test, you cannot create an LWC Omniscript with a Type named test. The Type limitation occurs because Type is stored in a Salesforce picklist, and Salesforce picklists store values without case-sensitivity. 2. Check the **Enable LWC** checkbox. 3. Replace any existing Done Actions in the Omniscript with a Navigate Action. For information on configuring the Navigate Action, see [Navigate Action](https://help.salesforce.com/s/articleView?id=xcloud.os_navigate_action.htm&release=264.0.0&type=5 "For the managed package runtime, navigate to various Salesforce experiences from Omniscript using the Navigate Action element."). LWC Omniscripts do not support the Done Action element. 4. LWC Select elements feature filtering similar to the filtering in a Type Ahead Block. To present a small number of options without filtering, replace the Select element with a Radio element. For more information, see [Select Element](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscripts_select_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable users to select from a dropdown by adding a Select element to your Omniscript. Users can enter text to filter the options. Omnistudio pulls the options from an Apex class and method or from a Salesforce object.") and [Radio Element](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscripts_radio_element.htm&release=264.0.0&type=5 "For the managed package runtime, enable users to select one from multiple items by adding the Radio element to your Omniscript. Display options vertically, horizontally, as an image, or styled based on the Newport Design System."). 5. Elements in an Angular Omniscript that use custom templates must now use custom Lightning web components to provide custom functionality. # Convert Attachments and Classic Notes Does your org use attachments and notes? In Lightning Experience, users get a better experience if you convert existing attachments to Salesforce Files and classic notes to enhanced notes. You can automate this conversion work with the handy Magic Mover for Notes and Attachments tool. ### Required Editions
Available in: Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This tool is a Salesforce Labs app. Salesforce Labs is a program that lets Salesforce engineers, professional services staff, and other employees share AppExchange apps they've created with the customer community. Salesforce Labs apps are free to use, but are not official Salesforce products. They should be considered community projects, which aren’t officially tested or documented. For help with a Salesforce Labs app, please consult the Salesforce message boards. Salesforce Support isn’t available. Install [Magic Mover for Notes and Attachments](https://appexchange.salesforce.com/listingDetail?listingId=a0N3A00000EHAmyUAH) from AppExchange. # Convert State and Country/Territory Data To convert text-based state and country/territory data to picklist-compatible values, select specific text values and choose the standard values you want to map them to. For example, you can select all occurrences of “USA” and change them to “United States.” ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: All Editions except Database.com
User Permissions Needed
To convert text-based state and country/territory data: Modify All Data
Before you convert state, country, and territory values in State and Country/Territory Picklists setup, [configure the picklists for your org](https://help.salesforce.com/s/articleView?id=xcloud.admin_state_country_picklists_configure.htm&release=264.0.0&type=5 "Configuring state and country/territory picklists means choosing which states and countries you want to be available in your Salesforce org. It lets you make state and country/territory picklists available for purposes like importing data, working with external systems, and accessing picklist data from the Metadata API."). That way, the data in your org is consistent and accurate when you enable picklists, because all new and updated records use your specified integration value. Convert countries first, and then states and provinces. You can convert up to 2,000 country/territory values and up to 2,000 state values. However, state and country/territory picklists that contain more than 1,000 states or countries can degrade performance. 1. From Setup, enter State and Country/Territory Picklists in the Quick Find box, then select **State and Country/Territory Picklists**. 2. On the State and Country/Territory Picklists page, click **Convert identified data**. Salesforce opens the Convert States, Countries, and Territories page. This page displays all the country and territory text values that appear in your org and the number of times each value is used. 3. Select Change for one or more values you want to convert. For example, select Change for all the iterations of United States. 4. In the Change To area, choose the country or territory that you want to convert the text values to and click **Save to Changelist**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note If you map states or countries to Unknown value, users see states and countries in their records. However, your users encounter errors when they save records, unless they change each state, country, and territory to a valid value before saving. 5. Repeat Steps 3 and 4 for other country and territory values, such as for Canada. Salesforce tracks planned changes in the Changelist area. 6. When all the countries are mapped, click **Next** to convert state values. Use the Country of Origin column to identify the country or territory associated with that state or province. 7. To convert the values and turn on state and country/territory picklists in your org, click **Finish and Enable Picklists** on the Confirm Changes page. Or, to return to the State and Country/Territory Picklists page, click **Finish**. #### See Also - [Let Users Select States, Countries, and Territories from Picklists](https://help.salesforce.com/s/articleView?id=xcloud.admin_state_country_picklists_overview.htm&release=264.0.0&type=5 "State and country/territory picklists let users select states, countries and territories from predefined, standardized lists, instead of entering state and country/territory data into text fields. State and country/territory picklists offer faster and easier data entry. They help to ensure cleaner data that can be harnessed for other uses—in reports and dashboards, for example. They protect data integrity by preventing typos, alternate spellings, and junk data—even in records updated through the API.") ## Edit Converted Picklist Mappings Edit existing picklist data mappings from the Convert Countries or Convert States page in Setup. 1. In Setup, find and select **State and Country/Territory Picklists**. 2. In the Enable State and Country Picklist section, select **Convert identified data**. 3. To revert a value in your changelist, select **Undo**. You can convert state, country, and territory values even after saving your changelist and enabling the picklist. After picklists are enabled, you can no longer edit your conversion mappings. To make changes to picklist after it's enabled, you must disable the picklist and re-scan and convert your scanned data. ## Clear Scanned and Converted Picklist Mappings If your converted data mappings are in a unrecoverable state, you can clear your scanned and mapped state and country data, and start again. Clearing scanned and mapped data wipes out all the work you've done to convert scanned data to picklist entries. Use this feature only if you're unable to individually edit and revert your picklist data mappings. 1. In Setup, find and select **State and Country/Territory Picklists**. 2. From the State and Country/Territory Picklists page, locate the Enable State and Country/Territory Picklists section and select **Scan for State and Country Picklist data**. 3. From the Scan for Affected Data and Customizations page, select **Clear Scanned and Mapped Data**. # Copy and Paste a Recipe In Salesforce Data Pipelines, use the toolbar or keyboard shortcuts to copy and paste nodes within a single recipe or across multiple ones. To use this feature, enable clipboard access permissions in your browser. 1. In a Data Prep recipe, select one or more nodes to copy or cut. ![Three nodes selected to copy](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_select_nodes.png) 2. From the toolbar, click ![Data Prep copy icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_copy_icon.png) or press Ctrl+c to copy, click ![Data prep cut icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_cut_icon.png) or press Ctrl+x to cut, or click ![Data prep duplicate icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_duplicate_icon.png) duplicate, which copies and pastes in one step. To delete a node, click ![Data prep delete icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_delete_icon.png) or press Ctrl+d. ![Copy, cut, paste, duplicate, and delete toolbar in Data Prep](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_toolbar.png) 3. Click ![Data Prep paste icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_paste_icon.png) or press Ctrl+v to paste. The copied image displays below the original. ![Three copied nodes display when pasted below the original three](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_data_pipelines-264-0-0-production-enus/71bf8b65-b70e-477e-9e1f-f9bb70521d29/resources-global/analytics/images/bi_integrate_data_prep_copy_paste_output.png) # Copy Authorized Email Domains into a Sandbox To avoid a second round of DNS verification, import your authorized email domains from production to a sandbox. In production, specify the authorized email domains to copy to a sandbox. Then, in a sandbox, import the available domains with one click. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: all editions except Database.com
User Permissions Needed
To modify authorized email domains: Email Administration
## Specify Authorized Email Domains to Copy into Sandboxes In production, configure the authorized email domains that you want to import into sandboxes. 1. In production, from [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Authorized Email Domains**. 2. For each authorized email domain that you want to import into sandboxes, enable a setting. 1. For a verified entry in the list, click **Edit**. 2. Select **Allow copy to sandbox**, and then save your changes. ![The Allow copy to sandbox checkbox](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/email/email_auth_domain_allow_copy.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note You can enable "Allow copy to sandbox" for unverified domains, but you can only import an authorized email domain into a sandbox if the domain is verified. ## Import Authorized Email Domains into a Sandbox In your sandbox org, import all authorized email domains from production. 1. In a sandbox, from [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Authorized Email Domains**. 2. Click **Import from Production**. All authorized email domains in production that meet these conditions are imported into your sandbox. - The domain is verified - “Allow copy to sandbox” is enabled - The authorized email domain doesn’t exist in the sandbox at the time of import ![Imported authorized email domains.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/email/email_auth_domain_import.png) A message confirms each imported authorized email domain. (1) Imported domains show **Yes (Copied)** in the Ownership Verified column. (2) Authorized email domains that already exist in your sandbox aren’t imported again. To import an updated version of an authorized email domain from production, delete the domain in the sandbox and then click **Import from Production** again. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note If the authorized email domain is unverified in production when you import that domain into a sandbox, separate DNS verification is required for the entry in the sandbox. Each imported authorized email domain is an independent copy. Changes to the authorized email domain in one org have no effect on the other org. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note Changes to an imported authorized email domain in a sandbox can require DNS verification. You can’t update the “Require email verification” setting on an imported authorized email domain - To update the requirement for email verification in the sandbox only, delete the imported domain. Then re-add and verify the authorized email domain in the sandbox. - To disable the requirement for email verification setting everywhere, delete the imported domain. Then update the authorized email domain in production and import it into the sandbox again. #### See Also - [Set Up an Authorized Email Domain](https://help.salesforce.com/s/articleView?id=xcloud.security_email_auth_domain_setup.htm&release=264.0.0&type=5 "To verify your email-sending domain without DomainKeys Identified Mail (DKIM), set up an authorized email domain. For example, if your users’ email addresses are in the format name@example.com, set up an authorized email domain for example.com.") # Copy Timesheets For recurring tasks, technicians can copy an approved or submitted timesheet to future dates. ### Required Editions
Available in: Lightning Experience
Available in: All editions of Field Service Plus for Energy & Utilities, and all editions of Asset Service Lifecycle Management
User Permissions Needed
To access Timesheets objects: Labor Cost Optimization Resource
1. In the Field Service mobile app, tap **Timesheets**. 2. To view the list of all timesheets, tap **My Timesheets**. 3. On the My Timesheets page, select a date to copy the timesheet. You can copy only the timesheets that are in the Submitted, Approved, or Approval pending status. 4. To select timesheet actions, tap the three dots next to the status of the timesheet. 5. Select **Copy timesheet**. 6. Select two dates: a date to copy the timesheet from and a date to use the copied timesheet. The hourly breakdown is copied to the selected dates. 7. Tap **Done**. # Correct Timesheets and Timesheet Entry Errors Field technicians can fix any errors in the timesheets and timesheet entries before submitting the timesheet for supervisor’s approval. ### Required Editions
Available in: Lightning Experience
Available in: All editions of Field Service Plus for Energy & Utilities, and all editions of Asset Service Lifecycle Management
User Permissions Needed
To approve Timesheets: Labor Cost Optimization Supervisor
1. In the Field Service mobile app, tap **Timesheets**. 2. On the **Timesheets** page, view the summary of the timesheets and tap **Show More** to see the details for different days. 3. Tap a date to view the timesheet for the selected date. You can see the errors on the Timesheet page or on the timesheet entries in the Hourly Breakdown section. 4. Edit the timesheet entries to make the required changes and fix the errors. 5. Submit and approve the timesheet. # CORS Allowlist Control The Salesforce CORS (Cross-Origin Resource Sharing) allowlist is a security control that enables administrators to specify trusted external domains permitted to perform cross-origin requests to Salesforce APIs and resources. ## Control Name CORS Allowlist ## Recommended Configuration - Allowed Origins List - To allow code (such as JavaScript) running in a Web browser to communicate with Salesforce from a specific origin, add the origin to the allowed list. On the CORS Setup page, in the Allowed Origins List, click **New**, enter an origin in Origin URL Pattern, and click **Save**. ## Control Overview The Salesforce CORS (Cross-Origin Resource Sharing) allowlist is a security control that enables administrators to specify trusted external domains permitted to perform cross-origin requests to Salesforce APIs and resources. By explicitly authorizing only these origins, the platform allows web browsers to securely interact with Salesforce data from external applications while blocking all unauthorized third-party domains. ## Security Risk If Not Configured The lack of a properly configured Salesforce CORS (Cross-Origin Resource Sharing) allowlist exposes the organization to unauthorized data access and cross-site scripting (XSS) vulnerabilities by allowing untrusted external domains to initiate requests to Salesforce APIs or Lightning resources. ## Threat Scenarios An attacker hosts a malicious website that executes a script in the browser of a user who has an active Salesforce session. Because the CORS allowlist is overly permissive or misconfigured, the browser permits the malicious site to make unauthorized API calls to Salesforce, allowing the attacker to silently exfiltrate sensitive data or perform actions as the authenticated user. ## Estimated CVSS Score Range Critical (9.0–10.0). ## Risk Impact Considerations Connected App or External Client App Scope. ## Higher Risk When The risk of an ineffective CORS allowlist is significantly amplified by a lack of governance over third-party applications that can then exploit permissive origin settings to scrape data. Additionally, a weak Content Security Policy (CSP) or the absence of Lightning Web Security creates a dangerous synergy where malicious scripts can be easily loaded into the UI and then use the ineffective CORS boundaries to exfiltrate sensitive information directly from the user's browser. ## Low or No Risk When To minimize the risk of an ineffective CORS allowlist, organizations should implement API Access Control to restrict which connected apps and users can access Salesforce data, ensuring that only authorized identities can make requests regardless of the origin. Additionally, a robust Content Security Policy (CSP) and Lightning Web Security (LWS) provide critical defense-in-depth by restricting where the browser can send data and isolating components to prevent malicious scripts from accessing session tokens or making unauthorized cross-origin calls. ## Business and Integration Considerations Integration with external app, API Scope. ## Recommended Remediation Enable CORS allow list and periodically review the configuration. ## Security Health Review Guidance Security Health Review inspects the CORS allow lists to help identify ineffective CORS setup, such as allowing overly permissive CORS origin in the list. #### See Also - [Configure Salesforce CORS Allowlist](https://help.salesforce.com/s/articleView?id=xcloud.extend_code_cors.htm&release=264.0.0&type=5 "Cross-Origin Resource Sharing (CORS) allows web browsers to request resources from other origins. For example, using CORS, the JavaScript for a web application at https://www.example.com can request a resource from https://www.salesforce.com. To allow access to supported Salesforce APIs, Apex REST resources, and Lightning Out from JavaScript code in a web browser, add the requesting origin to your Salesforce CORS allowlist. For Lightning apps that allow web browsers to make requests from their orgs, CORS allowlist prevents requests to Lightning apps unless the request comes from an approved URL. The allowlist is in effect for your My Domain URL and api.salesforce.com.") # Countries Supported for SMS Identity Verification These countries and regions are supported for SMS delivery in Salesforce orgs and Experience Cloud sites. For information about unsupported countries and regions, see our [compliance documentation](https://trust.salesforce.com/en/blocked/). ### Required Editions
Available in: all editions
| Country or Territory Name | Country Code | | --- | --- | | Afghanistan | 93 | | Albania | 355 | | Algeria | 213 | | American Samoa | 684 | | Andorra | 376 | | Angola | 244 | | Anguilla | 1 | | Antigua and Barbuda | 1 | | Argentina | 54 | | Armenia | 374 | | Aruba | 297 | | Ascension | 247 | | Australia | 61 | | Australian External Territories | 672 | | Austria | 43 | | Azerbaijan | 994 | | Bahamas | 1 | | Bahrain | 973 | | Bangladesh | 880 | | Barbados | 1 | | Belarus | 375 | | Belgium | 32 | | Belize | 501 | | Benin | 229 | | Bermuda | 1 | | Bhutan | 975 | | Bolivia | 591 | | Bosnia and Herzegovina | 387 | | Botswana | 267 | | Brazil | 55 | | British Virgin Islands | 1 | | Brunei Darussalam | 673 | | Bulgaria | 359 | | Burkina Faso | 226 | | Burundi | 257 | | Cambodia | 855 | | Cameroon | 237 | | Canada | 1 | | Cape Verde Islands | 238 | | Cayman Islands | 1 | | Central African Republic | 236 | | Chad | 235 | | Chile | 56 | | China | 86 | | Colombia | 57 | | Comoros | 269 | | Congo | 242 | | Cook Islands | 682 | | Costa Rica | 506 | | Cote d'lvoire | 225 | | Croatia | 385 | | Curacao | 599 | | Cyprus | 357 | | Czechia | 420 | | Denmark | 45 | | Diego Garcia | 246 | | Djibouti | 253 | | Dominica | 1 | | Dominican Republic | 1 | | East Timor | 670 | | Easter Island | 56 | | Ecuador | 593 | | Egypt | 20 | | El Salvador | 503 | | Equatorial Guinea | 240 | | Eritrea | 291 | | Estonia | 372 | | Eswatini | 268 | | Ethiopia | 251 | | Falkland Islands | 500 | | Faroe Islands | 298 | | Fiji Islands | 679 | | Finland | 358 | | France | 33 | | French Antilles | 596 | | French Guiana | 594 | | French Polynesia | 689 | | Gabon | 241 | | Gambia | 220 | | Georgia | 995 | | Germany | 49 | | Ghana | 233 | | Gibraltar | 350 | | Greece | 30 | | Greenland | 299 | | Grenada | 1 | | Guadeloupe | 590 | | Guam | 1 | | Guatemala | 502 | | Guinea | 224 | | Guinea-Bissau | 245 | | Guyana | 592 | | Haiti | 509 | | Honduras | 504 | | Hong Kong | 852 | | Hungary | 36 | | Iceland | 354 | | India | 91 | | Indonesia | 62 | | Iraq | 964 | | Ireland | 353 | | Israel | 972 | | Italy | 39 | | Ivory Coast | 225 | | Jamaica | 1 | | Japan | 81 | | Jordan | 962 | | Kazakhstan | 7 | | Kenya | 254 | | Kiribati | 686 | | Kuwait | 965 | | Kyrgyzstan | 996 | | Laos | 856 | | Latvia | 371 | | Lebanon | 961 | | Lesotho | 266 | | Liberia | 231 | | Libya | 218 | | Liechtenstein | 423 | | Lithuania | 370 | | Luxembourg | 352 | | Macau | 853 | | Madagascar | 261 | | Malawi | 265 | | Malaysia | 60 | | Maldives | 960 | | Mali Republic | 223 | | Malta | 356 | | Marshall Islands | 692 | | Martinique | 596 | | Mauritania | 222 | | Mauritius | 230 | | Mexico | 52 | | Micronesia | 691 | | Moldova | 373 | | Monaco | 377 | | Mongolia | 976 | | Montenegro | 382 | | Montserrat | 1 | | Morocco | 212 | | Mozambique | 258 | | Myanmar | 95 | | Namibia | 264 | | Nauru | 674 | | Nepal | 977 | | Netherlands | 31 | | Netherlands Antilles | 599 | | New Caledonia | 687 | | New Zealand | 64 | | Nicaragua | 505 | | Niger | 227 | | Nigeria | 234 | | Niue | 683 | | Norfolk Island | 672 | | Northern Mariana Islands | 1 | | North Macedonia | 389 | | Norway | 47 | | Oman | 968 | | Pakistan | 92 | | Palau | 680 | | Palestine | 970 | | Panama | 507 | | Papua New Guinea | 675 | | Paraguay | 595 | | Peru | 51 | | Philippines | 63 | | Poland | 48 | | Portugal | 351 | | Puerto Rico | 1 | | Qatar | 974 | | Reunion Island | 262 | | Romania | 40 | | Russia | 7 | | Rwanda | 250 | | Saint Helena | 290 | | Saint Kitts and Nevis | 1 | | Saint Lucia | 1 | | Saint Pierre and Miquelon | 508 | | Saint Vincent and Grenadines | 1 | | San Marino | 378 | | Sao Tome and Principe | 239 | | Saudi Arabia | 966 | | Senegal | 221 | | Serbia | 381 | | Seychelles | 248 | | Sierra Leone | 232 | | Singapore | 65 | | Slovak Republic | 421 | | Slovenia | 386 | | Solomon Islands | 677 | | Somalia | 252 | | South Africa | 27 | | South Korea | 82 | | Spain | 34 | | Sri Lanka | 94 | | Sudan | 249 | | Suriname | 597 | | Eswatini | 268 | | Sweden | 46 | | Switzerland | 41 | | Taiwan | 886 | | Tajikistan | 992 | | Tanzania | 255 | | Thailand | 66 | | Togo | 228 | | Tokelau | 690 | | Tonga | 676 | | Trinidad and Tobago | 1 | | Tunisia | 216 | | Türkiye | 90 | | Turkmenistan | 993 | | Turks and Caicos Islands | 1 | | Tuvalu | 688 | | US Virgin Islands | 1 | | Uganda | 256 | | Ukraine | 380 | | United Arab Emirates | 971 | | United Kingdom | 44 | | United States | 1 | | Uruguay | 598 | | Uzbekistan | 998 | | Vanuatu | 678 | | Vatican City | 39 | | Venezuela | 58 | | Vietnam | 84 | | Wake Island | 808 | | Wallis and Futuna | 681 | | Western Samoa | 685 | | Yemen | 967 | | Yugoslavia | 381 | | Zaire | 243 | | Zambia | 260 | | Zimbabwe | 263 | # Create a Basic List Merge Example In this example, the first Integration Procedure retrieves all Contacts with the same AccountId in two lists, one containing addresses, the other birthdates. It then merges the two lists into one. If you're using the designer on a managed package, you can download a data pack of this example from [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m000000nWqN/Etf2uEM89n7jig8W.T_X7chh2AU1fSnY5vJCEMexXYU). The Integration Procedure has these components: 1. An Omnistudio Data Mapper Extract Action component named DRExtractAddresses 2. A Data Mapper Extract Action component named DRExtractBirthdates 3. A List Action named ListAction1 4. A Response Action named ResponseAction1 1. Create the Data Mapper Extract that the DRExtractAddresses component calls. Name it GetAddresses and configure it with these settings:
Extract A Contact extract step set to contact AccountId = id
Output These mappings:
  • contact:Id to contact:id
  • contact:FirstName to contact:firstName
  • contact:LastName to contact:lastName
  • contact:MailingStreet to contact:street
  • contact:MailingCity to contact:city
  • contact:MailingState to contact:state
If you aren't sure how to create a Data Mapper Extract, see the examples in [Omnistudio Data Mapper Extract Examples](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_extract_examples_46190.htm&release=264.0.0&type=5 "Data Mapper Extract examples demonstrate object relationships, paging with data values, paging with offsets, and relationship notation."). 2. Create the Data Mapper Extract that the DRExtractBirthdates component calls: 1. Clone the GetAddresses Data Mapper and name the clone GetBirthdates. 2. Go to the Create Mapping page, and delete the city, state, and street mappings. If you're using the designer on a managed package, go to the Output tab, and delete the city, state, and street mappings. 3. Add a mapping from contact:Birthdate to contact:birthdate. 3. From the App Launcher, find and select **Integration Procedures**. 4. Click **New**. 5. Enter a unique name, type, and subtype for your Integration Procedure. 6. Enter a description for your Integration Procedure. 7. Save your changes. The Integration Procedure canvas opens. 8. Add the first Data Mapper Extract Action component: - To open the Elements panel, click **+**, select **Data Mapper Extract**, click ![Three dots](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/threedots_60.png), and select **Details**. - If you’re using the designer on a managed package, open the Available Components panel, and drag **Data Mapper Extract Action** to the Structure panel. 9. Enter DRExtractAddresses as the element name, and GetAddresses as the Data Mapper name. 10. Add the second Data Mapper Extract Action component below the first Data Mapper Extract Action component. 11. Enter DRExtractBirthdates as the element name, and GetBirthdates as the Data Mapper name. 12. Add a List Action component into the Structure panel below the second Data Mapper Extract Action component and configure it with these settings:
Merge Lists Order
  • DRExtractAddresses:contact
  • DRExtractBirthdates:contact
Merge Fields id
Sort By
  • lastName
  • firstName
13. Add a Response Action component into the Structure panel below other action components. 14. Enter ListAction1 in the Send JSON Path field, and contactMerge in the Send JSON Node field. 15. On the Preview tab, in the Input Parameters pane, click **Add Key-Value Pair**. 16. Enter id as the key and an Account Id from your org as the Value. 17. Click **Execute**. The output is similar to this example: ``` { "contactMerge": [ { "birthdate": "1975-10-03", "street": "300 Broadway", "state": "FL", "city": "Orlando", "lastName": "Jones", "id": "0036100001E5xrWAAR", "firstName": "Cathy" }, { "birthdate": "1976-10-04", "street": "400 Washington Blvd", "state": "AZ", "city": "Phoenix", "lastName": "Jones", "id": "0036100001E5xrvAAB", "firstName": "Doug" }, { "birthdate": "1973-10-01", "street": "100 Main Street", "state": "CA", "city": "San Francisco", "lastName": "Smith", "id": "0036100001E5xqnAAB", "firstName": "Albert" }, { "birthdate": "1974-10-02", "street": "200 Second Street", "state": "OR", "city": "Portland", "lastName": "Smith", "id": "0036100001E5xr2AAB", "firstName": "Ben" } ] } ``` What’s next: [Create an Advanced List Merge Example](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_advanced_list_merge_example_53889.htm&release=264.0.0&type=5 "The next Integration Procedure is a modified version of the previous example. Instead of matching list items using Id fields, it uses the Advanced Merge feature to match first and last names."). # Create a Basic List Merge Example (Managed Package) For the managed package runtime, the first Integration Procedure retrieves all Contacts with the same AccountId in two lists, one containing addresses, the other birthdates. It then merges the two lists into one. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To download a DataPack of this example for Omnistudio for Managed Packages, click [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m0000005uJ4/ASj5zMjJi_JWfK4_zaIMT9Jt0N5SMJfzgL11UZAxYBE). The Integration Procedure has these components: 1. An Omnistudio Data Mapper Extract Action component named DRExtractAddresses 2. A Data Mapper Extract Action component named DRExtractBirthdates 3. A List Merge Action named ListAction1 4. A Response Action named ResponseAction1 The Structure panel looks like this: ![The contents of the Structure panel are listed in the preceding text.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/iplistmerge1.png) To build this Integration Procedure: 1. Create the Data Mapper Extract that the DRExtractAddresses component calls. Name it GetAddresses and give it these settings:
Extract A Contact extract step set to contact AccountId = id
Output These mappings:
  • contact:Id to contact:id
  • contact:FirstName to contact:firstName
  • contact:LastName to contact:lastName
  • contact:MailingStreet to contact:street
  • contact:MailingCity to contact:city
  • contact:MailingState to contact:state
If you aren't sure how to create a Data Mapper Extract, see the examples in [Omnistudio Data Mapper Extract Examples (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_extract_examples.htm&release=264.0.0&type=5 "For the managed package runtime, Data Mapper Extract examples demonstrate object relationships, paging with data values, paging with offsets, working with attributes, and relationship notation."). 2. Create the Data Mapper Extract that the DRExtractBirthdates component calls: 1. Clone the GetAddresses Data Mapper and name the clone GetBirthdates. 2. On the Output tab, delete the city, state, and street mappings. 3. Add a mapping from contact:Birthdate to contact:birthdate. 3. From the Omnistudio Integration Procedures tab, click **New**. 4. Provide an **Integration Procedure Name**, a **Type**, and a **SubType**, and click **Save**. 5. Drag the first Data Mapper Extract Action component into the Structure panel. 6. Give the component an **Element Name** of DRExtractAddresses and a **Data Mapper Interface** of GetAddresses. 7. Drag the second Data Mapper Extract Action component into the Structure panel below the first. 8. Give the component an **Element Name** of DRExtractBirthdates and a **Data Mapper Interface** of GetBirthdates. 9. Drag a List Action component into the Structure panel below the second Data Mapper Extract Action component and give it these settings:
MERGE LISTS ORDER
  • DRExtractAddresses:contact
  • DRExtractBirthdates:contact
MERGE FIELDS id
SORT BY
  • lastName
  • firstName
10. Drag a Response Action component below all the others. 11. Give the component a **Send JSON Path** of ListAction1 and a **Send JSON Node** of contactMerge. 12. On the Preview tab, in the Input Parameters pane, click Add New Key/Value Pair. 13. Enter id as the **Key** and an Account Id from your org as the **Value**. 14. Click **Execute**. The output looks like this: ``` { "contactMerge": [ { "birthdate": "1975-10-03", "street": "300 Broadway", "state": "FL", "city": "Orlando", "lastName": "Jones", "id": "0036100001E5xrWAAR", "firstName": "Cathy" }, { "birthdate": "1976-10-04", "street": "400 Washington Blvd", "state": "AZ", "city": "Phoenix", "lastName": "Jones", "id": "0036100001E5xrvAAB", "firstName": "Doug" }, { "birthdate": "1973-10-01", "street": "100 Main Street", "state": "CA", "city": "San Francisco", "lastName": "Smith", "id": "0036100001E5xqnAAB", "firstName": "Albert" }, { "birthdate": "1974-10-02", "street": "200 Second Street", "state": "OR", "city": "Portland", "lastName": "Smith", "id": "0036100001E5xr2AAB", "firstName": "Ben" } ] } ``` What’s next: [Create an Advanced List Merge Example (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_advanced_list_merge_example.htm&release=264.0.0&type=5 "For the managed package runtime, the next Integration Procedure is a modified version of the previous example. Instead of matching list items using Id fields, it uses the Advanced Merge feature to match first and last names."). # Create a Basic Omnistudio Data Mapper Extract Example (Managed Package) For the managed package runtime, a Data Mapper extract accepts an account ID parameter and returns the account name. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). [Download a data pack of this example](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m0000005uJd/lurxinEvsinaQOjAOn_m2tQDRnaRxZA3tQKC_Yr7EJs) for Omnistudio for Managed Packages. 1. On the Extract tab, click **Add Extract Step**. 2. From the list of Salesforce objects, choose **Account**. 3. Set the Extract Output Path to `Account` and the filter to `Id = InputId`. 4. On the Output tab, click **+**. 5. Set the Extract JSON Path to `Account:Name`. 6. Set the Output JSON Path to `Account:Name`. 7. Go to the Preview tab. If you see the link **Edit as Params**, click it. 8. In the Input Parameters pane, click **Add New Key/Value Pair**. 9. Set the Key to `InputId` and the Value to a valid Salesforce Account object ID (which looks like this: `0016100001OBpRi`). 10. Click **Execute**. 11. Verify that the Response pane displays a JSON structure containing the desired output. For example: ``` { "Account": { "Name":"Smith Incorporated" } } ``` # Create a Basic Survey Create a basic survey that you can use to embed in a custom app or on an external website. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Feedback Management - Starter and Feedback Management - Growth licenses
User Permissions Needed
To create a basic survey:

Permissions to create surveys

Keep in mind these limitations about basic surveys. - You can only add like or dislike, long text, multiple selection, NPS, rating, short text, and single selection questions. - You can’t use display logic to show questions based on responses to other questions on the page. 1. From the App Launcher, find and select **Surveys**. 2. Click **New**. 3. Enter a name for the survey and then select **Basic Survey**. 4. To use the survey as a template, select **Create survey as a template**. Survey templates are automatically shared with Read access for all users in your Salesforce org. 5. To add a question to the page, click **Add Question**. To reorder questions on a survey page, click ![reorder questions](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/reorder_question.png) above the rich text editor of the questions. 6. To change the question’s properties, click ![A screenshot of the question properties menu, shown as a gear icon with a dropdown arrow](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/question_properties_icon.png). 7. Edit the survey’s Thank You page. 8. To pause working on the survey and continue working on it later, click **Save**. 9. To see how the survey looks while you're working on it, click **Preview**. 10. To activate the survey so that you can send it, click **Activate**. Now that you've created a basic survey, you can embed it on a custom app or publish it on an external website by using the Survey Response Connect API (Surveys Business APIs). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_important.png) Important Only basic surveys support the Survey Response Connect API. # Create a Batch Job to Process Transaction Journals After setting up the flow to credit points to loyalty program members, create a batch job to process the flow. This batch job only processes transaction journal records that are in pending status.
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
1. From Setup, in the Quick Find box, enter Batch, and then select **Batch Management**. 2. Click **New**. 3. Provide the details listed in this table: | Field | Description | | --- | --- | | Name and API Name | Process Transaction Journals | | Process Type | Flow | | Group | Loyalty | | Execution Process | Credit\_Points\_to\_Members | | Batch Size | The size of this individual batch, for example, 200. | | Retry Count | The retry count for this individual batch, for example, 2. | | Retry Interval | The number of retry intervals for this individual batch, for example, 1,000. | 4. Click **Next**. 5. Provide the details listed in this table:
Field Description
Flow Input Variable RecordID
Object Transaction Journal
Conditions
  • Select Records When: All conditions are met (AND)
  • Field: Status
  • Operator: Equals
  • Type: Value
  • Value: Pending
6. Save your changes. 7. Activate the batch job. Create another flow to schedule this batch job to run. # Create a Benefit Type Benefit Type groups benefits created under the benefit type. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
Before you create a Loyalty Benefit Type for your loyalty program, create benefit categories in the Loyalty Benefit Type object. 1. In the Loyalty Programs tab, select your loyalty program. 2. On the Setup tab, click **Benefit Types**. 3. In the Benefit Types, click **New**. 4. Enter a name and description. 5. In the Process Type, select **Loyalty**. 6. Select the category for the benefit type. Picklist values for Category aren’t provided by default. Based on the requirements of the organization, admins must add picklist values for the field in Object Manager. 7. Save your changes. # Create a Binary Handoff Project for the Salesforce Mobile App Use the binary handoff distribution method to have Salesforce build your app and provide you with the binary file (.ipa or .aab) for manual signing and distribution. This method is ideal for organizations with security protocols that require in-house code signing or specific internal distribution processes. Use the binary handoff distribution when you’re certain you don’t want to change the distribution method, because you can't change it to fully managed or binary upload. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/images/icon_important.png) Important After you request the app binary, the distribution method is locked to Binary Handoff and can’t be changed. When you use Binary Handoff, Salesforce builds the application binary and delivers it to you, but your organization maintains full control over the signing identity and store submission. 1. From Setup, in the Quick Find box, enter Mobile Publisher, and then select Mobile Publisher. 2. Click Create New App. 3. Select **External Client App** and click **Next**. 4. Select **Salesforce App** as the app type and click **Next**. 5. Enter a project name and click **Next**. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/images/icon_important.png) Important You can’t change the project name after you save it. The project name is only seen internally, not by the app users. 6. Click Start for the platform (iOS or Android) you want to configure. 7. In the Set Up the Mobile App section, click Start. 8. Click Change App Distribution Method, select Binary Handoff, and click Done. 9. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/images/icon_important.png) Important For Android apps, register your app in Firebase using the Customer Store Identifier field in the Setup UI to obtain the google-services.json file. If your app uses deep links, supply the SHA-256 value in the setup form. You can find the value in your Google Play console, in **Test & Release** | **App Integrity** | **App Signing** | **Play App Signing** | **Settings**. Complete the Customer Store Identifier and all other required fields on the form. 10. Click Submit. 11. In the Set Up an External Client App section, click **Start** to configure and deploy your ECA to production. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/images/icon_note.png) Note To test your app in a sandbox, deploy the ECA to the sandbox org after deploying to production. During ECA setup, you can also turn on push notifications by adding your Apple APNs key (.p8 file) or Google Firebase Admin SDK JSON file. 12. From the main Mobile Publisher Setup page, click Request Binary. Salesforce builds the app binary and delivers it to you. After receiving the binary, you're responsible for re-signing it with your own signing certificates and private keys and submitting it to the app stores. - **[Set Up Environments for a Binary Handoff Project for the Salesforce Mobile App](https://help.salesforce.com/s/articleView?id=xcloud.s1_branded_apps_set_up_env.htm&release=264.0.0&type=5)** Set up Apple and Google environments for binary handoff projects. # Create a Briefcase Create a briefcase by using Briefcase Builder in Setup. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create a briefcase in Setup: Customize Application
1. From Setup, in the Quick Find box, enter Briefcase Builder, and then select **Briefcase Builder**. 2. Click **New Briefcase**. 3. Enter a name and an optional description for your briefcase. ![The fields to enter the name, developer name, and description of the briefcase](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-briefcase_builder-264-0-0-production-enus/be5c0b1c-2ff9-445c-85c4-e6337385a6af/briefcase_builder/images/briefcase_builder_create_name.png) 4. Select the data to add to the briefcase. Use object rules to configure which objects are included in your briefcase and how the objects’ records are related to each other. To add a top-level object rule, click the **+** button next to Briefcase Rules, and then click the object that you want to add. To add a related object rule, select its top-level object rule in the left pane, and then click **Add Related Object**. In each object rule, use filters to specify which records from the object to include in the briefcase. For more information on your options for object rules and filters, see [Data Selection](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_select_record_data.htm&release=264.0.0&type=5 "Learn how you can use object rules and filters to select the most relevant records for your mobile workforce."). ![The fields to configure an object rule](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-briefcase_builder-264-0-0-production-enus/be5c0b1c-2ff9-445c-85c4-e6337385a6af/briefcase_builder/images/briefcase_builder_create_objects.png) 5. For the Offline App (Salesforce Mobile App Plus), you can optionally enable offline priming for file attachments. In the settings for an object rule, select **Enable file attachments**, and then enter the maximum number of files to return for each record. You can optionally filter file attachments by file size or file type. The total number of files returned by an object rule is calculated by the maximum files per record multiplied by the maximum records returned. The total number of files returned by a briefcase is the sum of files returned by all object rules in the briefcase. For example, an Account object rule with 10 maximum records and 2 maximum files per record returns up to 20 files. A Contact object rule with 20 maximum records and 3 maximum files per record returns up to 60 files. A briefcase with the Account and Contact rules returns up to 80 files. You can configure up to 100 file attachments across all active briefcases. ![The File Attachments section of a briefcase rule’s settings](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-briefcase_builder-264-0-0-production-enus/be5c0b1c-2ff9-445c-85c4-e6337385a6af/briefcase_builder/images/briefcase_file_attachments.png) 6. If you have [custom metadata types](https://help.salesforce.com/s/articleView?id=platform.custommetadatatypes_about.htm&type=5&language=en_US) available, you can optionally add custom metadata rules to your briefcase. For example, add a custom metadata rule to your briefcase to support a custom flow in the Salesforce Field Service mobile app. To add a custom metadata rule, click the **+** button next to Briefcase Rules, click **Custom Metadata**, and then select the custom metadata type that you want to add. ![The tab to select a custom metadata type for a briefcase rule](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-briefcase_builder-264-0-0-production-enus/be5c0b1c-2ff9-445c-85c4-e6337385a6af/briefcase_builder/images/briefcase_builder_create_custom_metadata.png) For more information on custom metadata rules, see [Data Selection](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_select_record_data.htm&release=264.0.0&type=5 "Learn how you can use object rules and filters to select the most relevant records for your mobile workforce."). 7. Assign the briefcase to users, user groups, or profiles. These assignments determine who can access the records in the briefcase. Only user groups are supported. Chatter groups, or collaboration groups, aren’t supported. Users who perform various tasks can be assigned to multiple briefcases. When assigning multiple briefcases to one user, they get access to all the offline data combined from all the assigned briefcases. If a user doesn’t have access to the field used to define a dataset, then that user can’t access any records for that dataset. 8. Select the external client apps that you want to associate with this briefcase. For more information on considerations for the apps that you associate with the briefcase, see [App Selection](https://help.salesforce.com/s/articleView?id=xcloud.briefcase_builder_app_select.htm&release=264.0.0&type=5 "Learn important considerations about selecting external client apps to associate with your briefcases."). 9. To save and activate the briefcase, click **Activate**. To save the briefcase’s settings without activating it for use, click **Save**. # Create a Business Account for Self-Registration If you want to save your new users as part of an organization, create a business account. When users self-register, they're added as contacts to the business account associated with their company. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Professional, Enterprise, Unlimited, and Developer Editions
User Permissions Needed
To access Experience Workspaces:
  • Access Site Management OR Manage Sites OR Create and Set Up Sites
  • AND is a member of the site
To create and edit Visualforce pages: Customize Application
To edit Apex classes:
  • Author Apex
  • AND Customize Application
1. From the App Launcher, enter Accounts, then select **Accounts**. 2. Click **New**. 3. Add a name for the account. 4. Fill out the remaining fields as needed. For guidance on filling out business account fields, visit [Account Fields](https://help.salesforce.com/s/articleView?id=sales.account_fields.htm&type=5&language=en_US) in _Salesforce Help_. To learn more about managing and creating accounts, visit these resources. - _Salesforce Help_: [Manage Accounts and Contacts](https://help.salesforce.com/s/articleView?id=sales.sales_core_manage_accounts_contacts.htm&type=5&language=en_US) - _Trailhead_: [Accounts & Contacts for Lightning Experience](https://trailhead.salesforce.com/en/content/learn/modules/accounts_contacts_lightning_experience) # Create a Cache Block Example In this example, an Integration Procedure accepts a list of first or last names and retrieves Contacts having those names. A Cache Block improves Contact retrieval performance. In this example, the Integration Procedure has these components: - A Cache Block, named CacheBlock1 - A Loop Block within the Cache Block, named LoopBlock1 - An Omnistudio Data Mapper Extract Action within the Loop Block, named ExtractContact - A Response Action, named ResponseAction To build this Integration Procedure: 1. Create an Integration Procedure. 2. Add a Cache Block component: - To open the Elements panel, click **+**, select **Cache Block**, click ![Three dots](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/omnistudio/images/threedots_60.png), and select **Details**. - If you’re using the designer on a managed package, open the Available Components panel, and drag **Cache Block** to the Structure panel. 3. Configure the Cache Block component with these settings:

Property

Value

Salesforce Platform Cache Type

Org Cache

Time To Live In Minutes

5

Cache Keys

  • Key: contactId
  • Value: %ExtractContact:Contact:Id%
  • Key: contactName
  • Value: %ExtractContact:Contact:Name%

Cache Block Output

  • Key: LoopBlock1
  • Value: %LoopBlock1%
4. Add a Loop Block inside the Cache Block and configure it with these settings:

Property

Value

Loop List

names

Additional Loop Output

  • Key: ExtractContact
  • Value: %ExtractContact%
5. Create a Data Mapper Extract that the Data Mapper Extract Action calls, and configure it with these settings:

Tab

Settings

Extract

A Contact extract step set to Contact Name LIKE name

Output

A mapping from Contact:Id to Contact:Id

A mapping from Contact:Name to Contact:Name

To create a Data Mapper Extract, see the examples in [Omnistudio Data Mapper Extract Examples](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_extract_examples_46190.htm&release=264.0.0&type=5 "Data Mapper Extract examples demonstrate object relationships, paging with data values, paging with offsets, and relationship notation."). 6. Add a Data Mapper Extract Action inside the Loop Block, and configure it with these settings:

Property

Value

Element Name

ExtractContact

Data Mapper Interface

ExtractContactName

Data Source

names:name

Filter Value

name

7. Add a Response Action below the Loop Block, and configure it with these settings:

Property

Value

Send JSON Path

CacheBlock1

8. Click **Edit as JSON**. If you’re using the designer on a managed package, click **Preview**, and then click **Edit as JSON**. 9. Copy this JSON data and paste it into the Input Parameters panel: ``` { "names": [ { "name": "Miller" }, { "name": "Torres" } ] } ``` To demonstrate performance most effectively, specify common and/or many names. 10. Click **Execute** and note the resulting Browser, Server, and Apex CPU values. 11. Open the Options pane and change the `ignoreCache` value to `false`. 12. Click **Execute**. This step populates the cache, so the resulting Browser, Server, and Apex CPU values should be similar to the previous values. 13. Click **Execute**. This step uses the cached values, so the resulting Browser, Server, and Apex CPU values should be noticeably less than the previous values. 14. To see the `vlcCacheKey` and `vlcCacheResult` nodes, open the Debug Log and scroll to the `CacheBlock1Info` node. # Create a Cache Block Example (Managed Package) For the managed package runtime, an Integration Procedure accepts a list of first or last names and retrieves Contacts having those names. A Cache Block improves Contact retrieval performance. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). This Integration Procedure also includes a Loop Block; see [Process Arrays Using Loop Blocks (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_process_arrays_using_loop_blocks.htm&release=264.0.0&type=5 "For the managed package runtime, a Loop Block iterates over the items in a data array, enabling the Actions within it to repeat for each item. For example, in ​Salesforce Industries Communications, Media, and Energy, without a Loop Block, adding four products to a cart would require running four separate Remote Actions. But one Remote Action within a Loop Block can add all four products."). To download a data pack of this example for Omnistudio for Managed Packages, click [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m0000005uKM/n0ldOASmavmKkjIaKbOcJqby11yfWIdd4G8FioNW8ZU). This Integration Procedure has these components: - A Cache Block, named CacheBlock1 - A Loop Block within the Cache Block, named LoopBlock1 - An Omnistudio Data Mapper Extract Action within the Loop Block, named ExtractContact - A Response Action, named ResponseAction The Structure panel looks like this: ![The contents of the Structure panel are listed in the preceding text.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cacheblockstructure.png) To build this Integration Procedure: 1. From the Integration Procedures tab, click **New**. 2. Provide an **Integration Procedure Name**, a **Type**, and a **SubType**, and click **Save**. 3. Drag a Cache Block into the Structure panel and give it the following settings:

Property

Value

Salesforce Platform Cache Type

Org Cache

Time To Live In Minutes

5

Cache Keys

contactId set to %ExtractContact:Contact:Id%

contactName set to %ExtractContact:Contact:Name%

Cache Block Output

LoopBlock1 set to %LoopBlock1%

4. Drag a Loop Block inside the CacheBlock and give it the following settings:

Property

Value

Loop List

names

Additional Loop Output

ExtractContact set to %ExtractContact%

5. Create the Data Mapper Extract that the Data Mapper Extract Action calls, name it ExtractContactName, and give it the following settings:

Tab

Settings

Extract

A Contact extract step set to Contact Name LIKE name

Output

A mapping from Contact:Id to Contact:Id

A mapping from Contact:Name to Contact:Name

If you aren't sure how to create a Data Mapper Extract, see the examples in [Omnistudio Data Mapper Extract Examples (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_extract_examples.htm&release=264.0.0&type=5 "For the managed package runtime, Data Mapper Extract examples demonstrate object relationships, paging with data values, paging with offsets, working with attributes, and relationship notation."). 6. Drag a Data Mapper Extract Action inside the Loop Block and give it the following settings:

Property

Value

Element Name

ExtractContact

Data Mapper Interface

ExtractContactName

Data Source

names:name

Filter Value

name

7. Drag a Response Action below the Loop Block and give it the following settings:

Property

Value

Send JSON Path

CacheBlock1

8. To test this Integration Procedure, on the Preview Tab, click **Edit as JSON** and provide input with the following structure: ``` { "names": [ { "name": "Miller" }, { "name": "Torres" } ] } ``` To demonstrate performance most effectively, specify common and/or many names. 9. Click **Execute** and note the resulting Browser, Server, and Apex CPU values. 10. Open the Options pane and change the `ignoreCache` value to `false`. ![Under Errors/Debug Output are the Debug Log, errors, and Options panes. The Options pane is expanded to reveal resetCache, ignoreCache, and other options.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cachingpreviewoptions.png) 11. Click **Execute** again. This step populates the cache, so the resulting Browser, Server, and Apex CPU values should be similar to the previous values. 12. Click **Execute** a third time. This step uses the cached values, so the resulting Browser, Server, and Apex CPU values should be noticeably less than the previous values. 13. To see the `vlcCacheKey` and `vlcCacheResult` nodes, open the Debug Log and scroll to the `CacheBlock1Info` node. ![Under Errors/Debug Output, the Debug Log pane is expanded. JSON data for CacheBlock1 is displayed, including vlcCacheResult and vlcCacheKey.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/cachekeyresponse.png) # Create a Calculation Matrix Manually (Managed Package) For the managed package runtime, if a calculation matrix has only a few rows of data, it might be easier to create it manually. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. On the Vlocity Calculation Matrices list page, click **New**. 2. On the New Vlocity Calculation Matrices window, choose **Standard**. 3. In the **Calculation Matrix Name** box, enter the name for the calculation matrix. Choose a simple name for your calculation matrix. Vlocity adds the calculation matrix name to column header names and uses the combination in calculation procedures. Leave the rest of the fields on this window blank. 4. (Optional) If you plan to use a wildcard column, enter the following: - **Wildcard Column**: The name of the column that can have a wildcard entered as a user value. - **Wildcard Value**: The value a user can enter that's the wildcard. Be sure to add the Wildcard Value to its column in the CSV file. 5. Click **Save**. 6. Click the version of the matrix that you just created. 7. In the Table section, click **Add Header**. 8. Enter the following information: - **Name** is the column header name. - **Header Type** defines the column mapping. Select **Input** if the column gets data for the calculation. Select **Output** if the column returns data from the calculation. - **Data Type** specifies the type of data stored in the column: - **Text** - **Number** - **Currency** - **Percent** - **Boolean** - **Number Range** - **Text Range** ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important Do not change the **Data Type** of an existing header unless you have no other choice. When you change the **Data Type**, the data in the column can be corrupted, requiring you to re-enter all the data. - **Matrix Display Order** defines the column number (sequence). 9. Repeat steps 5 and 6 to define the rest of the column headers. 10. Click **Save Data**. 11. Click **Edit Data** to enter values into the columns. 12. Enter a value into each data field in each column. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You must enter data in every data field. You cannot enable a calculation matrix that contains empty data fields. 13. When you're done editing, click **Save Data**. 14. If your organization has an approval process set up for calculation matrices, click **Submit for Approval**. 15. After the calculation matrix is approved, or if your organization doesn't approvals and you're ready to use this calculation matrix, enable the calculation matrix. Click the pencil icon to the right of the **Enabled** checkbox. Select **Enabled**. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important You can't disable an enabled calculation matrix, and you can't edit headers or data on an enabled calculation. Be sure before you click **Enabled**. # Create a Case for a Loyalty Program Member Service representatives can create a case for a member when interacting with them from the member’s Loyalty Program Member record. The case is automatically associated with the member’s Contact record. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
User Permissions Needed
To associate a case with a loyalty program member: Loyalty Management
1. In the Loyalty Programs tab, select your loyalty program. 2. Select a loyalty program member. 3. On the loyalty program member’s profile page, click **Cases**, and then click **New**. If the Cases related list isn’t available on the Loyalty Program Member page layout, add it to the page layout from Setup. 4. The Contact Name and Account Name fields are prepopulated. 5. Enter the case details. 6. Save your changes. After you create the case, the case is associated with the member’s Contact record and isn’t listed on the Case related list of the member’s Loyalty Program Member record. If you want to list the case on the member’s Loyalty Program Member record, associated the member and the case in a Loyalty Program Member Case record. You can add a member to a case from the Loyalty Program Members related list on the Case record or create a Loyalty Program Member Case record. # Create a Collection If you have lots of Favorites, organize them into Collections to make them easier to find. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. From the sidebar, select the **Home** tab. 2. Next to Favorites, click the three dots or the **Favorites Options** menu. 3. Select **New Collection**. 4. Name the collection. # Create a Community User From an Application (Managed Package) For the managed package runtime, the housing community provides clients with a self-service portal to interact with the agency and property management. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). It’s possible to automate the creation of an external (Salesforce Community) user after a prospective tenant fills out the initial intake form, requesting assistance. To automate that user creation, follow these steps. To create an external user when a form is submitted: 1. Add a **Remote Action** to the end of the **Omniscript** and configure the settings as follows: ``` Remote Class = ExternalUserSelfRegistration Remote Method = selfReg ``` 2. Create **elements** in the Omniscript for **Username** and **Password**. Alternatively, if an email address is already an element in the form, you can set the email address as the username. If no password element is added, a system-generated email is sent to the user with instructions for setting up their password for the portal. There are two optional remote options to add as Key/Value pairs: - **profileId**: To create a user with a different profile than the default one set up in the community, enter **profileId** as the key and the Id of the profile as the value. - **sendEmail**: To decide if a confirmation email is sent to new users, enter a boolean in the value field. 3. Create a Pre-Transform Omnistudio Data Mapper Interface to add to the remote action. The purpose of the Pre-Transform Data Mapper Interface is to map fields in the application (such as Name, Email, Password) to the required inputs for registration. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_example.png) Example Pre-Transform Data Mapper Interface ![Example pre-transform DataRaptor interface](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/omniscript_pretransform_dr_interface.gif) # Create a Company Phone for Your Team Create a single phone number that connects your customers to your team. Your team can take and make calls from Salesforce. Personalize conversations based on past call history, take notes, and finalize a deal or case details all within Salesforce. Align your customers’ phone experience with your company by uploading your own recorded messages and wait music. ### Required Editions
Essentials is available in: Lightning Experience
Available in: Essentials Edition
Dialer for Essentials consolidates your company’s phone calls to one phone number, so incoming calls have a better chance of connecting to someone on your team. Your team takes the calls from either the Sales app or Service console app, where they can view and update related records like contacts or leads, see call history, take notes, and log calls. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-essentials-264-0-0-production-enus/e0001bec-929a-481e-9d65-d13539e5cfe8/images/icon_note.png) Note Dialer for Essentials is for use only by customers in the US and Canada, and is intended to be used to dial US and Canadian numbers only. When you’re open and available, the customer hears your Greeting While Open message and Wait Music. When you’re closed, they hear the Greeting While Closed message. ![dialer customer call flow](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-essentials-264-0-0-production-enus/e0001bec-929a-481e-9d65-d13539e5cfe8/essentials/images/essentials_dialer_recordings_diagram.png) If your team doesn’t pick up the call, the customer hears either the No One Available message or the Customer Callback message depending on your settings. If the customer requests a callback, they hear the Callback Confirmation message. Want to see it in action? Our 1-mnute feature tour will show you how it all works. Watch the tour: [![Watch Video Demo](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-essentials-264-0-0-production-enus/e0001bec-929a-481e-9d65-d13539e5cfe8/resources-global/_corporate/images/play_btn.png)Use a Phone in Salesforce with Dialer for Essentials](https://salesforce.vidyard.com/watch/Kf6gEy1fnA1UCnfyYK33NF) (1 minute) # Create a Conditional Block Example with If-Elseif-Else Logic (Managed Package) For the managed package runtime, based on a price and a state code, an Integration Procedure calculates the sales tax and reports the total price. For brevity, only four state codes are included: WA, OR, CA, and NV. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To download a DataPack of this example for Omnistudio for Managed Packages, click [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m0000005uo7/klx2ELjvpM8JvRgX7v6yUwdBMgMJoWZwMNs2.cXCoOM). The Integration Procedure has these components: - A Conditional Block, named StateSalesTaxes - Set Values components within the Conditional Block, named IfCA, IfOR, IfWA, IfNV, and IfOtherState - Set Values components following the Conditional Block, named CalculateTax and AssembleOutput - A Response Action, named Response The Structure panel looks like this: ![The contents of the Structure panel are listed in the preceding text.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/ipcondblock1.png) To build this Integration Procedure: 1. From the Vlocity Integration Procedures tab, click **New**. 2. Provide an **Integration Procedure Name**, a **Type**, and a **SubType**, and click **Save**. 3. Drag a Conditional Block into the Structure panel, set its **Element Name** to `StateSalesTaxes`, and check **Is If Else Block**. 4. Drag a Set Values component into the Conditional Block and give it the following settings: 1. Set its **Element Name** to `IfCA`. 2. Under Element Value Map, click **Add Value**. Set the **Element Name** to `CASalesTax` and the **Value** to `0.0866`. 3. Set the **Response JSON Path** to `CASalesTax`. 4. Set the **Response JSON Node** to `SalesTax`. These Response settings copy the `CASalesTax` value to a top-level JSON node named `SalesTax`. A top-level node isn't tied to a particular step. This allows any step to set its value. It also allows any step to access its value using the same path, regardless of which step set its value. 5. Set the **Execution Conditional Formula** to `State == "CA"`. 5. Repeat the previous step to configure four more Set Values components inside the Conditional Block with the following settings:

Property

IfOR

IfWA

IfNV

IfOtherState

Element Name

IfOR

IfWA

IfNV

IfOtherState

Element Value Map, Element Name

ORSalesTax

WASalesTax

NVSalesTax

DefaultSalesTax

Element Value Map, Value

0

0.0921

0.0832

0.07

Response JSON Path

ORSalesTax

WASalesTax

NVSalesTax

DefaultSalesTax

Response JSON Node

SalesTax

SalesTax

SalesTax

SalesTax

Execution Conditional Formula

State == "OR"

State == "WA"

State == "NV"

(leave blank)

6. Drag a Set Values component after the Conditional Block and set its **Element Name** to `CalculateTax`. Under the Element Value Map, give it the following settings:

Element Name

Value

Tax

=(%Price% * %SalesTax%)

TaxRate

=(%SalesTax% * 100)

Total

=(%Price% + (%Price% * %SalesTax%))

7. Drag a Set Values component after the previous one and set its **Element Name** to `AssembleOutput`. Click **Edit as JSON** and edit the `ElementValueMap` node as follows: ``` "elementValueMap": {     "Output": {         "Price": "%Price%",         "State": "%State%",         "Tax": "%CalculateTax:Tax%",         "TaxRate": "%CalculateTax:TaxRate%",         "Total": "%CalculateTax:Total%"     } }, ``` 8. Drag a Response Action after the previous component and give it the following settings: 1. Set its **Element Name** to `Response`. 2. Set the **Send JSON Path** to `AssembleOutput:Output`. 3. Set the **Send JSON Node** to `Output`. 9. Go to the Preview tab and click **Edit as JSON**. 10. Paste the following input into the Input Parameters panel: ``` {     "Price": "250",     "State": "CA" } ``` 11. Click **Execute**. The output data has the following structure: ``` {   "Output": {     "Price": "250",     "State": "CA",     "Tax": 21.65,     "TaxRate": 8.66,     "Total": 271.65   } } ``` 12. Change `Price` and `State` values, click **Execute**, and see how the `Output` values change. # Create a Configuration Use the Mobile Builder for Salesforce Mobile App to configure and customize the offline landing page. ### Required Editions
Setup for Mobile Offline available in: Lightning Experience
User Permissions Needed
To use Mobile Offline Mobile Offline for Salesforce Mobile App Plus
1. From Setup, in the **Quick Find** box, enter Mobile Builder, and then select **Mobile Builder for Salesforce Mobile App**. ![Quick Find screen open with Mobile Builder for Salesforce Mobile App highlighted in the list](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app_plus-264-0-0-production-enus/24dbd8e3-8820-4d77-ab26-f3c195bfdf66/salesforce_app_plus/images/BuilderSetup.png) 2. Click **New Configuration**. 3. Give your configuration an app name. 4. To populate the API Name field, click in the box, and then click **Save**. The Mobile Builder for Salesforce Mobile App user interface opens. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app_plus-264-0-0-production-enus/24dbd8e3-8820-4d77-ab26-f3c195bfdf66/images/icon_note.png) Note Configuration app names must be unique to all mobile builders. You can't reuse app names that are used in other builders, like Field Service Mobile Builder or the Mobile Builder for Seller-Focused Experience. # Create a Connected App When you create a connected app, make sure that you understand how it’s going to be used so you can configure the appropriate settings. For example, if you’re creating a connected app to integrate an external application with your Salesforce API, configure the connected app with OAuth authorization settings. Or if you’re creating a connected app to act as a service provider in a SAML single sign-on (SSO) flow, configure SAML settings. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. Depending on your connected app use case, use these instructions to build your connected app. - **[Configure Basic Connected App Settings](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_basics.htm&release=264.0.0&type=5)** For all connected apps, define the basics, which include the app’s name, logo, and contact information. - **[Enable OAuth Settings for API Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&release=264.0.0&type=5)** You can use a connected app to request access to Salesforce data on the behalf of an external application. For a connected app to request access, it must be integrated with the Salesforce API using the OAuth 2.0 protocol. OAuth 2.0 is an open protocol that authorizes secure data sharing between applications through the exchange of tokens. When developers or independent software vendors (ISV) want to integrate their app with Salesforce, they use OAuth APIs. These OAuth APIs enable a user to work in one app but see the data from another. - **[Configure a Connected App for the OAuth 2.0 Client Credentials Flow](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_client_credentials_setup.htm&release=264.0.0&type=5)** With the OAuth 2.0 client credentials flow, your client app exchanges its client credentials defined in the connected app—its consumer key and consumer secret—for an access token. Before you implement the client credentials flow, configure these settings and access policies for your connected app. - **[Integrate Service Providers as Connected Apps with SAML 2.0](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_saml_sso.htm&release=264.0.0&type=5)** To integrate a service provider with your Salesforce org, you can use a connected app that implements SAML 2.0 for user authentication. Salesforce supports SAML single sign-on (SSO) when the service provider or the identity provider initiates the flow. To use this option, configure a connected app with SAML 2.0 enabled for your service provider. Define your Salesforce org as the SAML identity provider. - **[Create a Connected App for Mobile App Integration](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_mobile.htm&release=264.0.0&type=5)** A connected app is a primary means by which a mobile app connects to Salesforce. Although not required, you can use Salesforce Mobile SDK to build mobile applications as connected apps. These connected apps can access Salesforce OAuth services and call Salesforce REST APIs. - **[Create a Custom Connected App Handler](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_custom_handler.htm&release=264.0.0&type=5)** Write a custom connected app handler in Apex to customize the behavior of a connected app. The custom handler can support new protocols or respond to user attributes in a way that benefits a business process. - **[Expose Your Connected App as a Canvas App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_canvas.htm&release=264.0.0&type=5)** You can expose your connected app as a canvas app. Canvas apps are available as apps that your org’s Salesforce admin install or as personal apps that users install across orgs. Users access a canvas personal app from the Chatter tab, and are prompted to allow the app to connect to their Salesforce data. Users can choose to make an app a canvas personal app. #### See Also - [Edit a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_edit_parent.htm&release=264.0.0&type=5 "After you create a connected app, you can make changes to it’s configuration. The actions that you can perform depend on the type of connected app. Use the App Manager to get a list of apps available in your org, including connected apps. From here, you can edit, reconfigure, or delete the connected app.") - [Manage Access to a Connected App](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_manage.htm&release=264.0.0&type=5 "After a connected app is installed in your org, you can manage access to it. Configure permissions and policies for the app, explicitly defining who can use the connected app and where they can access the app from. These permissions and policies, which include user-access, IP range restrictions, and multi-factor authentication (MFA), provide extra security for your org.") - [Connected Apps](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_overview.htm&release=264.0.0&type=5 "A connected app is a framework that enables an third-party application to integrate with Salesforce by using APIs and standard protocols, such as SAML, OAuth, and OpenID Connect. Connected apps use these protocols to authenticate, authorize, and provide single sign-on (SSO) for third-party applications. The third-party applications that are integrated with Salesforce can run on the customer success platform, other platforms, other devices, or even SaaS subscriptions. For example, when you log in to your Salesforce mobile app and see your data from your Salesforce org, you’re using a connected app.") # Create a Connected App for Mobile App Integration A connected app is a primary means by which a mobile app connects to Salesforce. Although not required, you can use Salesforce Mobile SDK to build mobile applications as connected apps. These connected apps can access Salesforce OAuth services and call Salesforce REST APIs. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

User Permissions Needed
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage Connected Apps

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. For more information about Salesforce Mobile SDK, see [Mobile SDK Development Guide](https://developer.salesforce.com/docs/atlas.en-us.noversion.mobile_sdk.meta/mobile_sdk/preface_intro.htm). 1. Create your connected app, and complete its [basic information](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_basics.htm&release=264.0.0&type=5 "For all connected apps, define the basics, which include the app’s name, logo, and contact information."). 2. Enable these [OAuth Settings](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_api_integration.htm&release=264.0.0&type=5 "You can use a connected app to request access to Salesforce data on the behalf of an external application. For a connected app to request access, it must be integrated with the Salesforce API using the OAuth 2.0 protocol. OAuth 2.0 is an open protocol that authorizes secure data sharing between applications through the exchange of tokens. When developers or independent software vendors (ISV) want to integrate their app with Salesforce, they use OAuth APIs. These OAuth APIs enable a user to work in one app but see the data from another."): 1. Enter a callback URL. Mobile SDK uses this URL to call back to your application during authorization. For Mobile SDK, this value must match the OAuth redirect URI specified in your app’s project configuration. 2. Select the following OAuth scopes: **Access and manage you data (api)**, **Perform requests on your behalf at any time (refresh\_token, offline\_access)**, and **Provide access to your data via the Web (web)**. 3. Deselect **Require Secret for Web Server Flow**. 3. Enter the mobile start URL to direct users to a specific location when the app is accessed from a mobile device. If you don’t enter a mobile start URL, users are sent to the start URL defined under Web App Settings. If the connected app you’re creating is a canvas app, you can skip this field. The Canvas App URL field contains the URL that gets called for the connected app. 4. Select **PIN Protect** if your app supports PIN protection. This setting allows the admin to set the session timeout and PIN length for mobile applications after installing the connected app. Salesforce Mobile SDK supports PIN protection. You can also implement it manually by reading the `mobile_policy` object from the user’s Identity URL. 5. For App Platform, specify the app platform, such as iOS. 6. For Restrict to Device Type, specify the supported device form factors for the mobile app. If the app supports all form factors, don’t choose a value. 7. For App Version, enter the version number of the mobile app. 8. For Minimum OS version, enter the version required for the app. 9. To confirm that this app is only for internal (non-public) distribution, select **Private App** . This setting is required because Apple doesn’t allow distribution of public mobile apps outside of its App Store. 10. If the mobile app is private, specify the location of the Mobile App Binary file. The format of the file is IPA for iOS, and APK for Android. 11. For iOS apps only: 1. Specify the location of the Application Icon that is displayed while the app is being downloaded and installed on an iOS device. 2. Specify the iOS Bundle Identifier. For iOS 7 and later, use the same bundle identifier that you used when developing the app in XCode. If you don’t, users see two app icons during installation. 12. If the mobile connected app is a public app and you haven’t uploaded its binary file to Salesforce, enter the app binary URL. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note If you remove mobile integration from a new version of an existing connected app, mobile integration is removed from all versions of the app. For example, you publish a package containing version 1.0 of your connected app with mobile integration. You then remove mobile integration from the app, repackage it, and publish it as version 1.1. If a customer installs the earlier package with version 1.0, the connected app doesn’t contain mobile integration. 13. Enable push notifications, as needed. See [Mobile Push Notifications](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_mobile_push_notifications.htm&release=264.0.0&type=5 "Mobile push notifications allow Lightning Platform mobile app developers to easily push notifications to their users’ mobile devices when business events occur in the customers’ orgs. To enable push notifications, you must use the mobile connected apps framework."). 14. When you’ve configured all settings for your connected app, click **Save**. # Create a Connected App for OmniOut (Managed Package) For the managed package runtime, enable the external connection to interact with Salesforce by configuring a Connected App in Salesforce. Create a Connected App to make external calls from OmniOut. Connected Apps provide OmniOut with an access token that enables proxies and login authentication to work. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). See [Connected Apps](https://help.salesforce.com/articleView?id=connected_app_overview.htm&language=en_US). Before You Begin - For Omniscripts, add an Omniscript LWC to your OmniOut project. See [Add an Omniscript Lightning Web Component to OmniOut (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_an_omniscript_lightning_web_component_to_omniout.htm&release=264.0.0&type=5 "For the managed package runtime, download and configure an Omniscript to use it off-platform in OmniOut. Download your Omniscript LWC from the LWC Omniscript Designer, add the component folder to the OmniOut project, and configure files for HTML and CSS."). - For Flexcards, add a Flexcard LWC to your OmniOut project. See [Add a Flexcard LWC to OmniOut (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_a_flexcard_lwc_to_omniout.htm&release=264.0.0&type=5 "For the managed package runtime, download and configure a Flexcard to use it off-platform in your OmniOut project. Download your Flexcard LWC from the Flexcard Designer, add the component folder to the OmniOut project, and configure files for HTML and CSS."). 1. From Setup, enter External Client Apps in the Quick Find box, then select **Settings** in the External Client App section. 2. Turn on **Allow creation of connected apps** if it's off. 3. Click **New Connected App**. 4. In the **Connected App Name** field, enter a Name for your Connected App. 5. Enter an API name that is used to refer to the Connected App from your program. 6. Enter a contact email. 7. Check **Enable OAuth Settings**. 8. Enter a callback URL. The callback URL is the URL for the App's public site. 9. Move the **Fullaccess (full)** scope or **Access and manage your data (api)** into **Selected OAuth Scopes**. 10. Save your Connected App. 11. From your Connected App page, click **Edit Policies**. 12. In the **Permitted Users** field, select **All users may self-authorize**, and save the Connected App. 13. Copy the **Consumer Key** and **Consumer Secret**. These values populate the client\_id and client\_secret. 14. Open the OmniOut project in Visual Studio Code, and in the terminal, perform these tasks: 1. Enter this command without running it. ``` curl -d "username=USERNAME" -d "password=PASSWORD" -d "client_id=CLIENTID" -d "client_secret=CLIENTSECRET" -v -d "grant_type=password" https://test.salesforce.com/services/oauth2/token ``` 2. In the command, replace these values:

Value

Description

USERNAME

Replace with your Salesforce username.

PASSWORD

Replace with your Salesforce password.

CLIENTID

Replace with your Connected App's Consumer Key.

CLIENTSECRET

Replace with your Connected App's Consumer Secret.

3. (Optional) In the command, enter the appropriate URL for your Salesforce environment. By default, the URL is configured for a Sandbox org.

Environment

URL

Developer Org

https://login.salesforce.com/services/oauth2/token

Sandbox Org

https://test.salesforce.com/services/oauth2/token

4. Run the command, and copy the **Access Token** and **Instance URL**. What’s next: [Run OmniOut in Development Mode (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_run_omniout_in_development_mode.htm&release=264.0.0&type=5 "For the managed package runtime, view and test your Omniscript and Flexcard before adding it to your application by running it in development mode. Use a jsForce connection to request data from your org."). # Create a Connection Object in OmniOut (Managed Package) For the managed package runtime, send and receive data to and from Salesforce by creating a connection object. A connection object must be present for every type of connection, including when a proxy is present. The connection object exposes the instance URL, namespace, and request function. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). If your OmniOut project has Omniscripts in it, you must create an event handler to pass the connection object after receiving OmniOut's **omnioutcomponentready** event. Follow the directions on this page. If your OmniOut project has Flexcards only, use the **initializeDatasourceSdk** method to connect your app. See [Create a Connection Object in OmniOut for Flexcards (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_connection_object_in_omniout_for_flexcards.htm&release=264.0.0&type=5 "For the managed package runtime, send and receive data to and from Salesforce by creating a connection object. A connection object must be present for every type of connection, including when a proxy is present. The connection object exposes the instance URL, namespace, and request function."). The templates on this page are examples that developers can use for reference material when building a connection. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note The connection process is unique to each application and must be done outside the scope of OmniOut. Before You Begin Add the OmniOut project to your application. See [Move OmniOut into Your App (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_move_omniout_into_your_app.htm&release=264.0.0&type=5 "For the managed package runtime, generate a compiled dist folder to move OmniOut into your app project before deploying your app to a content management system."). 1. Create an event handler. **Example Event Handler** ``` /** * Once the component is ready, an event is dispatched to let the DOM knows that a connection is expected. **/ document.addEventListener('omnioutcomponentready', evt => { if (evt.detail && evt.detail.omnioutcomponent) { evt.srcElement.connection = new YourOmniOutConnection(); } }); ``` 2. Create a connection object. **Example Connection Object** ``` function BaseConnectionExample() { /** * Expose the request method **/ this.request = request; /** * @type {string} The namespace of the package **/ this.namespace = ''; /** * @type {string} The instance URL of your org **/ this.instanceUrl = ''; /** * A function that executes the HTTP requests. * @type {string} The target URL. * @type {Object} The data that is sent to the target URL. * @returns {Promise} A promise with the **/ function request(url, data) { return connection.requestPost(url, data); } } ``` 3. Configure additional connection options outside of OmniOut. # Create a Connection Object in OmniOut for Flexcards (Managed Package) For the managed package runtime, send and receive data to and from Salesforce by creating a connection object. A connection object must be present for every type of connection, including when a proxy is present. The connection object exposes the instance URL, namespace, and request function. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). If your OmniOut project has Omniscripts only, or Omniscripts and Flexcards, create an event handler to pass the connection object after receiving OmniOut's **omnioutcomponentready** event. See [Create a Connection Object in OmniOut (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_connection_object_in_omniout.htm&release=264.0.0&type=5 "For the managed package runtime, send and receive data to and from Salesforce by creating a connection object. A connection object must be present for every type of connection, including when a proxy is present. The connection object exposes the instance URL, namespace, and request function."). If your OmniOut project has Flexcards, you must use the **initializeDatasourceSdk** method to connect your app. Follow the directions on this page. The template on this page is an example that developers can use for reference material when building a connection. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note The connection process is unique to each application and must be done outside the scope of OmniOut. Before You Begin Add the OmniOut project to your application. See [Move OmniOut into Your App (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_move_omniout_into_your_app.htm&release=264.0.0&type=5 "For the managed package runtime, generate a compiled dist folder to move OmniOut into your app project before deploying your app to a content management system."). 1. In the **./src/index.js** file, create a connection object: **Example Connection Object** ``` import { initializeDatasourceSdk } from "c/sdkUtility"; import { setConnection } from 'c/omniscriptConnection'; function JSForceConnectionExample() { const connection = new jsforce.Connection({ accessToken: '', instanceUrl: '' }); this.namespace = ''; this.request = request; this.instanceUrl = connection.instanceUrl; function request(url, data) { return connection.requestPost(url, data); } } function setMyConnection() { const connection = new JSForceConnectionExample(); initializeDatasourceSdk({ jsforceConnection: connection, instanceUrl: connection.instanceUrl, namespace: connection.namespace }); setConnection(connection); } ``` 2. Configure additional connection options outside of OmniOut. # Create a Contact and Use a Formula A common task for an Omnistudio Data Mapper Load is to create a record in a Salesforce object. Depending on the source data, the input might need light cleanup or a check for a particular field status. In this example, the Data Mapper load creates a record in the Contact object and sets the Authorized field to true if the contact is over 18 years old. The input JSON for this example includes the contact details, and the data is in expected formats. But the names aren't the same as the Contact fields. In this scenario, a custom checkbox field named Authorized is added to the Contact object as Authorized\_\_c and to the Contact layout. ```json { "ContactDetails": { "Birthdate": "10/10/1954", "LastName": "Singh", "Telephone": "5106345789", "FirstName": "Sanjay" } } ``` ## Create Settings | Field | value | notes | | --- | --- | --- | | Interface Type | Load |   | | Input Type | JSON | In this example, the input is provided as JSON and not pulled from another source. | | Output Type | sObject |   | ## Object Settings Click + and select Contact. ## Mapping Settings Map data from the input JSON to the target Salesforce object and field. If you’re using the designer on a managed package, click **Fields**. See [Configure an Omnistudio Data Mapper Load](https://help.salesforce.com/s/articleView?id=xcloud.os_object_field_mapping_47137.htm&release=264.0.0&type=5 "Configure a Data Mapper Load by specifying the object type and filters. To enhance the performance of the Data Mapper Load, you can define formulas, add fields to write data to, and configure additional properties.").

Input JSON Path

Domain Object Field

ContactDetails:Authorized

Authorized__c

ContactDetails:Birthdate

Birthdate

ContactDetails:FirstName

FirstName

ContactDetails:LastName

LastName

ContactDetails:Telephone

Phone

## Formula Settings Click **Formula**, and define a formula for the Data Mapper Load. See [Use Formulas in Omnistudio Data Mappers](https://help.salesforce.com/s/articleView?id=xcloud.os_use_formulas_in_dataraptors_47540.htm&release=264.0.0&type=5 "To add data to the output of a Data Mapper, define formulas. Several types of Data Mappers (Extract, Transform, and Load) support formulas. When you define a formula, you map its output to the output JSON (for extracts and transforms) or Salesforce object field (for loads)."). - **Formula**: `IF(AGE(ContactDetails:Birthdate) > 18, "true", "false")` - **Formula Result Path**: `ContactDetails:Authorized` ## Load Preview In Preview, enter the sample JSON as input. ```json { "ContactDetails": { "Birthdate": "10/10/1954", "LastName": "MyLastName", "Telephone": "5106345789", "FirstName": "MyFirstName" } } ``` After you execute the sample Data Mapper in Preview, a link to the object is displayed in the Objects Created pane. Click the link and verify that the Authorized checkbox is checked only if the contact is over 18 years old. (The field might be visible only in edit mode.) # Create a Contact and Use a Formula (Managed Package) For the managed package runtime, an Omnistudio Data Mapper Load creates a record in the Salesforce Contact object. A formula checks whether the contact is over 18 years old: if so, a custom Authorized field is set to true. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The input JSON for this Data Mapper Load contains the Contact details, for example: ``` { "ContactDetails": { "Birthdate": "10/10/1954", "LastName": "Singh", "Telephone": "5106345789", "FirstName": "Sanjay" } } ``` To create this example Data Mapper Load: 1. If your org Contact object does not have an Authorized field, add one (checkbox). In the following example, the authorized field is called Authorized\_\_c. Depending on your industry, you might need to add a vlocity\_cmt\_\_, vlocity\_ins\_\_, or vlocity\_ps\_\_ namespace prefix. 2. Navigate to the Data Mapper Designer tab and click **New**. The **Create: Data Mapper Interface** dialog is displayed. 3. Enter settings as follows and click **Save**: - **Data Mapper Interface Name**: A descriptive name of your choice - **Interface Type**: Load - **Input Type**: JSON - **Output Type**: SObject 4. On the Objects tab, click **Add Object** and choose **Contact**. 5. On the Fields tab, map fields from the JSON input to fields in the Salesforce Contact object as shown in the following table.

Input JSON Path

Domain Object Field

ContactDetails:Authorized

Authorized__c

Depending on your industry, you might need to add a vlocity_cmt__, vlocity_ins__, or vlocity_ps__ namespace prefix.

ContactDetails:Birthdate

Birthdate

ContactDetails:FirstName

FirstName

ContactDetails:LastName

LastName

ContactDetails:Telephone

Phone

6. On the Formulas tab, click **Add Formula** and enter a Formula of `IF(AGE(ContactDetails:Birthdate) > 18, "true", "false")` and a Formula Result Path of `ContactDetails:Authorized` as shown in the following figure. ![Figure is described in the preceding text.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/drload1_formula.png) 7. Go to the Preview tab. 8. Paste the following test data into the Input pane on the left. ``` { "ContactDetails": { "Birthdate": "10/10/1954", "LastName": "MyLastName", "Telephone": "5106345789", "FirstName": "MyFirstName" } } ``` 9. Click **Execute**. If the load succeeds, a link to the object is displayed in the Objects Created pane, as shown in the following figure. ![The Objects Create pane lists 1-Contact followed by the Id of the new Contact.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/loading_data_into_salesforce_2.png) 10. Click the link and verify that the Authorized checkbox is checked only if the contact is over 18 years old. # Create a Contact for an Existing Account A common task for an Omnistudio Data Mapper Load is to create a record in a Salesforce object that's linked to another object. In this example, a Data Mapper Load creates a record in a Contact object. A link to an Account object record with a specific Id ensures that the new Contact is related to that Account. The input JSON for this example includes the the Account Id and contact name, and the data is in expected formats. But the names aren't the same as the Contact fields. ```json { "AccountId": "0016100001BKL4uAAH", "Name": { "First": "Jane", "Last": "Doe" } } ``` ## Create Settings | Field | value | notes | | --- | --- | --- | | Interface Type | Load |   | | Input Type | JSON | In this example, the input is provided as JSON and not pulled from another source. | | Output Type | sObject |   | ## Object Settings Click + and select Account and then Contact. For Contact, add a link with these settings: - **Domain Object Field**: AccountId - **Linked Object**: 1 - Account - **Linked Object Field** (after the period): Id ## Mapping Settings Map data from the input JSON to the target Salesforce objects and fields. See [Configure an Omnistudio Data Mapper Load](https://help.salesforce.com/s/articleView?id=xcloud.os_object_field_mapping_47137.htm&release=264.0.0&type=5 "Configure a Data Mapper Load by specifying the object type and filters. To enhance the performance of the Data Mapper Load, you can define formulas, add fields to write data to, and configure additional properties."). For Account, create these mappings. - **Input JSON Path**: AccountId - **Domain Object Field**: Id - **Upsert Key**: checked For Contact, create these mappings. The AccountId mapping is already present. | Input JSON path | Domain Object Field | | --- | --- | | Name:First | FirstName | | Name:Last | LastName | ## Load Preview In Preview, enter the sample JSON as input, and replace the Account Id with one from your org. After you execute the sample Data Mapper in Preview, links to the updated Account and new Contact objects are displayed in the Objects Created pane. Click the links to verify. # Create a Contact for an Existing Account (Managed Package) For the managed package runtime, the following example of an Omnistudio Data Mapper Load creates a record in the Salesforce Contact object. A link to an Account object record with a specific Id ensures that the new Contact is related to that Account. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The input JSON for this Data Mapper Load contains the Account Id and the Contact name, for example: ``` { "AccountId": "0016100001BKL4uAAH", "Name": { "First": "Jane", "Last": "Doe" } } ``` To create this example Data Mapper Load: 1. Navigate to the Data Mapper tab and click **New**. The **Create: Data Mapper Interface** dialog is displayed. 2. Enter settings as follows and click **Save**: - **Data Mapper Interface Name**: A descriptive name of your choice - **Interface Type**: Load - **Input Type**: JSON - **Output Type**: SObject 3. On the Objects tab, click **Add Object** and choose **Account**. 4. Click **Add Object** again and choose **Contact**. 5. Click Add Link and enter settings as follows: - **Domain Object Field**: AccountId - **Linked Object**: 1 - Account - **Linked Object Field** (after the period): Id 6. Go to the Fields tab and the Account subtab. Click the **+** icon and add the following mapping: - **Input JSON Path**: AccountId - **Domain Object Field**: Id - **Upsert Key**: checked 7. Go to the Contact subtab. Add the following name mappings: | Input JSON Path | Domain Object Field | | --- | --- | | Name:First | FirstName | | Name:Last | LastName | The AccountId mapping is already present. 8. On the Preview tab, test the Data Mapper using input with the same structure as the sample input above, substituting an Account Id from your org and a name of your choice. # Create a Content Taxonomy and Manage Terms Each org can have one, overarching content taxonomy. Create a new taxonomy, or use Data Loader to import an existing taxonomy. Then, add, edit, delete, and view terms in a content taxonomy. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create, edit, and delete content taxonomy in the Digital Experiences App:

Modify All Data

OR

Manage Content Taxonomy

To view content taxonomy in a CMS workspace:

View Content Taxonomy

AND

any CMS workspace contributor role

## Create and Edit a Content Taxonomy ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/images/icon_note.png) Note Before you import a dynamic collection, first use data loader to import taxonomy terms. To import a dynamic collection, the taxonomy terms must be available in the target org. To import a content taxonomy and terms, go to Salesforce Developers to learn how to [use Data Loader to import a content taxonomy](https://developer.salesforce.com/docs/atlas.en-us.dataLoader.meta/dataLoader/data_loader.htm?_ga=2.180389477.37445879.1706207903-1407825859.1706207903). You can create one content taxonomy for each org. 1. In Lightning Experience, from the App Launcher, open the Digital Experiences app. 2. Open the Content Taxonomy tab. From the Digital Experiences Home tab, click ![down arrow image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_down_arrow.png), and then select **Content Taxonomy**. 3. Click **Create Content Taxonomy**. 4. Enter a name and description, and then click **Create**. 5. To edit a content taxonomy name or description, open the Content Taxonomy tab. Select the top-level, root term from the content taxonomy tree, and then click then click **Edit**. Save your changes. ## Manage Terms in a Content Taxonomy Add terms to a taxonomy, and designate their parent and child relationship to one another. Before you delete a term that’s included in a dynamic collection, [edit the conditions of the dynamic collection](https://help.salesforce.com/s/articleView?id=xcloud.cms_content_collections_dynamic_create.htm&release=264.0.0&type=5 "A dynamic collection continuously updates based on the conditions and available content in your channels. Tag your enhanced CMS content with taxonomy tags, and then define conditions that automatically add content items to the collection.") and remove or replace the Value tag. 1. Open the Content Taxonomy tab. From the Digital Experiences Home tab, click ![down arrow image](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-communities_managed_content-264-0-0-production-enus/8b149fc1-875c-4018-8e9e-2843a2196457/communities_managed_content/images/cms_down_arrow.png), and then select **Content Taxonomy**. 2. To expand the content taxonomy tree, click the carats beside parent terms. 3. Add, edit, or delete a term. - To add a term, select the term that you want to be the parent, or select the taxonomy itself to make a root term, and then click **Add Child Term**. Add your changes. - To edit a term, select the term from the content taxonomy tree, and then click **Edit**. Save your changes. - To delete a term, select the term from the content taxonomy tree, and then click **Delete**. If a term has child terms, you can delete the parent term and its children, or you can delete the term and reassign its children to another term. # Create a Custom Agent Action Create a reusable action, and then assign that action to the agent in the Archive app. Before you configure the action in the Agent Builder, create the Apex class that contains the invocable method. This class handles the logic for querying the archived records. For more information, see [Create an Apex Class](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_develop_create_apex.htm) For example, create an Apex class named `ArchiveDataQueryActionWrapper`. ``` public with sharing class ArchiveDataQueryActionWrapper { public class SearchRequest { @InvocableVariable(label='Object Name' description='Name of the object to search in, can be implicit or explicit' required=true) public String objectName; @InvocableVariable(label='Filters' description='List of field/value pairs for filtering (JSON string). Supports two formats: 1) Legacy: [{"field":"Status","value":"New"},{"field":"Status","value":"Closed"}] 2) New: {"Status":["New","Closed"]}' required=true) public String filtersJson; @InvocableVariable(label='Max Results' description='Maximum number of results to return') public Integer maxResults = 100; @InvocableVariable(label='Date Field' description='Date field name for date range filtering (optional)') public String dateField; @InvocableVariable(label='Start Date' description='Start date for filtering (yyyy-MM-dd format, optional, if exist must have enddate and datefield)') public String startDate; @InvocableVariable(label='End Date' description='End date for filtering (yyyy-MM-dd format, optional, if exist must have startdate and datefield)') public String endDate; } public class SearchResponse { @InvocableVariable(label='Success' description='Whether the search was successful') public Boolean isSuccess; @InvocableVariable(label='Total Count' description='Total number of matching records') public Integer totalResultCount; @InvocableVariable(label='Records JSON' description='JSON string of matching records') public String recordsJson; @InvocableVariable(label='Formatted Result' description='Formatted records in rich text with 5 key fields per record') public String records; @InvocableVariable(label='Error Message' description='Error message if search failed') public String errorMessage; @InvocableVariable(label='Message' description='Status message') public String message; @InvocableVariable(label='Warnings' description='Warning messages about schema validation and auto-fixes') public String warnings; public SearchResponse() { this.isSuccess = false; this.totalResultCount = 0; this.recordsJson = '[]'; this.records = ''; this.errorMessage = ''; this.message = ''; this.warnings = ''; } } @InvocableMethod( label='Search Archived Records' description='Search archived records and return structured results for Agentforce agents.' category='Data Management' ) public static List searchArchivedRecords(List requests) { List results = new List(); for (SearchRequest req : requests) { SearchResponse res = new SearchResponse(); try { Http http = new Http(); HttpRequest httpReq = new HttpRequest(); httpReq.setMethod('POST'); httpReq.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId()); httpReq.setHeader('Content-Type', 'application/json'); httpReq.setEndpoint(URL.getOrgDomainUrl().toExternalForm() + '/services/data/v65.0/platform/data-resilience/archive/search/agentforce'); Map body = new Map{ 'objectName' => req.objectName, 'filtersJson' => req.filtersJson, 'maxResults' => req.maxResults }; if (String.isNotBlank(req.dateField) && String.isNotBlank(req.startDate) && String.isNotBlank(req.endDate)) { body.put('dateField', req.dateField); body.put('startDate', req.startDate); body.put('endDate', req.endDate); } httpReq.setBody(JSON.serialize(body)); HttpResponse httpRes = http.send(httpReq); Integer statusCode = httpRes.getStatusCode(); if (statusCode == 200 || statusCode == 201) { Map responseMap = (Map) JSON.deserializeUntyped(httpRes.getBody()); res.isSuccess = Boolean.valueOf(responseMap.get('isSuccess')); res.totalResultCount = Integer.valueOf(responseMap.get('totalResultCount')); res.recordsJson = String.valueOf(responseMap.get('recordsJson')); res.records = String.valueOf(responseMap.get('records')); res.message = String.valueOf(responseMap.get('message')); res.warnings = String.valueOf(responseMap.get('warnings')); res.errorMessage = String.valueOf(responseMap.get('errorMessage')); } else { res.errorMessage = 'HTTP ' + statusCode + ': ' + httpRes.getBody(); } } catch (Exception e) { res.errorMessage = 'Exception: ' + e.getMessage(); } results.add(res); } return results; } } ``` ## Configure the Custom Agent Action When the Apex class is deployed, create the agent action in the Salesforce setup. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note We recommend using the Agentforce (Default) Agent and the Agent Topic: General CRM. Prerequisites: - You have Salesforce Admin permissions with access to Agent configuration. - Turn on Agentforce in your org. 1. From Setup, in the Quick Find box, enter Agent. 2. To view all the actions in your org, select **Agent Actions**. 3. Click **New Agent Action**. 4. From Reference Action Type, select **Apex**. 5. From Reference Action Category, select **Invocable Method**. 6. From Reference Action, select **Search Archived Records**. Search Archived Records references the method in the `ArchiveDataQueryActionWrapper` Apex class that you created earlier. 7. The agent action label and API name are populated with the reference action name and API name. Review these fields and, if necessary, edit the values so that they accurately describe the action. 8. Click **Next.** 9. The instructions for the custom action and each input and output are populated with the descriptions from the reference action. Review these fields and make changes. For more information, see [Best Practices for Agent Action Instructions](https://help.salesforce.com/s/articleView?id=ai.copilot_actions_instructions.htm&type=5&language=en_US). The descriptions from the reference action are copied over to give you a head start, but agent action instructions differ from traditional descriptions. An agent uses a large language model (LLM) and the reasoning engine to determine when to start topics and actions in a conversation. The instructions for the action, the inputs, and the outputs tell an agent what your action does and when and how to use it. Effective instructions vary by action and use case. Plan to test and iterate on your instructions to make sure that your action performs as expected. 10. For each input and output, specify any applicable settings. | Setting | Details | | --- | --- | | Collect data from user | Require this parameter to be provided by the user. | | Filter from copilot action | When you create an agent action, all inputs and outputs from the reference action are added to the agent action. Activate this setting when you don't want to use a parameter from the reference action with your agent action. At least one output is required to use the agent action. | | Require input | Require this parameter to run the action. All other inputs are treated as optional. If an input is required by the reference action, this setting turns on by default and is read-only. | | Show in conversation | An agent can include this parameter in a response to a user. At least one output is required. | ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip When an action changes a record, you can require an agent to ask the user to confirm the change before the agent runs it. On the record page for the action, activate the **Require user confirmation** setting. If you're using the Agentforce Agent, deselect **Show in Conversation** under Output. To add the action to a standard topic, edit the topic configuration from the Topic Configuration tab. 11. Click **Finish**. After you create your action, assign the action to a topic for your agent. To test your action and preview how the output appears in an agent conversation, open the agent in the Agent Builder and start a preview conversation. Enter phrases that you expect to trigger your action, and then adjust the agent action and topic instructions based on your results. Assign your action to an agent to test it. ## Add a Custom Agent Action to a Topic To add an agent action to a topic: ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note For best performance, we recommend assigning no more than 15 actions to a topic. 1. From the Agents Setup page, open your agent in the Agent Builder. 2. If active, turn off your agent. 3. Select **Topics**. 4. Click the name of the topic that you want to add an action to. 5. Go to This Topic's Actions. If you're using the General CRM agent topic, select it. 6. Click **New**. 7. Select any actions that you want to add to your agent from the actions library, or create a custom agent action. After you select any actions that you want to add to your agent from the actions library, activate and test your agent. 8. Click **Finish**. The actions you've added are assigned to your agent and are visible on the Topics panel of the Agent Builder. To test your topic with your newly assigned actions, restart the preview conversation to apply your changes. ## Remove a Custom Archive Agent Action from a Topic To remove an agent action from your topic: 1. From the Topics panel of the Agent Builder, click the name of the topic you want to remove an agent action from. 2. Go to This Topic's Actions. 3. From the dropdown list next to the action, select **Remove from Topic**. ## Missing Archive Agent Permissions Archive permissions work similarly to Archive Component Restriction Rules. Record-level access is enforced only if the object has been added to the Restriction Rules within Archive Settings. If no objects are added to the restriction rules, users have public access to all archived records of that type. For example, if no Case rules are set, a user who can't originally access a specific case can see it after it's archived. Permissions are based on the sharing settings at the moment of archival. Any changes to Sharing Rules after the record is archived aren't applied. #### See Also - [Activate or Deactivate Your Agent](https://help.salesforce.com/s/articleView?id=ai.copilot_setup_activate_deactivate.htm&type=5&language=en_US) - [Create a Custom Topic](https://help.salesforce.com/s/articleView?id=ai.copilot_topics_add_custom.htm&type=5&language=en_US) - [Edit a Standard Topic](https://help.salesforce.com/s/articleView?id=ai.copilot_topics_edit.htm&type=5&language=en_US) - [Enable Agentforce](https://help.salesforce.com/s/articleView?id=ai.agent_setup_enable.htm&type=5&language=en_US) - [Search with the Archive Agent](https://help.salesforce.com/s/articleView?id=xcloud.archive_search_with_archive_agent.htm&release=264.0.0&type=5 "Search for archived records in the Archive app by using the Archive Agent. Specify an object directly in your search phrase, add criteria for accuracy, and work within system limitations to find the records you need.") - [Test Your Agent](https://help.salesforce.com/s/articleView?id=ai.agent_parent_test.htm&type=5&language=en_US) - [Archive Component Restriction Rules](https://help.salesforce.com/s/articleView?id=xcloud.archive_widget_restriction_rules.htm&release=264.0.0&type=5 "Control end-user visibility in Salesforce of specific archived records according to object sharing tables in the Archive app. Applicable to Archive Single Objects and Archive Multiple Objects components.") # Create a Custom Baseline for Health Check You can import up to five custom baselines to compare your security settings with your standards instead of the Salesforce recommended standards. For example, if you’re in financial services, you can create a custom security baseline by using FINRA standards. ### Required Editions
Available in: Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To view a custom baseline

View Health Check

OR

View Security Center

Or

Manage Security Center

To create a custom baseline

Manage Health Check

OR

View Security Center

Or

Manage Security Center

To create a custom baseline, start with the Salesforce Baseline Standard. ![Image of Baseline Control menu](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/health_check/cb_create_baseline_control_menu.png) 1. To export the Salesforce Baseline Standard file, from the Baseline Controls menu, select **Export Baseline**. 2. Edit the XML file with a text editor and save your changes. 1. Adjust the risk categories to customize your scoring. The risk category affects your Health Check score. A setting in a higher risk category is weighted as more important than a lower one. Moving a setting to the Informational category removes it from the Health Check score calculation. 2. To modify the setting values, follow the Custom Baseline File Requirements. You can’t change some values, and some settings have restricted value options. Don’t add or delete risk categories, setting names, or quotation marks. If you do, your import fails. In some security settings, a low value can be low risk, but in others, it can be high risk. For example, the lower your minimum password length value is, the riskier it is. But the lower your maximum invalid login attempts value is, the safer it is. 3. To import a file, from the Baselines Controls menu, select **Import Baseline**. 1. Name your custom baseline. Spaces and some special characters are allowed. If the name is SFDC recommended or Salesforce Baseline Standard, the file fails to import. 2. Give your custom baseline a unique API name. You can use letters and numbers, but the name must begin with a letter. It can’t contain spaces or special characters. 3. Optionally, make your custom baseline the default baseline in Security Health Check. Unexpected information in the baseline file or a new custom baseline upload without all Health Check settings results in an import failure. If your import fails, you receive a message to help resolve the problem. See Custom Baseline File Requirements in Salesforce Help for troubleshooting assistance. You can change the baseline name, API name, and default baseline using the Edit feature in the Baseline Controls menu. 4. To confirm that your file uploaded, click the baseline dropdown and select your baseline. If you set your custom baseline as the default, it appears after import. ![an image of the Custom Baseline dropdown tool](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/health_check/cb_baseline_dropdown.png) #### See Also - [Custom Baseline File Requirements](https://help.salesforce.com/s/articleView?id=xcloud.security_custom_baseline_file_requirements.htm&release=264.0.0&type=5 "To import your Health Check custom baseline successfully, make sure that your file and settings meet the requirements.") - [How Is the Health Check Score Calculated?](https://help.salesforce.com/s/articleView?id=xcloud.security_health_check_score.htm&release=264.0.0&type=5 "The Health Check score is calculated by a proprietary formula that measures how well your security settings meet the Salesforce Baseline Standard or your selected custom baseline. Settings that meet or exceed compliance raise your score, and settings at risk lower your score.") - [Security Health Check](https://help.salesforce.com/s/articleView?id=xcloud.security_health_check.htm&release=264.0.0&type=5 "As an admin, you can use Health Check to identify and fix potential vulnerabilities in your security settings, all from a single page. A summary score shows how your org measures against a security baseline like the Salesforce Baseline Standard. You can upload up to five custom baselines to use instead of the Salesforce Baseline Standard.") # Create a Custom Connected App Handler Write a custom connected app handler in Apex to customize the behavior of a connected app. The custom handler can support new protocols or respond to user attributes in a way that benefits a business process. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience

Connected Apps can be created in: Group, Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions

Connected Apps can be installed in: All editions

User Permissions Needed
To read, create, update, or delete connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update all fields except Profiles, Permission Sets, and Service Provider SAML Attributes:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To update Profiles, Permission Sets, and Service Provider SAML Attributes: Customize Application AND Modify All Data AND Manage Profiles and Permission Sets
To rotate the consumer key and consumer secret: Allow consumer key and secret rotation
To install and uninstall connected apps:

Customize Application AND either

Modify All Data OR Manage Connected Apps

To install and uninstall packaged connected apps:

Download AppExchange Packages AND Customize Application AND either

Modify All Data OR Manage Connected Apps

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Connected apps creation is restricted as of Spring ‘26. You can continue to use existing connected apps during and after Spring ‘26. However, we recommend using [external client apps](https://help.salesforce.com/s/articleView?id=xcloud.external_client_apps.htm&language=en_US) instead. If you must continue creating connected apps, contact Salesforce Support. See [New connected apps can no longer be created in Spring ‘26](https://help.salesforce.com/s/articleView?id=005228017&type=1&language=en_US) for more details. 1. Create a class that extends the `ConnectedAppPlugin` Apex class, and associate it with the connected app. See the `ConnectedAppPlugin` class in the [Apex Reference Guide](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_class_Auth_ConnectedAppPlugin.htm#apex_class_Auth_ConnectedAppPlugin). 2. Create your connected app, and complete its [basic information](https://help.salesforce.com/s/articleView?id=xcloud.connected_app_create_basics.htm&release=264.0.0&type=5 "For all connected apps, define the basics, which include the app’s name, logo, and contact information."). 3. For Apex Plugin Class, enter the name of the Apex class you created to customize the behavior of the connected app. 4. For Run As, select a user account to be the execution user. The plug-in runs as the execution user on behalf of the current user of the connected app. Depending on the methods used in your `ConnectedAppPlugin` Apex class, you can sometimes leave this field blank. 1. If your Apex class uses the `authorize`, `modifySAMLResponse`, or `refresh` methods, specify an execution user in the Run As field. 2. If your class uses only the `customAttributes` method and doesn't invoke any other `ConnectedAppPlugin` methods, you can optionally leave the Run As field blank. The plug-in then runs as an Automated Process User, which is a system user that executes tasks behind the scenes. 5. Save your settings. # Create a Custom Controller for the Quip Associated Documents Component Add your Lightning component to more Salesforce records when you create a custom controller. ### Required Editions
Available in: Salesforce Classic
User Permissions Needed
To customize a controller: Customize Application
1. Create a new Apex class. 2. Name it myCustomOppController. 3. Name your page QuipCard. 4. Copy and paste the following code. ``` public class myCustomOppController { public String recordId {get; set;} public myCustomOppController(ApexPages.StandardController stdController) { setRecordIdForQuip(stdController.getRecord().id); } private void setRecordIdForQuip(Id recordId) { this.recordId = recordId; } } ``` 5. Replace your QuipCard.vfp code with this code. ```
``` # Create a Custom External Authentication Provider To configure single sign-on (SSO) from a third party that supports OAuth but not OpenID Connect, create a custom authentication provider. With a custom authentication provider, users can log in to your Salesforce org with third-party credentials. ### Required Editions
Available in: Available in Enterprise, Performance, Unlimited, and Developer Editions
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note SSO logins are [required to use multi-factor authentication (MFA)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_understand_requirements.htm&language=en_US). You can satisfy the requirement using your third party's MFA service, as long as you configure the third party correctly. To learn how to set this up, see [Set Up MFA with an SSO Identity Provider](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_use_thirdparty_steps.htm&language=en_US). Here’s the breakdown of each step to create a custom third-party authentication provider. 1. Set up a registration handler. 2. Set up an app with your chosen third party. 3. Create your custom metadata types, and add the custom metadata fields that your third party requires. 4. Build the matching Apex classes and methods for your chosen metadata types. Then use these classes to implement a custom authentication provider by extending the abstract class `Auth.AuthProviderPluginClass`. 5. Configure your authentication provider by adding the third party’s metadata. 6. Update your app so it uses the callback URL generated by Salesforce. 7. Test the connection. 8. Add the authentication provider to your login page. #### See Also - [OAuth Authorization Endpoints](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_auth_configuration_endpoint.htm&type=5&language=en_US) ## Set Up a Registration Handler To use an authentication provider for single sign-on, you must create a registration handler. The registration handler creates users and updates existing users who access Salesforce via the identity provider. You can set up a registration handler with Apex or Flow Builder. For more information, see [Create an Authentication Provider Registration Handler](https://help.salesforce.com/s/articleView?id=xcloud.sso_create_registration_handler.htm&release=264.0.0&type=5 "To set up single sign-on (SSO) with an authentication provider, you must set up a registration handler. The registration handler creates and updates Salesforce users after they authenticate with the identity provider. To set up a registration handler, you can use Flow Builder or Apex."). ## Set Up a Third-Party App Before you configure the third-party authentication provider plug-in for your Salesforce org, set up an app in the third party. 1. Go to your third party’s site, and create an app. 2. Modify the app settings as needed. If the app has an Application Domain, set it to Salesforce. 3. Note the information supplied by your third party. You add this information to custom metadata types in the next step. The following list provides a sample of the information a third party provides. Some third parties name these values differently, provide other values, or have other requirements. - App ID - App secret - Authorization endpoint URL - Token endpoint URL - Scope ## Create Custom Metadata Types in Salesforce After you create a third-party app, configure custom metadata types. In these types, add custom fields for the information provided by the third party, like the app ID and app secret. Later, when you set up the authentication provider, you enter the third party’s information in these custom fields. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Custom Metadata Types**. 2. Click **New Custom Metadata Type**. 3. Enter a label name and plural label name for your custom metadata, then save your work. 4. Enter an object name for referencing the metadata object via the API. 5. (Optional) Enter a description for your custom metadata type. 6. Save your work. 7. Under the Custom Fields section, click **New**, and select the data type that your third party requires to set up an authentication provider. When you configure your authentication provider, these custom fields are added to the Auth. Providers Setup page. 8. Enter a label and name for the field, and provide details you want to specify for the custom field, such as a description and Help text. 9. Select a page layout for the field. 10. Save your work. Or, to add another custom field, click **Save & New**. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_example.png) Example If your third party has an app secret, create a custom Text field, and name it App Secret. When you configure the authentication provider, the App Secret field appears and you can enter the third party’s information. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note For more information about custom metadata types and fields, see [Custom Metadata Types](https://help.salesforce.com/articleView?id=custommetadatatypes_overview.htm&language=en_US). ## Build Your Apex Classes and Methods After you have a custom metadata type, create an Apex class that extends the `Auth.AuthProviderPluginClass` abstract class. This new class stores the custom configuration for your authentication provider and handles its authentication protocols. The new Apex class also creates the name for your third-party authentication provider and displays this name in the list of available authentication providers. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Apex Classes**. 2. Click **New**. In the field provided, create an Apex class that extends the `Auth.AuthProviderPluginClass` class. Use the methods in this class to build your authentication provider. - The `getCustomMetadataType` method returns the custom metadata type API name for your authentication provider. - The `getUserInfo` method returns user data that the registration handler can use. - The `handleCallback` method returns an OAuth access token and an OAuth secret or refresh token. It also returns the state of the authentication provider. - The `initiate`method returns the URL where the user goes for authentication. - The `refresh`method returns a new access token that updates the expired access token. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note Refer to the Apex guides for more information about creating this class. For information about the methods in this class, see [AuthProviderPluginClass Class](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_class_Auth_AuthProviderPluginClass.htm) in the Apex Reference Guide. For sample classes, see [Create a Custom Authentication Provider Plugin](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/authproviderplugin.htm) in the Apex Developer Guide. ## Configure Your Authentication Provider Set up your authentication provider in Salesforce.Note the generated authentication provider ID. You use it with the `Auth.AuthToken` Apex class. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **Auth. Providers**. 2. Click**New**. 3. For the provider type, select your custom authentication provider. 4. Enter a name for the provider. 5. Enter the URL suffix, which is used in the client configuration URL. For example, if your provider’s URL is MyAwesomeProvider, your SSO URL is similar to `https://login.salesforce.com/auth/sso/00Dx00000000001/MyAwesomeProvider`. 6. Enter the third party’s information in the custom fields you created. 7. To automatically enable the OAuth 2.0 Proof Key for Code Exchange (PKCE) extension, which improves security, select **Use Proof Key for Code Exchange (PKCE) Extension**. For more information on how this setting helps secure your provider, see [Proof Key for Code Exchange (PKCE) Extension](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_pkce.htm&type=5&language=en_US). 8. To use an Apex registration handler, take these steps. 1. For Registration Handler Type, select **Apex**. 2. For Registration Handler, select an existing Apex class that implements the `Auth.RegistrationHandler` interface. Or, to create an template for the registration handler, click **Automatically create a registration handler template**. Edit this class later, and modify the default content before using it. 9. To use a flow for your registration handler, take these steps. 1. For Registration Handler Type, select **Flow**. 2. For Registration Handler, select an existing flow of the Identity User Registration flow type. 3. Select a default profile. A default profile is required to run the registration handler. If you don't specify a default profile here, set the default profile in the flow itself. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultProfileId variable. 4. Select a default account. If you use your authentication provider for Experience Cloud sites, this account stores new internal users. If you use the Authentication Provider User Registration flow template, the profile that you set here is automatically stored in the defaultAccountId variable. 10. For Execute Registration As, select an execution user to run the Apex class or flow. The user must have the Manage Users permission. Execute Registration As provides the context in which the registration handler runs. In production, you typically create a system user for the Execute Registration As user. This way, operations performed by the handler are easily traced back to the registration process. For example, if a contact is created, the system user creates it. 11. For Icon URL, add a path to an icon to display as a button on the login page for a site. This icon applies to an Experience Cloud site only. It doesn’t appear on your Salesforce login page or My Domain login URL. Users click the button to log in with the associated authentication provider for the site. Specify a path to your own image, or copy the URL for one of our sample icons into the field. 12. To use the Salesforce multi-factor authentication (MFA) functionality instead of your identity provider’s MFA service, select **Use Salesforce MFA for this SSO provider**. This setting triggers MFA only for users who have MFA applied to them directly. For more information, see [Use Salesforce MFA for SSO (Salesforce Orgs)](https://help.salesforce.com/s/articleView?id=xcloud.mfa_sso_logins.htm&release=264.0.0&type=5 "To help prevent unauthorized access to your account, Salesforce requires multi-factor authentication (MFA) when users log in via single sign-on (SSO). You can use the MFA service included in the Salesforce platform to satisfy this requirement. With this approach, when users log in to Salesforce, they're prompted to provide an MFA verification method to confirm their identity."). 13. Save your work. ## Add Request Parameters to Client Configuration URLs Several client configuration URLs are generated after defining the authentication provider: - Test-Only Initialization URL—Use this URL to test whether you set up the third party correctly. Open the URL, and log in to the third party. When logged in, you’re redirected back to your Salesforce org with a map of attributes. - Single Sign-On Initialization URL—Use this URL to direct users to perform SSO into your org from the third party. The user opens the URL and logs in to the third party. The third party creates or updates a user account, and then logs the user into Salesforce with that account. - Existing User Linking URL—Use this URL to link users in your org to an existing account in the third party. The user opens this URL, logs in to the third party, and logs in to Salesforce, creating a link between accounts. - OAuth-Only Initialization URL—Use this URL to obtain OAuth access tokens after the user authenticates. This flow doesn't provide for SSO. - Callback URL— For each of the other client configuration URLs, the authentication provider sends information back to the callback URL. Client configuration URLs support other [request parameters](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_addl_params.htm&release=264.0.0&type=5 "After you set up single sign-on (SSO) with an authentication provider, Salesforce generates several client configuration URLs, such as the Single Sign-On Initialization URL. These client configuration URLs support request parameters, which you can use to add functions to your authentication provider. For example, use these parameters to get customized permissions from the third party or direct users to a specific location after authenticating.") that you can use to add functions to your authentication provider. For example, use request parameters to obtain permissions from a third party or direct users to a location after authenticating. ## Update Your Third-Party App After defining your authentication provider in your Salesforce org, go back to the third party’s site. Update your app to use the callback URL as your custom authentication provider’s website URL. ## Test the SSO Connection In a browser, open the Test-Only Initialization URL on the Auth. Provider Setup page. It redirects you to your third party’s site and asks you to log in. Then, it asks you to authorize your app. After you authorize access, you’re redirected back to Salesforce. ## Add the Authentication Provider to Your Login Page Configure your login page to show the authentication provider as a login option. Depending on whether you’re configuring SSO for an org or Experience Cloud site, this step is different. - For orgs, see [Add an Authentication Provider to Your Org's Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_org_login_page.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for your employees to use it by adding it to your org’s login page."). - For Experience Cloud sites, see [Add an Authentication Provider to Your Experience Cloud Site’s Login Page](https://help.salesforce.com/s/articleView?id=xcloud.sso_provider_customer_add_login_option.htm&release=264.0.0&type=5 "After you set up an authentication provider, make it easy for customers and partners to use it by adding it to your Experience Cloud site’s login page."). # Create a Custom Identity Verification Page You can use passwordless login to let users register and deregister a variety of verification methods, such as via email, SMS, time-based one-time password (TOTP), physical U2F security key, or Salesforce Authenticator. Users can then log in with a verification method. Create your own verification page, and customize the verification process with Apex. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer Editions
By default, when implementing passwordless login, Salesforce performs the identity verification process for you. It sends the verification code, displays the Verify page where the user enters the code, and confirms the user’s identity. Salesforce provides this default Verify page. ![Default Salesforce Verify page](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/xid_default_verify_page.png) You can use Visualforce to create your own Verify page and have full control of the layout. You can also control the identity verification process in the Apex controller. This example of a custom Verify page uses different fonts, colors, and layout. Instead of a separate Verify page, users receive their verification code and enter it directly on the Login page for a smooth passwordless login experience. ![Custom Verify page](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/xid_custom_verify_page.png) 1. Create your Visualforce page. For more information on customizing the content and layout, see [Visualforce](https://help.salesforce.com/s/articleView?id=platform.pages_about.htm&type=5&language=en_US) in Salesforce Help. 2. From Setup, in the Quick Find box, enter Visualforce Pages, and then select **Visualforce Pages**. 3. Click the Visualforce page that you created for identity verification. 4. Click **Edit**. 5. To implement your own verification process, use Apex methods under the `System.UserManagement` class. The methods come in pairs—one method to send the verification code, and one method to verify that the verification code is correct. Which methods you use depend on when you require identity verification. - To sign up new users, use `initSelfRegistration` and `verifySelfRegistration`. - To log in users, use `initPasswordlessLogin` and `verifyPasswordlessLogin`. - To register a user’s verification method, use `initRegisterVerificationMethod` and `verifyRegisterVerificationMethod`. For more information, see [UserManagement Class](https://developer.salesforce.com/docs/atlas.en-us.apexref.meta/apexref/apex_class_System_UserManagement.htm) in the Apex Reference Guide. ## Example Implementation for Customizing the Verification Process This code example customizes the Verify page for registering a verification method. When the user enters a verification code on the Visualforce page, it invokes `registerUser()`. The method gets the User ID of the user who’s registering the verification method and the user’s phone number. It also gets the user’s registration status to check whether the phone number is already verified. If the user is registered with a different phone number, the number is updated. ```java public void registerUser() {         try {             exceptionText='';             String userId = UserInfo.getUserId();             User u = [Select MobilePhone, Id from User Where Id=:userId];              currPhone = u.MobilePhone;              mobilePhone = getFormattedSms(mobilePhone);             if (mobilePhone != null && mobilePhone != '') {            u.MobilePhone = mobilePhone;            update u;             // We're updating the email and phone number before verifying. Roll back              // the change in the verify API if it is unsuccessful.             exceptionText = System.             UserManagement.initRegisterVerificationMethod(Auth.VerificationMethod.SMS);             if(exceptionText!= null && exceptionText!=''){                 isInit = false;                 showInitException = true;             } else {                  isInit = false;                  isVerify = true;             }             } else {                 showInitException = true;             }         } catch (Exception e) {             exceptionText = e.getMessage();             isInit = false;             showInitException = true;         }     } public void verifyUser() {     // Take the user’s input for the code sent to their phone number     exceptionText = System.UserManagement.
        verifyRegisterVerificationMethod(code, Auth.VerificationMethod.SMS);     if(exceptionText != null && exceptionText !=''){     showInitException = true;     } else {             //Success     } } ``` # Create a Custom Launchpad for the Salesforce Mobile App Launchpads let users quickly access the information they need. Use the Launchpad Lightning web component to add links to Lightning pages on mobile and desktop. If you don’t need a launchpad for desktop users, you can create a mobile-specific launchpad. Set the component visibility to show the launchpad to mobile users only. That way, mobile users can still access all of their navigation menu items, but the most important links are only a tap away. ### Required Editions
Setup available in Lightning Experience in: Group, Professional, Enterprise, Essentials, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create and save Lightning pages in the Lightning App Builder: Customize Application
![View a launchpad on the mobile app](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/salesforce_app/images/salesforce_app_mobile_launchpad.png) Launchpads are customizable Lightning web components that you can add to any Lightning page. They create a shortcut to important places for your users. You can add any items that have tabs associated with them—standard and custom objects, Lightning web components, Lightning pages, Visualforce pages, and external websites. Make sure that your users have permission to view the tabs—they only see items that they have access to in the launchpad. You can use launchpads on multiple pages and add multiple launchpads to one page. When users view the page on desktop or mobile, they see the launchpad. On mobile, Internal links open in the Salesforce mobile app, while external links open in a mobile browser window. 1. On your desktop, navigate to the Lightning page that you want to add a launchpad to. 2. Click the Setup gear icon, then click **Edit Page**. 3. From the list of standard Lightning web components, find Launchpad and drop it into the desired spot on the page. 4. Enter a custom title for your launchpad or keep the default. 5. Click **Select...** under Launchpad Items. 6. From the list of available items, drag at least one item into the Selected list ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note You can select up to 20 items. Users see the first six items you select, with the option to expand the launchpad to view more. 7. Click **OK**. 8. Select an item from the list to view and edit the details. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note If you don't have access to a tab, you can still add it to the launchpad, but you can’t see it in the component preview. 9. Add any component visibility filters that you want. 10. Click **Save** | **Activate** | **Assign as Org Default** | **Desktop and Phone** | **Save**. 11. To view your changes on desktop, click **Back**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-salesforce_app-264-0-0-production-enus/cb8c7d7a-5f86-49c5-967c-c4d5cb2f80b6/images/icon_note.png) Note The Calendar navigation item isn’t supported in mobile Launchpad components. Access it through a tab instead. # Create a Custom Lightning Web Component for Omniscript Add custom HTML, JavaScript, and CSS to an Omniscript by creating a custom Lightning web component. The Custom LWC element enables custom components to either interact with the Omniscript or to act as a standalone component. Standalone components do not interact with the Omniscript or the Omniscript's data JSON. For information on using the Lightning Web Component framework, see [Set Up Lightning Web Components](https://help.salesforce.com/s/articleView?id=xcloud.os_set_up_lightning_web_components_58209.htm&release=264.0.0&type=5 "To manage and develop Omnistudio Lightning web components, use Visual Studio Code with Salesforce DX and the SF CLI. Use to deploy components from one sandbox or dev org to another, such as a production org."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note Before previewing an Omniscript that uses custom Lightning web components, you must activate the Omniscript. If the Omniscript isn’t active, custom Lightning web components don't render in the preview. If you deploy changes to a custom Lightning web component that’s present in an active Omniscript, the Omniscript displays the changes. To create a custom Lightning web component, review these component types: - OmniscriptBaseMixin component: Enable a custom component to interact with an Omniscript by extending the OmniscriptBaseMixin component. See [Extend the OmniscriptBaseMixin Component](https://help.salesforce.com/s/articleView?id=xcloud.os_extend_the_omniscriptbasemixin_component_17717.htm&release=264.0.0&type=5 "Enable a custom Lightning web component to interact with an Omniscript by extending the OmniscriptBaseMixin component. The OmniscriptBaseMixin includes methods to update an Omniscript's data JSON, pass parameters, and more."). - Standalone component: A custom standalone component. The component can’t extend the OmniscriptBaseMixin component or an Omniscript element Lightning web component. See [Create a Standalone Custom Lightning Web Component](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_standalone_custom_lightning_web_component_18102.htm&release=264.0.0&type=5 "Enable custom Lightning web components to act independently from an Omniscript by adding it to the Omniscript as a standalone component. Standalone custom Lightning web components cannot extend any Omniscript element component or the OmniscriptBaseMixin component. The standalone component supports custom functionalities, but cannot interact with an Omniscript or the Omniscript's data JSON."). After you create a custom Lightning web component, add it to an Omniscript by using the Custom LWC input element. See [Custom LWC Element](https://help.salesforce.com/s/articleView?id=xcloud.os_custom_lwc_element_17587.htm&release=264.0.0&type=5 "Add a custom Lightning web component that does not extend an Omniscript element component to an Omniscript using the Custom LWC element."). - **[Requirements for Custom Lightning Web Components for Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_requirements_for_creating_a_custom_lightning_web_component_for_omniscripts.htm&release=264.0.0&type=5)** Review the requirements for making a custom Lightning web component compatible with Omnistudio Lightning web components. - **[Extend the OmniscriptBaseMixin Component](https://help.salesforce.com/s/articleView?id=xcloud.os_extend_the_omniscriptbasemixin_component_17717.htm&release=264.0.0&type=5)** Enable a custom Lightning web component to interact with an Omniscript by extending the OmniscriptBaseMixin component. The OmniscriptBaseMixin includes methods to update an Omniscript's data JSON, pass parameters, and more. - **[Create a Standalone Custom Lightning Web Component](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_standalone_custom_lightning_web_component_18102.htm&release=264.0.0&type=5)** Enable custom Lightning web components to act independently from an Omniscript by adding it to the Omniscript as a standalone component. Standalone custom Lightning web components cannot extend any Omniscript element component or the OmniscriptBaseMixin component. The standalone component supports custom functionalities, but cannot interact with an Omniscript or the Omniscript's data JSON. - **[Communicate from Omniscript to a Lightning Web Component](https://help.salesforce.com/s/articleView?id=xcloud.os_communicate_with_omniscript_from_a_lightning_web_component_18222.htm&release=264.0.0&type=5)** Send data from Omniscript actions and steps to other Lightning web components using the Publish and Subscribe property. - **[Make Remote Calls Within Omniscripts from Lightning Web Components](https://help.salesforce.com/s/articleView?id=xcloud.os_make_remote_calls_from_lightning_web_components_using_the_omniscript_action_framework_18348.htm&release=264.0.0&type=5)** In the standard runtime, make remote calls from a customized Omniscript component or a custom Lightning web component. - **[Add Validation to a Custom Lightning Web Component in Omniscript](https://help.salesforce.com/s/articleView?id=xcloud.os_add_validation_to_a_custom_lightning_web_component_in_omniscript_18643.htm&release=264.0.0&type=5)** Add validation to custom Lightning web components that extend an Omniscript element's component by using Vlocity's built-in validation methods. # Create a Custom Lightning Web Component for Omniscript (Managed Package) For the managed package runtime, add custom HTML, JavaScript, and CSS to an Omniscript by creating a custom Lightning web component. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Before previewing an Omniscript that uses custom Lightning web components, you must activate the Omniscript. If the Omniscript isn’t active, custom Lightning web components don’t render in Preview. If you deploy changes to a custom Lightning web component embedded in an active Omniscript, the Omniscript displays the changes. ## Requirements To make the custom Lightning web component compatible with Omnistudio for Managed Packages Lightning web components, you must set two metadata tags in your XML configuration file and meet other requirements: - `runtimeNamespace`: If [Lightning Web Security (LWS)](https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.security_lwsec_intro) is disabled, add the namespace of your Vlocity package to the XML metadata file in your component by using the runtimeNamespace metadata tag. Replace the namespace variable in the code example with the namespace of your Vlocity package, for example vlocity\_cmt or vlocity\_ins. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_important.png) Important If LWS is enabled, setting **runtimeNamespace** in your components causes errors similar to "Cannot use runtime namespace 'somename' in module c-someComponentName". To determine if LWS is enabled, see [Enable Lightning Web Security in an Org](https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.security_lwsec_enable). ``` namespace ``` - `isExposed`: Set the **isExposed** metadata tag to true. ``` True ``` - Custom Lightning web components built outside of the managed package can’t use any Salesforce Lightning web component that uses resources or affects the component at runtime. For more information, see [Salesforce Modules](https://developer.salesforce.com/docs/component-library/documentation/lwc/lwc.reference_salesforce_modules). - To prevent JSON validation errors when passing data from Custom Lightning web components to Omnistudio Lightning web components, precede double quotes in the data with the backslash (`\`) escape character. Single quotes don't need to be escaped. Custom Lightning Web Components don’t throw errors unless **Debug Mode** is enabled. ## Custom Omniscript Lightning Web Components To create a custom Lightning web component, review these component types:

Component Type

Description

Omniscript element Lightning web component

Customize an Omniscript element by extending the element’s Lightning web component. LWC-compatible elements display a Lightning icon in the Available Components panel of an Omniscript.

OmniScriptBaseMixin component

Allow a custom component to interact with an Omniscript by extending the OmniScriptBaseMixin component.

Standalone component

A custom standalone component. The component can’t extend the OmniScriptBaseMixin component or an Omniscript element Lightning web component.

- **[Custom LWC Element (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_custom_lwc_element.htm&release=264.0.0&type=5)** For the managed package runtime, add a custom Lightning web component that does not extend an Omniscript element component to an Omniscript using the Custom LWC element. - **[Extend an Omniscript Element's Lightning Web Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_extend_an_omniscript_element_s_lightning_web_component.htm&release=264.0.0&type=5)** For the managed package runtime, add custom behavior and styling to an Omniscript element while maintaining its core functionality. Replace an Omniscript element’s Lightning web component with a component that re-creates its properties and adds new ones. - **[Extend the OmniScriptBaseMixin Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_extend_the_omniscriptbasemixin_component.htm&release=264.0.0&type=5)** For the managed package runtime, enable a custom Lightning web component to interact with an Omniscript by extending the OmniScriptBaseMixin component. The OmniScriptBaseMixin includes methods to update an Omniscript's data JSON, pass parameters, and more. - **[Create a Standalone Custom Lightning Web Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_standalone_custom_lightning_web_component.htm&release=264.0.0&type=5)** For the managed package runtime, enable custom Lightning web components to act independently from an Omniscript by adding it to the Omniscript as a standalone component. - **[Communicate from Omniscript to a Lightning Web Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_communicate_with_omniscript_from_a_lightning_web_component_1.htm&release=264.0.0&type=5)** For the managed package runtime, send data from Omniscript Actions and Steps to other Lightning web components using the Pub/Sub property. - **[Make Remote Calls from Lightning Web Components using the LWC Omniscript Action Framework (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_make_remote_calls_from_lightning_web_components_using_the_lwc_omniscript_action_framework.htm&release=264.0.0&type=5)** For the managed package runtime, beginning with Vlocity Insurance and Health Winter '20 and Vlocity CME Winter '20, LWC Omniscripts make remote calls using a new action framework built with JavaScript classes. The Action framework is available to all custom LWCs in your Salesforce org. Enable an LWC to make remote calls using specific functionalities by importing the **Common Action Utility** class into the LWC. - **[Add Validation to a Custom Lightning Web Component in Omniscript (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_add_validation_to_a_custom_lightning_web_component_in_omniscript.htm&release=264.0.0&type=5)** For the managed package runtime, add validation to custom Lightning web components that extend an Omniscript element's component by using Vlocity's built-in validation methods. - **[Customize the Step Chart Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_customize_the_step_chart_component.htm&release=264.0.0&type=5)** For the managed package runtime, add customizations to your Step Chart by extending the Step Chart Lightning web components, the StepChart component, and the Step Items component. - **[Extend and Override an Omniscript Modal Lightning Web Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_extend_and_override_an_omniscript_modal_lightning_web_component.htm&release=264.0.0&type=5)** For the managed package runtime, customize modals in Omniscript by extending and overriding the Modal LWC. - **[Extend and Override the Save for Later Acknowledge Lightning Web Component (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_extend_and_override_the_save_for_later_acknowledge_lightning_web_component.htm&release=264.0.0&type=5)** For the managed package runtime, customize the Save for Later messaging modal in Omniscript by extending and overriding the Save for later Acknowledge LWC. # Create a Custom List View in Lightning Experience To see an infinitely scrollable list of records that meet your filter criteria, create a custom list view. You can start from scratch or you can clone an existing list view and then customize it with filters. ### Required Editions
Available in: Lightning Experience
Available in: Essentials, Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create list views: Read on the type of record included in the list AND Create and Customize List Views
To create, edit, share, or delete public list views: Manage Public List Views
To share personal list views: Manage Shared List Views
To share list views with groups of users by role: View Roles and Role Hierarchy
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note These steps work in Lightning Experience. If you see the App Launcher icon (![App Launcher icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/app_launcher_icon.png)) on the left side of the navigation bar at the top of your screen, you're in Lightning Experience. If not, you're in Salesforce Classic. 1. Click ![List view controls](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/resources-global/_corporate/images/gear.png) and select **New**. Or, click **Clone** to make a copy of the current list view. 2. Give your list a name and unique API name. 3. Choose who can see this list view: just you, all users (including Partner and Customer Portal users), or specific groups of users. If you choose to share the list view with specific groups of users, select public groups or roles in the Search dropdown. To see and select from your org’s roles, you need the View Roles and Role Hierarchy permission. 4. Click **Save**. The Filters panel appears. 5. Click **Show me**, then select **All objects** or **My Objects**. 6. Click **Done**. 7. Add and set filters to view only the records that meet your criteria. You have different options depending on the field you want to filter and the operator you choose. 1. Click **Add Filter**. 2. Select the field to filter, an operator, and a value. Depending on the type of field you selected, you can either select a value or enter one of your own. Filters support values only between the minimum and maximum for a signed 32-bit integer, or between -2,147,483,648 and 2,147,483,648. A value outside of this range disables that filter. 3. Click **Done**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note Entering illogical filter criteria, such as someDate <= null, can cause unexpected behavior in a list view. When you use a list view in a more strict context, such as with a Visualforce standard list controller, illogical filter criteria can cause errors. 8. To add logic that further refines which records appear in your list view, click **Filter Logic**. To reference filters in your logic statement, use the number assigned to each filter. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_important.png) Important Include every filter number in your logic statement. You can’t have filters that aren’t referenced in the logic statement.
Operand Definition
AND

Finds records that match both values.

1 AND 2

OR

Finds records that match either value.

1 OR 2

NOT

Finds records that exclude values.

For example, Filter 1 is Industry equals Biotechnology. You set the filter logic as NOT 1. Your report returns records that don’t have Biotechnology as the Industry value.

Let’s say a rep wants to see all opportunities created in July 2015 or later, that are either in late stages of negotiation or have high probability to close, or both. Here are the filters. - Last Modified Date greater or equal 7/1/2015 - Stage contains Proposal/Price Quote, Negotiation/Review - Probability greater or equal 50 Then the rep adds the logic statement: 1 AND (2 OR 3) NOT doesn’t work with parenthetical expressions. For example, the expression 1 AND NOT (2 AND 3) evaluates as 1 AND (NOT 2 AND 3). In the filter results, no records are returned when you expect to see some records. 9. Click **Save**. The view appears in the list view dropdown list so you can access it later. Pin a list view if you want it to load as the default list for that object. 10. Optionally, choose and order the columns in your list view. 1. From the List View Controls menu, **Select Fields to Display**. 2. Use the arrows to add, remove, and reorder your visible fields. 3. Click **Save**. In list views, you see only the data that you have access to. You see records that you own or have read or write access to, and records shared with you. List views also include records owned by or shared with users in roles below you in the role hierarchy. You can see only the fields that are visible according to your page layout and field-level security settings. To edit who sees an existing list view, click ![List view controls](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/resources-global/_corporate/images/gear.png) and select **Sharing Settings**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note A user with the Manage Public List Views permission can view all public list views, even if they aren’t assigned to a group or role that a given list view is shared with. When you enable digital experiences, list views shared with the Roles and Internal Subordinates sharing group are automatically shared with the Roles, Internal, and Portal Subordinates group instead. If you don’t want external users to access these list views, update your sharing settings. #### See Also - [Filter Reports by Values](https://help.salesforce.com/s/articleView?id=analytics.reports_builder_filtering.htm&type=5&language=en_US) # Create a Custom List View in Salesforce Classic To see a specific set of contacts, documents, or other object records, create a custom list view. ### Required Editions
Available in: Salesforce Classic
Available in: All Editions
User Permissions Needed
To create custom list views: Read on the type of record included in the list AND Create and Customize List Views
To create, edit, or delete public list views: Manage Public List Views
To share list views with groups of users by role: View Roles and Role Hierarchy
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note These steps work in Salesforce Classic. If you see the App Launcher icon (![../images/app\_launcher\_icon.png](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/app_launcher_icon.png)) on the left side of the navigation bar at the top of your screen, you're in Lightning Experience. If not, you're in Salesforce Classic. 1. Click **Create New View** at the top of any list page or in the Views section of any tab home page. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note If you don’t see **Create New View**, you don’t have the “Create and Customize List Views” permission. To request the permission, contact your Salesforce admin. 2. Enter the view name. The view name is shown in the views dropdown list. ![View Name edit screen.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/ui_list_view_create_name.png) 3. Enter a unique view name. The API and managed packages use this unique name. The unique name must be unused in both public and private list views. Private list views are only searchable if you have access to them. 4. Specify your filter criteria. If you want more filter fields, click **Add Filter Logic...** and then click **Add Row**. You can have up to 10 fields in your filter criteria. Usually, you filter by additional fields. For example, this image shows a list view that displays only active accounts in the org whose Billing City is equal to “San Francisco.” ![Filter criteria edit screen](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/ui_list_view_create_filter.png) Entering illogical filter criteria, such as someDate <= null, can cause unexpected behavior in a list view. When you use a list view in a more strict context, such as with a Visualforce standard list controller, illogical filter criteria can cause errors. 5. Select the fields you want to display on the list view. The default fields are automatically selected. From the fields that are in your page layout, you can display up to 15 different fields in your view. ![Field Display selection screen.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/ui_list_view_create_fields.png) When you select a long text area field, the list view displays up to 255 characters. 6. Click **Save**. The view appears in the View dropdown list so you can access it later. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_example.png) Example Here’s what your list view can look like when you’re done: ![Final set of list views](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/ui_list_view_create.png) You can change the number of records displayed per page using the dropdown on the lower-left corner of the list view. As a Salesforce admin or a user with the “Manage Public List View” permission, you can hide the list view, so only you can see it. Click **Edit** next to the list view name. Select **Visible to certain groups of users**. Choose the type of group or role from the dropdown list, select the group or role from the list, then click **Add**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note If you don’t see Roles or Roles and Internal Subordinates, you don’t have the Enforce View Roles and Role Hierarchy permission. Enterprise, Unlimited, Performance, and Developer Edition users can give access to a public group or role, including all users below that role. List views are visible to your Experience Cloud site users with Customer Community Plus, Partner Community, Lightning Platform Starter, and Lightning Platform Plus licenses, if the **Visible to all users** setting is enabled for views of objects in site user profiles. To make list views visible only to your Salesforce users, select **Visible to certain groups of users**. Then share the view with the All Internal Users group or a selected set of internal groups and roles. When implementing an Experience Cloud site, create custom views that contain only relevant information for site users. Then make those views visible to site users by sharing them with the All Customer Portal Users group, or a set of site groups and roles. When you enable digital experiences, list views shared with the Roles and Internal Subordinates sharing group are automatically shared with the Roles, Internal, and Portal Subordinates group instead. If you don’t want external users to access these list views, update your sharing settings. # Create a Custom Login Flow with Visualforce Use Visualforce and an Apex controller to create a custom login flow programmatically. With Visualforce, you have complete control over how your login page looks, behaves, and directs users after they complete the flow. You can design your login page from scratch and control every pixel of the page. Define the business process in an Apex controller of the Visualforce page. Salesforce doesn’t pass input variables to a Visualforce Page login flow, but you can access user and login context. Include one of these Apex methods. - `Auth.SessionManagement.finishLoginFlow()` indicates that the login flow is done and redirects the user to the home page - `Auth.SessionManagement.finishLoginFlow(startURL)` indicates that the login flow is done and redirects the user to a specific page. The login flow runs in a restricted session. Calling a `finishLoginFlow` method removes the session restriction and gives users access to Salesforce or their Experience Cloud site. You decide when or under what condition to call the method to remove the session restriction. Here’s an example of a Visualforce Page login flow. The user clicks a button to invoke the `finishLoginFlow` method. Specify `showHeader=”false”` for the login flow to work correctly. ```java

You are in VF Login Flow

``` Here’s an example of an Apex controller that defines the business process. ```java public class VFLoginFlowController { public PageReference FinishLoginFlowStartUrl() { //do stuff //finish the login flow and send you to the startUrl (account page in this case) return Auth.SessionManagement.finishLoginFlow('/001'); } public PageReference FinishLoginFlowHome() { //do stuff //finish the login flow and send you the default homepage return Auth.SessionManagement.finishLoginFlow(); } } ``` Give access to each profile that you want to associate with this Visualforce Page. 1. From Setup, enter Visualforce in the Quick Find box, then select **Visualforce Page**. 2. Next to the Visualforce page that you want to use, click **Security**. 3. From the list of available profiles, add the profiles that you want to associate with this login flow. 4. From Setup, designate the Visualforce page as a login flow, and connect the profiles to it. See [Set Up a Login Flow and Connect to Profiles](https://help.salesforce.com/s/articleView?id=xcloud.security_login_flow_associate.htm&release=264.0.0&type=5 "After you create a flow using Flow Builder or Visualforce, designate it as a login flow and associate it with a user profile. When a user with an associated profile logs in, they go through the login flow."). # Create a Custom Login Page in Visualforce Create your custom login page in Visualforce, and associate it with your site from the Login & Registration page of the Administration workspace. You can also create custom Visualforce pages for password, forgot password, and self-registration. You can add these login pages to your Experience Cloud site regardless of the template you used to create the site. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create and edit Visualforce pages: Customize Application
To edit Apex classes:

Author Apex

AND

Customize Application

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note You can select a Visualforce page as your custom login page for Aura sites only. If you used a Visualforce page as your custom login page for an LWR site before Summer ’23, the site can continue to use the Visualforce page. However, if you change the LWR site’s login page to another page type, you can’t go back to using the Visualforce page. 1. [Create a Visualforce page](https://help.salesforce.com/s/articleView?id=platform.pages_creating.htm&type=5&language=en_US). To customize the look of your login page, create a Visualforce page. To determine how the Apex controller gets invoked, include Apex code. For example, when the user clicks the Login button: `apex:commandButton action="{!login}" value="Sign in" id="login-submit" styleClass="btn btn-lg btn-primary btn-block"/>` 2. To make your page available externally, set up public access. 1. From Setup, in the Quick Find box, enter All Sites, and then select **All Sites**. 2. Next to your site name, click **Workspaces**, then click **Administration**. 3. In the Administration workspace, select **Pages**. 4. Click **Go to Force.com**. 5. Click **Public Access Settings**. 6. Under Enabled Visualforce Page Access, click **Edit**. 7. Select the Visualforce pages you created, add them to **Enabled Visualforce Pages**, and save your changes. ![Enable Visualforce pages](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/xid_custom_login_page_enable_vf.png) 8. If necessary, enable Apex classes for public access. Under Enabled Apex Class Page Access, click **Edit**, select the classes, and add them to **Enabled Apex Classes**. 3. From your Login & Registration page, replace the site’s default pages with your custom Visualforce pages. 1. From Experience Workspaces, select **Administration**, and then select **Login & Registration**. 2. Under Login Page Setup, select **Visualforce Page**, click ![lookup magnifying glass](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/lookup.png), and then select your custom Visualforce page from the list. Be sure that your site’s login page and your site’s Reset Password page use different Visualforce pages. 4. View your custom login page from a browser in private (incognito) mode. - **[Example: Create a Custom Visualforce Login Page from a Github Project](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_custom_login_git_project.htm&release=264.0.0&type=5)** When creating custom code for your login page, it’s often helpful to start out with an existing example for guidance. Salesforce Identity provides a Github custom login page project that you can modify. The project includes custom Visualforce pages and Apex controllers. # Create a Custom Object for a Report To identify which users chose to use each locale, create a custom field on the User object. Then use that custom field to create a report that lists users by locale code. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: all editions
User Permissions Needed
To view release updates: View Setup and Configuration
To enable or disable release updates

Manage Release Updates

OR

Customize Application

1. Click the gear icon (![A gray gear icon with a lightning bolt in the center.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/resources-global/_corporate/images/gear.png)), and select **Setup** Setup launches in a new tab. 2. Click the **Object Manager** tab. 3. From the list of objects, click **User**. 4. Click **Fields & Relationships**, then click **New**. 5. Select **Formula** as the data type, and click **Next**. 6. For the Field Label, enter Locale Code. 7. Ensure that **Add this field to existing custom report types that contain this entity** is selected. 8. For Formula Return Type, select **Text**, and click **Next**. 9. In the formula editor, enter `TEXT(LocaleSidKey)`, and click **Check Syntax** ![New custom field screen with formula entered.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/admin_locales_user_locale_code_field_syntax.png) A green message confirms that no syntax errors were found. 10. Optionally, enter a description for the field such as Locale code for the user’s locale in personal settings. 11. In Blank Field Handling, select **Treat blank fields as blanks**, and click **Next**. 12. Select the profiles that you want to grant edit access to this field. At minimum, select the **System Administrator** profile, and click **Next**. 13. Select the page layouts where you want to include this field, and click **Save**. # Create a Custom One-Time Password Delivery Apex Handler Custom one-time password (OTP) delivery relies on an Apex handler that implements the `Auth.CustomOneTimePasswordDeliveryHandler` interface. Your custom OTP delivery handler calls out to your provider to send an OTP to the user via SMS. You can customize the content of the SMS message and the short code that the user sees. ### Required Editions
Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience
Available in: Professional, Enterprise, Unlimited, and Developer Editions
User Permissions Needed
To define, edit, delete, set security, and set version settings for Apex classes: Author Apex
To run Apex tests: View Setup and Configuration
The custom OTP delivery handler uses the `sendOneTimePassword` method to send an OTP to the user. 1. From Setup, click ![Settings gear icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/resources-global/_corporate/images/gear.png), and then select **Developer Console**. 2. Click **File**, select **New**, and then select **Apex Class**. 3. Enter a name for your handler, such as `MyCustomOtpHandler`. 4. Develop an Apex handler that implements the `Auth.CustomOneTimePasswordDeliveryHandler` interface and returns an instance of the `Auth.CustomOneTimePasswordDeliveryResult` enum. 5. To make sure that the handler can successfully call out to the provider to send an SMS message, test the Apex handler with hard-coded values for the `userId`, `phoneNumber`, `oneTimePassword`, `defaultText`, `networkId`, and `experienceId`. See [Testing Apex](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing.htm). 6. Save the handler. Next, add the handler to your Experience Cloud site settings. # Create a Custom Preference Center Improve your customer relationships by synchronizing the Salesforce core Individual object with the Marketing Cloud Engagement profile center and subscription center. ![Banner Image for Creating a Custom Preference Center](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-z_solutionkits-264-0-0-production-enus/1e49f40e-a11c-44f7-b439-8f20b6c66033/z_solutionkits/images/create_a_custom_preference_center_banner.png) ## Get Started
Icon of a book.

Take Trailhead modules related to this solution.

The Individual object saves a user’s data privacy preferences and employs them when communicating with Leads, Contacts, and Person Accounts. With Preference Center in Marketing Cloud Engagement, you can synchronize custom attributes with custom fields on Core objects. This solution kit addresses the fact that there’s no direct way to map custom fields to the Individual object. This solution kit helps you: - Improve customer relationships. - Synchronize Sales Cloud and Service Cloud Individual object implementation with the profile center and subscription center. - Adhere to GDPR law. - Keep your marketing campaign GDPR compliant. - Maintain lead management in line with GDPR regulations. ## Required Products - Marketing Cloud Engagement (all editions) - Salesforce Lightning Platform (Sales, Service, or B2B) ## Implement This Solution - **[Workflow](https://help.salesforce.com/s/articleView?id=xcloud.create_a_custom_preference_center_workflow.htm&release=264.0.0&type=5)** Learn how data flows through the configurations when you create a custom preference center. - **[Design Considerations](https://help.salesforce.com/s/articleView?id=xcloud.create_a_custom_preference_center_design_considerations.htm&release=264.0.0&type=5)** Keep these design considerations in mind when you create a custom preference center. - **[Configurations](https://help.salesforce.com/s/articleView?id=xcloud.create_a_custom_preference_center_configurations.htm&release=264.0.0&type=5)** Use these configurations to create a custom preference center. # Create a Custom Relationship Map in Quip Build a lightweight relationship map with custom data in your documents. ### Required Editions
Available in: Lightning Experience
1. In a document, enter @Relationship Map. A placeholder relationship map is added to your document. 2. To build a new map or edit the current one, click **Build Custom Map**. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip Use Quick Update to edit a map’s field values but not the fields themselves. From the Tree Map, click **the edit pencil** on the card that you want to edit. 3. Choose which fields appear on the relationship map cards from the Map Builder. To edit or add fields, click **Edit Card Fields**. ![Edit Card Fields button highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_relationship_map_edit_card_fields.png) 4. To customize the fields that show on a card, edit the fields in the Compact View section. You can add more fields in the Detail View section—these fields show when you click **More...** on the card. ![Compact View and Detail View field modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_relationship_map_edit_fields.png) 1. To add a field, click **Add Field**. Enter a field name, and select a field type. 2. To reorder fields or move a field to a different view, use **![reorder icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_reorder_icon.png)** to drag the field. 3. To add a colored dot on a card that indicates its status, add a picklist field, and select **Display a card’s status based on the picklist option**. Add picklist options and choose a status color for each. ![Picklist options with color indicators](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_card_status.png) ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_important.png) Important Only one field per map can determine the card status. 5. After you set up your fields, add new cards to your map in the Map Builder. To create a card, enter a name, and click **Add**. ![New card with fields highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_relationship_map_create_card.png) 6. Fill in the fields you created and click **Done**. 7. From the Map Builder, drag cards to create a hierarchy. To see what it looks like in the Tree Map, click **View Map**. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_tip.png) Tip To keep your relationship map lightweight and to avoid document scrolling, we recommend adding up to 10 columns. Your relationship map is ready to go! To stay on top of an account’s health and keep in touch with stakeholders, add it to your Account Plans. # Create a Custom Report Type in the Enhanced Custom Report Type Builder A custom report type provides more flexibility with object relationships. It can include fields from objects with lookup relationships to expand the data available for report users. You can build a custom report type in the Enhanced Custom Report Type Builder on any object, even objects that you don’t have permission to view. ### Required Editions
Available in: Lightning Experience
Available in: Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create and update custom report types: Manage Custom Report Types
Watch this video on creating a custom report type using the enhanced report type builder. View this [video](https://salesforce.vidyard.com/watch/waMuphgH5v3CH8m4snU6LA) in a separate tab. These steps apply to the enhanced custom report type experience. If the Report Types page in Setup resembles the one shown here and the **Enhanced Custom Report Type Setup Page** preference in Reports and Dashboards Settings is selected, continue with these steps. Otherwise, use [Create a Custom Report Type in the Legacy Custom Report Type Builder](https://help.salesforce.com/s/articleView?id=xcloud.reports_defining_report_types.htm&release=264.0.0&type=5 "Build a custom report type on any object, even objects that you don’t have permission to view. A custom report type provides more flexibility with object relationships and can include fields from objects with lookup relationships to expand the data available for report users.") ![Landing page of enhanced custom report type builder](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/enhanced_builder_custom_report_type.png) ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip Instead of completing this task manually, get help from Setup with Agentforce. For example, tell the Setup agent, “Create a report type on Accounts, Contacts, and Opportunities.” For more information, see [Reports and Dashboards in Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_reports.htm&language=en_US). 1. In Setup, in the Quick Find box, enter and select **Report Types**. 2. On the Custom Report Types welcome page, click **Continue**. 3. Click **New Custom Report Type**. 4. Enter the report type details. 1. Select the primary object for your custom report type. After you save the report type, you can’t change the primary object. 2. Enter a unique display label, an API name, and a description to inform users which data is available in the report. 3. Select the category for the custom report type to help users find it. 4. Select an availability status. - During design and testing, select **In Development**. The report type and its reports are hidden from all users except those with the Manage Custom Report Types permission. Only users with that permission can create and run reports when a report type is in development. - If you’re ready to let all users access the report type, select **Deployed**. 5. Click **Next**. 6. (Optional) If you want to include fields from more than just the primary object, add related objects. You can also specify which records from the child objects are included in the report results. 1. Click **Click to relate another object**. 2. Select the criteria for the relationship. - If you select **Each "A" record must have at least one related "B" record**, only parent records with child records are included in the report. If you’re using Essentials Edition, you can only choose this option. - If you select **"A" records may or may not have related "B" records**, parent records are shown whether or not they have child records. All subsequent relationships use the may-or-may-not association. 3. Add more objects as needed, and then click **Save**. 7. (Optional) To control which fields are available in a report, click **Edit Layout** All custom reports based on that object include the fields that you specify. - From the Fields panel, drag the fields that you want to include to the required section. You can also change their display names. - Create a section and add fields to display under that section. You can save the new section only if it contains at least one field. - Hide a section to exclude it from the report. Click **Sections** and deselect the checkbox next to the section name. - If you add a field or section by mistake, click the undo icon ![Undo icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/crt_editor_undo.png) to revert the action. Click the redo icon ![Redo icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/crt_editor_redo.png) to restore the change you reverted. - To add fields from objects that aren't included in the report type’s structure, click **Lookup Fields**. After creating the custom report type, deploy it to make it available to other users. In the Custom Report Types page in Setup, click ![Actions menu](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/action_menu.png) next to the report type, and select **Start Report** to load the report containing fields and sections of your report type. To view details of the report type, click ![Actions menu](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/action_menu.png) and select **Details**. # Create a Custom Report Type in the Legacy Custom Report Type Builder Build a custom report type on any object, even objects that you don’t have permission to view. A custom report type provides more flexibility with object relationships and can include fields from objects with lookup relationships to expand the data available for report users. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create and update custom report types: Manage Custom Report Types
These steps apply to the legacy custom report type experience. If the Report Types page in Setup resembles the one shown here and the **Enhanced Custom Report Type Setup Page** preference in Reports and Dashboards Settings isn’t selected, continue with these steps. Otherwise, use [Create a Custom Report Type in the Enhanced Custom Report Type Builder](https://help.salesforce.com/s/articleView?id=xcloud.reports_enhanced_defining_report_types.htm&release=264.0.0&type=5 "A custom report type provides more flexibility with object relationships. It can include fields from objects with lookup relationships to expand the data available for report users. You can build a custom report type in the Enhanced Custom Report Type Builder on any object, even objects that you don’t have permission to view.") ![Landing page of legacy custom report type builder](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/legacy_builder_custom_report_type.png) ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_tip.png) Tip Instead of completing this task manually, get help from Setup with Agentforce. For example, tell the Setup agent, “Create a report type on Accounts, Contacts, and Opportunities.” For more information, see [Reports and Dashboards in Setup with Agentforce](https://help.salesforce.com/s/articleView?id=xcloud.setup_agentforce_reports.htm&language=en_US). 1. In Setup, in the Quick Find box, enter Report Types, and select **Report Types**. 2. On the Custom Report Types welcome page, click **Continue**. 3. Click **New Custom Report Type**. 4. Enter the report type details. 1. Select the primary object for your custom report type. After you save the report type, you can’t change the primary object. 2. Enter a unique report type label, a report type name, and a description to inform users which data is available in the report. 3. Select the category for the custom report type to help users find it. 4. Select an availability status. - During design and testing, select **In Development**. The report type and its reports are hidden from all users except those with the Manage Custom Report Types permission. Only users with that permission can create and run reports when a report type is in development. - If you’re ready to let all users access the report type, select **Deployed**. 5. Click **Next**. 6. (Optional) If you want to include fields from more than just the primary object, add related objects. You can also specify which records from the child objects are included in the report results. 1. Click **Click to relate another object**. 2. Select the criteria for the relationship. - If you select **Each "A" record must have at least one related "B" record**, only parent records with child records are included in the report. If you’re using Essentials Edition, you can only choose this option. - If you select **"A" records may or may not have related "B" records**, parent records are shown whether or not they have child records. All subsequent relationships use the may-or-may-not association. 3. Add more objects as needed, and then click **Save**. 7. (Optional) Control which fields are available in a report. All custom reports based on that object include the fields that you specify. 1. Click **Edit Layout**. 2. From the View dropdown, select an object. - To add fields from the selected object, drag the available fields to the required section. - To add fields from objects that aren’t included in the report type’s structure, click **Add fields related via lookup**. After creating the custom report type, deploy it to make it available to other users. # Create a Custom Report Type to View Related Record Details Create a custom report type so that you can generate reports with information about records related to survey invitations and responses. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
User Permissions Needed
To create a custom report type: Manage Custom Report Types
Survey invitations and responses can be related to many different Salesforce objects through the Survey Subjects object, so create a custom report type that's based on any object that Survey Subjects supports, such as Account, Case, or Contact. For example, create a report type based on cases and use it to generate reports that help you analyze customer satisfaction scores when support cases close. 1. In Setup, enter Report Types in the Quick Find box, then click **Report Types**. 2. If prompted, click **Continue**. 3. Click **New Custom Report Type**. 4. For the primary object, select an object supported by survey subjects, such as cases. 5. Enter the identification and deployment settings and then click **Next**. 6. Create a relationship from the primary object, cases, to survey subjects. 7. Create a relationship from survey subjects to survey responses. 8. Create a relationship from survey responses to survey question responses. 9. Save your changes. The report type contains information about the invitations, responses, and associated records. Now, add the question names to the report. 10. Select your new custom report type and then click **Edit Layout**. 11. From the View menu, select **Survey Question Responses Fields**, and then click **Add fields related via lookup**. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_tip.png) Tip Use the Survey Subject lookup fields to add more information about participants, such as email ID. 12. Click **Question**, and select **Question Name**. 13. Click **OK**. 14. Save your changes. # Create a Custom Report Type to View Survey Scores Create a custom report type based on survey question scores so that you can analyze the responses for every type of question except for short text and long text questions. View the responses in custom reports and dashboards for surveys or survey invitations. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Survey Response Pack, Feedback Management - Starter, and Feedback Management - Growth licenses
User Permissions Needed
To create a custom report type: Manage Custom Report Types
1. In Setup, enter Report Types in the Quick Find box, and then select **Report Types**. 2. If prompted, click **Continue**. 3. Click **New Custom Report Type**. 4. For primary object, select **Survey Question Scores**. 5. Enter the identification and deployment settings and then click Next. 6. Save your work. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_example.png) Example Here are some dashboard components that show responses to ranking and scoring questions. ![Representation of a dashboard containing details of a ranking type question's results.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/surveys_ranking_dashboard.png) ![Representation of a dashboard containing details of a scoring type question's results.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/surveys_scoring_dashboard.png) # Create a Custom Style for a Flexcard Element (Managed Package) For the managed package runtime, save style settings on a Flexcard element as a Custom Style to use on multiple elements on your Flexcard. For example, to apply the same font color, font size, text color, and background color to multiple Field elements on a Flexcard, create a Custom Style called blue-field-scheme on one Field element. Then apply blue-field-scheme to other Field elements as needed. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The Custom Style feature saves any settings configured in the Style panel including classes, inline styles, widths, and responsiveness. 1. To create a custom style, perform the following tasks: 1. Select an element from a state in the Flexcard Designer, and click **Style** to open the Style panel. 2. Style the element as needed. See [Style Flexcard Elements (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_style_flexcard_elements.htm&release=264.0.0&type=5 "For the managed package runtime, configure the look and feel of a Flexcard by styling individual elements, fields inside elements, and entire states. From the Style panel in the Flexcard Designer, design backgrounds, text, and borders; adjust heights, widths, and spacing inside and between elements; apply classes and inline styles; make your element responsive; and more."). 3. To create a new style, from the **Custom Styles** section, click the down arrow, and select **Save As**. ![FlexCards Custom Styles 'Save As' feature](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_custom_styles_save_as.png) 4. Enter a style name in the **Enter Style Name** field. 5. Click **Save**. 2. To apply a custom style, perform the following tasks: 1. Select an element on the canvas, and click **Style** to open the Style panel. 2. Click the **Select Saved Style** search icon in the **Custom Styles** section. ![FlexCards Custom Styles 'Select Saved Style'](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/flexcards_custom_styles_select_saved_style.png) 3. In the **Select Saved Styles** modal, click on the name of a style under **Select Style**. 4. View how your applied style will look in the **Preview** section of the modal. 5. Click **Save**. What’s next: Preview your Flexcard. See [Preview a Flexcard (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_preview_a_flexcard.htm&release=264.0.0&type=5 "For the managed package runtime, preview your Flexcard's appearance and functionality before publishing it to a Lightning page or Experience Builder site. In Preview, test how your Flexcard looks on multiple devices and test the functionality of action links and other interactive elements."). - **[Flexcards Custom Styles Properties (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_custom_styles_properties.htm&release=264.0.0&type=5)** **For the managed package runtime, custom Styles** properties are configurable in the Style panel when you select an element in the Flexcard Designer. Save style settings on a Flexcard element as a Custom Style to use on multiple elements on a Flexcard. # Create a Custom Theme To define your brand’s unique identity within Salesforce, create a custom theme. As an admin, you can specify your custom theme’s color palette, and upload your company logo and your own background images. Use a custom theme to rally your team around important initiatives, like a campaign or new product launch. Or you can make sure that your team’s work fits seamlessly into the rest of your company's environment. ### Required Editions
Available in: Lightning Experience
Available in: Group, Essentials, Professional, Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To view company information: View Setup and Configuration
To activate, create, edit, or preview a theme: Customize Application
1. From Setup, in the Quick Find box, enter Themes and Branding, and then select **Themes and Branding**. 2. To create a custom Salesforce Lightning Design System (SLDS) 2 theme, click **New Theme**. Or, to create a custom SLDS 1 theme, click ![Dropdown icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/resources-global/_corporate/images/dropdown.png) and then click **New SLDS 1 Theme**. Themes built on SLDS 2 use the newest design system and pave the way for advanced features and customizations through CSS-based styling hooks, next-generation components, modern web standards, and more. 3. Customize your theme. You can enhance custom themes in many ways, such as adding your unique brand color and logo, and default group and user profile banners. For custom SLDS 2 themes, you can configure advanced accent colors. See [Manage Custom Configurations for Themes](https://help.salesforce.com/s/articleView?id=xcloud.brand_custom_configurations.htm&release=264.0.0&type=5 "Customize your org’s theme with clicks, not code. To personalize your users’ Salesforce experience, add your company’s logo, define your brand colors, and more. Most customizations are available only for custom themes. Some customizations are available only if you built your theme on a specific version of the Salesforce Lightning Design System (SLDS)."). 4. Save your changes. 5. Click **Preview** to see how your theme looks, or click **Activate** to make your theme live for all of your users. 6. If your org currently uses a Salesforce Lightning Design System (SLDS) 1 theme and you activate a custom SLDS 2 theme, click **Activate** again to confirm that you intend to activate SLDS 2 for your org. Similarly, if your org currently uses an SLDS 2 theme and you activate a custom SLDS 1 theme, click **Activate** again to confirm that you intend to deactivate SLDS 2 for your org. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note Note: When you activate an SLDS 2 theme, you enable SLDS 2 for your org. If you change your active theme from an SLDS 2 theme to an SLDS 1 theme, you disable SLDS 2 for your org. See [Transition to SLDS 2](https://www.lightningdesignsystem.com/2e1ef8501/p/8184ad-transition-to-slds-2). Your designers and engineers can take your custom SLDS 2 themes even further and create user interfaces that are consistent with Salesforce design principles, visual language, and best practices. To learn how to design and build with SLDS 2, see [Salesforce Lightning Design System 2](https://www.lightningdesignsystem.com/2e1ef8501/p/85bd85-lightning-design-system-2). # Create a Custom User Profile Menu Item for Your App’s Privacy Policy In Experience Builder, you can customize the User Profile menu to include a menu item for your Mobile Publisher app’s privacy policy page. ### Required Editions
User Permissions Needed
To customize an Experience Cloud site:
  • Be a member of the site AND Create and Set Up Experiences

    OR

  • Be a member of the site AND View Setup and Configuration AND an experience admin, publisher, or builder in that site
To publish an Experience Cloud site:
  • Be a member of the site AND Create and Set Up Experiences

    OR

  • Be a member of the site AND an experience admin or publisher in that site
1. In Builder, click **Settings**, and then select **Navigation**. 2. Click the dropdown at the end of Default User Profile Menu, and then select **Edit**. ![Navigation settings for Default User Profile Menu.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/ec_builder_navigation_edit_user_profile.png) 3. From the Menu Editor dialog, click **Add Menu Item**. ![Menu Editor window](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/ec_builder_menu_editor.png) 4. In the Name field, enter Privacy Policy. 5. From the Type field, select one of these options. - If you created a privacy policy page in Builder, select **Site Page**, and then from the corresponding Page field, select your privacy policy page. - If you use an externally hosted privacy policy page, select **External URL**, and then in the corresponding URL field, enter the external page’s URL. 6. Select the **Publicly available** checkbox. 7. Save your menu item. 8. Click **Preview**. 9. From the User Profile menu, select **Privacy Policy** and review the content of your privacy policy page. 10. Publish your site. # Create a Data 360 Subscription Consent Template and Preference Form Create a Data 360 consent template, activate the template, and use the consent template to create a preference form. Use the form to collect consent from users for email and SMS engagement channel types. ### Required Editions
Available in: Lightning Experience and Salesforce Classic in Developer, Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To use Preference Manager: Manage Preference Manager
Consent record IDs use a fixed format: `#`. Any value that you enter in the Consent Record Name field doesn’t take effect. 1. From the Preference Manager dashboard, under Preference Manager, click **Consent Templates**, and then click **New Consent Template**. 2. On the Data 360 tab, select the Subscription template type, and click **Next**. Forms generated from a subscription consent template support consent for either the Email or SMS engagement channel type. 3. Under Data Stream Source, from the dropdown, select the Salesforce Data 360 source org from where you’re ingesting consent information. 4. In Engagement Channel Type, select **Engagement Channel Type** as the data stream and then click **Update**. 5. In the Engagement Channel Type search field, enter and select the engagement channel type that you want to include, such as email. 6. Click **Update**, and then click **Next**. 7. Under Communication Subscription Channel Type, from the Data Stream dropdown list, select **CommSubscriptionChannelType** and select **CommSubscription** for the display name. 8. Click **Update**. Your Communication Subscription Channel Type options from Data 360 populate. 9. Move the Communication Subscription Channel Type objects that you want to include to the Selected panel, and then click **Next**. 10. Give your consent template a name, and click **Save & Activate**. 11. Navigate to the Privacy Center Preference Manager tab. 12. [Create a template-based preference form](https://help.salesforce.com/s/articleView?id=xcloud.preference_manager_create_form.htm&type=5&language=en_US) using the Data 360 Subscription Consent template. # Create a Data Cloud Salesforce Connection Connect to Data Cloud to leverage its analytics, segmentation, and personalized customer experiences. If you don't have an existing connection between your org and Data Cloud, create a new connection. This connection is fundamental for enabling the continuous and efficient transfer of relevant data. 1. On the Proactive Asset Service setup page, click **Connect** for the Create the Data Cloud Salesforce Connection step. 2. Ensure you have a Salesforce connection. If you don’t, click **New** and then click **Connect** for the Salesforce org. Your Salesforce org is now connected as a data source. # Create a Data Cloud Salesforce CRM Connection Before installing the Service data bundle and Proactive Asset Service, connect Data Cloud to Salesforce CRM. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-connected_assets-264-0-0-production-enus/eb4c6dd7-4aef-4e97-9c56-46929d5b166e/images/icon_important.png) Important For Summer ‘24, Proactive Asset Service supports only a Salesforce CRM connection. 1. On the Proactive Asset Service setup page, click **Connect** for the Create the Data Cloud Salesforce CRM Connection step. 2. Ensure you have a Salesforce CRM connection. If you don’t, click **New** and then click **Connect** for the Salesforce org. Your Salesforce org is now connected as a data source. For additional information, see [Salesforce CRM Connector](https://help.salesforce.com/s/articleView?id=data.c360_a_salesforce_crm_connector.htm&type=5&language=en_US). # Create a Data Detect Legacy-Managed Package Policy Data Detect legacy-managed package policies look for data patterns across fields and objects that you select. You can create multiple policies that help you find sensitive data that users inadvertently enter into fields across your org. ### Required Editions ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note The Data Detect legacy-managed package is unavailable for Summer '26. If you enabled Data Detect legacy-managed package before Summer '26, it remains available in your Salesforce org. We recommend that you use the new Salesforce Data Detect app instead. The new Data Detect app is now part of the Shield app. See [Data Detect End of Support](https://help.salesforce.com/s/articleView?id=005132108&type=1&language=en_US). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_important.png) Important Due to Salesforce platform limitations, selecting an excessive number of fields for data scanning can cause processing errors. To avoid errors, select fewer fields and start with smaller datasets.
Available in: Lightning Experience

Available in: Enterprise, Performance, Unlimited, and Developer Editions.

Requires the Salesforce Shield add-on subscription or the Data Detect add-on license.

1. In the Data Detect app, click the **Policies** tab. 2. Click **New**, and then enter a name for your policy. The name must be alphanumeric with no spaces or special characters. 3. Click **Save & Edit**. 4. At the top of the page, enter a policy description and click **Save**. ![Save a new or edited policy description.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/edd_policy_description_save.png) 5. Under Objects & Fields section, in the Objects pane, select an object. The object detail page opens with data pattern options and a list of the object’s populated fields. By default, policies scan for all data patterns on all selected objects and fields. To narrow your search on specific patterns, deselect the patterns that you don’t want. 6. In the field list, select **Add to Policy** for each field that you want to add. 7. To include the object’s fields and pattern selections in future scans, set the object status to **Enable.** Only enabled objects are included in the scans execution. If you leave an object’s status as **Disabled**, then it’s not included in future scans. You can still save your pattern and field selections and enable them later. 8. Click **Save**. ![Object-level Data Detect policy settings.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/setup/images/edd_policy_settings.png) 9. Repeat steps 5–9 on other objects that you want to include in your policy. Your objects settings are added to your policy. # Create a Data Detect Policy and Run a Scan Data Detect scans search for sensitive ‌data across selected objects and fields. Create multiple policies that help you find sensitive data that users inadvertently enter into fields across your Salesforce org. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions
Data Detect requires the Salesforce Shield add-on subscription.
User Permissions Needed
To create, edit, and view Data Detect policies Manage user access to Data Detect feature
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note When creating a scan policy, know your limits. These limits include no account objects in orgs with person accounts enabled. Users can only view and scan objects that they have access to. For selected objects, Data Detect scans ‌these fields: text, long text, long text area, text (encrypted), and rich text (only plain text is scanned for sensitive information) in standard and custom objects. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note To enable a user to view scan results for fields that use Classic Encryption, assign the **View Encrypted Data** user permission. Because encrypted data is processed differently than standard data, scanning these fields takes longer. Including encrypted fields in a scan configuration can increase the total scan duration. 1. From the App Launcher, select **Data Detect**. 2. Select the Policies tab and select **New**. The Policies tab is where your policies reside after they’re created. 3. Select the type of data the policy scans. - Salesforce Data Org: Scan objects in your Salesforce org. - Data 360 Data: Scan Data Lake Objects (DLOs) from Salesforce Data 360. The following steps refer to objects, but apply to DLOs too. For Salesforce Data 360, time frame and frequency, object filters, and keywords aren't available. Skip the steps that include them. 4. On the Policy Details page, enter a name for your policy. The policy name can contain characters A–Z, a–z, 0–9, Hyphen (-), and Underscore (\_). Optionally, add a description. 5. On the Scan Scheduler page, set the policy’s time frame and frequency. 1. Select whether your scan runs one time or recurs on an automated schedule. For recurring scans, select the time interval to scan and how often to repeat the scan. 2. For a time frame, select a duration in the past to scan for your data. Select a custom time frame or choose from the last: 30 or 90 days; 6 or 12 months, or all time. All time goes back to the date that the org was created. 3. Review the summary to confirm the schedule is correct. Data Detect scans for any new or changed data made within the selected time frame. You can select a random time frame to collect a historical subsection of sensitive data. 6. On the Select Objects to Scan page, select what objects to scan for data, and what filters to apply to refine your scan. 1. In the Filters section, select fields to exclude from your scan. - Encrypted Fields: Select whether to scan encrypted fields. - Sensitivity Level: Select what sensitivity levels to exclude from your scan. For example, exclude Internal and Confidential level objects if you know that they always contain sensitive data. - Compliance Classification: Select what compliance acts, definitions, or regulations are related to the field's data, so you can exclude fields that are already identified with sensitive data, such as GDPR or PII. - Data Type: Select what types of data to exclude to reduce scan time. - Field Usage: Select what fields to include based on how frequently they're used. 2. In the Select Objects section, select specific objects to scan. Select up to 100 objects (that you have access to) per scan. 7. On the Detection Criteria page, select what information your scan detects. - Sensitive Data Categories: Pre-defined categories of recognized patterns for sensitive data. Reduce scan time by selecting only the categories that you need. Refer to Sensitive Data Categories for the complete list of categories. - Custom Patterns: If your data has known patterns for sensitive data, add a regular expression (regex) pattern to scan for in your data. Add up to 10 regex patterns. - Keywords: If you have known constant strings to identify as sensitive data, add them as keywords. Either manually enter up to 10 keywords, or upload a .csv file containing a dictionary of keywords. 8. On the Review page, confirm your policy settings and click **Save**. To start the scan immediately, click **Save & Run a Scan**. If your scan is recurring, click **Save & Schedule Scan**. Your policy is added to the Policies list. Run your scan manually by selecting it from the list and clicking **Scan Policy**. After you've started a scan, view its status by selecting the job ID in the Job Sessions tab or by selecting the policy from the Policies list. # Create a Data Management Policy Create and save a new Data Management Policy. After your policy is created, you can give it objects to process. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Privacy Center license.
User Permissions Needed
To create, edit, and schedule Data Management Policies: Manage Privacy Center Policies
To create a Data Management Policy: 1. From the Privacy Center home page, select **Go to Data Management Policies**, and then click **New**. 2. Select **Data Management Policy**, and then click **Next**. 3. Give your policy a name and an optional description, and then save it. You’re ready to add objects to your new policy. # Create a Data Map for Survey Responses Create a data map that creates a Task record based on survey responses. You can show the details of the record in a timeline. For example, you can create a standard survey to collect feedback and then create a data map that automatically creates a Task record based on a participant's response. You can then view the responses in a timeline. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Feedback Management - Starter and Feedback Management - Growth licenses
User Permissions Needed
To create or update data maps:
  • Create and send survey permissions
  • Read and Create permissions for objects whose records the data map creates or updates
  • Read and Create permissions for fields that the data map creates or updates
  • Read permission for records with mapped ID
To view data maps: Read permission for the Survey object
1. From the App Launcher, find and select **Surveys**. 2. Click **New**. 3. Enter a name for the survey, and then select **Standard Survey**. 4. Edit the Welcome page. 5. Add a page, and then as Net Promoter Score type question, enter Rate your experience!. 6. Edit the survey’s Thank You page, and then save the survey. 7. Click **Advanced Settings**. 8. Click **Merge Field Variables**, and then **Object Variables for Merge Fields**. 9. In Participant Object, for Variable Name, enter ContactName. 10. For Object, select **Contact**, and then save your changes. 11. Click **Back to Builder**, and save the survey. 12. Click **Advanced Settings**, and then click **Survey Data Mapping**. 13. Click **Add Data Map**, and then name the mapping. 14. In Action Type, select **Create Record**. 15. From the Target Object dropdown, select **Task**. 16. Define your target objects and values. | Field | Information Type | Value | | --- | --- | --- | | Description | String | Detractor Alert: Unhappy Customer (Low NPS) | | Survey NPS Score | Response to Question | Rate your experience! | | Priority | Picklist | High | | Status | Picklist | Not Started | | Task Details | String | The customer has given a low NPS score (< 7) in the recently concluded survey. We need to speak to the customer to understand his concern. | | Response | Response Fields | Response ID | | Name ID | Participant Record | Contact ID | ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_note.png) Note In this example, Survey NPS Score, Task Details, and Response are custom fields. 17. Select **Based on conditions**, and specify these values. - Select Conditions: All conditions are met - Logic Type: Response to Question - Question: Rate your experience! - Operator: is less than - Response: 7 18. Save the mapping and the survey. ![A data map with create record as the action type and task as the target object.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/data_map_for_timeline.png) # Create a Data Map to Get Alerts Create a data map to receive record alerts for survey responses when defined conditions are met. For example, service agents can view alerts related to survey responses with negative customer feedback. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
Available with the Feedback Management - Starter or Feedback Management - Growth licenses, and IndustriesServiceExcellenceAddOn and FSCAlertFramework
User Permissions Needed
To create or update data maps:
  • Create and send survey permissions
  • Read and Create permissions for the objects whose records the data map creates or updates
  • Read and Create permissions for fields that the data map creates or updates
  • Read permission for records with mapped ID
To view data maps: Read permission for the Survey object
1. From the App Launcher, find and select **Surveys**. 2. Click **New**. 3. Enter a name for the survey, and then select **Standard Survey**. 4. Edit the Welcome page. 5. Add a page, and then enter the Rating type question as Rate your recent experience with our support team. 6. Edit the survey’s Thank You page, and then save the survey. 7. In the Survey Builder, click **Advanced Settings**, and then select **Merge Field Variables**. 8. Click **Object Variables for Merge Fields**. 9. In Participant Object, enter the Variable Name as ContactName. 10. For Object, select **Contact**, and then save your changes. 11. Click **Back to Builder**, and then click **Advanced Settings**. 12. Click **Survey Data Mapping**, and then click **New Mapping**. 13. Name the mapping. 14. In Action Type, select **Create Record**. 15. From the Target Object dropdown, select **Record Alert**. 16. Define these target objects and values. | Field | Information Type | Value | | --- | --- | --- | | Effective Start Date | Date/Time | 14 April 2023 | | Valid Until Date | Date/Time | 30 April 2023 | | What Record ID | Participant Record | Contact ID | | Active | Boolean | True | | Parent Record ID | Associated Record ID | Case | | Subject | String | Low CSAT Score | 17. Select **Based on conditions**, and then specify these values. - Select Conditions: All conditions are met - Logic Type: Response to Question - Question: Rate your recent experience with our support team - Operator: is less than - Response: 4 18. Save the mapping and the survey. ![A data map with create record as the action type and record alert as the target object.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/feedback_management/images/record_alerts.png) # Create a Data Stream for the Communication Subscription Channel Types Object Map the fields of the Communications Subscription Channel Types object that you want to ingest into Data 360. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Salesforce Privacy Center license.
User Permissions Needed
To use Preference Manager: Use Preference Manager
1. In Data 360, click **Data Streams**, and then click **CommSubscriptionChannelType\_Home**. 2. On the Data Stream detail page, under Data Mapping, click **Start**. The Data 360 field mapping canvas opens. 3. Under Data Model Entities, click **Select Objects** and select **Communication Subscription Channel Type**. 4. Map the fields. Some data model object fields might already be mapped to the data lake object fields. Review the existing mappings and map any other fields required for your data stream. At minimum, you must map these fields. - Communication Subscription Primary Key to Communication Subscription Primary Key - Communication Subscription ID with the API name CommunicationSubscriptionId\_\_c to Communication Subscription (there is more than one data lake object field for Communication Subscription ID). - Engagement Channel Type ID to Engagement Channel Type ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note To use Data Governance features, grant permissions to the listed objects according to [Assign Data Access](https://help.salesforce.com/s/articleView?id=data.c360_a_dc_access.htm&type=5&language=en_US). If you have more than one data space, you must grant access to objects in each data space. Object names in non default data spaces follow the convention of \_. 5. Save your work. ![CommSubscriptionChannelType\_Home page showing the required field mappings with the Communication Subscription Channel Type object.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/data_protection_and_privacy/images/CommSubscriptionChannelType_map.png) #### See Also - [Create a Salesforce CRM Data Stream](https://help.salesforce.com/s/articleView?id=data.c360_a_create_crm_data_stream.htm&type=5&language=en_US) - [Data Mapping](https://help.salesforce.com/s/articleView?id=data.c360_a_data_mapping.htm&type=5&language=en_US) # Create a Data Stream for the Communication Subscription Consent Object Map the fields of the Communication Subscription Consent object that you want to ingest into Data 360. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Salesforce Privacy Center license.
User Permissions Needed
To use Preference Manager: Use Preference Manager
To ingest into Data 360 information about the Communication Subscription Consent object from your Salesforce CRM system, you map the fields that you want to ingest to the Communication Subscription Consent data model object. 1. In Data 360, click **Data Streams**, and then click **CommSubscriptionConsent\_Home**. 2. On the Data Stream detail page for CommSubscriptionConsent\_Home, under Data Mapping, click **Start**. The Data 360 field mapping canvas opens. 3. Under Data Model Entities, click **Select Objects**, and then select **Communication Subscription Consent**. 4. Map the fields. Some data model object fields might already be mapped to the data lake object fields. Review the existing mappings and map any other fields required for your data stream. At minimum, you must map these fields. - Communication Subscription Primary Key to Communication Subscription Primary Key - Name to Name - Contact Point Value to Contact Point Value - Privacy Consent Status with the API name ssot\_\_ConsentStatus\_\_c to Consent Status (There is more than one data lake object field for Consent Status. If you aren’t streaming Privacy Consent Status from a source that requires a separate Consent Status Id to be mapped, you can map Privacy Consent Status to both Consent Status DMO fields, for simplicity). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note To use Data Governance features, grant permissions to the listed objects according to [Assign Data Access](https://help.salesforce.com/s/articleView?id=data.c360_a_dc_access.htm&type=5&language=en_US). If you have more than one data space, you must grant access to objects in each data space. Object names in non default data spaces follow the convention of \_. 5. Save your work. ![CommSubscriptionConsent\_Home page showing the required field mappings with the Communication Subscription Consent Type object.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/data_protection_and_privacy/images/CommSubConsent_map.png) #### See Also - [Create a Salesforce CRM Data Stream](https://help.salesforce.com/s/articleView?id=data.c360_a_create_crm_data_stream.htm&type=5&language=en_US) - [Data Mapping](https://help.salesforce.com/s/articleView?id=data.c360_a_data_mapping.htm&type=5&language=en_US) # Create a Data Stream for the Communication Subscriptions Object Map the fields of the Communication Subscriptions object that you want to ingest into Data 360. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Salesforce Privacy Center license.
User Permissions Needed
To use Preference Manager: Use Preference Manager
1. In Data 360, click **Data Streams,** and then click **CommSubscription\_Home**. 2. On the Data Stream detail page, under Data Mapping, click **Start**. The Data 360 field mapping canvas opens. 3. Under Data Model Entities, click **Select Objects**, and then select **Communication Subscription**. 4. Map the fields. Some data model object fields might already be mapped to the data lake object fields. Review the existing mappings and map any other fields required for your data stream. At minimum, you must map these fields. - Communication Subscription Primary Key to Communication Subscription Primary Key - Name to Name ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note To use Data Governance features, grant permissions to the listed objects according to [Assign Data Access](https://help.salesforce.com/s/articleView?id=data.c360_a_dc_access.htm&type=5&language=en_US). If you have more than one data space, you must grant access to objects in each data space. Object names in non default data spaces follow the convention of \_. 5. Save your work. ![CommSubscription\_Home page showing the required field mappings with the Communication Subscription data model object.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/data_protection_and_privacy/images/CommSubscription_map.png) #### See Also - [Create a Salesforce CRM Data Stream](https://help.salesforce.com/s/articleView?id=data.c360_a_create_crm_data_stream.htm&type=5&language=en_US) - [Data Mapping](https://help.salesforce.com/s/articleView?id=data.c360_a_data_mapping.htm&type=5&language=en_US) # Create a Data Stream for the Engagement Channel Types Object Map the fields of the Engagement Channel Types object that you want to ingest into Data 360. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Salesforce Privacy Center license.
User Permissions Needed
To use Preference Manager: Use Preference Manager
1. In Data 360, click **Data Streams**, and then click **EngagementChannelType\_Home**. 2. On the Data Stream detail page, under Data Mapping, click **Start**. The Data 360 field mapping canvas opens. 3. Under Data Model Entities, click **Select Objects**, and then select **Engagement Channel Type**. 4. Map the fields. Some data model object fields might already be mapped to the data lake object fields. Review the existing mappings and map any other fields required for your data stream. At minimum, you must map these fields. - Engagement Channel Type Primary Key to Engagement Channel Type Primary Key - Contact Point Type to Contact Point Type - Name to Name ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/images/icon_note.png) Note To use Data Governance features, grant permissions to the listed objects according to [Assign Data Access](https://help.salesforce.com/s/articleView?id=data.c360_a_dc_access.htm&type=5&language=en_US). If you have more than one data space, you must grant access to objects in each data space. Object names in non default data spaces follow the convention of \_. 5. Save your work. ![EngagementChannelType\_Home page showing the required field mappings with the Engagement Channel Type object.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-data_protection_and_privacy-264-0-0-production-enus/27d1bf87-a47b-491a-8339-f53ef6540aec/data_protection_and_privacy/images/EngagementChannelType_map.png) #### See Also - [Create a Salesforce CRM Data Stream](https://help.salesforce.com/s/articleView?id=data.c360_a_create_crm_data_stream.htm&type=5&language=en_US) - [Data Mapping](https://help.salesforce.com/s/articleView?id=data.c360_a_data_mapping.htm&type=5&language=en_US) # Create a DataPack or a MultiPack (Managed Package) For the managed package runtime, to deploy data between orgs, you can create and export DataPacks, which are files with a selected object’s data in JSON format. A single DataPack contains one main object and its dependent objects. A MultiPack is a DataPack that contains multiple main objects and their dependent objects. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. To export from its designer, open the object. To select multiple objects, go to a page that lists the objects to export, such as Omniscripts in the Omnistudio app, then select the objects to export. 2. For objects with versions, such as Omniscripts, expand the names to display the versions, then select the versions to export. 3. Click **Export**. 4. In the Export DataPack dialog box, click **Next**. 5. In the Review dialog box, click **Next**. 6. To avoid overwriting an existing DataPack, specify a unique name and version. 7. To add the DataPack to the Published subtab of the Omnistudio DataPacks tab and make it available to connected orgs, select **Add to Library**. When you publish a DataPack, selecting **Download** is optional. 8. To download the DataPack JSON to your local machine, select **Download**. 9. Click **Done**. If you selected **Download**, the DataPack is created and downloaded to your download directory. # Create a Dataset Link A decision table can decide the outcome for object records specified as dataset links. A dataset link defines a mapping between a decision table’s input fields and fields in a source object. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
User Permissions Needed
To create, edit, and activate a decision table: System Administrator profile
You can create a dataset link and specify which field in Transaction\_\_c source object maps to which field in the decision table. When the decision table is executed, Transaction\_\_c is passed as an input to the decision table. 1. From Setup, in the Quick Find box, enter Decision Tables, and then select **Decision Tables**. 2. Select your decision table. 3. Under Dataset Links, click **New**. 4. Enter a name and description for the dataset link. 5. Select the source object **Transaction Journal**. 6. Map the input field **Product Name** in your decision table to the **Booked FareClass** field in the source object. 7. Save your changes. 8. To activate the decision table, click **Activate**. # Create a Decision Table Create a decision table and select the object or the custom metadata type that contains the business rules. Select the input fields from the business rules object or custom metadata type that the decision table must read. Select one or more output fields. The output fields contain the values that provide the outcomes. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
User Permissions Needed
To create, edit, and activate a decision table: System Administrator profile
Let’s say a loyalty member of New Airlines has Tier Points totaling about 5000 points from the previous transactions. The member decides to redeem some points to purchase a business class ticket. As an admin, you can automate the point redemption process. In this example, we create a flow that redeems non-qualifying points for members based on the class of ticket that they purchase. 1. Create a custom object **Redemption Chart** with Product and Price as the input and output fields for your decision table. 2. Create records for the Redemption Chart as defined in the following Redemption Catalog. | Product | Points | | --- | --- | | Business Class Seat | 3000 | | Economy Class Seat | 2000 | 3. From Setup, in the Quick Find box, enter **Decision Tables**, and then select **Decision Tables**. 4. Click **New**. 5. Enter a name and description for the decision table. 6. From Decision Table Type, select **Standard**. 7. Click **Next**. 8. In the source object, select Redemption Chart object. 9. Click **Next**. 10. From the **Use As** list, select **Input** field for **Product**. 11. From the **Use As** list, select **Output** field for **Points**. 12. Save your changes. # Create a Depot Repair Request You can create a depot repair work order for one or more return order line items. For each depot repair work order, specify the work type and priority, assign it to a user or service queue, and select a parent work order if applicable. ### Required Editions
Available in: Lightning Experience
Available in: Automotive Cloud, Communications Cloud, Energy and Utilities Cloud, Manufacturing Cloud, and Media Cloud. View edition availability.
User Permissions Needed
To create a depot repair work order:
  • Service Part Return Management
  • Context Service Runtime
  • Stage Management User
Use [stage management](https://help.salesforce.com/s/articleView?id=ind.stage_management_create_stage_definition.htm&type=5&language=en_US) to create a stage definition for the depot repair request. 1. From the Navigation bar, open the Return Orders list view page. 2. Select the return order number, and open the corresponding return order record. 3. On the return order record, select the required return order line items for which you want to create a depot repair work order. 4. To create a work order for the selected return order line items, click **Create Work Order**. 5. Select the process type. By default, Depot Repair is selected. 6. Select the work type. 7. To assign this work order, select a user or a service queue. By default, the current user is selected as the owner. 8. Select a parent work order, if applicable. 9. Select the priority of the request. 10. Select a price book for the work order if the return order line item contains a product, product line item, or product record line item. Ensure that the selected price book includes the products specified in the return order. A price book is not required if the return order line item contains only assets. 11. Click **Save**. A depot repair work order is created with the associated return order details. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-asset_service_lifecycle_mgmt-264-0-0-production-enus/645b17dc-6eea-4fac-9d5c-016dea098887/images/icon_note.png) Note When a work order is created, the return order and its line items are linked at the work order line item level, not directly to the work order. # Create a Digital Pass Template Create a digital pass template to connect the static designs on Google's console and the dynamic data stored in Salesforce. This template defines the static design and layout of the pass. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions
Available in: Orgs that have the B2C - Loyalty, B2C - Loyalty Plus, B2B - Loyalty, Loyalty Management - Growth, or Loyalty Management - Advanced license enabled
1. From the App Launcher, search and select **Digital Pass Templates**. 2. Click **New**. 3. Enter the name of the template. 4. Select Google as the service provider. 5. Select the type of template. - Use the **Loyalty** template to create a digital version of loyalty membership card that stores the loyalty program member profile information. - Use the **Gift Card** template to create a digital version of the member’s vouchers which includes details such as voucher code, value, and expiry date. 6. Enter the service provider template identifier which is the ID of the external template used by the digital pass. 7. Enter a description for the digital pass template. 8. Save your changes. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note You can add custom parameters to the template based on your business requirements. For example, if you want to display tailored information on the digital pass, you can add custom paramters. Activate the digital pass template to make it available. After you create the template, the details include the template status. If activation fails, the Status Reason field provides specific details regarding the failure. # Create a DKIM Key DomainKeys Identified Mail (DKIM) is a security standard that attaches a digital signature to your emails to prove that they came from you. With this signature, the receiving server can verify that the message content wasn’t altered or faked during transit. DKIM builds trust with email providers, so your messages are more likely to land in the inbox instead of the spam folder. An active DKIM key verifies your domain ownership so that Salesforce can send email for your users. ### Required Editions
Available in: Salesforce Classic and Lightning Experience
Available in: all editions except Database.com
User Permissions Needed
Manage DKIM keys: Customize Application
When you sign your emails digitally with a DomainKeys Identified Mail (DKIM), the key proves that the message came from your domain. For more information, see [Considerations for DKIM Keys](https://help.salesforce.com/s/articleView?id=xcloud.emailadmin_considerations_dkim.htm&release=264.0.0&type=5 "Before you create DKIM keys, understand their purpose and how DKIM key rotation and domain matching work."). ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important Before Salesforce can send email on behalf of your users, domain-level and user-level verification is required. An active DKIM key fulfills the requirement for domain-level verification only when the domain name of the DKIM key matches the entire domain shown in the 'From' address. To send and sign email from Salesforce, create a separate DKIM key for each domain and subdomain. See [Requirements to Send Email from Salesforce](https://help.salesforce.com/s/articleView?id=xcloud.security_email_verification_requirements.htm&release=264.0.0&type=5 "To protect your org and brand, Salesforce requires domain-level and user-level email verification. To send email from Salesforce with your email domain, verify ownership of your email-sending domains."). This video discusses the three main components of email trust and antispoofing: DKIM, SPF (sender policy framework) and DMARC (domain-based message authentication, reporting and conformance). It demonstrates setting up a DKIM key. Or [launch this video](https://play.vidyard.com/1bLVtrW33iLmVMaWQyzBtc). ## Add a DKIM Key in Setup 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **DKIM Keys**. 2. Click **Create New Key**. The new DKIM key pair defaults to the Inactive state. 3. Select the RSA key size. Select **2048-bit** unless a specific application requires smaller keys. 4. For Selector, enter a unique string of up to 62 letters, digits, and hyphens to identify this key. Start with a letter or number. For example, example-sf-a. 5. For Alternate Selector, enter another unique string of up to 62 letters, digits, and hyphens. Start with a letter or number. For example, example-sf-b. Salesforce uses the alternate selector to auto-rotate your keys. See [Considerations for DKIM Keys](https://help.salesforce.com/s/articleView?id=xcloud.emailadmin_considerations_dkim.htm&release=264.0.0&type=5 "Before you create DKIM keys, understand their purpose and how DKIM key rotation and domain matching work."). 6. Enter the domain name used to send email from Salesforce. After you save a DKIM key, you can’t edit the domain name. 7. For domain match pattern, enter a comma-separated list of domain patterns that the domain name must match before Salesforce signs an email with this DKIM key. Here are two examples of a recommended domain match pattern value. - Domain: example.com and Domain Match Pattern: example.com - Domain: mail.example.com and Domain Match Pattern: mail.example.com ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_important.png) Important To send and sign emails for a subdomain that you own, such as mail.example.com, create a separate DKIM key for each subdomain. Don’t use wildcards in the domain match pattern list for DKIM keys for domains that you own. Although wildcards are permitted in this field, we no longer recommend that option. 8. Save your changes. Salesforce publishes two DKIM public keys to DNS TXT (text) records for a Salesforce-owned domain: a primary and alternate key. The alternate key is used during key rotation. Salesforce also generates corresponding canonical domain name (CNAME) records for your domain, which become the second half of the DKIM key pair. This process usually finishes within 15 minutes. ## Update DNS Add the CNAME and Alternate CNAME records to your domain’s DNS record. 1. From [Setup](https://help.salesforce.com/s/articleView?id=xcloud.basics_nav_setup.htm&type=5&language=en_US), use the Quick Find box to find and select **DKIM Keys**. 2. To view the key details, click the selector of the key. ![DKIM key details](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/security/images/email/dkim_details.png) When Salesforce has finished publishing the TXT records for the private key, the CNAME Record and Alternate CNAME Record fields are shown. If the TXT Record Status is “Publishing in progress”, wait a few minutes and try again. Refresh the page in your browser, or reload the DKIM key list in Setup and click the selector again. 3. Add the CNAME and Alternate CNAME records to DNS for your domain. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note Work with your DNS provider to complete this step. If you enter this information via your DNS provider’s website, check their documentation for their expected formats. Some DNS providers require the domain name when you enter the name value, and some omit it. In our example, the .example.com string is the domain name. Here’s an example of DNS CNAME records for a DKIM Key with a domain of example.com and selectors example-sf-a and example-sf-b. ``` NAME TTL CLASS TYPE VALUE -------------------------------------------------------------------------------------------------------- example-sf-a._domainkey.example.com. 3600 IN CNAME example-sf-a.k4tyd2.custdkim.salesforce.com. example-sf-b._domainkey.example.com. 3600 IN CNAME example-sf-b.e6mxu6.custdkim.salesforce.com. ``` This example is a raw CNAME record. The trailing dot in example-sf-a.\_domainkey.example.com. and example-sf-a.\_domainkey.example.com. tells the DNS server that the names are absolute, stopping the provider from appending anything to the domain names. Usually your DNS provider adds that dot to your domain name for you. Check with your DNS provider to determine how to enter the name in their system to get this result. Wait for the DNS changes to propogate, then [activate the DKIM key](https://help.salesforce.com/s/articleView?id=xcloud.security_email_dkim_activate.htm&release=264.0.0&type=5 "After you add a DomainKeys Identified Mail (DKIM) key in Setup and update your domain’s DNS records, wait for the DNS changes to apply across the internet before you activate the key."). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-security-264-0-0-production-enus/8cecd769-ab2d-4e07-addf-c4f2927925e1/images/icon_note.png) Note DNS changes can take up to 72 hours to propagate. #### See Also - [DomainKeys Identified Mail (DKIM) Keys](https://help.salesforce.com/s/articleView?id=xcloud.emailadmin_setup_dkim_key.htm&release=264.0.0&type=5 "Use the DKIM key feature so Salesforce can sign outbound email sent on your company’s behalf. These signatures give recipients confidence that the email was handled in a way that’s consistent with your company. An active DKIM key also verifies your domain ownership so that Salesforce can send email for your users.") - [Determine How to Verify Your Email-Sending Domains](https://help.salesforce.com/s/articleView?id=xcloud.security_user_email_verification_domain_auth.htm&release=264.0.0&type=5 "To send email from Salesforce on domains that you own, verification is required for each of your email-sending domains. Determine the best method to verify your email domains: DomainKeys Identified Mail (DKIM), authorized email domains, or both options.") - [Activate a DKIM Key](https://help.salesforce.com/s/articleView?id=xcloud.security_email_dkim_activate.htm&release=264.0.0&type=5 "After you add a DomainKeys Identified Mail (DKIM) key in Setup and update your domain’s DNS records, wait for the DNS changes to apply across the internet before you activate the key.") - [Improve Deliverability of Emails Sent from Salesforce](https://help.salesforce.com/s/articleView?id=sales.emailadmin_send_from_salesforce_improve_deliverability.htm&type=5&language=en_US) - [Enabling Compliance BCC Emails](https://help.salesforce.com/s/articleView?id=sales.admin_compliancebcc.htm&type=5&language=en_US) # Create a Document from a Template Create a document from a template in the Template Library. ### Required Editions
Available in: Lightning Experience
1. To access your available templates, click the **Compose** button, and select **Template Library**. ![Template Library menu option in the Compose menu](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_library_compose_button.png) 2. Find the template you want to use: ![Template Library template with private gallery options highlighted](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/quip_template_library_created_by_me.png) 1. To create a document from a template that you created, select **Created by Me**. 2. To create a document from a template shared with you, select **Shared with Me**. 3. To use a sample template from quip.com/templates, select **Example Templates**. 4. To use an admin-approved company template, select the company gallery name. 3. Click **Use Template**. 4. Name your document and choose which folder to save it to. After you embed the template in a Salesforce record and create a document from it, any Salesforce Template Data Mentions or mail merge fields added to the template autopopulate with the Salesforce record data. #### See Also - [Add a Salesforce Template Data Mention](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_add_template_data_mention.htm&release=264.0.0&type=5 "As you set up your templates, use Salesforce Template Data Mentions instead of mail merge syntax. When a user creates a document from your embedded template, the Salesforce Data Mentions automatically populate with record’s data and continue to stay up to date.") - [Decide Between Template Data Mentions and Mail Merge](https://help.salesforce.com/s/articleView?id=xcloud.quip_mail_merge.htm&release=264.0.0&type=5 "Templates save time copying and pasting, standardize your business practices, and help you get the most out of your Salesforce data. To auto-fill your embedded templates with data from a Salesforce record, you can use Salesforce Template Data Mentions or mail merge syntax.") - [Mail Merge Examples](https://help.salesforce.com/s/articleView?id=xcloud.admin_files_quip_templates.htm&release=264.0.0&type=5 "Use templates to prepopulate documents with content that’s specific to the Salesforce record they’re embedded in. For example, you want to use a document to store an Account Plan for each account. When a user creates an Account Plan, you want it to include the same boilerplate content for every account. But you also want to include specific field values from the account, such as the account name and description.") # Create a Document in Lightning Experience Create a document no matter where you are in Lightning Experience and link it to a record. Use the New Document global action to take freeform notes that stay open as you move around Lightning Experience. ### Required Editions
Available in: Lightning Experience
To create a document from the Global Actions menu, an admin must add the New Document global quick action to your publisher layouts. 1. From a Lightning page, click **![global action "+" icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/global_actions_menu_icon.png)**, and select **New Document**. ![New Document global action](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_quip_new_doc_action.png) 2. Add content to your new document. You can @mentions users, documents, spreadsheets, folders, Salesforce data mentions, checklists, and more. For the best editing experience, expand the document. ![Acme Call Notes document in Lightning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_new_doc_composer.png) 3. By default, your document is saved to your Private folder in Quip and to the Quip section in the Files tab. When you’re ready to share your document, click **Link & Share**. ![Link Document to Record modal](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/anywhere_app/images/anywhere_link_and_share_doc.png) 4. To link your document to record, select an object type, then enter a record name. If Synced Sharing is enabled, users with access to the record can access its linked documents. [Tell Me More](https://help.salesforce.com/s/articleView?id=xcloud.quip_synced_sharing.htm&release=264.0.0&type=5 "Streamline user access to embedded documents with synced Salesforce record sharing permissions. Set access at the org level for all documents linked to a Salesforce record rather than manually granting access to individual documents.") 5. Save the action. #### See Also - [Add the New Document Global Action Manually](https://help.salesforce.com/s/articleView?id=xcloud.anywhere_new_doc_global_action_setup.htm&release=264.0.0&type=5 "To let your users create a document no matter where they are in Lightning Experience, add the New Document global quick action manually to individual global publisher layouts.") - [Add the New Document Global Action to All Global Publisher Layouts](https://help.salesforce.com/s/articleView?id=xcloud.quip_add_global_action_to_all_layouts.htm&release=264.0.0&type=5 "To let your users create a document no matter where they are in Lightning Experience, add the New Document global quick action to all of your global publisher layouts automatically.") # Create a Flexcard Create a Flexcard by specifying a unique name and author. Optionally, save the Flexcard as a child card to embed it in other Flexcards. In the designer for a managed package, you can also configure its data sources and test parameters. Before You Begin Make sure you don't use reserved words when you create a Flexcard. For more information, see [Omnistudio Naming Conventions](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_naming_conventions.htm&release=264.0.0&type=5 "When creating an Omnistudio component, such as an Omnistudio Data Mapper, Flexcard, Integration Procedure, or an Omniscript, follow the naming conventions on this page."). To create a Flexcard, complete these tasks. 1. From the App Launcher, find and select **Flexcards**. 2. Click **New**. 3. Enter a name and author for the Flexcard. Keep in mind that: The combination of the name and author must be unique. For example, you can’t import a Flexcard whose name and author match an existing Flexcard without overwriting it. You can’t change the name, the theme, or the author of a Flexcard unless you clone it, and change the name of the cloned Flexcard. 4. If needed, update the default title. Salesforce shows the title in the Lightning App Builder or the Experience Builder when you add the Flexcard to a page. 5. If needed, save the card as a child card to embed the Flexcard in another Flexcard. 6. If needed, in the designer on a managed package, select the data source type and then configure the data source. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) Note You can configure the data source later from the Setup panel. 7. If needed, in the designer on a managed package, configure **Test Parameters** to view test data when your data query has merge field variables such as {recordId}. - **[Clone a Flexcard or Create a New Version](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcards_versioning_and_cloning_42243.htm&release=264.0.0&type=5)** Consider the available options for copying a Flexcard. # Create a Flexcard (Managed Package) For the managed package runtime, configure basic settings and data source options when creating a Flexcard in the Flexcard Designer. After creating a Flexcard you can update additional options and start building your user experience. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Beginning with Vlocity Insurance and Health Summer '20 , the Flexcard Designer enables you to preview while you build dynamic context-specific user interfaces for customer interactions using a drag interface with WYSIWYG editing. The Flexcard Designer is LWC only and does not support Angular. 1. Configure basic settings as follows: 1. From the Flexcards tab, click **New**. 2. In the **New Flexcard** step, enter the **Name** of your Flexcard following required naming conventions. 3. Select a **Theme** for your Flexcard. Select Lightning to use SLDS (Salesforce Lightning Design System), or Newport to use the Newport Design System. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You cannot change the theme once set. You will need to clone the Flexcard to change the theme. 4. Update the **Author**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note You cannot change the author once set. You will need to clone the Flexcard to change the author. 5. (Optional) Update the **Title**. The title is used to find your generated Flexcard LWC after activation in the Lightning App Builder and Community Builder. 6. (Optional) Enable **Is Child Card** to embed the Flexcard inside another Flexcard. 7. (Optional) Enter the **Description** visible on the Flexcards home tab. 8. Click **Next**. 2. Configure the data source as follows: 1. In the **Select Data Source Type** step, select a data source type to retrieve data from a Salesforce object or an external database. 2. Click **Next**. 3. In the **Select Data Source** step, configure the data source properties. For example, if you selected an Omnistudio Data Mapper as your data source type, select an active Data Mapper. Enter the ContextId as an **Input Map**, such as **Key** = AccountId and **Value** = {recordId}, Configure additional options as needed. 4. Click **Next**. 3. To view test data when your data query has merge field variables such as {recordId}, configure **Test Parameters**. 1. To enter test data: - If a merge field was added in the previous step, a **Run-Time Variable** is populated. Add its **Test Value**. If for example, your **Run-Time Variable** is a ContextId such as {recordId}, that expect's an Account's Id, enter a specific Account Id in **Text Value**. - For each new test parameter, click **\+ Add**, enter a **Run-Time Variable** your data source expects, and enter a value in **Test Value**. 2. To drill down through the JSON data to pass a specific dataset to the Flexcard, enter the JSON path in the **Result JSON Path** field. For example, in the following code, enter \[0\]\['Cases'\] to return data from the Cases object only. ``` [ { "AccountPrimaryContactEmail": "sean@edge.com", "AccountBillingCity": "Austin", "AccountCreated": "2020-10-15T21:28:48.000Z", "AccountRevenue": 139000000, "AccountWebsite": "http://edgecomm.com", "AccountPhone": "(512) 757-6000", "AccountName": "Edge Communications", "AccountId": "0013g00000AeI9fAAF", "AccountPostalCode": "78767", "Cases": [ { "Type": "Mechanical", "Id": "5003g000007WQHRAA4", "Created": "2020-11-23T20:51:20.000Z", "Priority": "High", "Status": "Escalated", "Subject": "The watchamacallit is too high", "CaseId": "5003g000007WQHRAA4" }, { "Type": "Structural", "Id": "5003g000007WQHQAA4", "Created": "2020-11-23T20:50:32.000Z", "Priority": "Medium", "Status": "New", "Subject": "The doodat wasn't properly set up", "CaseId": "5003g000007WQHQAA4" } ] } ] ``` 3. Click **Fetch**. 4. View a **Table** of the returned Test Response. 5. (Optional) Click **JSON** to view the returned results as JSON. 6. Click **Save**. What’s next: Configure additional options. See [Flexcard Setup Reference (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_flexcard_setup_reference.htm&release=264.0.0&type=5 "For the managed package runtime, the Setup panel in the Flexcard Designer provides multiple configuration options that enable a user to define the behavior of the Flexcard further. For example, update the data source and add session variables."). # Create a Flow to Activate Natural Language Processing Services Create a flow in Flow Builder to activate Natural Language Processing Services and analyze text-based survey responses. This flow will invoke Natural Language Processing (NLP) actions when a survey is submitted. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-feedback_management-264-0-0-production-enus/a6ddb038-83cb-47d7-b4de-b2b573c479e7/images/icon_note.png) Note Unauthenticated guest users can't run the flow to invoke natural-language processing (NLP) services. 1. From Setup, in the Quick Find box, enter Flows, and then select **Flows**. 2. Click **New Flow**, and select **Record-Triggered Flow**. Then click **Create**. Flow Builder launches. 3. Click **Edit**. 4. Select the object whose records trigger the flow when they’re created, updated, or deleted. Here, select the **SurveyQuestionResponse** object. 5. Select when to trigger the flow. Here, select **A record is created**. 6. Next, add the element. 1. Click the Toggle Toolbox. 2. Click **New Resource**. 3. Select **Variable** as the Resource Type. 4. Enter an API name and description for the entity extraction. 5. Select **Apex-Defined** as the Data Type. 6. Select **nlpservice\_ServiceDetail** as the Apex Class. 7. Specify the availability outside the flow. Here, select **Available for Input** option. 8. Click **Done**. 7. Similarly, create these variables: | Variables | Data Type | Apex Class | | --- | --- | --- | | Keyphrase Extraction | Apex-Defined | nlpservice\_ServiceDetail | | Targeted Sentiment | Apex-Defined | nlpservice\_ServiceDetail | | Service List | Apex-Defined | nlpservice\_ServiceDetailsList | 8. Next, add a new element. 1. Select **Assignment**. 2. Click **Edit Element**. 3. Select the **Entity Extraction** and **configurationAPIName** as variables. 4. Select the operator as **Equals**. 5. Select the value as **AWS\_Enity\_Extraction**. 9. Similarly, create these assignments: | Variables | Operator | Value | | --- | --- | --- | | Entity Extraction and serviceName | Equals | Amazon\_Comprehend\_Entity\_Extraction | | ServiceList and serviceDetails | Add | EntityExtraction | | Keyphrase Extraction and configurationAPIName | Equals | AWS\_Keyphrase\_Extraction | | Keyphrase Extraction and serviceName | Equals | Amazon\_Comprehend\_Keyphrase\_Extraction | | ServiceList and serviceDetails | Add | KeyPhraseExtraction | | Targeted Sentiment and configurationAPIName | Equals | AWS\_Targeted\_Sentiment | | Targeted Sentiment and serviceName | Equals | Amazon\_Comprehend\_Targeted\_Sentiment | | ServiceList and serviceDetails | Add | TargetedSentiment | 10. In the flow, click **Action**. 1. Click **Industries Generative AI**. 2. Select **Initiate Natural Language Processing** as the action. 3. Enter a label, API name and description. 4. Select **{!$Record.Id}** as the Reference Record ID. (Reference Record ID> ID> SurveyQuestionResponse). 5. Select **{!ServiceList}** as Service Details List. 6. Select the Text Field value as **SurveyQuestionResponse.ResponseValue**. 7. Click **Done**. 11. Save and activate the flow. The flow uses the Initiate Natural Language Processing action to call the Amazon Comprehend API, which analyzes survey responses and creates or updates records with insights about the responses. # Create a Flow to Credit Points to Members For example, admins of an airline can set up a batch job to credit points to loyalty program members based on the class of ticket purchased or promotion. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
Let’s say members of the Corporate Loyalty program who purchase an economy class ticket are credited with 300 non-qualifying points. Members who purchase business class tickets are credited 500 non-qualifying points. 1. From Setup, in the Quick Find box, enter Flows, and then select **Flows**. 2. Click **New Flow**. 3. Select **Autolaunched Flow (No Trigger)**, and click **Next**. 4. Click +. 5. Select **Get Records** and provide these details. - Label: Get Transaction Journals - Object: Transaction Journal - Condition Requirements: All Conditions Are Met - **Field:** Id - **Operator:** Equals - **Value:** Create a Variable type resource, and select the data type as Text. Name the variable as RecordID, and make it available as an input outside the flow.This input variable helps the batch job identify each unique record that it must process. 6. Click **Done** | **Done**. 7. Click +. 8. Select **Decision** and provide these details. - Define the decision for the economy class ticket purchases:  - Label: Economy Class - When to Execute Outcome: All Conditions Are Met - Condition Requirements:  - **Resource:**{!Get\_Transaction\_Journals.BookedFareClass} - **Operator:** Equals - **Value:** Economy - Add another outcome. - Define the decision for the business class ticket purchases: - **Resource:** {!Get\_Transaction\_Journals.BookedFareClass} - **Operator:** Equals - **Value:** Business 9. Click **Done**. 10. Click +. 11. Select **Action**. 12. Search and select **Credit Points**, and provide these details: | Field | Value | | --- | --- | | Label | Credit Points for Economy Class | | Program | Corporate Loyalty Program | | Currency Type | Points | | Recipient Member ID | {!Get\_Transaction\_Journals.Member.Id} | | Number of Points to Credit | 300 | | Journal ID | {!Get\_Transaction\_Journals.Id} | | Promotion ID | Double Points | 13. Click **Done**. 14. Click +. 15. Select **Action**. 16. Search and select **Credit Points**, and provide these details: | Field | Value | | --- | --- | | Label | Credit Points for Business Class | | Program | Corporate Loyalty Program | | Currency Type | Points | | Recipient Member ID | {!Get\_Transaction\_Journals.Member.Id} | | Number of Points to Credit | 500 | | Journal ID | {!Get\_Transaction\_Journals.Id} | | Promotion ID | Double Points | 17. Click **Done**. 18. Save the changes. 19. Name the flow Credit Points to Members, and save the changes. 20. Activate the flow. **Credit Points to Members based on Promotion** Here’s an example, if you want to credit points for members based on a promotion (For example, the promotion criteria: Members age is greater than 20, Interests is Outdoor, and Loyalty Enrollment Channel is Web), you can create a subflow and provide the following input parameters in the flow: | Field | Value | | --- | --- | | JournalId | {!JournalID} | | MemberId | {!Get\_Transaction\_Journal\_ID.MemberId} | | Date\_of\_Transaction | {Date\_of\_Transaction} | | Member\_Age | {!Member\_Age} | | Member\_Interests | {!Member\_Interests} | | Member\_Enrollment\_Channel | {!Member\_Enrollment\_Channel} | Create a batch job that processes this flow. # Create a Folder Organize your documents into groupings that make sense to you. ### Required Editions
Available in: Quip desktop app, Quip iOS mobile app, and Quip on web
1. From the **Compose** menu, select **New Folder**. 2. Name the folder, and then choose a target folder and color. 3. Click **Create**. # Create a Formula in Loyalty Program Process You can use a formula to determine either the value of a parameter, the resource or value of a condition, or an input field of an action. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
When you define a Formula type parameter, a condition, or an action, click ![Formula builder icon.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/loyalty_management/images/promotion_setup_formula.png) to create a formula. Use a combination of supported functions, object fields and its related fields, Sobject data type parameters, and values for your formula. You can select fields from these objects.
Object Context
Transaction Journal Value of the field is determined by the transaction journal that’s being processed.
Promotion

Value of the field is determined by the promotion associated with the rule that's processing the transaction journal.

Use a formula that contains a Promotion field in only the rules that are associated with promotions.

Loyalty Program Member Promotion

Value of the field is determined by the Loyalty Program Member Promotion record that's associated with:

  • The member associated with the transaction journal that’s being processed
  • The promotion associated with the rule that’s processing the transaction journal

Use a formula that contains a Loyalty Program Member Promotion field in only the rules that are associated with promotions.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note You can’t use the TimeOnly data type attribute when you define the formula. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_example.png) Example Here are a few example formulas. | Use Case | Formula | | --- | --- | | To figure out the 10% of the Transaction Amount field in the Transaction Journal object. | {!TransactionJournal.TransactionAmount} \* 0.10 | | To specify an expiration date that's two months after the activity date for issued vouchers. | ADDMONTHS({!TransactionJournal.ActivityDate}, 2) | | Verifies whether an existing member has referred a new member | ISNULL({!TransactionJournal.ReferredMemberId}) | #### See Also - [_Salesforce Help_: Calculate Field Values with Formulas](https://help.salesforce.com/s/articleView?id=platform.customize_formuladef.htm&language=en_US) # Create a Formula or Aggregate in an Omniscript Create expressions to set calculated values and evaluate data across multiple fields using a Formula or Aggregate element. For example, if you are accepting information for a qualifying life event you may want to create a formula that determines if the date entered for the qualifying life event is within thirty days of today's date. Formula and Aggregate elements support the following constants and types: - Omniscript elements and JSON nodes, passed in as merge fields—for example, %Element1% or %JSONnode1% - Numbers and integers—for example, 5 + 3.145 - String literals wrapped in quotes—for example, ' "ABC" + "DEF" ' - Booleans—for example, true || false - Arrays—for example, "\[1,2, 3, 4, 5\]" - Dates—for example, 2/3/24 Formulas with a **Data Type** of Date are interpreted according to the **Date Format**, using the [Day.js](https://opencollective.com/dayjs) library. To prevent a date from being interpreted, set the **Data Type** to Text. - Null The elements behave similarly in an Omniscript. However, the Aggregate element should be used for aggregation purposes, such as averaging or summing elements. Formula elements can use both [Supported Formula Operators](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_formula_or_aggregate_in_an_omniscript_23115.htm&release=264.0.0&type=5 "Formula fields in Omniscript support the following operators:") and [Omniscript Functions](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_formula_or_aggregate_in_an_omniscript_23115.htm&release=264.0.0&type=5 "You can add functions to the Aggregate and Formula elements in Omniscripts.") . For example, you may want to determine a contract end date by adding 365 days to a date element. You could do this by using the example formula below: ![example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) example DATE(YEAR(%DateElement%), MONTH(%DateElement%), DAYOFMONTH(%DateElement%) +365) If you would like to set a date one week from today's date, you could do so by using the example formula below: ![example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio-264-0-0-production-enus/f526eaa8-ae05-487a-8944-4bb99b0b78ac/images/icon_note.png) example DATE(YEAR(TODAY()), MONTH(TODAY()), DAYOFMONTH(TODAY()) +7) 1. From the elements panel, drag a Formula or Aggregate element onto the script structure. 2. In the properties panel, under Expression, add Omniscript functions by clicking on the function name; The function pre-populates in the Expression section. To add Omniscript elements inside of the function, use merge fields by enclosing the element in percentage (%) signs. 3. If you plan to use this element in a repeatable block, see [Evaluate Elements in Repeatable Blocks](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks_21869.htm&release=264.0.0&type=5 "Suppose you place an element in a repeatable block (a Block or an Edit Block) and you want to access data that is calculated in a different element. The method that you use to access the data depends on whether the element containing the data is within or outside the same repeatable block in the Omniscript. Review guidelines and examples for the Formula element and for the Select element, which is used to add a dependent picklist to an Omniscript."). 4. If you are using a Formula element, continue to build the formula using [Supported Formula Operators](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_formula_or_aggregate_in_an_omniscript_23115.htm&release=264.0.0&type=5 "Formula fields in Omniscript support the following operators:") in the Expression text box. 5. If the element should not appear on the Omniscript UI, click **Hide**. 6. Create additional elements that depend on the results of the Formula. See [Create Dynamic Forms Using the Conditional View Property](https://help.salesforce.com/s/articleView?id=xcloud.os_conditionally_display_elements_using_the_conditional_view_property_19389.htm&release=264.0.0&type=5 "With the Conditional View property, you can hide an element or a group of elements in a block or step based on certain conditions. Every step, block, or element supports at least one conditional view. Elements contain up to three conditional view options depending on the type of element. For example, an action outside of a step doesn’t have a Read-Only option since the action isn’t visible.") and [Display Messaging in Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_display_messages_in_omniscripts_19551.htm&release=264.0.0&type=5 "Display comments, requirements, and success and warning messaging depending on whether the validate expression returns True or False. Configure the Messaging element after creating an element, such as a formula or aggregate, to display validation messages in the OmniScript. Merge fields are supported in messages."). 7. To test the Formula or Aggregate, click **Preview**. - **[Supported Formula Operators](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_formula_or_aggregate_in_an_omniscript_23115.htm&release=264.0.0&type=5)** Formula fields in Omniscript support the following operators: - **[Omniscript Functions](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_formula_or_aggregate_in_an_omniscript_23115.htm&release=264.0.0&type=5)** You can add functions to the Aggregate and Formula elements in Omniscripts. ## Supported Formula Operators Formula fields in Omniscript support the following operators:

Operator

Meaning

+

Addition

-

Subtraction

*

Multiplication

/

Division

^

Power

=

Equals

<>

Not equals

>

Greater than

<

Less than

>=

Greater than or equal to

<=

Less than or equal to

&&

And

||

Or

( )

Parentheses

For information on supported functions in Omniscript, see [Create a Formula or Aggregate in an Omniscript](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_formula_or_aggregate_in_an_omniscript_23115.htm&release=264.0.0&type=5 "Create expressions to set calculated values and evaluate data across multiple fields using a Formula or Aggregate element. For example, if you are accepting information for a qualifying life event you may want to create a formula that determines if the date entered for the qualifying life event is within thirty days of today's date."). For information on adding a Formula field to an Omniscript, see [Create a Formula or Aggregate in an Omniscript](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_formula_or_aggregate_in_an_omniscript_23115.htm&release=264.0.0&type=5 "Create expressions to set calculated values and evaluate data across multiple fields using a Formula or Aggregate element. For example, if you are accepting information for a qualifying life event you may want to create a formula that determines if the date entered for the qualifying life event is within thirty days of today's date."). ## Omniscript Functions You can add functions to the Aggregate and Formula elements in Omniscripts. For a list of functions for Omnistudio Data Mappers and Integration Procedures, see [Supported Data Mapper and Integration Procedure Functions](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_data_mapper_and_integration_procedure_functions.htm&release=264.0.0&type=5 "Use functions to evaluate and manipulate data in formulas for Omnistudio Data Mappers and Integration Procedures. For example, functions can perform conditional operations that take different actions depending on the values you pass them. They can invoke queries and other functions, and they can operate on numbers, dates and times, strings, lists and arrays, and JSON objects."). To view a list of supported formula operators that can be used with the Formula element, see [Create a Formula or Aggregate in an Omniscript](https://help.salesforce.com/s/articleView?id=xcloud.os_create_a_formula_or_aggregate_in_an_omniscript_23115.htm&release=264.0.0&type=5 "Create expressions to set calculated values and evaluate data across multiple fields using a Formula or Aggregate element. For example, if you are accepting information for a qualifying life event you may want to create a formula that determines if the date entered for the qualifying life event is within thirty days of today's date."). The tables below detail the different available Omniscript functions and how they work.

Function Name

Example

Details

ABS(number)

ABS(%Friends%) == 6.52534

Returns the absolute value.

BOOLEAN(value)

 

Returns true or false.

CURRENCY(value)

 

Returns value formatted for currency. 12345 would display as 12,345.00. If you add a decimal value such as 1.2345, by default, the field shows the value 1.23, with two decimal points. If you require all decimal values to be shown, add a value to the Mask field. In this example, the value #.#### in the Mask field will show all four decimal values.

INTEGER(value)

INTEGER(%Friends%) == 6

INTEGER("12.5") == 12

Converts the number given into an integer with no decimal places. Does not round the number up. Also accepts a string.

NULL

 

Renders an object's value null.

NUMBER(value)

NUMBER(%Friends%) == 128

Converts a string into a number.

POW(number, exponent)

POW(%Friends%, 3) == 274.625

Returns exponent value.

RANDOM()

RANDOM()

Returns a random number between zero and one. This function is commonly used in A/B testing. The RANDOM() function does not accept parameters.

ROUND(number, decimalPlaces)

ROUND(%Friends%, 3) == 6.525

Rounds number to certain defined number of decimal places.

Function Name

Example

Details

AND();

IF((%reset%="Yes" AND( %reboot%="Yes")), "Closed", "Escalated")

Logical operator that performs a function if all conditions are both met.

COUNTIF(values, expression_or_value)

COUNTIF(%MyArray%, >10)

Returns a count of the number of repeated elements if a condition is met.

EQUALS( Field_Name, 'Condition')

IF(

EQUALS(%Department%,'401(k)'),

"Then Result",

"Else Result"

)

The EQUALS function is used when comparing a field to a particular value or another field.

IF(EXPRESSION,THEN, ELSE)

IF((%reset%="Yes" || %reboot%="Yes"), "Closed", "Escalated")

If EXPRESSION evaluates to True, THEN is returned, otherwise ELSE is returned.

OR()

IF((%reset%="Yes" OR( %reboot%="Yes")), "Closed", "Escalated")

 

SUMIF(values, expression_or_value)

SUMIF(%MyArray%, >5)

Returns the sum of all comma-separated elements and value if a condition is met.

Function Name

Example

Details

CASE(value, $CASE)

CASE(%Name%, UPPER) == "TONY JONES"

CASE(%Name%, LOWER) == "tony jones"

CASE(%Name%, SENTENCE) == "Tony jones"

CASE(%Name%, TITLE) == "Tony Jones"

Changes case based on $CASE type. $CASE must be LOWER, UPPER, SENTENCE, or TITLE.

CONCATENATE(value1, value2, ..., valueN)

CONCATENATE(%FirstName%, " ", %LastName%) == "Tony Jones"

Concatenates the elements/strings together into a single string.

CONTAINS(input_string,value)

CONTAINS(%FirstName%, "Tony") == True

Evaluates if a value is contained within a string.

SPLIT(text, splitToken, limit);

SPLIT("Tony Jones", " ", 2) == "Tony", "Jones"

 

STRING(value)

STRING(%Friends%) == "6.5"

Converts any value into a String.

SUBSTRING(text, startIndex, endIndex)

SUBSTRING("Substring!", 3, 9) == "string"

Extracts the characters from a string between two specified indexes and returns the value.

Function Name

Example

Details

AGE(dateOfBirth)

AGE(%Birthdate%) == 7

Returns an age (in years) with the given date of birth on today's date. Use the Date element.

AGEON(dateOfBirth, futureDate)

AGEON(%Birthdate%,"07-09-2024") == 16

The age of someone (in years) with the given date of birth on a future date. Use the Date element.

DATE(value)

DATE(%DOB%) == Wed Jul 19 1978 16:00:00 GMT-0700 (PDT)

Use a Date element. Returns full JavaScript format.

DATEDIFF(date1, date2)

DATEDIFF(%DOB%,%TODAY%) == 13559

The difference between 2 dates in days. The value will always be a positive integer. Use the Date element.

DAYOFMONTH(date)

DAYOFMONTH(%TODAY%) == 2

Returns the day of the month. Use the Date element.

DAYOFWEEK(date)

DAYOFWEEK(%TODAY%) == 4

Returns the day of the week as an integer. Monday is 1, Sunday is 7.

HOUR(date)

 

Return the current hour according to local time.

MINUTE(date)

 

Return the current minute according to local time.

MOMENT()

MOMENT(%policyStartDate%).add(1, 'year').subtract(1, 'day')

Returns the moment object of Moment.js

This can be used to perform complex date formatting, calculations, manipulation, comparisons, etc. The MOMENT() function must contain parameters, for example, MOMENT(NOW()). Appending .calendar() to this function is a recommended best practice.

MONTH(date)

MONTH(%TODAY%) == 9

The month of the year as an integer. Use the Date element.

NOW()

NOW() == Thu Aug 27 2019 16:32:00 GMT -0700 (PDT)

Returns current date and time in full JavaScript format. Milliseconds are always set to 0.

The $Vlocity.NOW environment variable applies the user or org time zone, while the NOW() function applies UTC time.

TODAY()

TODAY() == Thu Aug 27 2019 00:00:00 GMT -0700 (PDT)

Returns today's date. The time is always set to midnight

YEAR(date)

YEAR(%TODAY%) == 2019

Returns the year of the date as an integer. Use the Date element.

Function Name

Example

Details

ARRAY(value1, value2, ..., valueN)

ARRAY(%Child1%,%Child2%,

%Child3%,%Child4%) == [4,3,1,2]

Returns an array of the value of the elements.

AVERAGE(array)

AVERAGE(%Age%) == 2.5

Aggregate: returns the average mean value of the numbers provided. Use a repeating element.

AVERAGE(value1, value2, ..., valueN)

AVERAGE(%Child1%,%Child2%,

%Child3%,%Child4%) == 2.5

Returns the average mean value of the numbers provided.

COUNT(array)

COUNT(%Age%) == 4

Aggregate: Returns a count of the number of repeated elements.

EXISTS(array_or_value, expression_or_value)

EXISTS([%FirstName%,%LastName%], "Tony") == true

Returns true if the given value exists in one or more elements. For Aggregate, enter the name of a repeating element—for example EXISTS(%FirstName%,"Tony"), where FirstName is repeatable.

MAX(array)

MAX(%AGE%) == 4

Aggregate: Returns the largest value in the numbers provided. Use a repeating element.

MAX((value1, value2, ..., valueN)

MAX(%Child1%,%Child2%,

%Child3%,%Child4%) == 4

Returns the largest value in the group of elements provided.

MIN(array)

MIN(%AGE%) == 1

Aggregate: returns the smallest value in the numbers provided. Use a repeating element.

MIN((value1, value2, ..., valueN)

MIN(%Child1%,%Child2%,

%Child3%,%Child4%) == 1

Returns the smallest value in the group of elements provided.

SUM(array)

SUM(%AGE%) == 10

Aggregate: returns the sum of all values in the repeatable element.

SUM(value1, value2, ..., valueN)

SUM(%Child1%,%Child2%,

%Child3%,%Child4%) == 10

Returns the sum of all comma-separated elements and values.

Note that when you use a Formula input in an Omniscript with the SUM formula, the Expression text box defaults the precision of decimal values to two. This occurs even if you specify the desired number of decimal values in your formula. For instance, if you use the formula ROUND(SUM(4.216546546,5.55463551),7), the result is 9.77 instead of 9.7711821. To get precise decimal points, use the ROUND formula with a + (plus) sign instead. For instance, you can use the formula ROUND(4.216546546+5.55463551,7) instead of the one in the previous example to get the desired precision.

# Create a Formula or Aggregate in an Omniscript (Managed Package) For the managed package runtime, run functions against element data with the Formula and Aggregate elements. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The elements behave similarly in an Omniscript. However, the Aggregate element should be used for aggregation purposes, such as averaging or summing elements. Formula elements can use both [Supported Formula Operators](https://help.salesforce.com/s/articleView?id=xcloud.os_supported_formula_operators.htm&release=264.0.0&type=5 "For the managed package runtime, formula fields in Omniscript support the following operators:") and [Omniscript Functions](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_functions.htm&release=264.0.0&type=5 "For the managed package runtime, you can add functions to the Aggregate and Formula elements in Omniscripts.") . For example, you may want to determine a contract end date by adding 365 days to a date element. You could do this by using the example formula below: ![example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) example DATE(YEAR(%DateElement%), MONTH(%DateElement%), DAYOFMONTH(%DateElement%) +365) If you would like to set a date one week from today's date, you could do so by using the example formula below: ![example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) example DATE(YEAR(TODAY()), MONTH(TODAY()), DAYOFMONTH(TODAY()) +7) The instructions below explain how to add and configure Formula or Aggregate element to your Omniscript. 1. From the Omniscript Designer, drag a Formula or Aggregate element onto the script structure. 2. You can add [Omniscript Functions](https://help.salesforce.com/s/articleView?id=xcloud.os_omniscript_functions.htm&release=264.0.0&type=5 "For the managed package runtime, you can add functions to the Aggregate and Formula elements in Omniscripts.") by clicking on the function name; the function will pre-populate in the Expression section. Add the Omniscript elements inside of the function using merge field notation by enclosing the element in percentage (%) signs. 3. If you plan to use this element in a repeatable block, see [Evaluate Elements in Repeatable Blocks](https://help.salesforce.com/s/articleView?id=xcloud.os_evaluating_elements_in_repeatable_blocks.htm&release=264.0.0&type=5 "For the managed package runtime, suppose you place an element in a repeatable block (a Block or an Edit Block) and you want to access data that is calculated in a different element. The method that you use to access the data depends on whether the element containing the data is within or outside the same repeatable block in the Omniscript. Review guidelines and examples for the Formula element and for the Select element, which is used to add a dependent picklist to an Omniscript."). 4. If you are using a Formula element, you can continue to build the formula using [Supported Formula Operators](https://help.salesforce.com/s/articleView?id=xcloud.os_supported_formula_operators.htm&release=264.0.0&type=5 "For the managed package runtime, formula fields in Omniscript support the following operators:") in the Expression text box. 5. If the element should not appear on the script UI, Click **Hide**. 6. You can also create additional elements that depend on the results of the Formula. For example, the step shown in the image below appears when the Total Income formula is less than 1,000. For more information, see [Create Dynamic Forms Using the Conditional View Property](https://help.salesforce.com/s/articleView?id=xcloud.os_conditionally_display_elements_using_the_conditional_view_property.htm&release=264.0.0&type=5 "For the managed package runtime, every step, block, or element supports at least one Conditional View. Conditional Views allow you to hide the element or the group of elements contained in a block or step based on certain conditions. Elements contain up to three conditional view options depending on the type of element. For example, an Action outside of a Step doesn’t have a Read-Only option since the action isn’t visible.") and [Display Messaging in Omniscripts](https://help.salesforce.com/s/articleView?id=xcloud.os_display_messages_in_omniscripts.htm&release=264.0.0&type=5 "For the managed package runtime, display comments, requirements, and success and warning messaging depending on whether the validate expression returns True or False. Configure the Messaging element after creating an element, such as a formula or aggregate, to display validation messages in the OmniScript. Merge fields are supported in messages."). 7. You can test the Formula or Aggregate by clicking the Preview link. # Create a Global Consent Definition Build a reusable template that groups consent attributes. ### Required Editions
Available in: Enterprise, Performance, Unlimited, and Developer Editions. Requires the Privacy Center license.
User Permissions Needed
To create a Global Consent Definition: Manage Global Consent
Set up your Consent Status, Consent Purpose, and any Additional Attributes first. A definition groups these attributes, so set up the attributes before you build the definition. Some attributes are required, such as Consent Status and Consent Purpose. Global Consent Manager automatically includes them in every definition. Before you publish a definition, map at least one Data Subject or Contact Point attribute. For paired attributes, such as Brand ID and Brand Value, map both the ID and the value. 1. From the App Launcher, find and select **Privacy Center**, and then select the **Global Consent** tab. 2. Under **Configuration**, select **Global Consent Definitions**. 3. Click **New Global Consent Definition**. 4. Enter a name and optional description for the definition, and then click **Next**. 5. Add the attributes for this definition. Global Consent Manager automatically includes Consent Status and Consent Purpose. When you add an attribute, turn on the segment setting to include it in the definition's structure. Segment attributes determine how Global Consent Manager groups and indexes consent records. #### See Also - [Map External Attributes](https://help.salesforce.com/s/articleView?id=xcloud.global_consent_mapping.htm&type=5&language=en_US) # Create a Google Analytics Tracking ID Variable in Google Tag Manager (Managed Package) For the managed package runtime, creating this variable lets you specify the Tracking ID once and then reference it in multiple places. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. From the Google Tag Manager account page, click **Variables**. 2. Under **User-Defined Variables**, click **New**. 3. Change the variable name at the top of the page from **Untitled Variable** to Google Analytics Variable. 4. Click **Variable Configuration** and choose **Google Analytics Settings** as the type. 5. Paste the Tracking ID that you copied previously into the **Tracking ID** field. 6. Expand **More Settings** and **Ecommerce**, and check the **Enable Enhanced Ecommerce Features** and **Use Data Layer** boxes. 7. Click **Save**. What’s next: [Create Data Layer Variables in Google Tag Manager (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_create_data_layer_variables_in_google_tag_manager.htm&release=264.0.0&type=5 "For the managed package runtime, creating data layer variables lets you create fewer and more versatile event tags."). # Create a Grouped Calculation Matrix (Managed Package) For the managed package runtime, created grouped calculation matrices can be a bit tricky. Hang in there! ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). 1. On the **Vlocity Calculation Matrices** page, click **New**. 2. On the New Vlocity Calculation Matrices window, choose **Group**. 3. Enter a **Calculation Matrix Name**. 4. (Optional) If you plan to use a wildcard column, enter the following: - **Wildcard Column**: The name of the column that can have a wildcard entered as a user value. - **Wildcard Value**: The value a user can enter that's the wildcard. Be sure to add the Wildcard Value to its column in the CSV file. 5. Enter a Group Key. (Required) You'll only do this once per group. 6. Enter a Sub Group Key. (Optional) You'll do this only once per subgroup. 7. Click **Save**. 8. Click the name of the Matrix Version you just created. 9. Enter a **Group Value**. 10. If you're using subgroups, enter a **Sub Group Value**. 11. (Optional) You can add and change the following: - **Name** You can change the name of this matrix version to something more descriptive. - **Priority** - **Version Number** - **Start Date/Time** - **End Date/Time** After you've made your changes, click **Save**. 12. Still on the matrix version page, click **Upload CVS**. See [Upload a CSV File to Create a Calculation Matrix (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_upload_a_csv_file_to_create_a_calculation_matrix.htm&release=264.0.0&type=5 "For the managed package runtime, you can upload a CSV file to create a new calculation matrix. You can also upload a CSV file to an existing calculation matrix, such as a new version of an existing matrix, to update and add to the headers and data."). If you're creating this group of matrices by hand in Vlocity, click **Add Headers**. # Create a Joint Business Plan Align your company and Salesforce on shared goals, objectives, and activities, and track progress toward agreed business outcomes. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, and Unlimited Editions with Partner Ecosystem Management - Members or Partner Ecosystem Management - Login
User Permissions Needed
To create joint business plans Access provided by your Salesforce contact
Gather the plan dates and the business goals that your company and Salesforce agreed on. Use a joint business plan to keep your company and Salesforce focused on shared business outcomes. 1. From your partner site, open **Joint Business Plans**. 2. Click **New**. 3. Enter a name for the plan. 4. Select the partner account associated with the plan. 5. Enter the plan's start and end dates. 6. Add the agreed business goals and other plan details. 7. Save your changes. 8. On the plan record, add objectives for the outcomes that your company and Salesforce want to achieve. 9. For each objective, add the activities and measurements that you use to track progress. The joint business plan is available to authorized members of your company and Salesforce. Update the objectives, activities, and measurements as work progresses. # Create a Legacy Salesforce Archive Policy Create and save a new Legacy Salesforce Archive policy. After your policy is created, you can target the records that you want to archive by adding objects. ### Required Editions
Available in: Developer, Enterprise, Performance, and Unlimited Editions. Requires the Salesforce Archive license.
User Permissions Needed
To create, edit, and schedule Archive Policies: Manage Archive Policies
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-setup-264-0-0-production-enus/6f21df35-9ea0-4f53-ac94-45c3b5dfd5bc/images/icon_note.png) Note This content relates to Legacy Salesforce Archive. Read about the Archive managed package in [Own from Salesforce](https://help.salesforce.com/s/articleView?id=platform.own_from_salesforce.htm&type=5&language=en_US). 1. From the Archive home page, select **Archive Policies**, and then click **New**. 2. Give your policy a name and optional description, and then save it. You're ready to add objects to your Archive Policy. #### See Also - [Add Objects to a Legacy Salesforce Archive Policy](https://help.salesforce.com/s/articleView?id=xcloud.archive_add_objects.htm&release=264.0.0&type=5 "To specify the records and files that you want to archive, add an object to your Legacy Salesforce Archive policy. While configuring the object, you determine which records to process, how to handle related files and attachments, and which related objects to archive in addition to the primary object.") # Create a License Utilization Notifications Flow After you configured which licenses to monitor and defined the thresholds to trigger alerts, you can create the flow for alert notifications. You can send notifications to members of a profile, permission set, or public group. You can also create separate notification flows for each member group. Before you begin: - Configure the License Utilization Alerts flows for user or permission set licenses, or both. - Create a custom notification type with the name, `Send License Utilization Alert`. - Determine the recipients for the notifications, and which delivery method to use to reach the correct set of users: profile, permission set, or public group. - **[Send License Utilization Alerts to a Profile's Users](https://help.salesforce.com/s/articleView?id=xcloud.wallet_license_utilization_alerts_notifications_profile.htm&release=264.0.0&type=5)** Send alerts to everyone assigned to a single specific profile. Because the License Utilization Notification template is configured to notify via the System Administrator profile by default, no flow changes are required if this is the profile you want to notify. However, you can swap out the System Administrator profile and indicate another profile, without any other flow modifications required. Use this method when your alert audience maps cleanly to an existing profile. - **[Send License Utilization Alerts to Multiple Profiles](https://help.salesforce.com/s/articleView?id=xcloud.wallet_license_utilization_notifications_mult_profiles.htm&release=264.0.0&type=5)** Send alerts to everyone assigned to the specified profiles. Because the License Utilization Notification template’s default behavior is to send notifications to only the System Administrator profile, the flow requires some changes. - **[Send License Utilization Alerts to Users Assigned to a Permission Set](https://help.salesforce.com/s/articleView?id=xcloud.wallet_license_utilization_alerts_notifications_psl.htm&release=264.0.0&type=5)** To send notifications to users assigned to a permission set, the provided License Utilization Notification template requires some changes. - **[Send License Utilization Alerts to a Public Group's Members](https://help.salesforce.com/s/articleView?id=xcloud.wallet_license_utilization_alerts_notifications_pubgroup.htm&release=264.0.0&type=5)** To send notifications to users who are members of a public group, the provided License Utilization Notification template requires some changes. #### See Also - [_Object Reference_: TenantConsumptionAlert](https://developer.salesforce.com/docs/atlas.en-us.sfFieldRef.meta/sfFieldRef/salesforce_field_reference_TenantConsumptionAlert.htm) # Create a Lightning App for the Quip Associated Documents Component Get on the path to creating a Quip Associated Documents component that your users can access from records in Salesforce Classic. ### Required Editions
Available in: Salesforce Classic
User Permissions Needed
To create a Lightning app: Customize Application
1. Open your Developer Console. 2. Click **File** | **New** | **Lightning Application**. 3. Name your app QuipCard. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-anywhere_app-264-0-0-production-enus/c0406050-7b26-469a-9dc5-10d6c0c9c576/images/icon_note.png) Note QuipCard is the name of the Lightning component. To keep things simple, we recommend using the same name. 4. Copy and paste this code. ``` ``` # Create a Lightning App Page with a Tracking Manager (Managed Package) For the managed package runtime, the Vlocity Tracking Manager is a Lightning Web Component that must be included in any Lightning page that includes components tracked with OmniAnalytics. It listens for user interaction events and sends data for those events to VlocityTrackingEntry\_\_c objects, VlocityTrackingEvent\_\_e Platform Events, or both. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). If the Vlocity Tracking Group to which the components belong is configured to communicate with an external tag manager, the Vlocity Tracking Manager sends event data to that tag manager. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note To be tracked, an Omniscript must be in the same page context as a Vlocity Tracking Manager component. An Omniscript called from a Flexcard cannot be tracked if the current page is replaced or destroyed. If you are following the workflow example, in this task you add the example Omniscript and Flexcard to a Lightning App Page. 1. In Setup, in the **Quick Find** box, type lightning app, then click **Lightning App Builder**. 2. Click **New**. 3. Select **App Page**, then click **Next**. 4. In the **Label** field, type Analytics Test Page, then click **Next**. 5. Click **One Region**, then click **Finish**. The new page opens in Lightning App Builder. 6. Drag the **Documentation/OmniAnalytics/English** custom component onto the page canvas. 7. Drag the **DocumentationTestCard** custom component onto the page canvas below the first component. 8. Drag the **Vlocity Tracking Manager** custom component onto the page canvas below the others. This component has no UI. 9. Click **Save**, then **Activate**. 10. (Optional) Click **Lightning Experience**, select an existing app, then click **Add page to app**. 11. Click **Save**, then click **Back** to exit Lightning App Builder. 12. Click the App Launcher and go to the Analytics Test Page. 13. Verify that the Analytics Test Page looks like this: ![The Analytics Test Page contains the sample OmniScript and Card. The first step of the sample OmniScript is Select Device, which has a Choose a device field and a Next button. Steps listed are Select Device, View Quote, Cart Details, Review Cart, Shipping Address, Provide Payment, and Order Receipt. Select Device is highlighted. The sample Card displays a user Id and Name and has NavigateAction and NavigateActionNewWindow buttons.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/oapage.png) What’s next: After you have created the Lightning App Page, the next task is to [Interact with the Example Omniscript and Card (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_interact_with_the_example_omniscript_and_card.htm&release=264.0.0&type=5 "For the managed package runtime, to generate tracking data, you must interact with the example Omniscript and Flexcard as if you were an end user.") to generate tracking data. # Create a List Merge Example with Dynamic Output Fields The final Integration Procedure is a modified version of the previous example. It uses **Dynamic Output Fields** to eliminate the duplicate `FN` and `LN` JSON nodes from the output. If you’re using the designer on a managed package, you can download a data pack of this example from [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m000000nWqS/jG19Sgy5h1tcDvTBx3PWSIIg2GmdxH2xLcQAsGW3FBk). 1. [Create an Advanced List Merge Example](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_advanced_list_merge_example_53889.htm&release=264.0.0&type=5 "The next Integration Procedure is a modified version of the previous example. Instead of matching list items using Id fields, it uses the Advanced Merge feature to match first and last names."). 2. In the List Action, give the **Dynamic Output Fields** setting a value of `include`. 3. Go to the Preview tab. 4. Click **Edit as JSON**. If you’re using the designer on a managed package, click **Preview**, and then click **Edit as JSON**. 5. Click **Add New Key-Value Pair**. Enter `include` as the key, and `birthdate,street,state,city,lastName,firstName,id` as the value. Only commas, and not spaces, separate the node names. 6. Click **Execute**. The output is similar to this example: ``` { "contactMerge": [ { "birthdate": "1975-10-03", "street": "300 Broadway", "state": "FL", "city": "Orlando", "lastName": "Jones", "id": "0036100001E5xrWAAR", "firstName": "Cathy" }, { "birthdate": "1976-10-04", "street": "400 Washington Blvd", "state": "AZ", "city": "Phoenix", "lastName": "Jones", "id": "0036100001E5xrvAAB", "firstName": "Doug" }, { "birthdate": "1973-10-01", "street": "100 Main Street", "state": "CA", "city": "San Francisco", "lastName": "Smith", "id": "0036100001E5xqnAAB", "firstName": "Albert" }, { "birthdate": "1974-10-02", "street": "200 Second Street", "state": "OR", "city": "Portland", "lastName": "Smith", "id": "0036100001E5xr2AAB", "firstName": "Ben" } ] } ``` # Create a List Merge Example with Dynamic Output Fields (Managed Package) For the managed package runtime, the final Integration Procedure is a modified version of the previous example. It uses **Dynamic Output Fields** to eliminate the duplicate `FN` and `LN` JSON nodes from the output. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). Importing Omnistudio for Managed Packages data packs into Omnistudio orgs is supported, and conversion is automatic. However, importing Omnistudio DataPacks into Omnistudio for Managed Packages orgs isn't supported. 1. [Create an Advanced List Merge Example](https://help.salesforce.com/s/articleView?id=xcloud.os_create_an_advanced_list_merge_example.htm&release=264.0.0&type=5 "For the managed package runtime, the next Integration Procedure is a modified version of the previous example. Instead of matching list items using Id fields, it uses the Advanced Merge feature to match first and last names."). 2. In the List Merge Action, give the **Dynamic Output Fields** setting a value of `include`. 3. On the Preview tab, in the Input Parameters pane, click **Add New Key/Value Pair**. Enter `include` as the **Key** and `birthdate,street,state,city,lastName,firstName,id` as the **Value**. Note that only commas, and not spaces, separate the node names. 4. Click **Execute**. The output should look something like this: ``` { "contactMerge": [ { "birthdate": "1975-10-03", "street": "300 Broadway", "state": "FL", "city": "Orlando", "lastName": "Jones", "id": "0036100001E5xrWAAR", "firstName": "Cathy" }, { "birthdate": "1976-10-04", "street": "400 Washington Blvd", "state": "AZ", "city": "Phoenix", "lastName": "Jones", "id": "0036100001E5xrvAAB", "firstName": "Doug" }, { "birthdate": "1973-10-01", "street": "100 Main Street", "state": "CA", "city": "San Francisco", "lastName": "Smith", "id": "0036100001E5xqnAAB", "firstName": "Albert" }, { "birthdate": "1974-10-02", "street": "200 Second Street", "state": "OR", "city": "Portland", "lastName": "Smith", "id": "0036100001E5xr2AAB", "firstName": "Ben" } ] } ``` # Create a List View To view specific records for an object, create a custom list view. For example, create a list view of accounts in your state, leads with a specific lead source, or opportunities above a particular amount. You can also create views of contacts, leads, users, or cases to use for mass email recipient lists. - **[Create a Custom List View in Lightning Experience](https://help.salesforce.com/s/articleView?id=xcloud.customviews_lex.htm&release=264.0.0&type=5)** To see an infinitely scrollable list of records that meet your filter criteria, create a custom list view. You can start from scratch or you can clone an existing list view and then customize it with filters. - **[Create a Custom List View in Salesforce Classic](https://help.salesforce.com/s/articleView?id=xcloud.customviews.htm&release=264.0.0&type=5)** To see a specific set of contacts, documents, or other object records, create a custom list view. # Create a List View Chart in Lightning Experience Create a chart to visualize list view data. There are three types of charts: vertical bar, horizontal bar, and donut. For any list view chart, you can change the data display to another type, if desired. When you create a list view chart for an object, such as Opportunities or Leads, the chart is associated with the object. The chart is available for any list view that you have permission to see for that object, except the Recently Viewed list. ### Required Editions
Available in: Lightning Experience
Available in: Essentials, Group, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To create list view charts: Read on the type of record included in the list AND Create and Customize List Views
To see list view charts: Read on the type of record included in the list
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_note.png) Note These steps work in Lightning Experience. If you see the App Launcher icon (![App Launcher icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/app_launcher_icon.png)) on the left side of the navigation bar at the top of your screen, you're in Lightning Experience. If not, you're in Salesforce Classic. 1. On an object home page, select a list view with data you want to visualize. 2. Click ![list view charts icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/chart_120.png). 3. In the Charts panel that appears, click ![List view controls](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/resources-global/_corporate/images/gear.png). 4. Select **New Chart**. A dialog box appears. 5. Enter a chart name. 6. Select a chart type: vertical bar, horizontal bar, or donut. 7. Select the aggregate type, aggregate field, and grouping field. The aggregate type specifies how the field data is calculated: by sum, count, or average. The aggregate field specifies the type of data to calculate. The grouping field labels the chart segments. 8. To view your chart, click **Save**. Chart data isn’t automatically refreshed when you change list views. To see the latest chart data, manually refresh the list view with ![list view refresh icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/basics/images/refresh_120.png). ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-basics-264-0-0-production-enus/d8bf6981-f8ef-4f16-bfbd-c42ed32044eb/images/icon_example.png) Example Your sales team wants to compare accounts by number of employees to focus prospecting efforts on large corporations. One of the reps creates a horizontal bar chart by selecting **Sum** as the aggregate type, **Employees** as the aggregate field, and **Account Name** as the grouping field. The chart shows the number of employees at each account by account name. A chart shows up to seven unique grouping fields. If your chart has more than seven grouping fields, the chart shows each of the top six grouping fields by name and combines all other grouping fields into one category called Other. # Create a Local External Client App with Metadata API After you create a Salesforce DX project, configure the project to create a local external client app. 1. Update your project configuration file called sfdx-project.json by adding your domain URL to the `sfdcLoginUrl` parameter. To find your My Domain URL, enter My Domain in the Quick Find box then click **My Domain**. ```markup { "packageDirectories": [ { "path": "force-app", "default": true } ], "name": "myEca", "namespace": "", "sfdcLoginUrl": "https://", "sourceApiVersion": "61.0" } ``` 2. Add these parameters to the [scratch org definition file](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_scratch_orgs_def_file.htm) called project-scratch-def.json. - In the `features` field, add `ExternalClientApps` and `ExtlClntAppSecretExposeCtl`. - In the `settings` field, add the `externalClientAppSettings` and set the `enableExternalClientApps` setting to `true`. ```markup "features": ["EnableSetPasswordInApi", "ExternalClientApps", "ExtlClntAppSecretExposeCtl"], "settings": { "externalClientAppSettings": { "enableExternalClientApps": true }, ``` 3. [Create a package.xml manifest file](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/file_based_zip_file.htm) in the project directory that references this type. - `ExternalClientApplication` ```markup * ExternalClientApplication 61.0 ``` 4. In the /force-app/main/default/ directory, create a directory called externalClientApps. 5. In the externalClientApps directory, create a file called \[ECAPP\_NAME\].eca-meta.xml. For example, myeca.eca-meta.xml. This file is the header file, which is used to define the external client app. 6. Configure the \[ECAPP\_NAME\].eca-meta.xml header file. Make sure that the distribution state is set to local, and configure the file with this information. | Field | Description | | --- | --- | | contactEmail | This field is required. Type: String. The email address that Salesforce uses to contact you or your support team. | | description | This field is optional. Type: String. An optional description for your app. | | distributionState | This field is required. Type: String. The distribution state of an external client app. Values can be `Local` or `Packaged`. A local external client app doesn’t operate outside an org context. Choosing the `Packaged` state makes the external client app 2GP packageable. | | iconUrl | This field is optional. Type: String. Reserved for future use. | | infoUrl | This field is optional. Type: String. An optional URL for a web page with more information about your app. | | label | This field is required. Type: String. The name of the app. | | logoUrl | This field is optional. Type: String. The logo appears with the app’s entry in the list of apps and on the consent page that the user sees when authenticating. | | isProtected | This field is optional. Type: Boolean. The concept of a Protected Component comes from packaging, and package developers can use this flag to control the visibility and editability of their components in subscriber orgs. | | orgScopedExternalApp | This field is generated during initial deployment. After it’s created, this field is required. Type: String. External client app unique identifier for the app and the org. Auto-generated during first deployment. Expected value: \[Organization\_ID\]:\[External Client App Name\]. | This example shows an External Client App header file. ```markup johndoe@example.com Test external client app Local false ``` - **[Deploy a Local External Client App](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app.htm&release=264.0.0&type=5)** All external client apps are created using deploy and retrieve operations in the Metadata API. After configuring the package.xml file, deploy the external client app. - **[OAuth Plugin Enablement with Metadata API](https://help.salesforce.com/s/articleView?id=xcloud.meta_enable_oauth_plugin.htm&release=264.0.0&type=5)** In an external client app, the package.xml manifest file references the settings and policies files for each plugin. To enable external client app plugins, configure the settings files and reference the plugin in the manifest file. - **[Deploy the External Client App OAuth Plugin](https://help.salesforce.com/s/articleView?id=xcloud.deploy_external_client_app_oauth_plugin.htm&release=264.0.0&type=5)** After configuring the OAuth settings file and the global OAuth settings file, deploy the changes to update the external client app. - **[Verify OAuth Policy and Settings Generation](https://help.salesforce.com/s/articleView?id=xcloud.verify_oauth_policy_settings_field_generation.htm&release=264.0.0&type=5)** When the OAuth Plugin is deployed, several external client app components are generated. There are a few places you can check to verify if the deployment was successful. - **[Complete the OAuth Flow](https://help.salesforce.com/s/articleView?id=xcloud.complete_oauth_flow.htm&release=264.0.0&type=5)** To verify that the external client app is operating correctly, perform an Authorize Endpoint request and a Token Endpoint request. The Token Endpoint request produces an API Access Token that can be used to access any Salesforce API. - **[Mobile, Push Notification, or Notification Plugin Enablement with Metadata API (Beta)](https://help.salesforce.com/s/articleView?id=xcloud.meta_enable_mobile_notifications_push_plugins.htm&release=264.0.0&type=5)** Use Metadata API to configure your external client app with mobile app settings, push notifications, or notification subscriptions. # Create a Login Flow with Flow Builder Use the point-and-click Flow Builder to create a login flow declaratively. With this tool, you create a screen flow—a collection of screens and connectors that step users through a business process when they log in. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Essentials, Professional, Enterprise, Performance, Unlimited, and Developer Editions
User Permissions Needed
To open, edit, or create a flow in Flow Builder: Manage Flow
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note You can also use Visualforce to create a Visualforce Page login flow in code. Customize the default login flow to meet your needs. - Supply your own logo - Change the colors of the background and login button - Display content on the right frame of the page Follow these steps to build a login flow. 1. [Create a screen flow](https://help.salesforce.com/articleView?id=flow_build.htm&language=en_US). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note Make sure that you save and activate the flow. 2. From Setup, designate the flow as a login flow, and associate the flow with user profiles. See [Set Up a Login Flow and Connect to Profiles](https://help.salesforce.com/s/articleView?id=xcloud.security_login_flow_associate.htm&release=264.0.0&type=5 "After you create a flow using Flow Builder or Visualforce, designate it as a login flow and associate it with a user profile. When a user with an associated profile logs in, they go through the login flow."). # Create a Loop Block Example That Adds Values to List Items Using Conditions (Managed Package) For the managed package runtime, an Integration Procedure adds a dynamic value to each item in a list using conditions. Although dynamic in the list, the values are hard-coded in the Integration Procedure. Use this approach if you know or care about a specific set of possible values. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The input looks like this, with `uservalue` values initially set to `null`. The `uservalue` nodes don't have to be included in the input, but it's easier to compare input to output if they are. ``` { "Labels": { "OfferType": "Remediation", "BillingCycle": "Immediate" }, "productAttributes": { "records": [ { "record": { "uservalue": null, "label": "BillingCycle" } }, { "record": { "uservalue": null, "label": "OfferType" } } ] } } ``` The output looks like this, with `uservalue` values set according to the `label` value in each list item. ``` { "Labels": { "OfferType": "Remediation", "BillingCycle": "Immediate" }, "productAttributes": { "records": [ { "record": { "uservalue": "Immediate", "label": "BillingCycle" } }, { "record": { "uservalue": "Remediation", "label": "OfferType" } } ] } } ``` The Integration Procedure has these components: - A Loop Block, named LoopBlock1 - A Set Values component within the Loop Block, named SetValues1 - A second Set Values component within the Loop Block, named SetValues3 - A Set Values component after the Loop Block, named SetValues2 - A Response Action, named ResponseAction1 The Structure panel looks like this: ![The contents of the Structure panel are listed in the preceding text.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/ip_value_to_list_item_conditions.png) To build this Integration Procedure: 1. From the Omnistudio Integration Procedures tab, click **New**. 2. Provide a unique **Integration Procedure Name**, a **Type** that can be a category, and a unique **SubType**, then click **Save**. You only have to save this one time. 3. Drag a Loop Block into the Structure panel and give it the following settings:

Property

Description

Loop List

Set this value to productAttributes:records.

Additional Loop Output

Click Add Key/Value Pair. Set the key to productAttributes and the value to %productAttributes%.

4. Drag a Set Values component into the Loop Block and give it the following settings:

Property

Description

Element Name

Name this element IfOfferType.

Element Value Map, Element Name

Click Add New Value and assign an Element Name of LabelValue.

Element Value Map, Value

Assign a Value of =%Labels:OfferType%.

Response JSON Path

Expand Response Transformations and set this value to LabelValue.

Response JSON Node

Set this value to productAttributes:records:record:uservalue.

Execution Conditional Formula

Set this value to productAttributes:records:record:label == "OfferType".

5. Drag a second Set Values component into the Loop Block and give it the following settings:

Property

Description

Element Name

Name this element IfBillingCycle.

Element Value Map, Element Name

Click Add New Value and assign an Element Name of LabelValue2.

Element Value Map, Value

Assign a Value of =%Labels:BillingCycle%.

Response JSON Path

Expand Response Transformations and set this value to LabelValue2.

Response JSON Node

Set this value to productAttributes:records:record:uservalue.

Execution Conditional Formula

Set this value to productAttributes:records:record:label == "BillingCycle".

6. Drag a Set Values component below the Loop Block and give it the following settings:

Property

Description

Element Name

Name this element AssembleOutput.

Element Value Map, Element Name

Click Add New Value and assign an Element Name of productAttributes.

Element Value Map, Value

Assign a Value of %LoopBlock1:productAttributes%.

Element Value Map, Element Name

Click Add New Value again and assign an Element Name of Labels.

Element Value Map, Value

Assign a Value of %Labels%.

7. Drag a Response Action below the last Set Values component and set its **Send JSON Path** property to `AssembleOutput`. 8. Go to the Preview tab and click **Edit as JSON**. 9. Copy this JSON data and paste it into the Input Parameters panel: ``` { "Labels": { "OfferType": "Remediation", "BillingCycle": "Immediate" }, "productAttributes": { "records": [ { "record": { "uservalue": null, "label": "BillingCycle" } }, { "record": { "uservalue": null, "label": "OfferType" } } ] } } ``` 10. Click **Execute**. If you built the Integration Procedure correctly, the output looks something like this: ``` { "Labels": { "OfferType": "Remediation", "BillingCycle": "Immediate" }, "productAttributes": { "records": [ { "record": { "uservalue": "Immediate", "label": "BillingCycle" } }, { "record": { "uservalue": "Remediation", "label": "OfferType" } } ] } } ``` To correct a component, click it in the Structure panel and edit its properties. # Create a Loop Block Example That Adds Values to List Items Using VALUELOOKUP (Managed Package) For the managed package runtime, an Integration Procedure adds a dynamic value to each item in a list using the VALUELOOKUP function. The values aren't hard-coded in the Integration Procedure. Use this approach if you don't know the set of possible values in the input. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). The input looks like this, with `uservalue` values initially set to `null`. The `uservalue` nodes don't have to be included in the input, but it's easier to compare input to output if they are. ``` { "Labels": { "OfferType": "Remediation", "BillingCycle": "Immediate" }, "productAttributes": { "records": [ { "record": { "uservalue": null, "label": "BillingCycle" } }, { "record": { "uservalue": null, "label": "OfferType" } } ] } } ``` The output looks like this, with `uservalue` values set according to the `label` value in each list item. ``` { "Labels": { "OfferType": "Remediation", "BillingCycle": "Immediate" }, "productAttributes": { "records": [ { "record": { "uservalue": "Immediate", "label": "BillingCycle" } }, { "record": { "uservalue": "Remediation", "label": "OfferType" } } ] } } ``` The Integration Procedure has these components: - A Loop Block, named LoopBlock1 - A Set Values component within the Loop Block, named SetValues1 - A Set Values component after the Loop Block, named SetValues2 - A Response Action, named ResponseAction1 The Structure panel looks like this: ![The contents of the Structure panel are listed in the preceding text.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/ip_value_to_list_item_valuelookup.png) To build this Integration Procedure: 1. From the Omnistudio Integration Procedures tab, click **New**. 2. Provide a unique **Integration Procedure Name**, a **Type** that can be a category, and a unique **SubType**, then click **Save**. You only have to save this one time. 3. Drag a Loop Block into the Structure panel and give it the following settings:

Property

Description

Loop List

Set this value to productAttributes:records.

Additional Loop Output

Click Add Key/Value Pair. Set the key to productAttributes and the value to %productAttributes%.

4. Drag a Set Values component into the Loop Block and give it the following settings:

Property

Description

Element Name

Name this element GetValueForListItem.

Element Value Map, Element Name

Click Add New Value and assign an Element Name of LabelValue.

Element Value Map, Value

Assign the following Value:

=VALUELOOKUP(Labels, productAttributes:records:record:label)

This formula: Looks under Labels for the node with the name specified in the label value of the current list item, then returns the value of that node.

Response JSON Path

Expand Response Transformations and set this value to LabelValue.

Response JSON Node

Set this value to productAttributes:records:record:uservalue.

5. Drag a Set Values component below the Loop Block and give it the following settings:

Property

Description

Element Name

Name this element AssembleOutput.

Element Value Map, Element Name

Click Add New Value and assign an Element Name of productAttributes.

Element Value Map, Value

Assign a Value of %LoopBlock1:productAttributes%.

Element Value Map, Element Name

Click Add New Value again and assign an Element Name of Labels.

Element Value Map, Value

Assign a Value of %Labels%.

6. Drag a Response Action below the last Set Values component and set its **Send JSON Path** property to `AssembleOutput`. 7. Go to the Preview tab and click **Edit as JSON**. 8. Copy this JSON data and paste it into the Input Parameters panel: ``` { "Labels": { "OfferType": "Remediation", "BillingCycle": "Immediate" }, "productAttributes": { "records": [ { "record": { "uservalue": null, "label": "BillingCycle" } }, { "record": { "uservalue": null, "label": "OfferType" } } ] } } ``` 9. Click **Execute**. If you built the Integration Procedure correctly, the output looks something like this: ``` { "Labels": { "OfferType": "Remediation", "BillingCycle": "Immediate" }, "productAttributes": { "records": [ { "record": { "uservalue": "Immediate", "label": "BillingCycle" } }, { "record": { "uservalue": "Remediation", "label": "OfferType" } } ] } } ``` To correct a component, click it in the Structure panel and edit its properties. # Create a Loop Block Example that Concatenates List Items (Managed Package) For the managed package runtime, an Integration Procedure concatenates the values of items in a list. In this case, it creates an underscore-separated String of QuoteLineItem Ids. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To download a data pack of this example for Omnistudio for Managed Packages, click [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m000000Mh9A/PTVlxAO08wnE8RFLi2L0EqWHcliwZnCfkYpTb3MeMdw). To watch a video that shows how to create this Integration Procedure, click [here](https://salesforce.vidyard.com/watch/tRakXmYixa53N6euv4Y98q). The input looks like this: ``` { "QuoteLineItems": { "Ids": [ { "Id": "0QL3h000000VF04GAG" }, { "Id": "0QL3h000000VEvlGAG" } ] } } ``` The output looks like this: ``` { "Output": "0QL3h000000VF04GAG_0QL3h000000VEvlGAG" } ``` The Integration Procedure has these components: - A Set Values component before the Loop Block, named InitString - A Loop Block, named LoopBlock1 - A Set Values component within the Loop Block, named ConcatListItem - A Set Values component after the Loop Block, named TrimUnderscore - A Response Action, named ResponseAction1 The Structure panel looks like this: ![The contents of the Structure panel are listed in the preceding text.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/concatlist.png) To build this Integration Procedure: 1. From the Vlocity Integration Procedures tab, click **New**. 2. Provide a unique **Integration Procedure Name**, a **Type** that can be a category, and a unique **SubType**, then click **Save**. You only have to save this one time. 3. Drag a Set Values component into the Structure panel and give it the following settings:

Property

Description

Element Name

Set this value to InitString.

Element Value Map, Element Name

Click Add New Value and assign an Element Name of Blank.

Element Value Map, Value

Leave this property blank.

Response JSON Path

Expand Response Transformations and set this value to Blank.

Response JSON Node

Set this value to ConcatString.

This component creates an initially empty top-level JSON node named `ConcatString`. A top-level node isn't tied to a particular step. This allows any step to set its value. It also allows any step to access its value using the same path, regardless of which step set its value. 4. Drag a Loop Block into the Structure panel and give it a **Loop List** value of `QuoteLineItems:Ids`. 5. Drag a Set Values component into the Loop Block and give it the following settings:

Property

Description

Element Name

Set this value to ConcatListItem.

Element Value Map, Element Name

Click Add New Value and assign an Element Name of Concat.

Element Value Map, Value

Assign the following Value:

=%ConcatString% + "_" + %QuoteLineItems:Ids:Id%

This formula concatenates the top-level ConcatString node and the current list value.

Response JSON Path

Expand Response Transformations and set this value to Concat.

Response JSON Node

Set this value to ConcatString.

In combination with the Value formula, this adds the current list value to the top-level ConcatString node.

6. Drag a Set Values component below the Loop Block and give it the following settings:

Property

Description

Element Name

Set this value to TrimUnderscore.

Element Value Map, Element Name

Click Add New Value and assign an Element Name of Trim.

Element Value Map, Value

Assign a Value of =SUBSTRING(ConcatString,1).

7. Drag a Response Action below the last Set Values component and give it the following settings:

Property

Description

Send JSON Path

Set this value to TrimUnderscore:Trim.

Send JSON Node

Set this value to Output.

8. Go to the Preview tab and click **Edit as JSON**. 9. Copy this JSON data and paste it into the Input Parameters panel: ``` { "QuoteLineItems": { "Ids": [ { "Id": "0QL3h000000VF04GAG" }, { "Id": "0QL3h000000VEvlGAG" } ] } } ``` 10. Click **Execute**. If you built the Integration Procedure correctly, the output looks something like this: ``` { "Output": "0QL3h000000VF04GAG_0QL3h000000VEvlGAG" } ``` To correct a component, click it in the Structure panel and edit its properties. # Create a Loop Block Example that Creates Contacts (Managed Package) For the managed package runtime, an Integration Procedure accepts an Account Id and an array of first and last names and creates new Contacts for the specified Account. It also includes a step that deletes these Contacts, which you can optionally disable. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To download a data pack of this example for Omnistudio for Managed Packages, click [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m0000005uJJ/S9Hcylna8pOW1bomKVdBqNaFACq2L9qjsv9GawF6MQo). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_note.png) Note Using an Omnistudio Data Mapper Post action in a Loop Block can sometimes reach the limit of 150 DML statements. See [Execution Governors and Limits](https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_gov_limits.htm). The Integration Procedure has these components: - An optional Set Values component, named SetValues1 - A Loop Block component, named LoopBlock1 - A Data Mapper Post Action component within the Loop Block, named CreateContact - A Data Mapper Load that creates a new Contact for an existing Account, named NewContactForAccount - A Delete Action component within the Loop Block, named DeleteContact - A Response Action, named ResponseAction1 The Structure panel looks like this: ![The contents of the Structure panel are listed in the preceding text.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/iploopblock2.png) To build this Integration Procedure: 1. From the Vlocity Integration Procedures tab, click **New**. 2. Provide a unique **Integration Procedure Name**, a **Type** that can be a category, and a unique **SubType**, then click **Save**. You only have to save this one time. 3. Drag a Loop Block into the Structure panel and give it the following settings:

Property

Description

Loop List

Set this value to Contacts.

Additional Loop Output

Set the Key to CreateContact and the Value to %CreateContact% to return all iterations of data generated by the Data Mapper Post Action component.

4. To create the Data Mapper Load that the Data Mapper Post Action calls, create the second example in [Omnistudio Data Mapper Load Examples (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_load_examples.htm&release=264.0.0&type=5 "For the managed package runtime, Data Mapper Load examples demonstrate formulas and object relationships, and working with attributes.") and name it NewContactForAccount. 5. Drag a Data Mapper Post Action component within the Loop Block and give it the following settings:

Property

Description

Name

Set this value to CreateContact.

Data Mapper Interface

Set this value to NewContactForAccount.

Additional Input

Set the first Key to AccountId and its value to %AccountId%.

Set the second Key to Name and its value to %Contacts:Name%.

6. Drag a Delete Action component within the Loop Block and give it the following settings:

Property

Description

Name

Set this value to DeleteContact.

Delete SObject:

Type

Set this value to Contact.

Delete SObject:

Path To Id

Set this value to %CreateContact:Contact_1:Id%.

7. Drag a Response Action below the Loop Block and check **Return Full Data JSON**. 8. Go to the Preview tab and click **Edit as JSON**. 9. Copy this JSON data and paste it into the Input Parameters panel, substituting names of your choice: ``` { "AccountId": "0016100001BKL4uAAH", "Contacts": [ { "Name": { "First": "John", "Last": "Doe" } }, { "Name": { "First": "June", "Last": "Doe" } } ] } ``` 10. Click **Execute**. If you built the Integration Procedure correctly, the output looks something like this: ``` {   "response": {},   "ResponseAction1Status": true,   "LoopBlock1": [     {       "CreateContact": {         "ActualTime": 793,         "CpuTime": 537,         "Contact_2": [           {             "UpsertSuccess": true,             "Id": "0034N00001qh5hVQAQ",             "AccountId": "0016100001BKL4uAAH",             "LastName": "Doe",             "FirstName": "John"           }         ],         "Account_1": [           {             "UpsertSuccess": true,             "Id": "0016100001BKL4uAAH"           }         ],         "error": "OK",         "responseType": "SObject"       },       "DeleteContactStatus": true,       "CreateContactStatus": true,       "LoopBlockIterationStatus": true,       "LoopBlockIterationIndex": 1     },     {       "CreateContact": {         "ActualTime": 1262,         "CpuTime": 799,         "Contact_2": [           {             "UpsertSuccess": true,             "Id": "0034N00001qh5hWQAQ",             "AccountId": "0016100001BKL4uAAH",             "LastName": "Doe",             "FirstName": "June"           }         ],         "Account_1": [           {             "UpsertSuccess": true,             "Id": "0016100001BKL4uAAH"           }         ],         "error": "OK",         "responseType": "SObject"       },       "DeleteContactStatus": true,       "CreateContactStatus": true,       "LoopBlockIterationStatus": true,       "LoopBlockIterationIndex": 2     }   ],   "LoopBlock1Status": true,   "SetValues1": {     "Contacts": [       {         "Name": {           "Last": "Doe",           "First": "John"         }       },       {         "Name": {           "Last": "Doe",           "First": "June"         }       }     ],     "AccountId": "0016100001BKL4uAAH"   },   "SetValues1Status": true,   "options": {     "chainable": false   } } ``` To correct a component, click it in the Structure panel and edit its properties. # Create a Loop Block Example that Retrieves Names (Managed Package) For the managed package runtime, an Integration Procedure accepts last names and returns the full names of all Contacts having the specified last names. ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). To download a data pack of this example for Omnistudio for Managed Packages, click [here](https://volt.my.salesforce.com/sfc/p/o0000000IKm8/a/3m0000005uJE/gdHEmPzKaa_jiA3obrA4gVXTJpKfg8LCKS207gp2WfY). The Integration Procedure has these components: - An optional Set Values component, named SetValues1 - A Loop Block component, named LoopBlock1 - An Omnistudio Data Mapper Extract Action component within the Loop Block, named DRExtractAction1 - A Data Mapper Extract that uses the LIKE operator to find names similar to those in the input, named ExtractFirstNames - A Response Action, named ResponseAction1 The Structure panel looks like this: ![The contents of the Structure panel are listed in the preceding text.](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/omnistudio_for_managed_packages/images/iploopblock1.png) To build this Integration Procedure: 1. From the Vlocity Integration Procedures tab, click **New**. 2. Provide a unique **Integration Procedure Name**, a **Type** that can be a category, and a unique **SubType**, then click **Save**. You only have to save this one time. 3. Drag a Loop Block into the Structure panel and give it the following settings:

Property

Description

Loop List

Set this value to names.

Additional Loop Output

Set the Key to DRExtractAction1 and the Value to %DRExtractAction1% to return all iterations of data generated by the Data Mapper Extract Action component.

4. Create the Data Mapper Extract that the Data Mapper Extract Action calls and give it the following settings:

Tab

Settings

Element Name

DRExtractAction1

Data Mapper Interface Name

ExtractFirstName

Extract

A Contact extract step set to Contact LastName LIKE Name

Output

A mapping from Contact:FirstName to Name:First

A mapping from Contact:LastName to Name:Last

If you aren't sure how to create a Data Mapper Extract, see the examples in [Omnistudio Data Mapper Extract Examples (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_dataraptor_extract_examples.htm&release=264.0.0&type=5 "For the managed package runtime, Data Mapper Extract examples demonstrate object relationships, paging with data values, paging with offsets, working with attributes, and relationship notation."). 5. Drag a Data Mapper Extract Action component within the Loop Block and give it the following settings:

Property

Description

Data Mapper Interface

Set this value to ExtractFirstName.

Input Parameters:

Data Source

Set this value to names:Name.

Input Parameters:

Filter Value

Set this value to Name.

6. Drag a Response Action below the Loop Block and check **Return Full Data JSON**. 7. Go to the Preview tab and click **Edit as JSON**. 8. Copy this JSON data and paste it into the Input Parameters panel, substituting last names of your choice: ``` { "names": [ { "Name": "Miller" }, { "Name": "Torres" } ] } ``` 9. Click **Execute**. If you built the Integration Procedure correctly, the output looks something like this: ``` {   "response": {},   "ResponseAction1Status": true,   "LoopBlock1": [     {       "DRExtractAction1": {         "Name": [           {             "Last": "Miller",             "First": “Tom”           },           {             "Last": "Miller",             "First": “Sally”           }         ]       },       "DRExtractAction1Status": true,       "LoopBlockIterationStatus": true,       "LoopBlockIterationIndex": 1     },     {       "DRExtractAction1": {         "Name": [           {             "Last": "Torres",             "First": “Maria”           },           {             "Last": "Torres",             "First": “Ricardo”           }         ]       },       "DRExtractAction1Status": true,       "LoopBlockIterationStatus": true,       "LoopBlockIterationIndex": 2     }   ],   "LoopBlock1Status": true,   "options": {     "chainable": false   },   "names": [     {       "Name": "Miller"     },     {       "Name": "Torres"     }   ] } ``` To correct a component, click it in the Structure panel and edit its properties. # Create a Loyalty Management Trial Org Sign up for a Loyalty Management trial org, and get a firsthand experience of creating and managing a loyalty program. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note Trial orgs are intended for proof of concept and guided self-exploration. Trial orgs expire in 30 days. 1. Go to the sign up page of the trail org that you want to create. - [Loyalty Management Learning Trial Org](https://www.salesforce.com/form/signup/loyalty-management-trial/)—This fully configured org includes rich sample data and lets you see all the Loyalty Management capabilities in action. Use these orgs to see what a comprehensive implementation looks like. - [Loyalty Management Base Trial Org](https://www.salesforce.com/form/industries/common-layer/loyalty-management-base-trial/)—This unconfigured org is a blank slate with only the necessary licenses and permissions. Use these orgs for quick proof of concept projects or general testing. - [Loyalty Management Pre-Release Trial Org](https://www.salesforce.com/form/signup/loyalty-prerelease-trial/)—This org provides a sneak peek at upcoming release features. You can create these orgs only during sandbox preview windows. If the page doesn’t include a sign-up form, the preview window is closed. Bookmark the [Loyalty Management Developer Free Trials page](https://developer.salesforce.com/free-trials/comparison/loyalty-management) to easily find the sign up pages for the Loyalty Management trial orgs. 2. Enter your details. 3. Read and agree to the main service agreement. 4. Click **Submit**. After your org is created, look for an email with login details. Your trial org includes Loyalty Management, Experience Cloud, and Tableau CRM for Loyalty Management. # Create a Loyalty Program Create a B2B or a B2C loyalty program to enhance the business value for loyal customers and channel partners. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions that have Loyalty Management enabled.
1. In your Salesforce org, from the App Launcher, find, and select **Loyalty Management**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The Loyalty Management app isn’t available on mobile devices. A loyalty program and its related records can be managed from a desktop. 2. On the Loyalty Programs page, click **New**. 3. Enter a name and description for your loyalty program. The name must contain at least one alphanumeric character and no special characters. 4. To make this loyalty program the primary one, select **Primary**. 5. Enter escrow period for the loyalty program. The escrow period of a loyalty program is applicable to all the currencies that can escrow points. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip Select **Has Escrow** on the Loyalty Program Currency records that escrows points. 6. Save your changes. # Create a Loyalty Program by Using Simplified Setup Configure and activate your loyalty program in a few easy steps. The simplified setup enables program managers to create a loyalty program, and add redeemable currencies, define tier groups and tiers, map benefits, and track eligible activities. ![Flowchart to configure and activate your loyalty program using simplified setup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/loyalty_management/images/loyalty_simplified_setup_flowchart.png) Create and configure a loyalty program with these steps. ## Create a Loyalty Program Create a loyalty program by entering a few basic details. Use a program name that represents your brand and resonates with members. ## Configure Redeemable Points Configure nonqualifying points that the members can earn and redeem for rewards. Select an expiration model and configure other expiration details that suit your program. ## Define Tier Groups and Tiers Create tier groups, and configure the tier model and the expiration details. Add a qualifying currency to measure the member's engagement level. Add tiers to the tier groups and set the minimum points required to attain the tiers. ## Map Benefits Create benefit types and map benefits based on tier levels. Assign priorities to rank the benefits. ## Track Activities In the final step, configure accrual and redemption activities so that members can earn and spend points. You can view the activities that already exist in the program and accordingly add new activities. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note You can’t delete accrual and redemption activities. # Create a Loyalty Program Currency Create qualifying or non-qualifying currencies associated with a program. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Unlimited, and Developer Editions that have Loyalty Management enabled.
User Permissions Needed
To create a loyalty program currency:

Loyalty Management permission set

AND

Manage Loyalty Programs permission set

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note Salesforce UI fields and rule actions show member points rounded half up to 4 decimal places. This reduces cumulative rounding discrepancies to maintain high precision. For more information on the list of fields and rule actions, see [Track Loyalty Points with Improved Precision](https://help.salesforce.com/s/articleView?id=release-notes.rn_loyalty_track_points_with_improved_precision.htm&release=262&type=5&language=en_US). 1. On the Loyalty Programs tab, select your loyalty program. 2. On the **Setup** tab, under Loyalty Program Currencies, click **New**. 3. Enter a name for the currency. If you want to use currencies as resources in conditions of loyalty program process rules, make sure that currency names don’t contain special characters. 4. Select one of these as the currency type. - If you want to measure the level of engagement of a member within a loyalty program and assess a member's tier for upgrade or downgrade, select **Qualifying**. - If you want the members to earn points that can be redeemed, select **Non-Qualifying**. 5. To activate the currency, select **Active**. 6. If you want to make this program currency the primary currency, select **Primary**. If your loyalty program has multiple currencies, select a currency as primary to ensure that automated processes can identify the currency in which to credit or debit points. 7. If you want to escrow points for this currency, select **Has Escrow**. If you select Has Escrow, points earned by a member for this currency stay in escrow and roll over to the member’s points balance only when the escrow period is over. The escrow period for all currencies in a loyalty program is the same and is specified in the associated Loyalty Program record. 8. To allow members to have a negative balance for the currency, select **Allow Negative Balance**. You can select this checkbox only if Has Escrow isn’t selected. 9. To enable currency tracing, see [Enable Tracing and Create Currency Subtypes to Control Liability](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_create_currency_subtypes_control_liability.htm&release=264.0.0&type=5 "After you enable traceability settings, for each currency for which you want to create trace records, enable ledger tracing. If necessary, create currency subtypes to categorize points. Use these subtypes to specify which points are accrued from a transaction or a promotion, define the consumption order for redemptions, and restrict usage based on transaction types."). 10. For Qualifying Currency, select a loyalty tier group. 11. For Non-Qualifying Currency: - For Expiration Model: - If you want the points to expire on a specific date of the year, select **Fixed**. - If you want the points to expire only when the member becomes inactive in the program, select **Activity**. 
If the member regularly performs activities, such as accruals, redemptions, or transactions, the member is considered active in the program. Determine a member's inactivity by using Last Activity Date in the member record. - If you select the fixed expiration model, specify the Extend Expiration type: - If you don’t want to extend the expiration date, select **No Extension**. - If you want to extend the expiration date to the last day of the month, select **Till End of Month**. For example, if a member attains Gold tier status on January 10, 2021, and the tier period is set as one year, then the Gold tier expires on January 10, 2022. By enabling Extend Expiration, the member can retain the Gold tier until the last day of the month, or in this case, January 31, 2022. - Enter the Expiration Interval, and then select a value for the Expiration Interval Unit. - If you want to capture the cost per point to calculate the liability of your program or promotion, enter the cost per unit. 12. Save your changes. # Create a Loyalty Program Member You can create members who are enrolled in a loyalty program. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
1. In the Loyalty Programs tab, select your loyalty program. 2. On the Setup, select Loyalty Program Members, and click **New**. 3. Select a type for the member. - If your member belongs to a business, select **Corporate**. - If your member doesn’t belong to a business, select **Individual**. 4. Select a Contact record or an Account record. - For an Individual type member, select a contact or a person account in the Contact field. - For a Corporate member, select a business acount in the Account field. 5. If your member is corporate and associated with an account, select **Account**. 6. Enter the membership number. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip To automatically generate membership numbers based on the format that your company uses, configure a custom logic. 7. Select a loyalty program member who referred the member to the program. 8. Select a date for enrollment. 9. Select the enrollment channel. 10. Select the loyalty program member associated with the corporate. 11. Select the member status. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note The member status has two values: active and inactive. The default member status is active. The active and inactive values can’t be edited or deleted. However, you can add new values to the member status field. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note Last Activity Date and Statement Last Generated Date can be updated in the Edit mode. The dates are updated based on the member transactions. 12. Save your changes. After a Loyalty Program Member record is created, a set of related records are automatically created for the member. A Loyalty Member Currency record is created for each active loyalty program currency. The Loyalty Member Currency records enable the loyalty program to track and manage the member's points balance. A Loyalty Member Tier record is created for each active tier group in the loyalty program. The Loyalty Member Tier records assign the member to the lowest tiers of the active tier groups. To add a member to a group, go to the member's Loyalty Member record and then click **Add Member** on the Associated Groups related list. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note Group Members is another related list that's added to the member's Loyalty Member record by default. This related list is for Group type Loyalty Program Member records. To remove the Group Members related list for Individual or Corporate type members, see [Update the Layout of Loyalty Program Member Record Page](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_group_record_layout.htm&type=5&language=en_US). # Create a Loyalty Program Process A loyalty program can have multiple program processes. A program process can process either Accrual or Redemption-type transaction journals. You can also filter transaction journals further by specifying the subtype of transaction journals that you want to process. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To create a loyalty program process:

Loyalty Management permission set

AND

Edit access on Loyalty Program and other required objects

AND

View Setup and Configuration

You can associate a combination of journal type and journal subtype with only one program process. This ensures that a particular type and subtype of transaction journals aren't processed by multiple loyalty program processes. 1. In the Loyalty Management app, open a Loyalty Program record. 2. Click the **Loyalty Processes** tab. 3. On the Program Processes related list, click **New**. If you don't find the Program Processes related list on the Loyalty Processes tab, add the related list on the Loyalty Program page layout. 4. Specify values for these fields.
Field Description
Program Process Name Enter the name of the loyalty program process.
Journal Type Select whether you want the loyalty program process to process Accrual or Redemption-type transaction journals.
Journal SubType

Select the journal subtype the process uses to filter transaction journals.

This field is optional. Journal subtype records aren't provided with Loyalty Management. Before you select a journal subtype for a process, create Journal Subtype records.

Status

Select the status of the process.

Only active processes provide outcomes for incoming transaction journals.

Execution Type

Select the mode to process transactions.

  • Real Time: Incoming transactions are processed as soon as they are generated.
  • Batch: New transactions are grouped and processed in batches based on a schedule that the admin decides.
  • Both: Transactions can be processed in real time and in batches.

The value that you select in this field doesn't impact how you decide to trigger the process. This information helps provide added context about the process.

![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_example.png) Example A loyalty program manager creates a process that processes Accrual-type transactions in real time. The manager keeps the status of the process in Draft until the manager creates the parameters and rules for the process. After you create a Loyalty Program Process record, add parameters and rules for the process. ![Tip](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_tip.png) Tip Change the status of a process to Active only after you have set up all your parameters and rules. A process can start to process transaction journals as soon as it's active. If necessary, you can add rules to active processes for a new promotion or for new business scenarios. - **[Define Eligibility Conditions for a Process](https://help.salesforce.com/s/articleView?id=xcloud.loyalty_process_process_eligibility.htm&release=264.0.0&type=5)** Define the conditions that determine the transaction journals that are eligible for a process. The process eligibility conditions that you define filter ineligible transactions before the transactions are processed by the rules of the process. Process eligibility conditions help ensure that the conditions that are applicable for all rules of the process, are defined at the process-level and not at the rule-level. For example, you can add eligibility conditions to filter out inactive member transactions that are less than a particular amount. Or, you can set a transaction value limit beyond which transaction journals aren’t processed to ensure fraudulent activities aren’t rewarded. #### See Also - [_Loyalty Management Developer Guide_: LoyaltyProgramSetup](https://developer.salesforce.com/docs/atlas.en-us.loyalty.meta/loyalty/meta_loyaltyprogramsetup.htm) # Create a Loyalty Program Process Parameter Parameters store static values, dynamic values, and formulas. You can use parameters to define conditions or actions. Parameters can store multiple value types depending on the type and data type of the parameter. ### Required Editions
Available in: Lightning Experience
Available in: Enterprise, Performance, Unlimited, and Developer Editions with Loyalty Management
User Permissions Needed
To create a loyalty program process parameter:

Loyalty Management permission set

AND

Edit access on Loyalty Program and other required objects

AND

View Setup and Configuration

You can use parameters to: - Define a formula, including a formula that's stored in another parameter. - Filter records. - Define the criteria of conditions. - Enter input values or store the output values of an action. Here are the types of values that a parameter can store.
Type Supported Data Type Description
Constant
  • Text
  • Number
  • Date
  • Date/Time
  • Boolean
Stores a value that you enter. Ensure that the value you enter is of the same data type that you selected.
Variable
  • Text
  • Number
  • Date
  • Date/Time
  • sObject
  • Boolean
  • Stores the record details of the selected object when the selected data type is sObject.
    Tip
    Tip If you want to use values from a record in your rule, create a sObject parameter and add a filter to uniquely identify the record.
  • Stores a value based on the selected data type that's provided when processing a transaction journal.
Formula
  • Text
  • Number
  • Date
  • Date/Time
  • Boolean
Stores a formula that you enter. Ensure that the output of the formula you enter is of the same data type that you selected.
1. On a Loyalty Program record, click the **Program Processes** tab. 2. Click the program process for which you want to create a parameter. 3. On the Loyalty Program Process Parameters tab, click **New**. 4. Specify the appropriate values for these fields.
Field Description
Name

Enter a unique name for the parameter.

Don't use special characters and spaces.

Important
Important Don't use the Promotion_ or LoyaltyProgramMbrPromotion_ prefixes.
Type Select the type of value that you want the parameter to store.
Data Type Select the data type of the value that you want the parameter to store.
Use Parameter As
  • Input: Select if you want the parameter’s value to be provided from outside the loyalty program process. For example, the value can be provided by an API.
  • Output: Select if you want the parameter’s value to be available for use outside the loyalty program process. For example, the value can be used in a flow.

If the Process Type of a parameter’s related loyalty program process is TransactionJournal, the parameter’s value can’t be provided or used by a system or process that's outside the loyalty program process.

5. Depending on the type and data type of the parameter, enter these values:
ValueDepending on the data type, either store an alphanumeric value, a number, a data, a date and time, or True or False.
Decimal PlacesSpecify the maximum number of decimal places until which a formula or variable can store a value.
FormulaClick Formula builder icon., and then enter a formula.
6. Save your changes. ![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_example.png) Example In a program, two parameters are needed. The first parameter type is Constant. You can use this parameter to enter the value of the issued vouchers. The other parameter type is Formula. You can use this parameter to determine the number of points to credit to the member associated with the transaction journal. To ensure that members receive points worth 10% of the transaction amount, enter this formula: {!TransactionJournal.TransactionAmount} \* 0.10. After you create parameters, use the parameters in your process rules. ![Warning](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_warning.png) Warning After you delete a parameter, you can't undo the change. Ensure that you only delete parameters that aren't used in a rule or a Formula-type parameter that you no longer require. - **[Create Parameters While Designing Rules](https://help.salesforce.com/s/articleView?id=xcloud.promotion_setup_parameter_inline.htm&release=264.0.0&type=5)** Create parameters while adding conditions and actions to loyalty program process rules on the Rules Builder. # Create a Loyalty Program Using Record Pages The Loyalty Management app lets you create and set up loyalty programs for your Salesforce organization. You can configure each component of your loyalty program from the respective record page. You can start by creating a loyalty program and then add tiers, tier groups, program currencies, members, partners, voucher definitions, benefits, and promotions for your organization. A loyalty program tracks and manages members’ activities, measures tier points, and assesses members for tier upgrades. The program rewards and recognizes members with points or vouchers. ## Explore and Learn Watch this video to understand how to create a loyalty program and add its tiers and currencies. If you aren’t able to watch the video in full screen, open the video on a new tab: [![Watch video](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/resources-global/_corporate/images/play_btn.png) Design a Loyalty Program](https://salesforce.vidyard.com/watch/yHgRuc39KbzVEUNkvqnDor). - **[Create a Loyalty Program](https://help.salesforce.com/s/articleView?id=xcloud.create_a_loyalty_program.htm&release=264.0.0&type=5)** Create a B2B or a B2C loyalty program to enhance the business value for loyal customers and channel partners. - **[Create a Loyalty Tier Group](https://help.salesforce.com/s/articleView?id=xcloud.create_a_loyalty_tier_group.htm&release=264.0.0&type=5)** Create a loyalty tier group for the hierarchical grouping of the tiers in your loyalty program. - **[Create a Loyalty Tier](https://help.salesforce.com/s/articleView?id=xcloud.create_a_loyalty_tier.htm&release=264.0.0&type=5)** Create a loyalty tier to categorize members based on their activities in the loyalty program. - **[Create a Loyalty Program Currency](https://help.salesforce.com/s/articleView?id=xcloud.create_a_loyalty_program_currency.htm&release=264.0.0&type=5)** Create qualifying or non-qualifying currencies associated with a program. - **[Create a Benefit Type](https://help.salesforce.com/s/articleView?id=xcloud.create_a_loyalty_benefit_type.htm&release=264.0.0&type=5)** Benefit Type groups benefits created under the benefit type. - **[Add Benefits to the Benefit Type](https://help.salesforce.com/s/articleView?id=xcloud.create_a_loyalty_benefit.htm&release=264.0.0&type=5)** Add benefits within the Benefit Type. - **[Map Benefits to Actions](https://help.salesforce.com/s/articleView?id=xcloud.map_benefits_to_actions.htm&release=264.0.0&type=5)** Associate benefits to Benefit Actions using **Map benefits to actions**. This action is optional. - **[Add Benefits to a Tier](https://help.salesforce.com/s/articleView?id=xcloud.add_benefits_to_a_tier.htm&release=264.0.0&type=5)** Add the benefits of your loyalty program to a tier. # Create a Loyalty Tier Create a loyalty tier to categorize members based on their activities in the loyalty program. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
1. In the Loyalty Programs tab, open your program name. 2. On the Setup tab, select a Loyalty Tier Group. 3. Under Loyalty Tiers, click **New**. 4. Enter a name, description, and sequence number. The sequence number indicates the tier's ranking. The tier with the highest sequence number indicates the highest tier. If you want to use tiers as resources in conditions of loyalty program process rules, ensure tier names don’t contain special characters. 5. Save your changes. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note If you rename an existing tier, you must manually update the tier name in the associated Loyalty Member Tier object records. # Create a Loyalty Tier Group Create a loyalty tier group for the hierarchical grouping of the tiers in your loyalty program. ### Required Editions
Available in: Lightning Experience in Enterprise, Performance, Developer, and Unlimited Editions that have Loyalty Management enabled.
1. In the Loyalty Programs tab, open your program name. 2. On the Setup tab, under Loyalty Tier Groups, click **New**. 3. Enter a name and description for the tier group. Make sure the tier group name contains only alphanumeric characters and no special characters. 4. Select **Active**. 5. Select a tier model: | | | | --- | --- | | Fixed | To expire qualifying points on a specific date. | | Anniversary | To expire qualifying points on the member’s enrollment anniversary date. | 6. Enter a period quantity and a period duration type for the tier period. 7. Select an option: | | | | --- | --- | | No Extension | Select this option if you don’t want to extend the expiration date. | | Till End of Month | Select this option if you want to expire qualifying points at the end of month during which member’s points are supposed to expire. | | Qualifying Points Reset Date | Select this option if you want to extend the expiration date of the fixed tier model until the qualifying points reset date. This option aligns the tier expiration with the fixed qualifying period. For example, if a member’s Gold tier is set for expiry on February 10, 2021 and the qualifying points reset on December 31 every year. If Extend Expiration is enabled until the qualifying points reset date, the tier downgrade process also runs on the same date as the qualifying points reset date, that is, December 31, 2020. | | Member Enrollment Anniversary | Select this option to extend the expiration date of the anniversary tier model until the member enrollment anniversary date. This option aligns the qualifying period and the tier expiration with the member's enrollment anniversary. For example, if a member’s anniversary falls on June 12, 2020, the member is in the Gold tier and slated to expire on July 16, 2021. If Extend Expiration is enabled until the member anniversary, the qualifying points reset on June 12, 2021 and again on June 12, 2022, when the member is evaluated for downgrade from Gold tier. In this example, the anniversary date falls after the actual tier expiry date. | 8. If you want to mark this tier group as the primary tier group, select **Primary**. If a program has multiple tiers, members can see their tier from the primary tier group. 9. If you don’t want to show this tier group to members, select **Hidden To Members**. 10. Enter the date and the frequency at which members’ qualifying point balance is automatically reset to zero.
Fixed Model

Members’ qualifying points are reset of a specific date after a period that you specify.

In the Qualifying Points Reset Date field, specify the date on which the qualifying point balance is reset for members. In the Qualifying Points Reset Frequency field and the Qualifying Points Reset Period, decide the number of years after which points are reset. For example, if the reset date is December 31, 2023, the reset frequency is 2, and the reset period is Years, then members’ points are reset on December 31, 2023 and then on December 31, 2025.

Anniversary Model

Members’ qualifying points are reset on the member’s membership enrollment date after a period that you specify.

In the Qualifying Points Reset Frequency field and the Qualifying Points Reset Period, decide the number of years after which points are reset. For example, if the member’s enrollment anniversary is April 2, the reset frequency is 2, and the reset period is Years, then members’ points are reset on April 2, 2023 and then on April 2, 2025.

11. Save your changes. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-loyalty_management-264-0-0-production-enus/0590ce3e-5a09-45ab-8e5e-68f359c35886/images/icon_note.png) Note If you add a tier group after members are assigned a tier, manually create the associated Loyalty Member Tier records. # Create a Mobile Customization Pick an Agentforce action and start designing its mobile layout. 1. From Setup, in the Quick Find box, enter Salesforce Mobile App. 2. Select **Salesforce Mobile App**, then click **Launch Builder**. 3. Click **New Mobile Customization**. 4. Select the Agentforce action to customize. Only Apex invocable actions that meet the requirements appear in the list. Actions that already have a published customization don't appear — to change those, edit the existing customization. 5. Click **Next**. The Mobile Builder canvas opens with the selected action's output fields loaded. # Create a Mobile Publisher Project Create a Mobile Publisher project for an Experience Cloud app. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
To create and modify a site: Create and Set Up Experiences
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note Your organization must license Salesforce Mobile Publisher in order to use the feature. Contact your Salesforce sales rep for more information. ![Important](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_important.png) Important New Mobile Publisher for Experience Cloud apps created after the Summer '25 release use the new External Client Apps framework in place of the legacy Connected Apps framework. Mobile Publisher for Experience Cloud apps created before the Summer '25 release still use Connected Apps. This page contains references to External Client Apps, Connected Apps, or both. Make sure you follow the guidance appropriate for your app. 1. From Setup, enter Mobile Publisher in the Quick Find box, then select **Mobile Publisher**. ![The Mobile Publisher landing page in Salesforce Setup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/mys1_branded_apps_landing_page.png) 2. Click **Create New App**. The first time you access Mobile Publisher, the landing page is displayed. Subsequently, you're taken directly to the Setup page. 3. Choose **Experience Builder Site** and click **Next**. ![App Picker](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_picker_commun.png) 4. Enter a name for the Mobile Publisher project. You can’t edit the project name after you set it. (This name is for internal reference only; the name doesn’t display publicly in Google Play or the App Store.) Click **Next**. ![Project Name](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/branded_apps_project_name.png) 5. In the Setup page, click **Start** for the type of app you want to create (for example, iOS). ![Mobile Publisher for Experience Cloud project](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/mobile_publisher_landing_dreamhouse.png) 6. In the **Set Up the Mobile App** section, click **Start**. ![Setup UI in three steps for the DreamHouse sample app](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/mobile_publisher_dreamhouse_setup_ui.png) ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/images/icon_note.png) Note The setup process for new Mobile Publisher for Experience Cloud apps made with the External Client Apps framework is divided into three sections: **Set Up the Mobile App**, **Set Up an External Client App**, and **Request the App Binary**. If you select the **Binary upload** or **Fully Managed** distribution methods when creating your app, you also see a fourth section, **Submit the App**. 7. In the resulting page, make note of the automatically generated Store Identifier. For iOS apps, this identifier is used to register your Salesforce bundle ID with your Apple developer account. For Android apps, this identifier is used as your Google Application ID. ![Store Identification](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-branded_apps_exp_cloud-264-0-0-production-enus/cf85363c-215e-4784-bb6a-c5c83c4e7140/branded_apps_exp_cloud/images/store_ID.png) 8. Complete the required information and click **Submit**. For more information about the app distribution choices, see [Set Up Distribution](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_exp_distribution_delegated.htm&release=264.0.0&type=5 "Your branded app is published via your developer account either publicly or privately."). 9. In the **[Set Up an External Client App](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_eca_create.htm&release=264.0.0&type=5 "Start setting up an external client app (ECA) for your mobile app after completing the Set Up the Mobile App step in Mobile Publisher. Don’t create your external client app in the External Client App manager (accessed through Setup). Create your ECA in Mobile Publisher instead.")** section, click **Start**. Complete the required information and deploy the external client app. 10. In the **Request the App Binary** section (which might be called **Request the Binary and Submit the App**, if you chose the **Binary upload** distribution type), click **Request Binary**. The submission goes to the Mobile Publisher team for review. 11. If you want to create an app for the other type of platform (for example, Android), repeat steps 6 -11. 12. Build your Mobile Publisher for Experience Cloud app. #### See Also - [Prepare Your App’s Information](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_prepare_assets_commun.htm&release=264.0.0&type=5 "Preparing your branded assets is an important part of the process of creating a Mobile Publisher for Experience Cloud app. Let’s discuss some of the branding details so you can get started with your Mobile Publisher project.") - [Build a Mobile Publisher for Experience Cloud App](https://help.salesforce.com/s/articleView?id=xcloud.branded_apps_build_project_commun.htm&release=264.0.0&type=5 "Build a Mobile Publisher for Experience Cloud app by configuring these Experience Cloud features.") # Create a Mobile Publisher Project for Salesforce App Start a Mobile Publisher project for Salesforce app and manage both Android and iOS branded apps. ### Required Editions
Setup for Mobile Publisher available in: Lightning Experience
Setup for Mobile Publisher available in: production only (not sandbox)
Available in Lightning Experience in: Enterprise, Performance, and Unlimited Editions
User Permissions Needed
To create and modify a Mobile Publisher project: Manage mySalesforce Apps
![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/images/icon_note.png) Note Your organization must license Salesforce Mobile Publisher in order to use the feature. Contact your Salesforce sales rep for more information. 1. From Setup, enter Mobile Publisher in the Quick Find box, then select **Mobile Publisher**. ![The mySalesforce landing page in Salesforce Setup](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/mys1_branded_apps_landing_page.png) 2. Click **Create New App**. 3. Choose the Salesforce mobile app to brand (only one app can be branded per org). ![Mobile Publisher App Picker](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_picker_sfdc.png) 4. Enter a name for the Mobile Publisher project. You can’t edit the project name after you set it. This name is for internal reference only; it doesn’t display publicly in Google Play or the App Store. ![Naming Mobile Publisher Project](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/branded_apps_project_name.png) 5. Click **Next**. 6. In the **Set Up the Mobile App** section, click **Start**. ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/images/icon_note.png) Note The setup process for new apps made with the External Client Apps framework is divided into three sections: **Set Up the Mobile App**, **Set Up an External Client App**, and **Request the App Binary**. If you select the **Binary upload** or **Fully Managed** distribution methods when creating your app, you also see a fourth section, **Submit the App**. When you’re done creating the Mobile Publisher project, you can manage the Android and iOS apps that are part of your project. ![mySalesforce project](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-mysalesforce-264-0-0-production-enus/a39debb4-ddcf-4d21-ae97-ca8229316d3a/mysalesforce/images/mys1_branded_apps_empty_state.png) Each application store—Google Play and the App Store—requires a different set of information in order to publish an app. - **[Enter Information and Upload Assets for Your App](https://help.salesforce.com/s/articleView?id=xcloud.s1_branded_apps_enter_info.htm&release=264.0.0&type=5)** Customize your app’s appearance, including app icon, loading page logo, and header background color, and much more so that the app matches your company’s branding. # Create a Native Single Sign-On Experience in Your App With an optional parameter in the OAuth 2.0 web server flow and user-agent flow, you can build a single sign-on (SSO) experience that feels like your third-party app is integrated with an external identity provider. With this process, you link an OAuth flow to an SSO flow while maintaining control of the experience within your app. This parameter is supported for Experience Cloud sites, so you can use this capability to add SSO to a Headless Identity implementation. This parameter is also supported for My Domain. ### Required Editions
Available in: both Salesforce Classic and Lightning Experience
Available in: Enterprise, Unlimited, and Developer Editions
For example, you host a login button within your app that directs users to Google, where they enter their Google credentials. The users are then redirected back to your app. Behind the scenes, the browser briefly redirects to your Experience Cloud site before automatically redirecting to your app or Salesforce. The redirection to Experience Cloud happens so quickly that users don’t see the Experience Cloud login page, so it feels like they went between your app and Google. At the end of the flow, they’re logged in to Google and your app. ![Diagram showing flow of native single sign-on](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/identity/images/headless_sso_diagram.png) Here’s how the flow works. - In your app, a user chooses to log in with an external identity provider, kicking off a web server flow or user-agent flow with a request to the My Domain or Experience Cloud site authorization endpoint (1). The request includes an `sso_provider` parameter that specifies the name of an external identity provider configured in Salesforce, such as an authentication provider or SAML identity provider. - The browser briefly redirects to the My Domain or Experience Cloud site URL. - Salesforce confirms that an external identity provider is enabled on the org or site’s login page (2). The developer name of the external identity provider configured on the login page must match the name sent in the `sso_provider` parameter. - Salesforce starts an SSO flow and redirects the user to the external identity provider. The user logs in to the provider (3). - The browser briefly redirects to Salesforce again. Your registration or Just-in-Time (JIT) provisioning handlers fire. If you have a login flow enabled for the user’s profile, it runs at this point. Salesforce finishes logging the user in and processes the initial authorization request from your app (4). ![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-identity-264-0-0-production-enus/699dab6f-8f1a-4662-b24f-6521d5b747f7/images/icon_note.png) Note To ensure that your user doesn’t interact with Salesforce, configure your external client app policies to pre-authorize admin-approved users and ensure that the user profile doesn’t have a login flow. - The browser redirects back to your app and completes the web server or user-agent flow. - The user is now logged in to your app (5). They’re also logged in to the external identity provider. To configure this SSO experience, complete these high-level steps. 1. Set up SSO with an external provider. You can set up a SAML identity provider or an authentication provider. When you set up SSO, note the developer name - To set up SAML SSO, see [SAML SSO with Salesforce as the Service Provider](https://help.salesforce.com/s/articleView?id=xcloud.sso_saml_setting_up.htm&type=5&language=en_US). - To set up social login with an authentication provider, such as Google or Facebook, see [Authentication Provider SSO with Salesforce as the Relying Party](https://help.salesforce.com/s/articleView?id=experience.sso_authentication_providers.htm&type=5&language=en_US). 2. Add the external identity provider to your My Domain or Experience Cloud login page. Because you configure Headless Identity through Experience Cloud sites, this step is required to configure SSO for a Headless Identity implementation, even though users never see the Experience Cloud login page. - For My Domain, see [Add Identity Providers to the My Domain Login Page](https://help.salesforce.com/s/articleView?id=xcloud.domain_name_login_id_prov.htm&type=5&language=en_US). - For Experience Cloud, see [Configure Your Login Page](https://help.salesforce.com/s/articleView?id=xcloud.external_identity_login_pages_configure.htm&type=5&language=en_US). 3. Configure the web server flow or user-agent flow. When you set up the flow, include the `sso_provider` parameter in the authorization request. The value of this parameter must match the developer name of the external identity provider that you set up. - For the web server flow, see [OAuth 2.0 Web Server Flow for Web App Integration](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_web_server_flow.htm&type=5&language=en_US). - For the user-agent flow, see [OAuth 2.0 User-Agent Flow for Desktop or Mobile App Integration](https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_oauth_user_agent_flow.htm&type=5&language=en_US). # Create a New Custom LWC Layout Template (Managed Package) For the managed package runtime, create a custom template for an LWC layout by extending the BaseLayout Mixin. Before creating a custom template: ![Managed Package app icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/resources-global/_corporate/images/managedpackageicon.png) This information is for Omnistudio for Managed Packages. For Omnistudio on standard runtime, see [Omnistudio Help](https://help.salesforce.com/s/articleView?id=xcloud.os_omnistudio_standard.htm&language=en_US). - See [Set Up Lightning Web Components (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_set_up_lightning_web_components.htm&release=264.0.0&type=5 "For the managed package runtime, to manage and develop Omnistudio Lightning web components, use Visual Studio Code with Salesforce DX or IDX Workbench. Both development approaches have source control. Salesforce DX integrates with Visual Studio Code. IDX Workbench lets you deploy components from one sandbox or dev org to another, such as a production org, and compare source and target files."). - Create a component in your local development environment. See [Create Lightning Web Components](https://developer.salesforce.com/docs/platform/lwc/guide/create-components-introduction.html). ## Update the JS File In the JS file: 1. Import the BaseLayout mixin from your Vlocity namespace. See [Viewing the Namespace and Package Version of Omnistudio for Managed Packages (Managed Package)](https://help.salesforce.com/s/articleView?id=xcloud.os_viewing_the_namespace_and_version_of_the_omnistudio_vlocity_package.htm&release=264.0.0&type=5 "For the managed package runtime, to check the namespace and version of your Omnistudio for Managed Packages installation."). For example, if your namespace is vlocity\_cmt: `import { BaseLayout } from "vlocity_cmt/baseLayout";` 2. Import your custom HTML template. For example, if your HTML file name is threeColCardCanvas.html: `import temp from "./threeColCardCanvas.html";` 3. Confirm that your class declaration has the `extends` keyword. For example, if your class is threeColCardCanvas: `export default class threeColCardCanvas extends BaseLayout(LightningElement) {` ![Example JS](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-xcloud-omnistudio_for_managed_packages-264-0-0-production-enus/aa2554ec-624a-4ee6-8da4-6435670e6e62/images/icon_example.png) Example JS This example overwrites the `render()` method that returns the HTML template. `import { LightningElement } from "lwc"; import { BaseLayout } from "vlocity_cmt/baseLayout"; import temp from "./threeColCardCanvas.html"; export default class threeColCardCanvas extends BaseLayout(LightningElement) { render() { return temp; } }` ## Create the HTML Template In the HTML template file, inside the `