Skip to main content


Quick Tips: Revive an old machine with Lubuntu

What would you do if you have a 10+ year old laptop that is but too old to run any version of Windows. Unless you can actually donate it or make use of it, most likely, it'll be lying there for too long. I had a similar situation, so, I thought of utilizing it for my hobby activities. Hereby I'm sharing some quick steps that you can also use to renew your old computer/laptop. With these steps you can get a renewed laptop which feels snappier and powerful. As you may be familiar, with Linux, you get a much powerful operating system and access to mighty open source tools/applications. Why Lubuntu Lubuntu is arguably the most lightweight Linux for desktops and PCs. It uses as less as 500MB RAM and can work for a wide range of old processors. As its built on top of Ubuntu, the support for devices is extremely wide (probably widest) and is quite easy to install and use for beginners. Pre-Requisites Before getting started you would need: Laptop/Desktop with internet connection (in t
Recent posts

Sneak Peek: Handle Record Delete triggers using Flow Automations

Traditionally, within Salesforce platform, only Apex triggers were equipped to handle record delete events. For any custom handling of delete actions, one had to create and maintain Apex code. Not to mention, be mindful of the best practices of handling deletions in bulk and displaying error messages. Salesforce flows have been graduated to now handle on delete events for objects within Salesforce. So, now you can create a flow which gets triggered on record delete. Step by Step Guide Let's take a sample scenario (probably most used). Let's say you want to restrict any user to delete an Account of type Customer. Following are the steps to create flow Step 1 : Create a flow of type Record Triggered Flow Step 2 : Set Entry Criteria Set Trigger to A record is deleted Set Entry conditions to qualify only active customer accounts Step 3 : Add new Custom Error Add new element attached to Start element and select Custom Error element from the list Step 4 : Setup Error Message Add er

Quick Tips : Use SFDX Auth token within CURL requests (Mac/ Linux)

I came across a peculiar requirement recently, wherein we needed to download files in a scheduled job. As you all know downloading a file can be a tricky affair with Salesforce.  Fortunately, using REST API we can achieve it. So, the solution became somewhat easier, wherein we could make a CURL call and download the file.  However, all usual cases reference using login name/ password or some reference using the Connected app (OAuth) route. For my specific use case, I already have a machine setup with SFDX and with target orgs authenticated. This solution helps just in that case. With command line scripting it is quite easy (for folks who are experienced with the command line). It took some time for me to get it working. Note: This approach should be chosen after appropriate review/analysis of other approaches, namely, OAuth-based login flows for app authentication. Tools used SFDX - to retrieve auth tokens Curl - to make API calls via the command line  JQ - to parse JSON in the command

Quick Tips: Sort Pipeline by Sales stages with Salesforce Tableau CRM (Einstein Analytics)

Quick Tips: Sort Pipeline by Sales stages with Salesforce CRM Analytics (aka Tableau CRM) Problem Statement While working on a recent change, we realized (a bit late) that the sales pipeline view shows sales stages in incorrect order. Ideally, you would want the pipeline view to reflect the stage in the same sequence as the sales process (for example Prospect, Propose, Negotiate, Close). Sales Path Sales Pipeline Initial SAQL q = load "opportunities" ; q = group q by 'StageName' ; q = foreach q generate 'StageName' as 'StageName' ,      sum ( 'Amount' ) as 'sum_Amount' ; q = order q by 'StageName' asc ; q = limit q 2000 ; Solution Approach Approach 1: Augment a field within the Opportunity dataset (CRM Analytics) to generate a new column for the Sales stage sequence This approach would be faster to deliver and has comparatively less change. However, as sales stages are changed/ updated it can result in the Tableau CRM da

Quick Tip : Stop emails from Sandbox to unwanted domains

Designing a robust automated system is challenging yet profoundly satisfying. I'm sure most can relate, it is bliss to watch the system automatically doing all the work, like clockwork (quite literally). However, there can be some downsides as well. In our example, we wanted to ensure that in no way possible, an email is sent out to external recipients from a sandbox. Of course, the first step would be to mask the required data. However, there's still a possibility that real email addresses can make it into a sandbox. So, we devised a solution to absolutely restrict such emails from a sandbox. The solution is actually quite simple. This solution only targets email sent out manually by users in a sandbox. It does not address emails sent via apex, automation or third party tools Step 1 - Identify the test domain Identify a domain that you want to enable, to be able to send test emails from the sandbox. For example, if you are in XYZ Inc, you most likely want to send test ema

Quick Tips: Queueable Apex : Loose Coupling with Chainable Interface

Queueable Apex : Loose Coupling with Chainable Interface Intro to Queueable Apex Time and again, we come across use cases where we have to either perform an extensive processing, which can breach governor limits, or we want to perform some work asynchronously for improved user experience. Queueable apex provides us a means to create an asynchronous job (An asynchronous job means a piece of work, which is scheduled to run in background, for e.g. you may want to do custom rollup calculations on opportunity save). Queueable apex is similar to future methods, wherein your future method is queued within a server queue. Server picks up the job and executes it, based on resource availability. However, there are some differences, quite notably: Queueable apex returns an ID for further enquiry Queueable apex methods can invoke external API (if Queueable apex class implements Database.AllowsCallouts interface) Queueable apex methods can enqueue other queueable apex jobs Say, we have a simple Qu

Quick Tips: Setup Salesforce developer machine - without ADMIN Access

I presume, a lot of developers may be struggling to use right developer tools for salesforce development. It can be a further problem, if one doesn't have admin access on workstation, as lot of these tools just provide guidelines to install these tools. So this article covers setting up developer machine, without any installation process. In essence, you can setup a fully working Salesforce development environment on your workstation without any admin access. Note: This is logically part 2 of setting up dev machine without admin access. If you haven't gone through my earlier article of setting up SFDX on your workstation, without installation, I would recommend starting with this article Quick Tips: Setup SFDX Manually without Admin access What is Visual Studio Code? Visual studio code is an open source Interactive Development Environment (IDE) for programmers/ developers. It provides various capabilities and features for faster application development and is primari