Gorav Seth

Salesforce MVP (HOF) | Permaculture designer
Me on Mastodon

Read this first

Making cases work in lightning

I couldnt find any clear documentation on how to get cases to just not be total crap in lightning. Tried many times, and failed miserably. finally found a way through lots of googling, and piecing things together. the short answer is that you need feed filters and a console app and then there is hope.

“Enable Case Feed Actions and Feed Items” in support settings

  • otherwise you may find odd stuff with things not showing up in the case feed esp on old cases

setup case feed filters

  • can setup feed filters in classic, to determine what is on the page
  • feed filters only show up in console apps in lex, but actually make it usable. you can see all the emails, and easily move from one to the next. other normal things

try “Enable Unread/Read on Compact Case Feed” - no idea what that does yet…and maybe ‘enable draft emails’ cuz why not.

create a console app, then do normal lighting...

Continue reading →

exporting field help text and description in bulk

TIL that you can create custom report type on entity definition + field definition to report on your fields!

h/t : https://www.asagarwal.com/how-to-report-on-objects-and-fields-defined-in-salesforce/ and Anna Loughnan

However I could not include field help text, though it is listed in the tooling api docs for fielddefinition

then i tried a custom report type on entity definition with entity particle, and added field definition via lookup

this worked in theory - i could include description and inline help text.

but when i ran the report, field description remained blank. other folks said the report type worked for them, so i should test more as the report types would be really simple to use. so try that first.

instead I ran a soql query to test it out, and this works

select entitydefinition.label, inlinehelptext,fielddefinition.description,fielddefinition.label from...

Continue reading →

using vscode to fix reports that break from configuration changes

changes to configuration, like updating picklist values, can easily mess up salesforce reports, which is a perennial problem for yours truly. i think sometime in the middle ages i dealt with this using eclipse but only vague memories remain.

working today on using vscode to deal with this…first I needed to get all reports locally.

this post on dev forum suggested a nifty package generator extension

I used that extension to generate the package. check the “report” metadata type and it crunched through all 6k(!) reports we have and created a package.xml file


then i could easily retrieve all reports by right clicking on the package.xml file and selecting “retreive source from org using manifest” in vscode!


i then used find/replace in folder to update the old picklist value to the new one! but if I then use force:source:push it deploys all reports, not just the modified ones.


Continue reading →

refreshing sandboxes when direct login is blocked

edit : looks like the link in the sandbox refresh success email already has the right url to allow you to login with username and password.

file under stupid workarounds that cant possibly exist in a 50B platform

if you use single sign on in prod, and block login from login.salesforce.com because security and all, refreshing sandboxes becomes a stupid pita because the new sandbox inherits the ‘block login from’ setting,

therefore after refresh is complete, you click ‘login’ in the sandbox list from prod, and it takes you to the direct url to login (ie cs13.salesforce.com)

enter your pwd and you get this helpful message

Please check your username and password. If you still can’t log in, contact your Salesforce administrator.

To fix this, you have to manually craft the mydomain url for your sandbox. this is formatted as


in my...

Continue reading →

updating sort order on campaign member status

quick note re updating sort order on campaign member status

you cant do this via the UI, you have to do a data load

and sort order is unique, you cant set a member status to have a sort order of 2 if another one already is 2.

so lets say you have 10 member statuses, with sort order 1-10.

if you want to update them, query via workbench

select id,label,sortOrder from campaignMemberStatus where campaignId = ‘insert ID of your campaign here’

then to update the sort order, you need to set the new ones starting with 20, so you have 20-30

then the update will work

else you will get an error

View →

flow rich text email with list of records

Spring21 brought us rich text emails in flow, which made it fairly simple to create a nice looking email that includes a list of records. throw it in a scheduled flow and you have some serious potential. add a link to a report with inline editing enabled and you have black belt ninja material!

my use case : send opportunity owners a list of their open opportunities that have passed the close date.

here is the full flow

will break down each piece below

Schedule: the flow is scheduled on the user object, and fires for all users where isActive = true (if the owner is inactive, nobody will be notified. I would handle these through a separate process.)

getOpportunities: get all opportunities, where ownerid = $record.id (the user from the scheduled flow) and closeDate is less than $flow.current date

getReport: In the email, I include a link to a report so they can edit it using...

Continue reading →

bulk deleting reports from salesforce

i swear i used to have a way of deleting reports via the metadata api in bulk many years ago but i could not get that to work

this works:

query reports via workbench to csv

run delete - but not via bulk api - as delete operation not supported on bulk api

so you can do about 1-2 k at a time, vs the native interface which gives you 250, so its better

works for private reports also by adding using SCOPE allPrivate (and ensuring you have the perms to do so) see : https://help.salesforce.com/s/articleView?id=000317823&type=1

works for reports

SELECT Id, Owner.Name FROM Report USING SCOPE allPrivate WHERE Owner.IsActive = false limit 1200

and for dashboards

SELECT Id, RunningUser.Name, Title FROM Dashboard USING SCOPE allPrivate WHERE RunningUser.IsActive = false limit 1200

Continue reading →

truncating case description in case assignment email

sure its 2022 and we have force lightning powers that emperor palpatine himself could only dream of, but if you want a good case assignment email, you need visualforce.

i rolled up a nice visualforce email template years ago that includes the case commments - sorted by date!

but the template includes case description, and sometimes people initiate a case via a gigantic email, and all of that email thread would come through on the visualforce assignment email

so i just need to truncate the length of the description.

the original
<apex:outputField value="{!relatedTo.Description}"></apex:outputField>

tried inserting a left in there, could not get anything to save

apex:outputText would lose the formatting, regardless of how I tried to work with it, like


I even tried abbreviating the string in a vf component, but outputText would lose the...

Continue reading →

Marking fields used in Integrations

Another way to mark fields used in Integrations.

2 years back I conjured up this approach to prevent deletion of fields used in integrations.

I still needed a better way to flag these fields. Description field is pretty good, but wanted to add the picklist value “Integrated” to the field usage picklist.

Turns out that you can only do this via the metadata api, so this is how to do it

  • create a file named package.xml with the following content
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
  • login to workbench.developerforce.com and go to migration - retrieve
  • upload that package.xml file
  • click ‘download zip file’

this downloads the existing values for Field Usage picklist, in case someone has customized it before you!

  • Unzip the file
  • Edit the file...

Continue reading →

Single Sign On from Production to Sandbox

Make it oh-so-easy for users to test changes in a sandbox by seamlessly logging in from production!

With this approach, your users can login to a sandbox directly from the app launcher in production. This requires no code, just clicks, and you can control exactly which users can use this option via profiles or permission sets.

Here is a gif to show how simple this is for users, in case you have never clicked on an app in the app launcher before.


The Technical Details:
This approach uses production as the identity provider and a sandbox as a service provider. Authentication is managed using an identity-provider initiated oauth flow.

This implementation is a variation on the approach described in this H&T article. The approach in the article requires users to navigate to the sandbox my domain in their browser, where they can click on a button that authenticates against...

Continue reading →