Create Scratch/Prod Orgs

Create Scratch/Prod Orgs

Dev/QA Scratch Orgs

Dev Scratch Org

The metadata from all packages gets deployed unmanaged and without a namespace.

cci org scratch dev <org name, e.g. REACH-123> cci flow run dev_org --org REACH-123

QA Scratch Org

All packages get installed with their latest beta release, which means the metadata has a namespace.

You don’t need to create a beta package version yourself, this is done automatically with the Github action “01 Test and beta packaging”. You only need to commit your changes to a branch so that the action can run.

cci org scratch qa <org name, e.g. REACH-123> cci flow run qa_org_2gp --org REACH-123

Persistent / Production Orgs

Create Persistent Org

The process to create a persistent org depends on its purpose: Production org which clients will use or dev / test / demo orgs for our internal work.

The subsequent configuration and installation steps remain the same.

Production Org

A production org is usually requested with Salesforce support. Once it is ready, please follow the below pre-installation steps and installation.

Dev / Test / Demo Org (Industry Demo Org aka IDO, persistent)

Please note: This will create a persistent Org that should only be used for dev, test or demo purposes.

  • Login to our PBO (Partner Business Org)

  • Select “Environment Hub” from the Lightning App menu

  • Click “Create Org“

  • Select “Test/Demo” as Purpose

  • Select “Trialforce Template ID”

  • Get the latest Template ID from this page (requires Salesforce Login)

    • Search for “Nonprofit Cloud”

    • Template ID as of 2025.12.10: 0TTWs000001HMI5

  • Expiration: PDEs do not expire, unless they are inactive for more than a year

  • Be sure to complete the “My Domain” field along with all other required information

    • “-dev-ed” gets automatically added to the URL

image-20250610-105345.png
  • Click on “Create” button

  • Automatic E-mail will be sent to the requested E-mail Address

  • Verify the Account and Reset the password

  • Store the password in Devolutions hub to share it with the team.

Pre-Installation Steps

Step

Kontakte

Spenden

Step

Kontakte

Spenden

Create Record Type “Business Account” for Accounts
Important: This step is only necessary, if no Record Type for the object Account exists and Person Accounts are not already enabled. Otherwise, Person Account cannot be enabled.

  • Setup > Object Manager > Account > Record Types

  • Record Type Label = Business Account
    Record Type Name = BusinessAccount
    Active = True
    Make available = System Administrator

  • Next

  • Apply one Layout to all Profiles = (Select any layout)

  • Save

 

Enable Person Accounts

  • Setup > Sales > Accounts > Person Accounts

  • Enable person accounts = true

  • Accept the terms and conditions by clicking the checkbox and submit

 

(not required for Spenden, only for Common package)

Assign Person Account Record Type to User Profiles

  • Setup → Users → Profiles

  • Select a Profile you want to update

  • In Record Type Settings, find Accounts and click Edit

  • Enable Person Account:

    • Move Person Account to Selected Record Types

    • Set Person Account as the default in the Person Account Default Record Type dropdown

    • Ensure Business Account Default is not set to --Master--

  • Click Save

  • Repeat for other profiles as needed

 

Enable multiple Relationships between Accounts / Contacts

  • Setup > Sales > Accounts > Account Settings

  • Allow users to relate a contact to multiple accounts = true

 

(not required for Spenden, only for Common package)

Enable Interest Tags

  • Setup > Feature Settings > Topics > Topics for Objects > Enable Topics > Save

  • Setup > Feature Settings > Interest Tags > Let users access interest tags feature > On

    • refresh Setup page if this is not visible

      image-20250606-122538.png

       

-

Enable Country/State picklists and add States for DE/AT/CH

 

only enable Country/State Picklists, no need to add any States

 

Install Kaleido.Common Package

  • Check the Releases of the Kaleido.Common package and navigate to the “Latest” release (not “Pre-release” or something similar)

  • Copy the part of the URL which contains the install link, e.g. /packaging/installPackage.apexp?p0=04tTG0000000F3tYAE

  • Append this to the URL of the Org where you want to install the package

    • Example:
      https://kaleido-spenden-npc-test-dev-ed.develop.lightning.force.com/lightning/page/home
      becomes
      https://kaleido-spenden-npc-test-dev-ed.develop.lightning.force.com/packaging/installPackage.apexp?p0=04tTG0000000F3tYAE

  • Do not install any Beta / Pre-release Package into a Prod or Deveoper Edition Org!

  • Select "Install for Admins Only"

  • If the Package has not yet passed the Salesforce Security Review, a warning message may appear, which can be acknowledged

Install Kaleido.Kontakte.NPC Package

  • Install the Kaleido.Common package first

  • Install the Kaleido.Kontakte.NPC package (same steps as with Kaleido.Common)

    • Select "Install for Admins Only"

Install Kaleido.Spenden.NPC Package

  • Install the Kaleido.Common package first

  • Install the Kaleido.Spenden.NPC package (same steps as with Kaleido.Common)

    • Select "Install for Admins Only"

Post-Installation Steps - Kontakte

Step

Dev Scratch Org

QA Scratch Org

Production Org

Step

Dev Scratch Org

QA Scratch Org

Production Org

Enable German as Translation Language

  • Setup > Translation Language Settings > Enable Workbench

  • Click Edit for the language German

  • Set Active = True

  • Save

 

-

Add values for Salutation Field in PersonAccount Record Type

  • Setup > Object Manager > Person Account > Record Types > PersonAccount > Click “Edit” beside Salutation (First Field)

  • Move all Available Values “Mr, Ms, * “ from Available Values to Selected Values

  • Save

 

Add List View Filter for “Alle aktiven Personenaccounts”

  • App Launcher > Kaleido:KONTAKTE > Account > Select List View “Alle aktiven Personenaccounts"

  • Click on the Filters button (Funnel icon towards right), then in the Account RecordType filter select “PersonenAccount”

  • Save

 

-

Deploy unpackaged Metadata

Unpackaged Metadata is metadata that cannot be a part of the Kontakte package and needs to be deployed manually. It consists mainly of changes to Standard Objects and Standard Picklists.

Please check the metadata beforehand to ensure it is relevant to the project.

  • connect the Org

    cci org connect <org-name>
  • deploy the unpackaged metadata

    cci task run deploy_post --org <org-name>

 

-

-

Import default configuration of the Label Service

The default configuration of the Label Service will populate the following Account fields:

  • kldo__RecipientSalutationFormal__c

  • kldo__RecipientSalutationInformal__c

  • kldo__RecipientAddress__c

You can also start from scratch and not import anything. However, it is recommended that you use the default configuration as a starting point at least.

  • connect the Org (if not already done during the previous step)

    cci org connect <org-name>
  • import the data

    cci task run load_dataset --mapping datasets/label-config/label-config.mapping.yml --sql_path datasets/label-config/with-namespace/label-config.dataset.sql --org <org-name>

 

-

-

Assign Permission Sets

Assign the following Permission Sets to the appropriate Users:

  • KLDO Contacts - User

  • KLDO Contacts - User (Standard)

  • KLDO Labels - Admin

  • KLDO Labels - User

 

-

-

Post-Installation Steps - Spenden

Step

Dev Scratch Org

QA Scratch Org

Production Org

Step

Dev Scratch Org

QA Scratch Org

Production Org

Enable German as Translation Language

  • Setup > Translation Language Settings > Enable Workbench

  • Click Edit for the language German

  • Set Active = True

  • Save

 

-

 

Deploy unpackaged Metadata

Unpackaged Metadata is metadata that cannot be a part of the Spenden package and needs to be deployed manually. It consists mainly of changes to List Views of Standard Objects.

Please check the metadata beforehand to ensure it is relevant to the project.

  • connect the Org

    cci org connect <org-name>
  • deploy the unpackaged metadata

    cci task run deploy_post --org <org-name>

 

-

-

Assign Permission Sets

Assign the following Permission Sets to the appropriate Users:

  • KLDO Donations - Communication Run - Admin

  • KLDO Donations - Communication Run - User

  • KLDO Donations - Donation Management - Admin

  • KLDO Donations - Donation Management - User

  • KLDO Donations - Donation Receipt - Admin

  • KLDO Donations - Donation Receipt - User

 

-

-

Post-Installation Steps - Connect

Step

Dev Scratch Org

QA Scratch Org

Production Org

Step

Dev Scratch Org

QA Scratch Org

Production Org

Add values to Account Status field

  • Setup > Object Manager > Account > Fields & Relationships > Status (kldo__Status__c) > Edit

  • Add Values:

    • Inactive

    • Deleted

TODO
Can’t this be done automatically with metadata or CumulusCI, @Wolfgang Trog ?