Salesforce, Python, SQL, & other ways to put your data where you need it

Need event music? 🎸

Live and recorded jazz, pop, and meditative music for your virtual conference / Zoom wedding / yoga class / private party with quality sound and a smooth technical experience

Bienvenue! Welcome!

My goal is to help you work faster.

I must speak and teach until I hear 10 people say, "That thing you taught me? I used it! And it saved me time!"

(Ahem ... although maybe blogging slower than I'd hoped. Ugh, coders' repetitive stress injury.)

So check out the tutorials. Play with code. Tell me about your triumphs.

Jitterbit: replace a non-breaking space

07 Oct 2022 🔖 salesforce jitterbit integration databases tips 💬 EN

Some visitor typed a non-breaking space into their address when filling out a form. 123 Sun St, New York, NY 10001 is just 30 characters long, but as I tried to data-load an address into an Oracle VARCHAR2(30)-typed column (THE_ADDRESS) with Jitterbit, Oracle complained: ORA-12899: value too large for column ... (actual: 31, maximum: 30). Jitterbit logs showed the actual address submitted in my flat-file source column “address” as 123 Sun St, New York, NY 10001.

“Allow truncation of character fields to avoid field length errors” was already checked on the database target side of the Jitterbit transformation … so what was this all about?

Continue Reading

CumulusCI Minimum Viable Build

26 Sep 2022 🔖 salesforce minimum viable build 💬 EN

While the cci project init command will throw a lot of useful empty files into a blank folder for you, and will create a fileset that supports launching a scratch org with the cci flow run dev_org command, it generates a lot of files you don’t necessarily need right away. I’ve built a sample project and hosted it at GitHub to show off what I, personally, have found is actually necessary. You can download a copy and run cci flow run dev_org within it to see what I mean (although be sure to read below and note the /.sfdx/sfdx-config.json hand-edit you need to make).

Continue Reading

Download your org schema with CumulusCI

16 Sep 2022 🔖 salesforce vscode 💬 EN

I made a new codebase that lets you use CumulusCI (CCI) to easily download the definition of every object and field in a Salesforce org (part of its “metadata”) onto your hard drive as a plain-text file formatted in the JSON punctuation standard.

Continue Reading

Compare Flow versions in VSCode for Salesforce

16 Sep 2022 🔖 salesforce vscode flow tutorials 💬 EN

Today I had to propose quickly hotfixing a Flow in production. It was terrifying – it’s production! I don’t work in Flow all the time!

Not only did I send screenshots to the org’s admins of my inactive-but-newer version … I needed to be really confident and proofread the difference between the underlying XML codebase between the two versions before I could swear I’d done the right thing.

So here’s what I did:

Continue Reading

Multiple Pardot accounts sending from the same domain

15 Sep 2022 🔖 salesforce pardot tips 💬 EN

If you, a Pardot administrator, visit Home > Administration > Domain Management (https://pi.pardot.com/domain) and click the “Add New Domain” button under “Email Sending Domains,” enter a domain that’s already in use in by a different pardot (e.g. “example.com“), and click the “Create domain” button, you’ll probably get an error:

“This sending domain is already in use. Choose another domain or contact the support team to add this one.”

Continue Reading

Jitterbit: backfill Salesforce ID into a database

13 Sep 2022 🔖 salesforce jitterbit integration databases tutorials tips 💬 EN

Last year, I shared a great data-load pattern called “Insert, update, and delete from a database to Salesforce.”

If you implement it with Jitterbit, I’ve recently discovered some tricks you can do to combine steps that load data into Salesforce with steps that load the results of that operation back into your database, which keeps your project tidier.

Instead of writing Salesforce IDs resulting from a successful “upsert” or “delete” operation to CSV, and then reading from CSV to the database, you can write successfully upserted/deleted Salesforce IDs directly to the database as part of the Salesforce data-load operation itself.

Continue Reading

Find and replace Pardot PML with HML

08 Sep 2022 🔖 pardot salesforce vscode tips 💬 EN

One of my colleagues needed to migrate dozens of e-mail templates from an older instance of Pardot to a newer one. The new Pardot kept complaining that old templates were in Pardot Merge Language (“PML”), e.g. %%first_name%%, instead of Handlebars Merge Language (“HML”), e.g. {{first_name}}. Here’s how I helped do the find-and-replace:

Continue Reading

Save button missing in Pardot Marketing Data Sharing Rules

18 Aug 2022 🔖 pardot salesforce tips 💬 EN

So you paused syncing and tried to edit the “explicit criteria” in a Pardot Marketing Data Sharing Rule by changing the value of the Field picklist and your Save button is grayed out?

Continue Reading

Formula Fields work fine for Pardot Marketing Data Sharing Rules

18 Aug 2022 🔖 pardot salesforce tips 💬 EN

You might have seen documentation that you can’t use a formula field to filter Salesforce and Pardot object synchronization with Marketing Data Sharing Rules because, by its nature, you can’t set your Pardot Integration User to be able to edit a formula field.

Nonsense – it works fine.

Continue Reading

Pardot Opportunities need Contact Roles to sync

18 Aug 2022 🔖 pardot salesforce tips 💬 EN

Think Marketing Data Sharing Rules are bullying you on Opportunity alone?

Like, all of your sharing rules work, except for Opportunity?

Continue Reading