Author Archives: Ezra Kenigsberg

Unknown's avatar

About Ezra Kenigsberg

#Salesforce architecture/data guru & @BigCommerce employee; film noir buff; expatriate Jewish New Yorker; proud papa

Two More Bugs in DemandTools

Did the old DemandTools (v2.xx, the one with the ’90s Windows 3 UI) have these bugs?

1] if

  • I have a unique-indexed field and
  • I tell DT to copy a losing record’s unique ID onto a winning record,

it deletes the losing record. . . even if I told it not to delete losing records

2] the FieldCopyUnique command fails to migrate certain values from losing records to winning records

  • for me, it’s working with Text, but failing with URLs and Phone Numbers

UPDATE 2024-04-03: we think this problem was caused when by cloning one of DT’s pre-existing merge scenarios. If we build a scenario from scratch, FieldCopyUnique works properly.

Friggin’ Compound Fields

Q: How do I find which fields in a Salesforce object are Compound fields?

A: Run this SOQL query:

SELECT Label, MasterLabel, Name FROM EntityParticle WHERE EntityDefinitionId = 'Opportunity' AND FieldDefinitionId IN (SELECT DurableId FROM FieldDefinition WHERE IsCompound = TRUE)

. . . change Opportunity to the API Name of the object you’re querying.

The query above is mighty useful when you’re querying the Bulk API.

The Bulk API can’t handle Compound fields.

Props to this StackExchange post!

Why Is My SOQL Query Running So Slowly?

Q: Why is my SOQL query running so slowly?

A: If you have any of the following things in your query, Salesforce’s query optimizer can’t leverage indexed fields:

  • !=
  • NOT LIKE
  • EXCLUDES
  • [TEXTFIELD] >
  • [TEXTFIELD] <
  • [TEXTFIELD] >=
  • [TEXTFIELD] <=
  • LIKE '%[string]'
  • cross-object formula fields

or, as the Salesforcies put it:

Full Query & Search Optimization Cheat Sheet is here!

Apple Watch Compulsion #2

Q: How do I make my Apple Watch send sound to my earphones by default instead of my iPhone?

A: Heck if I know.1 But I have got an okayish workaround:

  1. create earphone-connecting shortcut(s) for your Apple Watch, and
  2. add those shortcuts as complications to the watch face of your choice.

I have two pairs of Shokz earphones, so I created one shortcut for each.

(For grins, I also created a “Low Power” shortcut to turn off Cellular, WiFi, and Bluetooth all at once.)

Step-by-step, here’s what I did.

1] In Apple’s Shortcuts app on your iPhone or iPad, create a new Shortcut with three actions:

Quick notes:

  • for some reason, you gotta do this on an iOS device (eg, an iPhone or an iPad). Try to do it in MacOS (eg, on a MacBook) and the Shortcuts app won’t let you create the “Set playback destination” step ¯\_(ツ)_/¯
  • customize the third step’s device as needed
  • make sure to bring up the “Details” screen for the shortcut (by touching the ⓘ icon) and activate the “Show on Apple Watch” switch

2] Edit the desired watch face, choose a complication slot, choose the Shortcuts app, and finally select the specific shortcut(s) you created in step 1.

Helpfullest two notes here:

That’s it! The earphone-handoff between iPhone and Watch still isn’t perfect, but it’s better.

Oh: and I installed additional actions for the Shortcuts app. I’m quite psyched to try out some of these 121 (!) new actions.


  1. 90% of the times I tell my Apple Watch to play music or a podcast to my earphones, the sound comes out of my iPhone’s speaker instead.

    Which has me fascinated: which Apple designer decided we’d want to use the Watch to control the iPhone’s speaker?

    I have never, ever wanted to control the iPhone’s speaker from my Watch, and I’m hardpressed to imagine anyone ever asked for that. ↩︎

DemandTools: Am I Missing Something?

I thought DemandTools enabled merging records where you’re matching on fields like the following. No-brainer, right?

It doesn’t, unless you use a hide-your-eyes ugly workaround.

The details:

Look at how none of the dummy records above has the same blanks.

You’d think DemandTools’ “Blank Values” checkbox would handle those inconsistencies, yah? Wrong!

“Blank Values” enables this kind of match:

It does not enable this kind of match:

The fix for this is a goofy workaround which is marginally acceptable if you’re only matching on two fields, but gets exponentially worse with each additional matching field. Boo.

I’ve submitted this as a feature request on DemandTools’ site, but I’m astonished this isn’t out-of-the-box capability.

How did I sporadically use DemandTools for years before noticing this?

Adding Curved Text to a Canva Design

Q: How do I add curved text to a Canva Design?
A: The simple way:
0] select the text box
1] click the “Effects” button in the toolbar at the top of the screen
2] select “Curve” from the left-hand “Effects” palette
3] customize how many degrees the text should cover using the “Curve” slider

The fancy way: install TypeCraft. It gives you more customizable control over text options, but strikes me as overkill 80% of the time.

Starting to Dig into Canva URLs

So I see that there’s some promise in messing with Canva URLs–the typical URL when editing a Canva preso appears to look like this:

https://www.canva.com/design/[11CharDesignID]/[22CharSessionID]/edit

which, if you want to send to someone, can be simplified to

https://www.canva.com/design/[11CharDesignID]

If you want to send a link to a particular page, right-click (or Control-click on a Mac) a page in the “Pages” tray at the bottom of the screen and choose “Copy link to this page”:

. . . that gives you a URL that looks like

https://www.canva.com/design/[11CharPresoID]/[22CharSessionID]/edit?ui=[18CharSlideID]

which can be simplified and sent to someone else as

https://www.canva.com/design/[11CharPresoID]?ui=[18CharSlideID]

[edit: this trick appears to work for Canva presentations, but not Canva docs.]