Skip to main content
Grupo

APAC Architects

A group set up by Salesforce architects for Salesforce architects. We plan to hold regular sessions and discuss architectural challenges, solutions, and matters of interest across the community (including path to CTA). Together we are better! Organizers: Paul Fayle Richard Enojas Gary Breavington

Hi Trailblazers,

I am facing an inconsistency between what the Lightning App Builder shows in its mobile preview (Phone Form Factor) and what is actually rendered inside the official Salesforce Mobile App on a real iOS/Android device. I would appreciate some architectural insights to clarify this behavior.

The Scenario:

  1. I am customizing an Account Record Page using the Lightning App Builder.
  2. Inside a Tab component, I configured two custom tabs: Activity (placed first) and Chatter (placed second).
  3. When switching the Lightning App Builder preview to "Phone", the desktop Activities (Activity Timeline) component displays the classic "Unsupported form factor: Activities supports only the desktop form factor" warning.
  4. To test mobile visibility, I left that desktop component there but controlled its visibility via a component filter: Device > Form Factor Equal Phone.

The Inconsistency / Questions:

  • Question 1: Preview vs. Real Device Behavior 

    In the Lightning App Builder (Phone view), the

    Activity tab is strictly displayed above the Chatter tab, respecting the structural order of the Tabs component metadata. However, on the real Salesforce Mobile App device, I only see the Chatter tab and not the Activity tab. 
  • Question 2: Fallback Mechanism & Smart Rendering 

    Since the desktop

    Activities Timeline component explicitly throws an "Unsupported form factor" error for mobile, what is the exact mechanism the Salesforce Mobile App uses on a real device? Does the native app container automatically suppress/ignore unsupported desktop components even if they are forced via Device = Phone filters, or does it trigger an internal fallback to the native mobile global activity card (Recent Activity)?

I want to understand if this layout discrepancy is a known limitation of the App Builder preview simulator or if there is a specific mobile rendering logic that changes the component hierarchy on real devices and hence I can't also see the tab Activity on Salesforce app in the mobile phone.

Thanks in advance for your help! 

 

@Salesforce Administrators & Developers, @Salesforce Administrators and Developers, @APAC Architects, @Data Quality & Management

 

 

#Trailhead Challenges  #Trailhead  #Salesforce Developer

2 respuestas
0/9000

Hi Trailblazers, 

 

I am a Sys Admin, and I’m facing a very frustrating behavior in Salesforce Lightning I am not used to. 

 

I miss the old Salesforce Classic way where you could simply click on the Accounts tab and find the "All Accounts" list view right there in the dropdown to select it. 

 

Currently, in my org, when I click on the Accounts tab, "All Accounts" does not appear anywhere in the List View dropdown. The only way I can actually see all accounts is by literally typing "all accounts" in the Global Search bar. When I do that and press enter, Salesforce shows me then All Accounts as one of the list views to select. 

 

Why does Salesforce hide the standard "All Accounts" view from the dropdown by default in newer orgs, forcing us to use Global Search?.

Is there a hidden global setting to restore the classic behavior so "All Accounts" is natively available in the dropdown without having to build a custom list view for every single object? 

 

Looking forward to your insights! 

 

@Salesforce Administrators & Developers,@Salesforce Administrators and Developers, @APAC Architects

 

Why is

 

 

 

#Trailhead Challenges  #Trailhead  #Salesforce Developer  #Salesforce Admin

8 respuestas
0/9000
Lena Wong ha preguntado en #Trailhead

Hi Trailblazers,

I am facing a very specific behavior regarding Salesforce Duplicate Management combined with Before-Save Flows (Fast Field Updates) for cross-object matching, and I would love to get the perspective of senior architects here. 

 

My setup:

  1. Since Salesforce native Matching Rules don't support Picklists for cross-object matching (Lead vs Contact), I implemented a standard workaround. I created a custom text field called Company_Match_Text__c on both Lead and Contact.
  2. A Before-Save Flow on both objects copies the value of a standard Company_Picklist__c into this custom text field upon creation/update to act as a text-normalized bridge.
  3. It uses an Exact Match criteria on Contact: 

    (Contact: Email EXACT MatchBlank = FALSE) AND (Contact: Company_Match_Text__c EXACT MatchBlank = FALSE)

  4. The Duplicate Rule is set to Alert and Report on both Create and Edit.

 

I have been analyzing two records with the exact same Email and the exact same Company text value:

  • Record A: Historical record (created months ago before this Flow/Rule deployment).
  • Record B: Newly created record (created today with the Flow active).

The Strange Behavior:

  • When opening the new record B, the native "Potential Duplicates" Lightning Component correctly shows: "We found 1 potential duplicate" (pointing to Record A).
  • However, when opening the historical Record A, the component says: "We found no potential duplicates".

For Troubleshooting I did the following:

  1. I clicked Edit on Record A, changed nothing, and clicked Save. The record saved cleanly. No duplicate pop-up modal appeared, even though B exists with identical data. (However, behind the scenes, the Before-Save Flow ran and populated the custom text field for the first time).
  2. I clicked Edit on Record A again, changed the company field to a completely different value, and clicked Save. It saved without alerts (Expected behavior).
  3. I clicked Edit on Record A a third time, and reverted the company back to the original value to match Record B. Upon clicking Save, the Duplicate Rule instantly triggered the yellow "Similar Records Exist" pop-up window.

Mi Before Save flow works when a Contact record is created o updated.  

To give you more context on the Flow logic, the Decision Node evaluating the change is structured as follows:

  • Condition Logic: (1 OR 2) AND 3

  1. {!$Record.Id

} Is Null = True (New Record) 

  2. {!$Record.Company_Picklist__c} Is Changed = True (Field Updated) 

  3. {!$Record.Company_Picklist__c} Is Null = False (Ensures field contains data) 

 

Because of Condition #2 (Is Changed), when we perform a "no-change" Edit -> Save on the historical Record A, this decision path evaluates to FALSE on the client/payload trigger level. However, since the record is technically hitting the database transaction, the Before-Save Assignment element still executes downstream or forces an update, which is why the field gets populated in the database but completely bypasses the Duplicate Rule UI engine. 

 

Is it a known behavior that Salesforce completely skips the duplicate rule evaluation UI modal on an Edit -> Save transaction if the client-side payload detects no changes in the specific fields participating in the Matching Rule even if a Before-Save Flow alters database values during that same transaction?

 

Would you consider this standard behavior of the Salesforce optimization/indexing engine for duplicate management, or an edge-case bug with Before-Save updates on historical data?

Thanks in advance for your insights! 

 

@Salesforce Administrators & Developers, @Salesforce Administrators and Developers, @APAC Architects

 

#Trailhead

4 respuestas
  1. 16 jul, 14:17

    Hi @Lena Wong

     

    What you're seeing is generally expected behavior rather than a bug. Duplicate Rules are evaluated based on the values Salesforce considers to have changed during the DML operation. A

    Before-Save Flow can update field values before commit, but a no-change Edit → Save may not cause the duplicate evaluation/UI to reprocess the record in the same way as an actual field change.

    For historical records, a common approach is to perform a one-time backfill (Batch Apex or Data Loader update) to populate the helper field, then run a real update on the affected records so the duplicate engine re-evaluates them consistently. After all legacy records have been normalized, the duplicate behavior is typically consistent for both new and existing records.

    So I'd consider this more of a platform optimization/edge case with legacy data than a defect in Duplicate Management itself.

0/9000
Lena Wong ha preguntado en #Experience Cloud

Hi Trailblazers,

I am currently evaluating the architecture for a B2B customer portal using Experience Cloud. I would like to get a clear technical understanding of how Salesforce handles duplicates during user self-registration, and whether utilizing Screen Flows or LWC is truly necessary for this specific validation.   

My questions are:   

  • When enabling the native Configurable Self-Registration under the Login & Registration settings, what exactly happens behind the scenes if a potential user tries to register with an email address or any data that already exists in the system? Does Salesforce natively block the registration and throw an error message, or does it require manual implementation of Duplicate/Matching Rules? 
  • Does the standard self-registration mechanism only check for existing User records (login credentials), or does it also prevent creating duplicate Contact records if the email already exists in the CRM as a prospect or sales contact?
  • Would you suggest using a custom Screen Flow on the public site to handle the registration intake and manually query for duplicates?. From a security and architecture perspective (especially running under the Guest User context), is a Flow recommended for this? Or is it better to stick to the native self-registration backend, perhaps customizing only the UI layer via a Lightning Web Component (LWC)?

I want to avoid reinventing the wheel if Salesforce already handles these validations natively, but I also need to ensure a clean user experience (UX) without data duplication. 

Looking forward to your architectural insights and best practices!

Thanks in advance!    @Salesforce Administrators & Developers, @Salesforce Administrators and Developers, @APAC Architects    

2 respuestas
  1. 18 jun, 15:15

    @Lena Wong

     

    Good architectural questions, Lena, and you're right to dig into this before building, because the default behavior surprises a lot of teams. Let me take your three questions in order. 

     

    On what native Configurable Self-Registration does when duplicate data comes in. This is the part that catches people out. Out of the box, the handler does a fairly narrow check. It can match an existing record and update it rather than create a new one, but it does not natively enforce your org's Duplicate Rules and Matching Rules the way a normal record save through the UI would. The self-registration path runs through the registration Apex handler and is not guaranteed to honor your declarative duplicate rules. So the honest answer is it does not robustly block duplicates for you. Treating native self-registration as a complete duplicate prevention layer is a mistake.

     

    On whether it checks only User records or also Contacts. This is the crux of your concern. The native mechanism is primarily concerned with the User and login identity. When someone registers, Salesforce creates or matches a Contact and then provisions a User tied to it. The handler can be configured to look for an existing Contact by email and link to it, but that's configuration dependent, not automatic. So if an email already exists in the CRM as a sales prospect or Contact, native self-registration does not reliably prevent a second Contact unless you've built the matching logic to catch it. The duplicate-Contact scenario you're worried about is a real risk with the pure native setup, especially in B2B where the same person often already exists from sales activity.

     

    On the architecture question. Here I'd push back gently on one part of your framing. A Screen Flow running under Guest User context on a public page is something I'd be cautious about for registration intake. Guest User has been progressively locked down for good security reasons, and giving it the query and create access needed to check for and provision users widens your attack surface in ways that are hard to control. You can do it, but you're taking on the security ownership.

     

    The pattern I'd recommend for a B2B portal: keep the native self-registration backend as your foundation, because it handles User provisioning, license assignment, and the security-sensitive parts you don't want to hand-roll. Then customize the registration handler Apex class, which is where the real control lives. Inside that handler you can run explicit SOQL to check for existing Contacts and Users by email, apply your matching logic, and decide whether to link or create. This runs in a controlled system context rather than relying on Guest User permissions, which is the security advantage. For the UI, a custom LWC gives you the clean UX and inline validation you want while still posting into that controlled backend.

     

    So the layering is: custom LWC for the front-end experience, native self-registration as the provisioning backbone, and a customized Apex handler as the place where you enforce duplicate prevention with real query logic. Clean UX, avoids reinventing the hard parts, keeps duplicate logic in a secure context.

     

    Two things to decide deliberately as you design this. First, your matching key. Email is obvious, but in B2B you often have the same person across multiple accounts or shared inboxes, so decide whether email alone is your uniqueness rule or whether you need email plus account context. Second, plan for the "Contact already exists from sales" case explicitly, because it's the most common real-world collision in B2B. Linking the new portal User to the existing Contact is usually the right call so the portal and sales relationship stay unified, but it has ownership and sharing implications worth thinking through.

     

    To directly answer your "avoid reinventing the wheel" goal: there is no robust duplicate prevention for self-registration natively, so you can't skip that logic. But you also shouldn't rebuild the whole provisioning stack. The sweet spot is native backend plus customized handler plus LWC, which reuses the wheel where it's solid and only adds custom code where Salesforce genuinely leaves a gap.

    -SP

0/9000
Lena Wong ha preguntado en #Experience Cloud

Hi everyone,

I don't have much experience in Experience Cloud and there is the need to have a customer portal to be used by different business units in different regions with their own regional service processes, support queues, different types of machinery,  desired fonts and images and so on. I’d love to hear from architects who have handled similar multi-BU or multi-divisional use cases.

 

Architectural Questions:

  1. Single vs. Multi-Portal: For 5+ BUs with different workflows, is it better to use Audience Targeting on a single portal or go with a Multi-Portal strategy to allow process independence?
  2. Asset Hierarchy UX: How have you handled complex Parent-Child asset relationships in Experience Cloud? Did you use standard components or custom LWCs (like lightning-tree-grid)?
  3. Customer-Facing Aliases: What’s the best practice for mapping "Customer Nicknames" to Assets without compromising the data integrity of the internal technical names synced from the ERP?

Looking for any "lessons learned" on driving adoption in heavy industry portals.   @Salesforce Administrators & Developers, @Salesforce Administrators and Developers, @APAC Architects, @* Experience Cloud *

3 respuestas
  1. 30 mar, 0:42

    Hi @Lena Wong

     

    This is a great question and here are some considerations which you need to consider before making the decision.  

    1. Before making the decision on single vs multiportal, I would analyze the following. 

    a. Is the data model and objects same across all the 5 business units/ 

    b. What are unique objects to be shared across BU and what level of security needs to be established? 

    c. Are there users who need to have access across all BU or users are unique per BU? 

    d. Are the branding requirements simple or complex which needs to be customized across BU? 

    e. Who is going to own the support of the BU and is there a need for separate teams to manage the BU depending on compliance? 

    f. Are there compliance/security requirements across BU due to geographies like Europe for GDPR, Asia etc which needs to be established across BU? 

    g. Is there any sensitive data shared across BU portals and are there any specific criterias or requirements for access for it? 

    If your answer is yes for most of these questions, a multiportal makes sense compared to a single portal. 

    To answer your question on asset hierarchy, a custom lwc component can solve the problem with hierarchy given different product categories and layers.  

    I will not expose any ERP technical IDs to portal users which will confuse them. I would have a formula field or custom logic to display meaningful names for customers/account data . Couple of questions to you. 

    1. Can you share some insights on what kind of data are you exposing on these portals? i am assuming distributers, resellers or product level data? 

    2. I am assuming your ERP has the master data for most of orders, products and categories. Curious to know if your ERP is SAP or what system is your ERP? 

     

0/9000
2 respuestas
  1. 10 mar, 2:04

    Thanks @Eric for your response, we are planning for a centralized security governance.

    Just health check will support to an extent not completely

0/9000

Hi everyone,

I’m looking for some architectural advice on Release Management strategy. I’ve recently joined a large-scale Salesforce implementation where multiple teams (internal and external) are working on the same Org.

  We are using a professional deployment tool (like Copado/Gearset), but the current process requires a mandatory manual step: maintaining an Excel file where every metadata component must be listed before any deployment.

 

  • The project involves an internal Client Admin and several external consultants.
  • The Excel list is used as a 'communication bridge' to prevent overwriting metadata (like Picklist values) and to keep non-technical stakeholders informed.
  • Sometimes, we need to 'audit' and migrate developments from isolated sandboxes where no initial Git tracking was used.

So, these are my questions:

  1. For those in complex, multi-vendor environments: How do you move away from manual spreadsheets without losing visibility for non-technical PMs?
  2. What is the best way to handle 'metadata conflicts' with a client’s internal Admin without falling back to a manual 'shopping list' approach?
  3. Are there any lightweight 'Audit' tools or strategies you recommend to quickly identify components created in an unmanaged sandbox to avoid hours of manual inventory in an Excel file?

Thanks for your insights!    @Salesforce Administrators & Developers, @APAC Architects @Salesforce Administrators and Developers   

3 respuestas
  1. 5 mar, 20:28

    Hi Lena, this is a really common challenge in large multi-vendor Salesforce implementations. I have worked through this exact scenario and here are practical answers to each of your questions: 

     

    Q1 - HOW TO REPLACE THE EXCEL WITH TOOL-NATIVE VISIBILITY FOR NON-TECHNICAL PMs 

     

    The key insight is that the Excel was serving two purposes: conflict prevention and stakeholder communication. You need to solve each separately. 

     

    For conflict prevention in Copado/Gearset: 

    - Copado: Use "User Stories" with proper branch policies. Enforce that every change must be tracked in a User Story before it can enter a pipeline. The User Story list IS your living inventory - replace the Excel with the Copado backlog board (which non-technical PMs can view) 

    - Gearset: Enable "Deployment Conflict Detection" - it automatically flags when two deployments touch the same metadata component. Pair this with Gearset's deployment history log (shareable via URL) for PM visibility 

    - Both tools: Set up Slack/Teams notifications that fire when a deployment is initiated and completed - PMs see activity in real time without a spreadsheet 

     

    For non-technical stakeholder visibility: 

    - Copado has a built-in "Release" view that shows all User Stories going into a release - share this URL with PMs 

    - Create a simple Salesforce Dashboard in your Salesforce org (or a Jira board) that maps to your deployment pipeline stages - PMs understand Kanban boards 

     

    Q2 - HANDLING METADATA CONFLICTS WITHOUT A SHOPPING LIST 

     

    - Use source-driven development: everything goes through Git first. Even the client Admin should commit changes via VS Code or SFDX before deploying. This makes Git the single source of truth, and conflicts surface in the branch/PR process, not at deployment time 

    - Enforce protected metadata policies: In Copado, set "Locked" metadata components (like Global Picklist values) as protected components that require a change request to modify 

    - For Picklist specifically: document a Picklist governance policy - only one team "owns" each Picklist - and use Copado's conflict resolution UI to manage conflicts visually instead of via Excel 

    - In Gearset: use "Deployment Monitoring" + "Org Comparison" to see exactly what the internal Admin changed in production since the last Git sync 

     

    Q3 - LIGHTWEIGHT AUDIT TOOLS FOR UNMANAGED SANDBOXES 

     

    These are the tools I recommend for quickly identifying components created in unmanaged sandboxes: 

     

    1. Salesforce Inspector (Chrome Extension) - FREE: Instantly shows all metadata in an org, lets you export object lists, field lists, etc. Great for quick inventory 

    2. SFDX CLI + "sf org list metadata": Run sf org list metadata --metadata-type CustomObject to get a full list of metadata by type - much faster than manual Excel inventory 

    3. Gearset's Org Comparison: Compare the sandbox directly against your Git repo baseline to see what's drifted - produces an exportable diff report 

    4. Copado's "Commit Changes" screen: Shows you everything in a sandbox that hasn't been committed to Git yet - essentially your untracked component list 

    5. Salesforce's own Setup Audit Trail: Export it (limited to 180 days) to see recent configuration changes 

     

    OVERALL RECOMMENDATION: 

    Make Git the mandatory first step for everything. The Excel shopping list exists because people bypass Git - once you enforce Git-first (via branch protection rules and CI/CD gates), the Excel becomes redundant. Start with Copado/Gearset's conflict detection and replace the Excel one team at a time. 

     

    Hope this helps your implementation!

0/9000
Lena Wong ha preguntado en #Service Cloud

I’m quite confused about how Case Assignment Rules and Skills-Based Routing in Omnichannel work together, or when using only queue-based Omnichannel. I’m really confused. I don’t know how the process actually runs. In which cases can both Assignment Rules and Omnichannel be used? And in which cases is it sufficient to use only Omnichannel? or when is not necessary to use Omnichannel?    @Salesforce Administrators & Developers @APAC Architects   

2 respuestas
  1. 24 sept 2025, 10:08

    Hi @Rakshitha N

    , thanks for your comments, but I would need more details to understand when, in which scenarios does it make sense to use what. AI gave me the same answer as you, that is why I better posted this question here hoping to find out how it really works. 

    What is the sense of using assignment rules if not only omnichannel, when does it make sense to use flows, as there is the possibility to use omnichannel flows, etc.

0/9000

I want to create a validation rule in which it will run only on the update of the status field, not on the insert or newly created record.

So I put the condition

And(Not(isnew()), ischange(status), profile<> "system admin")

And also, I have a flow that runs after insert, not on update, that changes status. But when I try to create a record, this validation triggers, and an error comes up: Flow exception error: can't run this process because of this custom field validation: "can't change status." Now why this validation triggers as I put condition not(isnew())?

 

Can anyone help me with this?

@* Salesforce Administrators * @* Salesforce Platform * @APAC Architects @Manoj Nambirajan @Christian Ruthner

8 respuestas
  1. 25 jun 2025, 17:10

    As Ravi said, knowing the order of execution is key here. "After" flows run after the record has been committed to the database, so any updates to the triggering record are considered, well, updates. 

     

    Generally, when changing a field value on the triggering record, use a "Before" flow. Would that be something you could do? Keep in mind that Before flows run before before triggers (again, knowing the order of execution is key), so consider all automations on that object before making changes.

0/9000
Lena Wong ha preguntado en #Sales Cloud

Hi all,

we learn the standard process of converting a lead into an Account and Contact and optionally into an Opportunity, but I wanted to know (I am myself not an expert in Sales Cloud) in which scenarios in the real Sales world lead have to be converted or are converted into Opportunities and in which scenarios that is not necessary?. The another question I have is in which scenarios you convert lead into existing opportunities?.

 

@Salesforce Administrators and Developers, @Salesforce Administrators & Developers, @APAC Architects @All Germany Architects Study Group

5 respuestas
  1. 4 dic 2024, 6:45

    Scenarios Where Leads are Converted into Opportunities

    1. Direct Sales Opportunities (B2B Sales)
      • When a lead expresses serious buying intent, has budget approval, and matches your target customer profile, converting to an Opportunity is essential.
      • Example: A company requests a detailed proposal for a SaaS subscription, and the decision-making process requires tracking stages such as Negotiation and Procurement.
    2. High-Value Deals with Long Sales Cycles
      • Complex deals involving enterprise clients require creating Opportunities to manage deal stages, revenue forecasting, and collaborative tracking.
      • Example: Selling heavy machinery where discussions, demos, and legal approvals span several months.
    3. E-commerce or Product Purchases with Multiple Stakeholders
      • In situations where the sales team needs to negotiate terms, discounts, or upsells, Opportunities become necessary.
      • Example: A lead requests a bulk purchase of electronics requiring price discussions and approvals.
    4. Partnership Deals
      • If a lead represents a strategic business partner, creating an Opportunity allows tracking co-branded projects or joint ventures.
      • Example: A lead from a distribution channel that will promote your services.

    Scenarios Where Lead Conversion into Opportunities is Not Needed

    1. Marketing-Nurtured Leads
      • When leads require further nurturing before they are ready for sales, skipping Opportunity creation avoids cluttering the pipeline.
      • Example: A user downloads an eBook or attends a webinar but has no immediate purchase intent.
    2. Low-Priority Leads (B2C Sales)
      • For small-scale, transactional sales without complex stages, converting to Opportunities may not be efficient.
      • Example: A lead wants to purchase a standard subscription plan online.
    3. Informational or Inquiry Leads
      • Leads who request product information or support but have no budget, authority, or intent to buy.
      • Example: A prospect asking about software compatibility for future consideration.
    4. Post-Sales or Support Requests
      • Leads that do not involve new revenue potential but are related to existing customer inquiries.
      • Example: A customer asking for training on already-purchased software.

    Scenarios Where Leads are Converted into Existing Opportunities

    1. Team-Selling Scenarios
      • Multiple contacts or departments within the same organization contribute to a single Opportunity.
      • Example: A lead from the finance team complements an existing Opportunity initiated by the IT department.
    2. Re-engagement of Stalled Opportunities
      • New leads from the same account bring renewed interest to previously inactive Opportunities.
      • Example: A lead provides new budget approval for a stalled deal.
    3. Cross-Selling and Upselling
      • When a lead is interested in additional services or upgrades related to an active Opportunity.
      • Example: A customer considering additional warranties or services after initiating a product purchase.
    4. Avoiding Duplicates
      • Prevent duplicate Opportunities by linking the lead to an existing one.
      • Example: A marketing campaign generates duplicate leads from the same company already in the pipeline.

    Most Common Real-World Scenarios

    • Opportunities are created for:
    • Deals requiring tracking, forecasting, or multiple stages (e.g., enterprise sales, long sales cycles, or partnerships).
    • Opportunities are avoided for:
    • Leads not sales-ready, transactional in nature, or aimed at marketing/educational purposes.
0/9000