Gorav Seth

Salesforce MVP (HOF) | Permaculture designer

Read this first

Removing null value from collection

I managed to add a null value to a text collection, and found a way to remove it.

How did I end up with this mess?
I have a loop that splits a comma separated string, and adds each item to a text collection. This string is normally a bunch of external IDs, but I ended up with

Result{!vaCSTextToSplit} = "70140000000cokEAAQ,, master_AshokaUpdates,news_USA,"

see that extra comma in there before ‘master’ - when that ran through the split-o-matic it created a collection that had a null / blank value in it. i use blank/null intentionally here, as i really was not sure which one it was.

{!collCampaignIDs} = "[70140000000cokEAAQ,,master_AshokaUpdates,news_USA,MASTER]"

and that was causing some (silent) havoc downstream when we looped over the collection to get a campaign record filtering against that external ID. the flow would pull a random campaign that had a blank external ID...

Continue reading →


Checking for blank in Flow

A few days ago I asked

am i the only person who is still confused about equals globalconstant.emptystring vs isnull = true in flows? i swear i used to use equals gces all the time and it was fine or was i delusional. seems like isnull = true works most everywhere now. is there any clarity on where one might use equals globalconstant.emptystring?

It seems like a pretty simple question - how do I tell if my (X) is blank / populated.

the X could be

  • evaluate flow screen element in assignment
  • evaluate flow screen element in a conditional visibility rule
  • evaluate flow screen element in a flow field validation rule
  • evaluate get records element in decision
  • evaluate a field in process builder
  • filter criteria on get records element

It seems like the answer is to use isNull, but seems like its not clearly stated as such. And a few folks agreed that this seems to have changed over...

Continue reading →


Protecting fields used in integrations from deletion

h/t to a number of folks on this one, esp Luke Cushanick who shared the idea for this.

Marking fields used in integrations in some way, to prevent them from being deleted, might be useful. Even more useful might be to document which integrations use them, and how.

After some discussion, this can be done using a custom metadata type fairly easily. No code!

Create custom metadata type, lets name it “Integration Field”

add a few fields to the metadata type to track where this is used

Integration name : text
Description : text area

and the magic : add two metadata relationship fields

Field Label : Related To
Object Name : relationship to entity definition
Field Name : relationship to field definition

  • the ‘field name’ option will only appear after you create the first relationship field to entity definition
  • when creating the ‘field name’ field, set ‘controlling field’ to the...

Continue reading →


scheduled flow + vf email template demo

I have built out a demo scheduled flow that sends an email to each opportunity owner with a list of open opportunities, using a visualforce email template. This flow is much like a report subscription, but with more context, and without nearly as much work of scheduling subscriptions to N users. And - no 5 subscription limit!

The basic approach is covered in this article - which was built on custom objects in our HR system.

In order to avoid hitting the flow iteration limit from building a unique collection of owner Ids (which I can do using this hackish but inefficient approach), I built an invocable apex class that takes a sobject collection and a field, and returns a unique collection of values. This could have some other interesting uses, and opens this flow up to run on up to about 1990 unique active owners, which is pretty robust by my standards…Above that value, you will...

Continue reading →


scheduled flows + visualforce email templates

Many options exist to notify folks about salesforce data. I classify them as ‘popcorn’ (email alerts / chatter posts / notifications via workflows/flows/processes) or ‘consolidated’ (report subscriptions, that random opportunity email thing, custom visualforce emails with summarized info).

HR needed to automatically notify managers when people who reported to them had a contract that would expire in 90 days. Report subscriptions dont scale for this. Popcorn is a pain to build, and makes for a fractured user experience, so I wanted to send the manage a single summary email w all the data, on the first of the month.

The full-code way would be a scheduled batch job that sends the email, which can be all code. Nothing crazy, but i would guess a hundred lines or so,

Instead, I used scheduled flows and a visualforce email template in a regular old email alert, which leaves most of the...

Continue reading →


giving automated process user access to apex class

this post is just to reference this brilliant url hack by Matt - as eventually this approach will disappear in the comments on the idea to make it unnecessary, as it should be.

the link

Matt’s approach

Try opening the Developer Console to query for the autoproc Profile ID…
SELECT ProfileId FROM User WHERE Alias = ‘autoproc’
…then doctor the URL to get at its setup and enable the relevant Apex Classes:
/_ui/system/user/ProfileApexClassPermissionEdit/e?profile_id={autoproc_profile_id}

rtaImage.png

View →


Default outcome in decision elements

I don’t like using default outcome in decision elements. I want to expressly define which path should be taken, and dont want the flow to take a path because i did not anticipate something.

Then I ran into an issue where a flow was finishing early because there was no matching outcome, and i had not mapped the default outcome. This was skipping a final notification step that was critical to the process.

So now, I created a subflow that i can use to send an ‘error’ notification in any flow, and i pass in the flow name, running user name, and ‘error message’. I already have an object I use to log errors from my code, and just write to that object via flow.

This way I can provide a path for the default outcome that expressly triggers an error notification, but can also allow the flow to continue to the next step. Progress!

Continue reading →


soql to csv in cli

using the salesforce cli to export a soql query to a csv file is just magic.

sfdx force:data:soql:query -q “select id,parentId,parent.Name,createdDate from feeditem where createdById = ‘0051W0000065wTP’” -r csv > yourfilename.csv

that is it

sfdx
force:data:soql:query
-q “insert query here”
-r csv

boom!

View →


setting date field to null in flow assignment

in assignment elements, flow date fields do not accept globalconstant.empty string, or any values other than a proper date.

i needed to set one to null.

i was able to create a flow formula field, type = date, and value = NULL

and it worked!

nullDateFormula.png

full disclosure - maybe you can just leave it blank in the assignment element. didnt test that! tbd.

View →


flow external services

using flow and external services to cause minor mayhem

the use case : merge salesforce data into a word doc using flow

approach : use a flow button to callout to a microsoft power automate endpoint via external services

useful posts
https://katiekodes.com/flow-apex-defined-data-types/
https://help.salesforce.com/articleView?id=enhanced_external_services_example_schema.htm&type=5

the learnings :
a) no apex defined data types need to be created- the external service schema definition itself is the apex defined data type. just create a variable, type = apex-defined, and for the apex class, select ExternalService__YourExtServiceMethod - it will be waiting for you

View →