Skip to main content

#Solution Architects11 discussing

I had a base 1GP managed package and 1 unmanaged packages. Recently i converted the based package to 2GP and wanted to convert the 1GP unmanaged packages to 2GP. 

I have looked for a way to do this and Unlocked packages(no namespace) seems to be the best way to do it. I have tried converting the same metadata of unmanaged package to Unlocked Package and installed in a test org, the unmanaged package fields do list under the Unlocked Package, But also under the Unmanaged package. I tried deleting the unmanaged package but it also removes the components under it. 

Need a way so i don't have to keep the Unmanaged package in the org after i have the Unlocked package. How you all are handling this scenario? 

 

#Second Generation Packages  #Generation Managed Package  #Salesforce Developer  #Solution Architects

1 answer
  1. Oct 27, 6:53 AM

    Hello @Abhishek Sinha

     

    Package conversion and migration to 2GP only work for managed 1GP packages. Unmanaged packages can't be converted. For those, you rebuild the package from its source. 

     

    If it's an unmanaged package:

    1. Retrieve the package's metadata into a Salesforce DX project:

      sf project retrieve start --package-name "<Package Name>" --target-org <org>

      Then convert it to source format if needed: sf project convert mdapi.

    2. Create a new package from that source. Use an unlocked package for internal/org use, or a managed 2GP package if you're an ISV distributing on AppExchange:

      sf package create --name "<Name>" --package-type Unlocked --path force-app

      sf package version create --package "<Name>" --installation-key-bypass --wait 20

    3. In existing orgs, the unmanaged components aren't linked to any package. Install the new package and test it in a sandbox first. Unlocked packages can take ownership of existing unpackaged metadata (see "Migrate Existing Metadata to Unlocked Packages" in the docs).

     

    If it's a managed 1GP package, Salesforce supports conversion and migration in three phases:

    1. Plan and test: keep releasing with 1GP. Convert and migrate only in scratch orgs or sandboxes. Get all subscribers onto the same 1GP version.

    2. Transition: convert your latest major.minor released version, promote it to released, then migrate subscribers with push upgrades (one time per subscriber). New features are still built in 1GP, then converted and push-upgraded.

    3. Fully on 2GP: confirm the move in your packaging org's Setup. After that, you can no longer create new major/minor 1GP versions (only patches for earlier versions).

     

    The subscriber's installed 1GP version must match the major.minor.patch version of the converted 2GP version you migrate them to. Migration doesn't change your metadata or subscriber data. 

     

     

Hi everyone,

I’m looking for some architectural input on a record visibility design for a multi-subsidiary arquitecture. 

 

Context:

  • Account and Quote OWDs are set to Private.
  • An ERP integration creates Quote records linked directly to QuoteAccountId (field when you activate the feature "Create Quotes without Opportunities"
  • All sales users share the same Profile and Role and public groups BUT
  • Field Sales users should only see Quotes linked to Accounts they own, provided the Quote and Account regions (e.g. Spain, France, etc.) match.

Current Solution:

To distinguish Field Sales users from back-office users, I created dedicated Public Groups per region (e.g. Group_FieldSales_RegionA, Group_FieldSales_RegionB).

A Record-Triggered Flow checks whether the Account Owner belongs to the corresponding Field Sales group. If so, the Flow creates a QuoteShare record for that user.

Importantly, these Public Groups created for the Field Sales users are not used in Sharing Rules

. They are only used by the Flow as an internal validation mechanism to identify whether the Account Owner is a Field Sales user. This is also important for managers with hybrid responsibilities, who may belong to both Field Sales and back-office groups (they are everywhere in every public group with execption of my newly created Field Sales public groups) 

 

Architectural Question:

There is a concern of non-developer members about using Public Groups and believes visibility should be based purely on Account Ownership.

  1. Would you consider using Public Groups as an internal identity/validation mechanism in Flow a sound architectural approach in this scenario?
  2. If Public Groups cannot be used, what would be a robust alternative for a Flow to identify Field Sales users, given that Profiles, Roles and public groups are shared and some users have hybrid responsibilities (Sales Managers are inside and outside at the same time)?

I’d appreciate your thoughts on the best practice for this design.

Thanks in advance! 

 

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

 

 

#Trailhead Challenges  #Trailhead  #Salesforce Developer  #Salesforce Admin  #Solution Architects  #Architects  #Enterprise Architecture  #Flow  #Security

4 answers
  1. Oct 6, 4:13 PM

    @Lena Wong

    You're right the business rule doesn't care who owns the Quote. The risk comes from how the platform stores the share, not from the rule. 

     

    Where the Quote owner matters (platform mechanics, not business logic) 

    A Flow created QuoteShare is a manual share (row cause "Manual"). Salesforce deletes manual shares on a record when that record's OwnerId changes. Your Flow most likely triggers on events like Quote created or Account owner changed. A Quote owner change isn't one of those events, so: 

    1. The ERP (or a user or mass transfer) changes the Quote's owner.
    2. The platform silently deletes the share the Flow created.
    3. Nothing re-runs the Flow, so the Account Owner loses access even though the business rule says they should have it.

    Fixes, in order of preference: 

     

    • Add a trigger path on Quote update when OwnerId changes, so the Flow recreates the share.
    • Add a scheduled reconciliation that compares expected and actual shares. This also catches other drift.

    A related edge case:

    if the Account Owner is also the Quote owner, they already have access. The Flow should skip creating the share in that case, because inserting a share for the owner is rejected or ignored. 

     

    If the ERP never changes Quote ownership

    (it creates Quotes under a fixed integration user and never updates them), this risk mostly goes away, and the Account owner, region, and bulk-load gotchas are what remain. I can't confirm that from here, so it's worth asking the ERP team. 

     

    On the permission set groups

     

    If every sales user is in the same Permission Set Group, that group can't tell Field Sales from back-office, so it doesn't help as the identifier. Option 2 only works with a separate, standalone permission set (for example

    Field_Sales_Spain) assigned directly to Field Sales users and not included in the shared group. Hybrid managers just get that one assigned too.

Hello Trailblazers,

I am preparing an Agentforce Solution Design for a client and would like guidance from experienced architects and consultants on how to approach the design comprehensively. 

 

The use case may involve Employee Agent,  Coworker Agent, and Out-of-the-Box Salesforce Agents

, Flex Prompt Template and I want to ensure I am covering all important aspects from business requirements through implementation, licenses, Flex Credit model, governance, and deployment. 

 

Any sample templates, reference designs, or lessons learned from real implementations would be greatly appreciated.

Thank you in advance for your guidance! 🚀 

#Agentforce #SalesforceAI #Solution Architects #AgentforceBuilder #Enterprise Architecture

2 answers
  1. Sep 29, 8:35 AM

    Hey Jiyaulla,

     

    Here’s how I would approach the solution design:

     

    1. Agent Boundaries & Routing

    • Split by persona: Don't build one monster agent. Keep Employee Desk (IT/HR Q&A via Knowledge), Coworker (sales/service reps on record pages), and OOTB Service Agent in clean, separate buckets.

     

    • Topics & Hand-offs: Limit each agent to 4–6 tightly scoped Topics. Write explicit "When to use" instructions so the reasoning engine doesn’t cross wires. Always map human escalation via Omni-Channel, carrying the chat summary over.

     

    2. Actions & Grounding (The Engine)

    • Actions: Use Autolaunched Flows for standard CRM updates and Invocable Apex for external API lookups. Keep JSON outputs short; feeding raw multi-page payloads burns tokens and slows reasoning down.

     

    • Flex Prompt Templates: Stick to a 4-part prompt: Role, Grounded Context, Guardrails (what NOT to do), and exact Output Format.

     

    • Knowledge & Data Cloud: If grounding with PDFs or policies, ensure your Data Cloud search indexes chunk properly. Watch Field-Level Security—if the running agent user can’t see the field, the LLM hallucinates.

     

    3. Trust, Guardrails & Security

    • Einstein Trust Layer: Decide upfront if PII needs data masking and where audit logs get retained.

     

    • Hard Refusals: Put explicit negative prompts inside each topic (e.g., "Never disclose salary bands; route user to Workday").

     

    4. Licenses & Consumption Reality Check

    • Cost control: Agentforce bills per conversation, and custom prompt calls burn credits. Don't use the LLM for things a simple Flow lookup or formula can solve deterministically.

     

    • Token limits: Heavy record grounding causes latency spikes. Keep grounding payloads minimal.

     

    5. ALM & Deployments (Where Projects Trip Up)

    • Metadata API: Topics, Actions, and GenAiPromptTemplate deploy through standard DevOps pipelines (Copado, Flosum, SFDX).

     

    • Manual Post-Deploy: Playbooks always break here. You must manually:
      1. Assign permissions and FLS to the Agent Execution User.
      2. Activate the Agent version in Target Org.
      3. Validate Data Cloud search index syncs.

Hi everyone,

I need some architectural advice on the best way to handle report and data access for a global team without turning role management into a maintenance nightmare.

 

  • We have report folders separated by countries: Country A Reports, Country B Reports, and Country C Reports.
  • In our Role Hierarchy, we have local roles at the bottom (e.g., Sales Rep Country A, Sales Rep Country B) and a high-level corporate role at the top called Global Management.

The Business Requirement:

 

Product manager users in their Country or Regional Level role complained not being able to access reports with data related to other countries, so we moved them to the

Global Management team for them to be able to see everything

. They require full visibility to access records (Accounts, Opportunities) globally, but they also need to open and view the reports inside the local folders of Country A, Country B, and Country C. 

 

The challenge:

 

We noticed that when we move a user from a local country role up to the

Global Management

role to give them global record visibility, they immediately lose access to some of the regional reports they could see before, or the reports show up completely empty for them. 

 

My Questions:

  1. How can we avoid constantly shifting users from one role to another just so they can see cross-country reports while maintaining access to their respective records? What is the cleanest architecture to decouple record visibility from report folder visibility?
  2. What is the Best Practice in Salesforce to solve this? Should we keep these global users in a specific role and grant them report folder access via a Public Group or a specific Permission Set?
  3. Why do some reports return empty or give errors to a user right after they are moved to a higher role in the hierarchy? Is it because of dynamic filters in the reports (like "My Team's Records" or "My Role" filters) that break when their branch changes?

Thank you so much for your help! 

 

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

 

 

#Trailhead Challenges  #Salesforce Developer  #Reports & Dashboards  #Solution Architects  #Sales Cloud

2 answers

We make outbound Apex callouts from a named credential to a vendor API. The vendor has moved that API onto a private cloud network, and our callouts now fail at the network layer before auth is ever evaluated. 

 

The only working solution we've found is for the vendor to allowlist Salesforce's published Hyperforce outbound ranges from https://ip-ranges.salesforce.com/ip-ranges.json (per KB 003876184, which explicitly recommends an IP allowlist for outbound Apex callouts since Salesforce outbound IPs may not resolve under *.salesforce.com). 

 

That works, but it has two drawbacks we'd like to avoid: the ranges are shared across all Salesforce tenants on that infrastructure, so it's a weak control rather than a real identity boundary and Salesforce advises allowlisting the entire file, which is a broad and evolving surface for the vendor's security team to accept. 

 

What I'm hoping someone has solved before-- 

 

  1. Salesforce's stated preferred alternatives are mTLS and domain allowlisting, but both assume the far side is filtering at the application layer. When the block is network-level, a client certificate doesn't get you through the firewall. Has anyone actually used mTLS to solve a reachability problem rather than an auth one, or am I right that it's the wrong tool here?
  2. Private Connect / Outbound Network Connection appears to be AWS PrivateLink only. Can anyone confirm whether Azure-hosted targets are supported, now or on the roadmap?
  3. Is there any other mechanism to give an external endpoint a stable or narrower egress identity for Apex callouts?
  4. For those who've hit this: did you end up putting a relay/gateway in front of the private service and pointing Salesforce at that instead? Would you recommend it?

Any experience appreciated, we have a go-live this week, so we're proceeding with the allowlist for now and looking for something more durable after. 

 

Articles that I have already read - 

 

1. https://help.salesforce.com/s/articleView?id=003876184&type=1

2. https://help.salesforce.com/s/articleView?id=000384438&type=1

 

#Salesforce Developer  #Architects  #Solution Architects  #TrailblazerCommunity  #Security  #Integration

1 answer
  1. Sep 16, 3:59 PM

    Hi Piyush, 

     

    1. You're right, mTLS is the wrong tool here. mTLS operates at the application/TLS layer after a TCP connection is already established — it proves identity to something that's already listening and accepting connections. If the vendor's firewall is dropping packets before that handshake even starts, no client cert changes that. mTLS solves "who is this," not "can this even reach me." 

     

    2. Private Connect is AWS PrivateLink-based only, so it's natively usable when the target sits in an AWS VPC. Azure targets aren't natively supported — you'd need inter-cloud private peering (AWS↔Azure via ExpressRoute/Direct Connect + a transit arrangement) which Salesforce doesn't self-serve; that requires your account team and is a heavier lift. No public roadmap confirmation of native Azure PrivateLink support as of now. 

     

    3. No native mechanism gives an Apex callout a narrower/tenant-specific egress identity beyond the published IP ranges — that's the actual gap you've identified. The published Hyperforce ranges are deliberately shared infrastructure-wide, not per-org, so it's a network-layer allowlist, not an identity boundary. There's no equivalent of "static NAT per org" for outbound Apex callouts today. 

     

    4. Yes — a relay/gateway in front of the private service is the standard, recommended pattern here, and I'd recommend it. Put a lightweight reverse proxy (or MuleSoft Anypoint, or even a small managed API gateway) in a publicly reachable spot the vendor controls, with the vendor's actual private-network service sitting behind it. Salesforce calls the gateway over the public internet (allowlist-friendly, small surface), and the gateway — sitting inside the vendor's trusted network — forwards to the private endpoint. This gets you real identity-based control (API key, mTLS, OAuth — now actually meaningful since the gateway is an app-layer listener) instead of a shared-IP-range network allowlist, and it decouples you from Salesforce's outbound range changes entirely, since your callout target becomes a stable endpoint the vendor owns. This is what most orgs land on for exactly this scenario — it's a small piece of infra to own, but it's the durable fix. 

     

    Reference:

    https://unofficialsf.com/understanding-private-connect/

Available for freelance and project work — Salesforce Solution Architect, 5x certified, Double Star Ranger 

 

One of the biggest pain points I hear from Salesforce orgs isn't what they want to build — it's that nobody fully understands what they already have. Undocumented automations, mystery Apex, flows nobody wants to touch, integrations with no runbook. If that sounds familiar, this might be for you. 

 

I offer:

  • Org assessments with full documentation of your processes, automation, and architecture
  • Process Builder & Workflow migration to modern Flow — or Apex where Flow hits its limits. If your org is still running on deprecated automation, that's a ticking clock
  • Builds, integrations, Health Cloud, Experience Cloud, MuleSoft, Apex and LWC development

15 years on the platform, PwC consulting background, currently the sole architect for a 200-user org with ERP integration and Data Cloud pipelines.  

 

Drop a comment or message me if you want a second set of eyes on your org.

 

Trailhead: https://trailblazer.me/id/egentile2

LinkedIn: https://www.linkedin.com/in/eileengentile/

 

#Freelance Project Work  #Flow  #ApexDevelopment  #LWC

#Job Postings  #Open Jobs  #Jobopportunities  

🚀 Tickets are live for Architect Dreamin' 2026!

 

Join experienced Salesforce Architects, CTAs, and solution leaders for deep-dive design sessions, hands-on labs, and real-world discussions. 

 

Jan 21–22 | Scottsdale, AZ 

 

Early Bird pricing available for one week → 

https://architectdreamin.us/2026-registration?ss_source=CGL&ss_campaign_name=Reg07

 

@Susan Thayer @Marlene Guerra-Reeve @Jon Cline @Melissa Shepard @Chris Pifer @Paul Mccollum MVP @Steve Simpson @Architect Group, Los Angeles, US

 

 

#Architects  #Solution Architects  #Technical Architect  #Architecture & Solution Design  #Architect  #Integration Architect

Check out Be More Solution Architect with @Gordon Lee

 

In this episode we discuss the role of a Solutions Architect in the Salesforce nonprofit sector, emphasizing the importance of trust, collaboration, and soft skills.

 

Listen via the Audio Podcast Platform of your choice

Watch on YouTube 

#Salesforce #TrailblazerCommunity #MVP #SalesforceMVP #Solution Architects #CRM Configuration #Architecture & Solution Design

 

@Trailblazer Community Cove @* Salesforce Platform * @* Customer Success *  @Nonprofit Hub

4 comments