During the recent Open Source Commons sprint in Chicago, I tried to create scratch orgs for nonprofit and education clouds. Despite having some of the best people in the market in the room, including two Salesforce Solution Engineers, two levels of their bosses, and of course Google, I couldn’t figure it out.
As a follow up to a conversation there, Larry Fontillas sent me links to the help docs that contain what I consider partial answers. While I’ve sent feedback to help improve those articles, I am posting my current solution to this challenge.
My Example Scratch Config
On Github I created a repo that contains two scratch org configuration files:
Each is my attempt to create a definition that works for the named cloud. If are new to scratch orgs, I suggest you start with the Trailhead Salesforce DX Quick Start. With a Devhub setup, and connected to your sf cli, you can easily create these scratch orgs from my settings with one of the two following commands:
sf org create scratch -d -f config/nonprofit-cloud.json -a npc-org
sf org create scratch -d -f config/education-cloud.json -a edu-org
Industry Org Scratch Config Breakdown
The two new clouds leve re-usable components Salesforce built, licenses, and deploys across different markets. Salesforce does not currently provide one master switch you must use. Instead you need to know what features to include and tell the Devhub which collection to enable.
That is done in two major parts of the configuration file. In my Nonprofit cloud config file there are several sections, but two are critical:
settings → IndustriesSettings. The features list includes Salesforce components to enable. In this case I included the nonprofit specific Fundraising, Program Management, and Grantmaking modules, but also OminiStudio, Accounting Subledger, and more because they included with NP Cloud by default. Under Industries Settings you’ll also see I enable Grantmaking and support for Program Management.
The Education Cloud config file has even more detail. That’s because Salesforce as made more available for Education Cloud. The Industries settings section includes more flags as well for the same reason. As I Followed the setup guide for Education Cloud, I further adjusted some of the base-line object permissions.
Here are the features I know you need to include for each cloud:
|Feature||NP Cloud||Edu Cloud||Notes|
|AccountingSubledgerGrowthEdition||Optional||Optional||Starter Edition is also available|
|AnalyticsQueryService||Yes||Optional||This is listed in the docs under Fundraising, but I have not yet found a direct description.|
|EducationCloud||No||Yes (requires a quantity parameter)||Main Education Cloud objects, but only a sliver of the features.|
|EnableSetPasswordInApi||Yes||Yes||Allows the cli to set the password, you always want this.|
|IndustriesSalesExcellenceAddOn||Yes||Yes||This is listed in the docs under Fundraising, but I have not yet found a direct description.|
|IndustriesServiceExcellenceAddOn||Yes||Yes||This is listed in the docs under Fundraising, but I have not yet found a direct description.|
|LightningScheduler||No||Yes||Lightning Scheduler gives you tools to simplify appointment scheduling in Salesforce.|
|LightningServiceConsole||Optional||Yes||Allows the Lightning Service Console and access features that help manage cases faster.|
|MarketingUser||Yes||Optional||Provides access to the Campaigns object.|
|OmniStudioDesigner||Yes||Yes||Listed in lots of samples, but I have not yet found a direct description. But clearly needed for OmniStudio.|
|OmniStudioRuntime||Yes||Yes||More for OmniStudio.|
|PersonAccounts||Yes||Yes||We all love Person Accounts now! Technically this is optional, although the assumption is it your default.|
|ProgramManagement||Yes||No||Enables the NPC Program and Case management features.|
|PublicSectorAccess||No||Yes||Not entirely sure about this one, but some of the features for Education Cloud seem to leverage these objects and settings.|
I have tested these configurations to the degree of seeing that they work as a basic level. But I have not, yet, used them for a serious project. I am confident other people will find details that are missing, or just wrong. Please file an issue on Github or leave me a comment here with suggested changes.