Skip to content

Author: Waqar Hussain

Founder and the owner of SF Crunch. A Salesforce enthusiast, a Salesforce Certified System Architect with over a decade of experience in the Salesforce domain.

I am working as a full-time Salesforce architect and developer. I spent my spare time writing articles related to Salesforce for you guys.

I have demonstrated experience in the full Salesforce development lifecycle, designing solutions, and implementation.

Salesforce Apex: How to Send Emails Using Templates Without a targetObjectId

When sending an email using a template in Apex, the “targetObjectId” is typically required, which must be the ID of a Lead, Contact, or User. However, in many cases, you may not have a targetObjectId available, especially when sending an email from a custom object to an external email address that isn’t associated with a Lead, Contact, or User in Salesforce.

Many articles suggest creating a dummy Contact record to use as the targetObjectId, but this workaround can be cumbersome and unreliable.

Here’s a more effective solution that avoids the need for a dummy Contact. See the sample code in article.

Salesforce Flow: Fixing Formatting and Rendering Issues in Emails with Rich-Text Templates

When using the Send Email core action in Salesforce Flow to send an email with a rich-text body. Switching between plain text and rich text in the template editor alters the HTML markup, resulting in incorrect rendering and formatting issues.

To avoid this, use a plain text template with HTML markup and select Rich-Text-Formatted Body as true in the Send Email action. This approach ensures the email body is formatted correctly. See the attached screenshots for reference.

Salesforce screen flow – Open a Record in a Console Sub-Tab

This article explains how to use Salesforce Screen Flow to open a record in a console sub-tab. By creating a text template that includes the record’s ID and using a display text component, users can click a link that opens the record within the console rather than a new browser tab. Two key steps are involved: (1) creating the text template with the record ID, and (2) displaying the template in the flow using the “Display Text” component.

Salesforce Screen Flow – Download records into a CSV file with specified fields using the collection variable

This articles leverages a lightning web component to export the data from Salesforce screen flow. The LWC inputs a collection variable and convert it into a CSV file. Moreover, you also have options to select an sObject and fields to be exported into the CSV file.

Advanced Send Email Flow Action – Send email from Salesforce flow with CC, BCC, and email attachments

This class can be used in flows to send emails programmatically without needing predefined email alerts.
It allows customization of email content, recipients, and attachments on the fly. The Apex class is designed to send emails from Salesforce without the need for an Email Alert.

Screen Flow – Preview the email body with merge fields populated before sending out

This article shows, how to preview an email in a screen flow with actual merge fields populated before sending it out to a customer, ensuring all details are correct. By using an Apex invocable action that returns email body with all the merge fields populated and in the screen flow show text using display text component and HTML body using an LWC.

Enhancements to the Salesforce User Management: User Access Policy (Summer ’24)

In this article, I introduce some user management features in Salesforce such as user access policies, view summaries of users, and permission sets. These features are either recently introduced or going to be generally available in the summer 24 release. I provide a step-by-step demonstration of how to enable and use the user access policy feature, which allows you to manage the assignment of permission sets, public groups, and queues to users. I also showcase the view summary feature, which displays all the permissions assigned to a user or a permission set on a single page. No action is requested from the viewers, but this video aims to provide valuable information about these user management features.

Salesforce LWC – Dynamic Social Icons Component for experience cloud using Navigation Menu

This is an enhanced version of Social Icon’s Lightning Web Component, as described in this Salesforce Developer post titled: Advanced Community Navigation Components

The idea is to have a navigation menu having social links with customizable icons that allow for the addition, removal, or updating of social media links and icons without the need to modify the underlying LWC code.

Update lead Owner, when a lead is assigned to a Sales Engagement cadence (cadence starts).

This article provides step-by-step instructions to help you set up an automation using Change Data Capture, Flow and Apex trigger to update the lead Owner, when a lead is assigned to a Specific cadence. The apex trigger listens for new events on the ActionCadenceTrackerChangeEvent object, and when a Lead is targeted by a specific cadence (‘my test cadence’), it triggers a Flow to update the lead owner with the cadence assignee.

Salesforce Apex – Send weekly emails to respective owners with their open tasks

This article walk you through creating an Apex class which is used to send a summary of open tasks to each active standard user in Salesforce, helping them stay informed about their pending tasks. The email is sent from a specified org-wide email address, and the tasks are listed in a table format within the email.

Salesforce LWC to show CMS Content (Collection) as Accordion on public LWR Site using ConnectAPI.ManagedContentDelivery class

An example of LWC to display CMS Content (Collection) as an accordion on a public Lightning Web Runtime (LWR) site, leveraging the ConnectAPI.ManagedContentDelivery class. In this example, I use the getCollectionItemsForChannel method from the ConnectAPI.ManagedContentDelivery class to retrieve CMS Collection items and display them as an accordion.

Salesforce Lightning Web Component (LWC) to export the related list records to CSV without using apex

This article illustrates creating a lightning web component to export opportunities to a CSV file with a simple button click directly from the account detail page. This solution eliminates the need for Apex code, opting instead for the utilization of the getRelatedListRecords wire adapter.

Salesforce apex trigger: process records in less than 200 records per transaction using queueable chaining

This article walks you through to process apex trigger records in less than 200 records per transaction using queueable chaining apex job to avoid Salesforce limitations.

Consider a situation where you are bulk inserting records into a custom object or standard object, and you have an Apex trigger that is fired by this custom object. This trigger contains complex business logic, and you’re running into Salesforce limitations due to processing the default batch size of 200 records in a single transaction.

Complex Validation Rule using Salesforce Record Trigger Flows Instead of using Apex code

This article walks you through creating a validation rule using a record trigger flow instead of using apex code for complex business requirements. Sometimes we have requirements that can not be accomplished using standard validation rules. So you can use this approach instead of developing before insert apex trigger.

This articles covers a business requirement that before an opportunity is marked as closed won, the opportunity must have at least one contact role.

Salesforce Apex/Flow: POST salesforce file as Asana attachments via Asana API encoded as multipart/form-data

Recently I was working on Salesforce – Asana integration project using Asana API in apex. It works fine by creating asana tasks, sub-tasks, etc. using normal API requests. But when it comes to uploading files as attachments to Asana consuming API, I was stuck. Because it requires the file data to be encoded in some special format with the multipart/form-data.

Log Apex/flow Exception Errors in a custom object Salesforce

Logging errors are helpful, primarily when an error occurs in the future, background apex jobs, or flows. Especially when you want to investigate why some background jobs are not working as expected and you want to know how frequently the jobs are failing.

Using the following solutions you can find the apex error exceptions easily. You can see why the error occurred and on which line of code the error occurred. You can see the errors in a list view and can do reporting on a specific error.