# Beyond The Cloud Blog > Salesforce articles, one-minute tips and open-source libraries from the Beyond The Cloud team: Apex, Lightning Web Components, SOQL, architecture, CI/CD, AppExchange and Agentforce. Beyond The Cloud is a senior-only Salesforce consultancy from Kraków, Poland. Company site: https://beyondthecloud.dev. Open-source libraries (Apex Fluently): https://apexfluently.beyondthecloud.dev. Every page has a markdown version at its URL plus `.md`; the links below point to them. ## Sections - [Blog](https://blog.beyondthecloud.dev/blog.md): long-form articles - [Tips](https://blog.beyondthecloud.dev/tips.md): one-minute Salesforce tips - [Tips full text](https://blog.beyondthecloud.dev/tips/llms.txt): every tip with its full transcript in one file - [Authors](https://blog.beyondthecloud.dev/authors.md) - [Sitemap](https://blog.beyondthecloud.dev/sitemap.xml) ## Articles: Apex - [Trigger Lib](https://blog.beyondthecloud.dev/blog/trigger-lib.md): Trigger Lib is an Apex trigger framework that helps you stay within Salesforce limits. It runs queries and DML in bulk for you, and its guardrails stop developers and AI agents from running SOQL or DML for every record. - [Framework-Driven Development](https://blog.beyondthecloud.dev/blog/framework-driven-development.md): Framework-Driven Development can be extremely useful in the AI era, when we generate code rather than write it by hand. It has a few assumptions: frameworks should be idiot-proof (AI-proof), generated code should be optimized against limits, and framework design should enforce code quality. - [Apex Character Limit – What to do?](https://blog.beyondthecloud.dev/blog/apex-character-limit.md): Everything about the Salesforce Apex character limit: how characters are counted, what is excluded, what actually breaks at 100%, how to get the limit increased, and a formatting change that cut 14.75% from a single class. - [Beyond Best Practices – Why Following the Rules Can Break Your Code? – Czech Dreamin’ 26, Polish Dreamin’ 26](https://blog.beyondthecloud.dev/blog/why-following-the-rules-can-break-your-code.md): Following best practices blindly can make code worse. This post shows that rules are context-dependent – what improves readability, maintainability, or architecture in one case may add unnecessary complexity in another. Understand the trade-offs before applying any rule. - [Apex Security and Sharing](https://blog.beyondthecloud.dev/blog/apex-security-and-sharing.md): A practical guide to Salesforce security in Apex: how FLS and sharing really work, when to use USER_MODE, WITH SECURITY_ENFORCED, or stripInaccessible, and how class sharing keywords affect record access. - [How to implement marker interfaces in Apex?](https://blog.beyondthecloud.dev/blog/how-to-implement-marker-interfaces-in-apex.md): Marker interfaces are a familiar concept in Java but rarely discussed in Apex. This article introduces how they work, and how you can apply the same pattern in your own code. Through a practical example involving payment methods and optional confirmation modes, it demonstrates how marker interfaces let you extend behavior without modifying existing logic, illustrating a clean, compositional approach to flexibility in Apex. - [Salesforce Code Review & Handover Bingo: Common Mistakes and Red Flags 🚩](https://blog.beyondthecloud.dev/blog/salesforce-code-review-handover-bingo-common-mistakes-and-red-flags.md): Whenever a project is handed over to you, some sort of review or state-of-the-art check should be done. We can make it a more fun, team activity and fill the bingo card during the investigation! Image done using Bingo Baker. To make this bingo play have some fun-factor, the mentioned concepts have different severity – ... - [Apex Queueable Processing Framework](https://blog.beyondthecloud.dev/blog/apex-queueable-processing-framework.md): Struggling with “Too many queueable jobs” errors in Salesforce? This guide introduces AsyncLib, a framework that manages Apex asynchronous processing with queueable chains. It helps overcome strict governor limits by chaining jobs using Salesforce’s Finalizer interface. AsyncLib simplifies async execution, error handling, and scheduling for Queueable, Batchable, and Schedulable jobs—no more complex workarounds or manual tracking. - [Importance of Having a Single Flow Trigger](https://blog.beyondthecloud.dev/blog/importance-of-having-a-single-flow-trigger.md): Splitting trigger logic into multiple flows seams tempting, but it comes with a big disadvantage. Check how to avoid this mistake and adjust your strategy based on your project. - [Generic Code: What It Is and What It Is Not? – Polish Dreamin’ 25](https://blog.beyondthecloud.dev/blog/generic-code-in-salesforce.md): Learn how to build truly generic code that’s easy to adopt, flexible, and avoids duplication. Uncover key principles, patterns, and real-world tips for writing maintainable code that focuses on the core problem and fosters effective collaboration. - [List View API Updates in Spring’25 Release](https://blog.beyondthecloud.dev/blog/list-view-api-updates-in-spring25-release.md): Explore the power of Salesforce’s Spring’25 update with the enhanced lightning/uiListsAPI. This post dives into the expanded capabilities of List Views, highlighting its newfound ability to perform full CRUD operations. Learn about the various functions available in the adapter and discover practical examples of how to implement them in your Salesforce environment. Uncover how this update simplifies the development process, reduces maintenance of custom components, and optimizes your use of Salesforce platform features. - [Apex Object Oriented Programming – Hands-On](https://blog.beyondthecloud.dev/blog/apex-object-oriented-programming.md): Have you ever had difficulties with refactoring existing code? Ever wondered if your code is really open for extensions and closed for modifications? Try this Hands-On exercises to find out how to make you code clean and reusable. - [Salesforce Mock in Apex Tests](https://blog.beyondthecloud.dev/blog/salesforce-mock-in-apex-tests.md): Executing tests takes forever? You don’t have integrations in development environments? Your tests give different results depending on the instance? No worries, check if you can benefit from Mocking or Stubbing in your tests and more! - [Why do you need a Apex Selector Layer?](https://blog.beyondthecloud.dev/blog/why-do-you-need-selector-layer.md): A Selector Layer centralizes SOQL queries, ensuring consistency, FLS, sharing rule enforcement, and easier testing with mocking. It avoids duplication, supports caching, and simplifies updates, making your code cleaner, scalable, and more maintainable. - [Future vs Queueable](https://blog.beyondthecloud.dev/blog/future-vs-queueable.md): In Apex, for a long time, a go to Asynchronous method was @Future annotation. Meanwhile, Queueable interface got built up with many useful tools to help developers. Is Queueable better now? Where does it stand in comparison to the @Future? Are there use cases when @Future is still valid? This guide will help you learn everything you need to know about using Asynchronous technologies. - [LWC and Apex communication – the Ultimate Guide](https://blog.beyondthecloud.dev/blog/lwc-and-apex-communication-the-ultimate-guide.md): See the ultimate guide for LWC and Apex connectivity solutions – how to get data, how to use wire and how to refresh cache – all in one place! - [Type Casting in Apex](https://blog.beyondthecloud.dev/blog/type-casting-in-apex.md): How Apex type casting works? How to cast List in Apex? How to cast Apex Map? Answers to these questions and much more can be found in this post! - [Client Credentials custom Auth. Provider](https://blog.beyondthecloud.dev/blog/client-credentials-custom-auth-provider.md): Do you need to use Client Credentials flow? Or you are just wondering how to create one? Check this step-by-step guide with example on building custom Auth. Provider for Client Credentials. Contains a real life example using PayU API. - [Apex CPU Benchmarking](https://blog.beyondthecloud.dev/blog/apex-cpu-benchmarking.md): Have you ever encountered the infamous Apex CPU time limit exception? Check out this post to see how to efficiently measure the performance of your Apex code. - [SOQL Lib](https://blog.beyondthecloud.dev/blog/soql-lib.md): The SOQL Lib provides functional constructs for SOQL queries in Apex. Use the SOQL Lib as a Selector Layer on your project. - [Static in Apex Salesforce](https://blog.beyondthecloud.dev/blog/static-in-apex.md): Static variables are a key aspect of apex programming that can significantly enhance code functionality and efficiency. - [First Look on Code Builder](https://blog.beyondthecloud.dev/blog/code-builder-overview.md): Code Builder is a new IDE created by Salesforce. It is meant to be run entirely in the browser, and comes with the Salesforce Extension pre-installed. Let see how reality looks like! - [Apex Triggers Introduction](https://blog.beyondthecloud.dev/blog/apex-triggers.md): Preview and introduction to Apex Triggers. Learn how to define one and its capabilities. - [Having troubles with Navigation Menus after Spring ’23 update?](https://blog.beyondthecloud.dev/blog/having-troubles-with-navigation-menus-after-spring-23-update.md): Having troubles with Navigation Menus after Spring ’23 update? Check out our post for a quick fix and solution! - [System.Assert Class vs System.assertEquals methods](https://blog.beyondthecloud.dev/blog/system-assert-class-vs-system-assert-equals-methods.md): Salesforce released new Assert methods in Winter 23. Are they better or worse than existing assert methods? Should we replace the old ones with new methods? Check this article to find out! - [Publishing Visual Studio Code Extension](https://blog.beyondthecloud.dev/blog/visual-studio-code-extension.md): How to make and share a VS Code extension? It is easier than you think. Follow these steps to add a new extension to the Marketplace. - [How to check if list is empty in Apex](https://blog.beyondthecloud.dev/blog/how-to-check-if-list-is-empty-in-apex.md): Do you know what is the best way to check if the list is empty in Apex? Find out how to do it like a pro! - [Country State Dependent Picklist in Apex](https://blog.beyondthecloud.dev/blog/country-state-dependent-picklist-in-apex.md): How to get a country-state dependent picklist in Apex? Check various methods for your frontend and backend solution. - [Salesforce To Google REST API Integration](https://blog.beyondthecloud.dev/blog/salesforce-to-google-rest-api-integration.md): Integrate your Salesforce environment with Google by REST API. Check the completed integration guide. - [Apex Test Data Factory](https://blog.beyondthecloud.dev/blog/apex-test-data-factory.md): Use Apex Test Data Factory to create Test Data for your Unit Tests. Don’t struggle with data creation anymore! - [Abstract, Virtual, Interface in Apex](https://blog.beyondthecloud.dev/blog/abstract-virtual-interface-in-apex.md): Find the differences between Abstract, Virtual, and Interface implementation in Apex code. Understand the purpose and make your code better. - [Constants in Apex](https://blog.beyondthecloud.dev/blog/constants-in-apex.md): With Constants framework you will be able to keep final values in fancy way. Check how to use it! - [Apex Debugging](https://blog.beyondthecloud.dev/blog/apex-debugging.md): Salesforce provides sophisticated methods to debug your apex code. Check how to use all of them and resolve issues more efficiently. - [Salesforce Platform Cache](https://blog.beyondthecloud.dev/blog/salesforce-platform-cache.md): Platform Cache is salesforce feature, which allows you improve you app performance and improve user experience. - [Detect “Log in to Community as User” in Apex](https://blog.beyondthecloud.dev/blog/detect-log-in-to-community-as-user.md): The question is “How we can detect that current user is logged in to the community on behalf?” ## Articles: Learning - [Upsert & Parent Lookup via Name Field (idLookup property)](https://blog.beyondthecloud.dev/blog/upsert-parent-lookup-via-name-field-idlookup-property.md): Learn how upsert works in Salesforce apex, how to create child and parent in one DML and how to go beyond external ids when doing upserts. - [Arrow Function vs Regular Function in LWC](https://blog.beyondthecloud.dev/blog/arrow-function-vs-regular-function-in-lwc.md): Learn the key differences between regular functions, arrow functions, and methods in Lightning Web Components (LWC). Discover best practices, use cases, and how this, arguments, hoisting, and constructors behave in JavaScript and Salesforce LWC. - [Top 5 Salesforce Sales Cloud Implementation Mistakes](https://blog.beyondthecloud.dev/blog/sales-cloud-implementation-mistakes.md): This post highlights 5 common mistakes in Sales Cloud implementations – from poor data quality and lack of user training to bad segmentation and weak business involvement – and shares practical tips to avoid them for smoother, more effective projects. - [Salesforce Org Types for AppExchange Partners](https://blog.beyondthecloud.dev/blog/salesforce-org-types-for-appexchange-partners.md): Learn about key Salesforce org types for AppExchange partners, including PBO, LMO, FMO, Devhub, Scratch Orgs, and Trialforce Orgs. Understand their roles in app development, packaging, licensing, and trials to optimize your AppExchange journey. - [Simple Salesforce CICD for Developers](https://blog.beyondthecloud.dev/blog/simple-salesforce-cicd.md): Set up a Salesforce CI/CD pipeline easily! Automate deployments, run tests, and more with our step-by-step guide. Happy coding! - [Advanced Salesforce LWC debugging with Chrome Developer Tools](https://blog.beyondthecloud.dev/blog/chrome-dev-tools-for-salesforce-lwc-developers.md): LWC debugging and development with Chrome Developer Tools – learn how Salesforce LWC developer can debug and develop Lightning Web Components effectively without console.logs. - [Beyond If Statements: Ways to avoid IFs – Polish Dreamin’ 24](https://blog.beyondthecloud.dev/blog/beyond-if-statements-ways-to-avoid-ifs.md): Code is a representation of business requirements. Business requirements vary for each company, but most of them have an IF-THEN structure. It’s quite common to see IF statements in our code. However, an increasing number of IFs can make our code hard to read and understand. - [Advanced Promises in LWC](https://blog.beyondthecloud.dev/blog/advanced-promises-in-lwc.md): How and when to use Promise.all, allSettled, any, and race in LWC? Check out our latest post about advanced promises! - [Refs vs QuerySelector in LWC](https://blog.beyondthecloud.dev/blog/refs-vs-query-selector-in-lwc.md): We have two ways to query DOM elements in LWC: refs and querySelector.Which one is better? Let’s cover it in this post. - [Top 10+ Salesforce deployment errors](https://blog.beyondthecloud.dev/blog/salesforce-deployment-errors.md): Mastering Salesforce deployments can be tricky. Learn how to avoid 10+ common deployment errors with our expert guide. Get started now! - [Then vs Async Await in LWC](https://blog.beyondthecloud.dev/blog/then-vs-async-await-in-lwc.md): then and await are key concepts in asynchronous JavaScript programming. Understand the differences between them and check the best practices. - [Top 3 Git Branching strategies for Salesforce](https://blog.beyondthecloud.dev/blog/git-branching-strategies-for-salesforce.md): An overview of the top 3 git branching strategies for Salesforce. Pros & Cons included - [Mixins in Lightning Web Components – Dreamforce 2022 session](https://blog.beyondthecloud.dev/blog/mixins-in-lwc-dreamforce-2022.md): Learn what the Javascript mixins are and how to use them in Lightning Web Components. - [Hangman Game Built with LWC](https://blog.beyondthecloud.dev/blog/hangman-in-lwc.md): Learn how to build hangman game using LWC and vanilla JS - [Promises in LWC](https://blog.beyondthecloud.dev/blog/promises-in-lwc-lightning-web-components.md): What is a Promise? How does it work in LWC? What is the difference between then/catch and async/await? Let’s check. - [How to recover deleted files in git](https://blog.beyondthecloud.dev/blog/how-to-recover-deleted-files-in-git.md): How to recover deleted files in git which were not committed? Not easy but possible. - [How to deploy in Salesforce](https://blog.beyondthecloud.dev/blog/how-to-deploy-in-salesforce.md): How business logic works in Salesforce is described by metadata. So how to deploy it in the best possible way? ## Articles: AppExchange - [Salesforce Connected App to ECA: What the May 11, 2026 Deadline Actually Requires (and What It Doesn’t)](https://blog.beyondthecloud.dev/blog/salesforce-connected-app-to-eca-what-the-may-11-2026-deadline-actually-requires-and-what-it-doesnt.md): The May 11, 2026 ECA deadline is real — but most write-ups in circulation are getting the scope wrong in both directions. Learn what Salesforce is actually mandating, which OAuth flows are out of scope, and how 1GP partners can hit the deadline without committing to a multi-quarter 2GP migration. - [Free Trials on AppExchange: A Strategy Comparison](https://blog.beyondthecloud.dev/blog/appexchange-trials.md): Learn how to offer free trials on Salesforce AppExchange and choose the strategy that best fits your app and business goals. - [Reducing Manual Setup Steps for AppExchange Apps](https://blog.beyondthecloud.dev/blog/reducing-manual-setup-appexchange-apps.md): Learn how to reduce post-installation manual steps for your AppExchange managed package. Improve user experience and simplify necessary configurations. - [AppExchange App Support with Debug Mode](https://blog.beyondthecloud.dev/blog/appexchange-app-debug-mode.md): Learn how to improve your Salesforce AppExchange app support with debug mode for managed packages. - [Salesforce AppExchange Lead Management](https://blog.beyondthecloud.dev/blog/appexchange-lead-management.md): Learn how to manage and track leads for your AppExchange app. React to different prospect activities, evaluate marketing campaigns efficiency, and launch referral programs. - [Feature Parameters in Salesforce AppExchange Applications](https://blog.beyondthecloud.dev/blog/appexchange-feature-parameters.md): Learn how to use Salesforce AppExchange Feature Parameters to manage features, customize pricing and app tiers, and track customer metrics effectively in your managed package. - [AppExchange App Support with Subscriber Console](https://blog.beyondthecloud.dev/blog/appexchange-subscriber-console.md): Optimize Salesforce AppExchange app support with the Subscriber Console. Debug issues, manage protected settings, and access managed pakage logs directly on your subscriber’s org. - [Salesforce AppExchange Marketplace Analytics](https://blog.beyondthecloud.dev/blog/appexchange-marketplace-analytics.md): Improve your AppExchange listing with AppExchange Marketplace Analytics. Learn how to track views, leads, installs, and more using Salesforce AppExchange Analytics. Optimize your listings performance and SEO with key insights on visitor behavior and engagement. - [Salesforce AppExchange App Analytics](https://blog.beyondthecloud.dev/blog/appexchange-app-analytics.md): Learn how to utilize AppExchange App Analytics to monitor the usage of your Salesforce AppExchange app. Make informed product roadmap decisions, drive growth and prevent churn.Learn about ready-to-use solutions and build-your-own implementation steps. - [How to Publish a Salesforce AppExchange App – Checklist](https://blog.beyondthecloud.dev/blog/appexchange-app-publication-journey.md): Learn how to build and publish your app on Salesforce AppExchange with the complete step-by-step AppExchange App Publication Checklist. ## Articles: SFDX - [German’s engineer trick for perfect Salesforce CICD](https://blog.beyondthecloud.dev/blog/salesforce-deploy-before-merge.md): Learn the deploy-before-merge strategy for bulletproof Salesforce CI/CD. Avoid deployment failures and broken branches with this proven DevOps approach. - [Teach an Old Org New Tricks – enabling Scratch Orgs in legacy project](https://blog.beyondthecloud.dev/blog/scratch-orgs-in-legacy-project.md): A deep dive into enabling Salesforce Scratch Orgs in legacy projects. Overcome technical debt, metadata complexities, and create reproducible dev environments. - [Salesforce Functions in CICD](https://blog.beyondthecloud.dev/blog/salesforce-functions-in-cicd.md): Function as a Service in Salesforce? Finally! Here are 7 simple steps on how to include it in CICD. ## Articles: Code Review - [Salesforce Naming Convention](https://blog.beyondthecloud.dev/blog/salesforce-naming-convention.md): In programming, naming conventions are crucial for clarity and collaboration. Choose intention-revealing names, avoid ambiguity, and maintain consistency to enhance code readability and convey meaningful context to fellow developers. - [Format your code with formatting tool](https://blog.beyondthecloud.dev/blog/format-your-code-with-formatting-tool.md): Code formatting across the project should be consistent.Choose a formatting tool, configure it, and stick to it no matter what. - [Do not use Ternary operator to return Boolean](https://blog.beyondthecloud.dev/blog/do-not-use-ternary-operator-to-return-boolean.md): Do not use Ternary operator, since comperation statement returns Boolean. ## Articles: LWC - [Custom Logout in Experience Cloud](https://blog.beyondthecloud.dev/blog/custom-logout-in-experience-cloud.md): Create your own logout UI with Aura/LWC and invoke a standard logout event. - [Custom Types in LWC Lightning Datatable](https://blog.beyondthecloud.dev/blog/custom-types-in-lwc-lightning-datatable.md): Create a custom type cell for your Lightning Web Component lightning-datatable. - [How to get URL parameters in LWC?](https://blog.beyondthecloud.dev/blog/get-url-parameters-in-lwc.md): Check an easy way to get all URL parameters in LWC and CurrentPageReference from the lightning/navigation module! ## Articles: Flow - [Bulkification in Flows](https://blog.beyondthecloud.dev/blog/bulkification-in-flows.md): Bulkification is a fundamental principle in Salesforce automation, ensuring that Flows and Apex processes handle multiple records efficiently instead of processing them one by one. While Salesforce claims that Flows automatically bulkify actions, developers must actively design for bulk operations to prevent hitting governor limits. This article explores how Flow bulkification works, highlights common antipatterns, and provides best practices to optimize performance in record-triggered Flows. - [Salesforce Flow Considerations](https://blog.beyondthecloud.dev/blog/salesforce-flow-considerations.md): Flows are an amazing automation tool that offers you a lot of possibilities. However it also have a lot of limitations you need to be aware of. ## Articles: Integration - [Salesforce OAuth 2.0 Flows: Integrate in the right way](https://blog.beyondthecloud.dev/blog/salesforce-oauth-2-0-flows-integrate-in-the-right-way.md): TL;DR I just want to know which flow to use If you’re short on time or just want to know what flow is for you, just go here. Introduction Brief Overview OAuth, which stands for Open Authorization, is an open-standard protocol that provides users with secure access to resources on an application, such as Salesforce, ... - [Web-to-Anything: Secure Forms with FormAssembly](https://blog.beyondthecloud.dev/blog/web-to-anything.md): Learn how to build secure web-to-anything Salesforce forms using FormAssembly. ## Articles: Framework - [LWC Getters and Setters – The Last Frontier](https://blog.beyondthecloud.dev/blog/lwc-getters-and-setters-the-last-frontier.md): See best practices, learn when and how to use getters and setters in LWC. - [Salesforce SPA using LWC](https://blog.beyondthecloud.dev/blog/salesforce-spa-using-lwc.md): Create a powerful Single Page Application using Lightning Web Components. The perfect approach for internal and external Salesforce apps. ## Articles: Business Development - [The Real Cost of Salesforce Consulting Services](https://blog.beyondthecloud.dev/blog/salesforce-consulting-agency-costs.md): Hourly rate isn’t the real cost of Salesforce consulting. Compare cheap vs senior teams, hidden rework and review costs, and use the costs comparison calculator for hard numbers on time and true cost. ## Articles: Configuration - [Beyond Org Config & Secrets: Are You Doing It Right?](https://blog.beyondthecloud.dev/blog/beyond-org-config-secrets-are-you-doing-it-right.md): A comprehensive guide to configuration and secrets management in Salesforce: where to store sensitive data, why Custom Metadata Types and Custom Settings fall short for secrets, and how Named Credentials provide encrypted callout authentication. It also covers CI/CD automation for multi-environment config management and introduces the managed package pattern, using protected Custom Settings and CMDT inside a namespace, as the only mechanism on the platform that makes stored values truly invisible to the subscriber org. ## Tips - [Access HTML attributes in CSS](https://blog.beyondthecloud.dev/tips/access-html-attributes-in-css.md): You can use the attr() function to retrieve the value of an attribute of the selected element and use it in the stylesheet. - [ANT Migration Tool End of Life](https://blog.beyondthecloud.dev/tips/ant-migration-tool-end-of-life.md): The Ant Migration Tool's last release was Winter '24 (v59.0). It still runs, but it gets no new functionality and no support — Salesforce CLI is the officially maintained client for the Metadata API. - [Apex Comparator Interface](https://blog.beyondthecloud.dev/tips/apex-comparator-interface.md): Thankfully, in Winter ‘24 Apex got similar interface that we can use with Lists! - [Apex sharing keywords](https://blog.beyondthecloud.dev/tips/apex-sharing-keywords.md): Apex code works based on the closest sharing keyword. This means that for every class you can define different behavior, and even run multiple scenarios from a single start point! - [ApexLogs good practices](https://blog.beyondthecloud.dev/tips/apexlogs-good-practices.md): Go to Developer Console, Query Editor and do the following: 1. Enter SELECT Id, LogLength FROM ApexLog ORDER BY LogLength DESC into input and click “Execute” 2. Select all the logs (logs… - [Assign record values dynamically in Apex](https://blog.beyondthecloud.dev/tips/assign-record-values-dynamically-in-apex.md): Each standard and custom object inherits methods from the SObject class. - [Avoid too many Queueable jobs](https://blog.beyondthecloud.dev/tips/avoid-too-many-queueable-jobs.md): That means that in the sync context, you can enqueue up to 50 queueables, 50 futures, and 100 batches, but in a queueable context, only 1 queueable and 50 futures. - [Boolean parameters in LWC](https://blog.beyondthecloud.dev/tips/boolean-parameters-in-lwc.md): In first component we’ve skipped boolean-parameter - in that way our component will use the default value, which is false. In second component simple adding boolean-parameter as… - [Build Dynamic Report for Record Page](https://blog.beyondthecloud.dev/tips/build-dynamic-report-for-record-page.md): This example contains sum of amount for all opportunities related to the account. Check next pages to see how to do that in 6 simple steps! - [Cache with getters and setters](https://blog.beyondthecloud.dev/tips/cache-with-getters-and-setters.md): Static data such as object metadata or user profiles Sets and Maps Results of SOQL queries Results of API callouts - [Catch Multiple Exceptions](https://blog.beyondthecloud.dev/tips/catch-multiple-exceptions.md): Did you know that Exceptions can be chained? - [Check Transaction Context](https://blog.beyondthecloud.dev/tips/check-transaction-context.md): The Request class is a viable solution to your problem. Check the next page for details. - [Contribute to open source](https://blog.beyondthecloud.dev/tips/contribute-to-open-source.md): The contribution loop on GitHub, end to end: identify the repository, fork it, branch, commit, push to your fork, and open a pull request against the upstream project. - [Control tabs with WorkspaceAPI](https://blog.beyondthecloud.dev/tips/control-tabs-with-workspaceapi.md): With the Spring ‘24 release, Salesforce enabled the Workspace API in Lightning Web Components! - [CSS calc()](https://blog.beyondthecloud.dev/tips/css-calc.md): You can use the CSS calc(expression) function to dynamically calculate the CSS props of the elements. You can mix the units inside. This feature is especially useful when combined with… - [CSS max min functions](https://blog.beyondthecloud.dev/tips/css-max-min-functions.md): You can use the CSS min() and max() functions to dynamically calculate CSS props of the elements and put min/max constraints on them. - [Current class name](https://blog.beyondthecloud.dev/tips/current-class-name.md): To get the names, simply create a new exception and check a stack trace! - [Current User in LWC](https://blog.beyondthecloud.dev/tips/current-user-in-lwc.md): There’s additional property which can be imported - isGuest. isGuest s a boolean value indicating whether the user is a guest user and it should be used in the Experience Builder sites. - [Custom Labels in LWC](https://blog.beyondthecloud.dev/tips/custom-labels-in-lwc.md): To use labels in HTML, you need to create an additional component variable (labels). - [Database Operation Access Level](https://blog.beyondthecloud.dev/tips/database-operation-access-level.md): Apex code, by default, operates in system mode, granting it significantly higher permissions compared to the user executing it. - [DataWeave in Apex](https://blog.beyondthecloud.dev/tips/dataweave-in-apex.md): DataWeave is a programming language, created by MuleSoft for accessing and transforming data. Salesforce allows to use DataWeave scripts in Apex, to simplify complex transformation… - [Debounce technique in LWC](https://blog.beyondthecloud.dev/tips/debounce-technique-in-lwc.md): Debouncing is a technique to make sure that the time consuming functions aren’t called too frequently. - [Debug with Assert class](https://blog.beyondthecloud.dev/tips/debug-with-assert-class.md): However, debugging with the Assert class is a straightforward and efficient way to debug both Apex and Apex Unit Tests. - [Declare static functions in anonymous Apex](https://blog.beyondthecloud.dev/tips/declare-static-functions-in-anonymous-apex.md): Declare static functions and classes in Anonymous Apex - [Deploy before Merge](https://blog.beyondthecloud.dev/tips/deploy-before-merge.md): "Deploy before merge" is a CI/CD technique: the pipeline deploys — and optionally runs tests — while the pull request is still open, and only merges if that deployment succeeds, so a broken main branch never blocks the team. - [Deploy to production](https://blog.beyondthecloud.dev/tips/deploy-to-production.md): By default when deploying items to Production you would run local tests (all tests except for Unlocked/Managed Packages) - [Destructuring assignment](https://blog.beyondthecloud.dev/tips/destructuring-assignment.md): The destructuring assignment syntax is a JavaScript expression that makes it possible to unpack values from arrays or properties from objects into distinct variables. - [Do not check if List is empty](https://blog.beyondthecloud.dev/tips/do-not-check-if-list-is-empty.md): DML operations on empty lists are NOT consuming the transaction DML limits? - [Do not combine then and await in LWC](https://blog.beyondthecloud.dev/tips/do-not-combine-then-and-await-in-lwc.md): The code is confusing. Devs who are not familiar with Promises very well, will not follow the code flow. It's hard to understand. Why do we need “await“ if there is “then“? What is the… - [Do not use JSON.stringify to pass params to Apex](https://blog.beyondthecloud.dev/tips/do-not-use-json-stringify-to-pass-params-to-apex.md): Serializing parameters before passing them to Apex is considered bad practice because it leads to unclean code and negatively impacts performance. - [Document Design Mode](https://blog.beyondthecloud.dev/tips/document-design-mode.md): Do you know that there is a special HTML feature that allows you to modify the content of the web page without touching the underlying code? It is called document design mode - [Don't name classes after System classes](https://blog.beyondthecloud.dev/tips/dont-name-classes-after-system-classes.md): Each defined object, custom or standard, is automatically represented by its own apex class. - [Dynamic CSS classes in LWC](https://blog.beyondthecloud.dev/tips/dynamic-css-classes-in-lwc.md): Nested ternaries in a class getter stop being readable the moment a second condition appears. A small classSet helper turns the same logic into a flat map of class name to condition. - [Easily navigate to any record](https://blog.beyondthecloud.dev/tips/easily-navigate-to-any-record.md): Simply paste the record ID after your domain, and you will be redirected to your record page - [Effective variable debugging](https://blog.beyondthecloud.dev/tips/effective-variable-debugging.md): When you use System.debug() to display values of lists or big objects you usually see that the output is truncated: - [Fetch Metadata Records without using SOQL](https://blog.beyondthecloud.dev/tips/fetch-metadata-records-without-using-soql.md): You can save on SOQL query limits when fetching Custom Metadata records. - [Generate code with Einstein](https://blog.beyondthecloud.dev/tips/generate-code-with-einstein.md): Fear no more, check how to use Einstein for Developers! - [Generate Unique Ids](https://blog.beyondthecloud.dev/tips/generate-unique-ids.md): Starting from the Spring ’24 release, you can generate UUIDs (Universal Unique Identifiers) in Apex. - [Generate UUID in Apex](https://blog.beyondthecloud.dev/tips/generate-uuid-in-apex.md): UUID, or Universally Unique Identifier, is a 128-bit label with a probability of duplication considered close enough to zero to be negligible. - [Generic onChange event handler in LWC](https://blog.beyondthecloud.dev/tips/generic-onchange-event-handler-in-lwc.md): Some components have many input components or elements that we need to track in our variables. Creating handler methods for onChange events is the right way to update the variable in our… - [Get list of one column SOQL](https://blog.beyondthecloud.dev/tips/get-list-of-one-column-soql.md): The simplest way to retrieve record IDs without a for loop is by using a Map and the keySet() method. - [Get notified when SF is down](https://blog.beyondthecloud.dev/tips/get-notified-when-sf-is-down.md): status.salesforce.com lets you subscribe to a specific instance and pushes an email or SMS the moment a service disruption, performance degradation or maintenance window is posted for it. - [Get set of Ids from SObject List](https://blog.beyondthecloud.dev/tips/get-set-of-ids-from-sobject-list.md): Get set of Ids from your SObject list without iteration - [GET URL Params](https://blog.beyondthecloud.dev/tips/get-url-params.md): The easiest way to obtain URL parameters is by using CurrentPageReference. Below, you can find an example of currentPageReference. As you can see, all parameters are stored in the state… - [github.dev web-based editor](https://blog.beyondthecloud.dev/tips/github-dev-web-based-editor.md): Swap github.com for github.dev in any repository URL and a browser-based VS Code opens on that repo — search files, edit and commit, without cloning anything. - [Handle Uncatchable Exceptions in Batch](https://blog.beyondthecloud.dev/tips/handle-uncatchable-exceptions-in-batch.md): However, there is another way to achieve this in Apex Batches. Check the next page to see how. - [Handy Git commands](https://blog.beyondthecloud.dev/tips/handy-git-commands.md): Three commands for the everyday awkward moments: git stash to switch branches with dirty files, git checkout to pull one file from another branch, and git reset --hard to throw a local branch away. - [How to deal with asynchronous code in LWC](https://blog.beyondthecloud.dev/tips/how-to-deal-with-asynchronous-code-in-lwc.md): This approach results in a callback nest that is difficult to understand and debug. On the next page, you will learn how to do it properly! - [How to format date in LWC](https://blog.beyondthecloud.dev/tips/how-to-format-date-in-lwc.md): In order to format date in LWC, you can use Intl.DateTimeFormat object which enables language-sensitive date and time formatting. - [How to render Map in LWC](https://blog.beyondthecloud.dev/tips/how-to-render-map-in-lwc.md): LWC for:each can't use Map to show elements, but it's easy to make it happen! - [How to share CSS styles between LWC components](https://blog.beyondthecloud.dev/tips/how-to-share-css-styles-between-lwc-components.md): Imagine that you want to build an internal CSS library or every component that you expose on the Experience Cloud site must reuse similar styling. - [How to use errorCallback](https://blog.beyondthecloud.dev/tips/how-to-use-errorcallback.md): LWC have dedicated errorCallback lifecycle hook, which can catch any uncaught errors from descendent components in its tree! - [How to use renderedCallback](https://blog.beyondthecloud.dev/tips/how-to-use-renderedcallback.md): LWC have dedicated renderedCallback lifecycle hook, which fires when component has finished rendering phase. It’s very useful, but can be dangerous when used incompetently. - [HTTP status codes](https://blog.beyondthecloud.dev/tips/http-status-codes.md): The value returned when an external ID exists in more than one record. The response body contains the list of matching records. - [Instantiate LWC components dynamically](https://blog.beyondthecloud.dev/tips/instantiate-lwc-components-dynamically.md): From the Winter’24 release, we can import and instantiate Lightning Web Components dynamically. LWC finally reached this feature, that Aura has from a long time. - [JavaScript snippets](https://blog.beyondthecloud.dev/tips/javascript-snippets.md): Navigate to the Sources tab and select Snippets from the left toolbar. - [Lightning Styling Hooks](https://blog.beyondthecloud.dev/tips/lightning-styling-hooks.md): You can use Lightning Styling Hooks to style standard LWC components provided by Salesforce that you wouldn’t necessarily want to write from scratch to make minor adjustments, such as… - [List View Intelligence](https://blog.beyondthecloud.dev/tips/list-view-intelligence.md): In Winter 24 Release, Salesforce released Intelligence View for leads and contacts List Views. This view brings in some activity metrics related to the displayed records activities, e.g… - [Login as an API-only user](https://blog.beyondthecloud.dev/tips/login-as-an-api-only-user.md): 1. Open Visual Studio Code 2. Press Ctrl + Shift + P > Select SFDX: Authorize an Org 3. Select the appropriate login URL and Alias, when a browser opens a new tab, then enter credentials… - [LWC Spread](https://blog.beyondthecloud.dev/tips/lwc-spread.md): Instead of passing multiple parameters to child component one by one, you can use lwc:spread directive. - [Manage Dev Sandboxes](https://blog.beyondthecloud.dev/tips/manage-dev-sandboxes.md): From the Summer’24 release, we can assign new Manage Dev Sandboxes user permission. - [Manage Scheduled Jobs](https://blog.beyondthecloud.dev/tips/manage-scheduled-jobs.md): It will allow you to use Schedule Builder or Cron Expression to configure the job execution schedule - [Mass Delete Scratch Org](https://blog.beyondthecloud.dev/tips/mass-delete-scratch-org.md): Scratch orgs are ActiveScratchOrg records in the Dev Hub, so you can query them all in the Developer Console and use "Delete Row" to remove them in one pass instead of one at a time. - [Metadata Coverage Page](https://blog.beyondthecloud.dev/tips/metadata-coverage-page.md): You can use Metadata Coverage, to find the exact API name of components you are trying to work with (link also in description): https://developer.salesforce.com/docs/metadata-coverage/60 - [Methods inherited from the Object class](https://blog.beyondthecloud.dev/tips/methods-inherited-from-the-object-class.md): The problem with the Object class is that it is not properly documented in Salesforce documentation and it’s hard to find information about inherited methods. We can only get more… - [Monitor your API Limits](https://blog.beyondthecloud.dev/tips/monitor-your-api-limits.md): One Salesforce CLI command prints over 50 org limits — daily API requests, async Apex executions, bulk API batches, storage — with the maximum and remaining allocation for each. - [npm script shortcuts](https://blog.beyondthecloud.dev/tips/npm-script-shortcuts.md): You can use the npm scripts to run bash scripts, and unleash the unlimited power of scripting. - [Object property shorthand](https://blog.beyondthecloud.dev/tips/object-property-shorthand.md): It applies only when the property name is the same as the name of the variable that stores a value. - [Optimize Apex Triggers](https://blog.beyondthecloud.dev/tips/optimize-apex-triggers.md): 1. Refactoring 2. Checking entry criteria 3. Moving to asynchronous tools 4. Using frameworks - [Prevent record insert in Apex](https://blog.beyondthecloud.dev/tips/prevent-record-insert-in-apex.md): You can create validations in the Apex trigger code to prevent the insertion of selected records? - [Quickly delete Debug Logs](https://blog.beyondthecloud.dev/tips/quickly-delete-debug-logs.md): Have you ever encountered an issue with the debug log limit? You've probably seen the message at least once: '...Before you can edit trace flags, delete some debug logs.' - [Refresh data from @wire](https://blog.beyondthecloud.dev/tips/refresh-data-from-wire.md): Do you like fetching data for your component by @wire adapter? Are you struggling with cache and refreshing that data? Check this tip and enjoy @wire! - [RefreshView API](https://blog.beyondthecloud.dev/tips/refreshview-api.md): From the Spring’23 release, we can use RefreshView API in LWC components, to refresh data in standard and custom components. - [Remove System.debugs](https://blog.beyondthecloud.dev/tips/remove-system-debugs.md): System.debugs statements are a straightforward way to debug our Apex code, but... - [Retrieve All Salesforce Metadata](https://blog.beyondthecloud.dev/tips/retrieve-all-salesforce-metadata.md): Two Salesforce CLI commands pull an entire org's metadata: generate a manifest from the org, including managed and unlocked packages, then retrieve against that manifest. - [Run Apex code in command line](https://blog.beyondthecloud.dev/tips/run-apex-code-in-command-line.md): Did you know that you don’t have to open developer console to run apex scripts via Anonymous Apex? You don’t even have to open any IDE or create a text file, simply put your code in… - [Run Finalizer after Queueable](https://blog.beyondthecloud.dev/tips/run-finalizer-after-queueable.md): There are few benefits: reusable post-Queueable actions controls what happens when Queueable succeeds or fails easy way of logging results running summarizing jobs enqueue other jobs - [Running Reports in Apex](https://blog.beyondthecloud.dev/tips/running-reports-in-apex.md): You can utilize the ReportManager class to run reports directly in Apex! - [Scratch Org Snapshots](https://blog.beyondthecloud.dev/tips/scratch-org-snapshots.md): Did you know you can create scratch orgs based on already existing scratch org? This is possible thanks to the Scratch Org Snapshots feature. - [Set Default Values for Invocable Action Parameters](https://blog.beyondthecloud.dev/tips/set-default-values-for-invocable-action-parameters.md): Starting with the Summer '24 release, you can now set default values for your invocable actions. These default values will be visible in Flow Builder. Let's see how easy this is! - [Set password in Salesforce](https://blog.beyondthecloud.dev/tips/set-password-in-salesforce.md): Well, not really, this is about setting up a password via Apex and SF CLI. - [Set Record Created Date In Test](https://blog.beyondthecloud.dev/tips/set-record-created-date-in-test.md): You can use Test.setCreatedDate to set the CreatedDate of the inserted record inside Unit Test. This is helpful when the logic you’re testing depends on the records’ creation date - for… - [Share access to Salesforce Environment](https://blog.beyondthecloud.dev/tips/share-access-to-salesforce-environment.md): sf org open --url-only prints a login URL backed by your access token, so a teammate can get into the environment for troubleshooting without you handing over credentials. - [Show all records](https://blog.beyondthecloud.dev/tips/show-all-records.md): Setup list pages keep their page size in the URL. Click "more" once, then change rowsperpage from 35 to a large number and reload — the whole list renders on a single page. - [SOQL All Rows](https://blog.beyondthecloud.dev/tips/soql-all-rows.md): You can use the SOQL ALL_ROWS clause for that. The resulting query includes the soft-deleted records (the ones in the recycle bin) with the results. - [SOQL for loops](https://blog.beyondthecloud.dev/tips/soql-for-loops.md): SOQL for loops retrieve all sObjects, using efficient chunking with calls to the query and queryMore methods of SOAP API. Developers can avoid the limit on heap size by using a SOQL for… - [SOQL for Polymorphic relationships](https://blog.beyondthecloud.dev/tips/soql-for-polymorphic-relationships.md): You can leverage TYPEOF keyword in your SOQL queries! - [SOQL Semi-Join](https://blog.beyondthecloud.dev/tips/soql-semi-join.md): Consideration: Semi-joins do NOT count against the query limit. Semi-joins COUNT against the aggregated query limit. - [SVG in LWC](https://blog.beyondthecloud.dev/tips/svg-in-lwc.md): You have received an SVG icon from a UX/UI designer and need to use it in an LWC. - [Throw Apex built-in exceptions](https://blog.beyondthecloud.dev/tips/throw-apex-built-in-exceptions.md): I suppose you've used AuraHandledException many times, but you can throw also other exceptions. - [Toast Module](https://blog.beyondthecloud.dev/tips/toast-module.md): Do you know that there is another way to show toast besides using platformShowToastEvent module? You can use a new toast module. - [Use Builder Pattern for Integrations](https://blog.beyondthecloud.dev/tips/use-builder-pattern-for-integrations.md): In the metadata, we are saving Endpoint-specific information that won’t change in any condition. Note the “Credentials” column, there we can store Named Credentials name to use in Apex… - [Use Map and JSON.serialize to mock HTTP Response](https://blog.beyondthecloud.dev/tips/use-map-and-json-serialize-to-mock-http-response.md): Since the HTTP Body is a JSON, in this way, the code is as much similar/formatted as standard JSON as possible. - [Use null coalescing operator](https://blog.beyondthecloud.dev/tips/use-null-coalescing-operator.md): You can even chain! The code skips the left side until it is null/undefined. - [Use OR instead of Ternary Operator](https://blog.beyondthecloud.dev/tips/use-or-instead-of-ternary-operator.md): You probably used the logical JS operator OR (||) in your Lightning Web Components. The most common use cases involve conditional statements. - [Use RecordType.DeveloperName instead of RecordTypeId](https://blog.beyondthecloud.dev/tips/use-recordtype-developername-instead-of-recordtypeid.md): Use RecordType.DeveloperName! Each object has a reference to its RecordType. You can utilize that reference to query records by RecordType. - [Use the RecentlyViewed table](https://blog.beyondthecloud.dev/tips/use-the-recentlyviewed-table.md): By running this simple query, you can get records that user recently viewed: - [User Access Policies](https://blog.beyondthecloud.dev/tips/user-access-policies.md): From the Summer’24 release, we can use User Access Policies to automate assignments (and removal of assignments) to permission set licenses, permission sets, permission set groups… - [Working with Salesforce limits](https://blog.beyondthecloud.dev/tips/working-with-salesforce-limits.md): We can use Limits class to check how many resources we have left. Check example on the next page! - [You are doing validation in Apex wrong!](https://blog.beyondthecloud.dev/tips/you-are-doing-validation-in-apex-wrong.md): Chain of Responsibility is a behavioral design pattern that lets you pass requests along a chain of handlers. Upon receiving a request, each handler decides either to process the request… ## Authors - [Piotr Gajek](https://blog.beyondthecloud.dev/author/piotr-gajek.md) - [Bartosz Suchocki](https://blog.beyondthecloud.dev/author/bartosz-suchocki.md) - [Maciej Ptak](https://blog.beyondthecloud.dev/author/maciej-ptak.md) - [Jan Śledziewski](https://blog.beyondthecloud.dev/author/jan-sledziewski.md) - [Adam Osiecki](https://blog.beyondthecloud.dev/author/adam-osiecki.md) - [Mateusz Babiaczyk](https://blog.beyondthecloud.dev/author/mateusz-babiaczyk.md) - [Krzysztof Pintscher](https://blog.beyondthecloud.dev/author/krzysztof-pintscher.md) - [Stanisław Zań](https://blog.beyondthecloud.dev/author/stanislaw-zan.md) - [Mateusz Twarożek](https://blog.beyondthecloud.dev/author/mateusz-twarozek.md) - [Maciej Kostrubiec](https://blog.beyondthecloud.dev/author/maciej-kostrubiec.md) - [Adrian Durlak](https://blog.beyondthecloud.dev/author/adrian-durlak.md)