How the Salesforce Benefit corp benefits non-profits, technically
- Non-profit integral to Salesforce
- Power of Us Only for Registered Non-Profits
- Install in DE Org
- Model of Relationships among Data Objects
- Page Layouts
- Open-Source Repositories
- Setup for DX:
- Continuous Integration
- Cumulus Continuous Integration
- Testing with Cinnamon
- Data Load
- More about Salesforce
This article are my notes about the NPSP (Non-Profit Success Pack) from the Salesforce Foundation and friends. When done, it will be a hands-on succinct introduction to how non-profits make use of NPSP.
Non-profit integral to Salesforce
Salesforce has a generous industry-leading approach to supporting non-profits. Their 1/1/1 was institued at the founding of the company in 1998, not as an after-thought.
Salesforce provides free to non-profits its first 10 seat licenses, then 24% of the commercial licensing rates for those with:
- IRS Determination Letter of 501(c)(3) tax exempt status,
- IPEDS ID from the National Center for Education Statistics (NCES),
- Acceptable evidence of 501(c)(4) status, such as copy of the Form 990
Salesforce.org is a separate employer entitity than Salesforce, Inc. (Employees of salesforce.org don’t get CRM stock.)
Three clouds (apps):
- Nonprofit Cloud
- Education Cloud
- Philanthropy Cloud
“CRM” in the nonprofit world means “Constituent Relationship Management”.
This demo video shows some great benefits from adoption:
The Salesforce Foundation launched in 2014 “Salesforce for Nonprofits” [8:37]:
Nurtured creation of NPSP (Non-Profit Success Pack) which adds to core Salesforce orgs specifically for non-profits. It’s described at
- HEDAP = HEDA (Higher-Ed Data Architecture) Package
Early versions were called “Nonprofit Starter Pack”.
Power of Us Only for Registered Non-Profits
If you are a non-profit, register at http://www.salesforce.org/npsp-trial/
Salesforce.org runs a Power of Us Hub online community for nonprofit and higher ed Salesforce users.
MEH: It’s only for those who have been recognized by Salesforce as belonging to a Non-profit organization.
So that your browser doesn’t pick up irrelevant history, open a new Private Tab on your browser to URL:
Use a Salesforce account that is NOT associated with a Developer Edition, or you’ll get this error:
There is a SMS verification step for first time access.
If you can get in, then you can post feedback at: https://powerofus.force.com/_ui/core/chatter/groups/GroupProfilePage?g=0F980000000CjRe
Attend https://powerofus.force.com/articles/Customer_Service/Salesforce-com-Foundation-Weekly-Office-Hours 1st & 4th Friday in each month at 9:00AM Pacific / 11:00AM Central / noon Eastern
Install in DE Org
If you don’t have a “real” non-profit org:
Go to the latest version:
- Click “Log In” at the bottom of the page to select “Production or Developer Edition org”.
- Provide your DE credentials.
Click “Allow” for the “Examining your org” to flash by before the “Installation Bundles and Packages” page appears.
The “hot dog” icons say “Metadata from Github” and “Metadata from Zip”.
- Click “Install”.
Look for emails from “firstname.lastname@example.org” for each of the 9 items listed above, such as “Package Contacts & Organizations Install Successful”.
“Some components, such as custom objects, custom report types, and workflow rules, must be activated using the package deploy process, before they are available to your organization.”
“Your matching rule NPSP Contact Personal Email Match for identifying duplicate records has been activated and is now ready to use.
- Determine whether Aloha has been enabled via the Subscriber Overview page that comes with the LMA application.
Model of Relationships among Data Objects
Internally, data values are stored within “objects” that hold data, like a tab within a spreadsheet. Within an object, each row is a record and each (vertical) column is a field. These are referred collectively as “object models”, which forms the basis for how data is imported. These are also referred to as (aka): data model, account model, household account model, object model.
Standard Salesforce (before NPSP) are in blue. NPSP modifies Salesforce databases and programming code to use different words on screen layouts, reports, and dashboards:
- Contacts => Constituents and Donors in NPSP
- Accounts (companies) => Households in NPSP
- Opportunities (products) => Donations in NPSP (revenue-generating events)
At the upper-left, the fork symbol at the end of blue lines to leads illustrate that many leads can lookup details about the same campaign. A particular level can be assigned to many households (accounts).
View objects in Setup > Object Manager > select an object > Fields & Relationships.
Use the Schema Builder drag and drop Salesforce tool for creating a custom objects.
On a Chrome browser, open a New Ingonito window and login.
PROTIP: Press command+` (back-tick) to switch among browser windows.
https://powerofus.force.com/articles/Resource/NPSP-Post-Install-Checklist outlines these steps:
Click your profile picture to switch to Classic (Visualforce) UX.
Create Opportunity Sales Processes, Record Types, and Stages. For example, if your organization handles memberships, create a Membership Record Type and appropriate stages for a Membership opportunity’s process.
Assign New Record Types to Profiles
Edit Page Layouts
Assign Page Layouts
Override Lead Conversion Button
Run Health Check: Select the NPSP Settings tab, System Tools, click “Run Health Check”.
“The Opportunity stage Pledged does not exist or is not active. Add this Opportunity Stage value in Salesforce Setup.
To confirm that everything appears as it should, create a test contact, account/household, and opportunity.
- In-Kind Gifts
- Matching Gifts
Legacy Data Model
Pages use a “Household Account Model”. Some of the code references a legacy data model (whether that is One-to-One Individual or Bucket Individual).
https://s3-us-west-2.amazonaws.com/sfdo-docs/npsp_reports.pdf contains the NPSP Reports Workbook June 28, 2017.
Sign in to see the default “home” page for Salesforce “Nonprofit Starter Pack” app, users have standard objects “Accounts”, “Contacts”, and “Reports”.
PROTIP: Just as Non-profit accounting are different than for-profit enterprises, non-profits have a whole different set of objects, such as:
- Donations and Recurring Donations [package]
Click “Reports” among the top tabs.
Each dashboard illustrates data in one or more reports.
PROTIP: Reports in Salesforce are organized within folders. The “Unfiled Public Reports” folder is at the top because it’s a “dumping ground” for reports that are newly created.
Reports specific to nonprofits:
- Households (Contacts and Organizations) [package]
- Donations, which can consist of:
- Soft Credits
- Matching Gifts/Grants
- In-Kind Gifts
Custom reports can include additional non-profit objects:
Processes for nonprofits include fundraising, volunteer and grant management, advocacy, peer-to-peer campaigns.
Nevertheless, non-profits have similar needs for IT support as any organization:
- Data cleansing, de-duplication, and maintenance
- Data migration, mapping, and field creation
- Custom development on the Force.com platform
- Training on Salesforce CRM
http://www.salesforce.org/nonprofit/nonprofit-success-pack/watch-nonprofit-success-pack-demo/ Register to watch the unlisted demo video [3:32] Uploaded on Jan 13, 2017 shows screens to cover the full lifecycle of donors and donations.
Cumulus is the core NPSP repository. It has hundreds of open Issues and dozens of open Pull Requests.
https://cumulusci.readthedocs.io/en/latest/ (stored within https://github.com/SFDO-Tooling/CumulusCI/blob/master/docs/why_cumulusci.rst)
Within the Cumulus wiki is information about each (Apex) class at http://developer.salesforce.org/Cumulus/ApexDocumentation/index.html - the Nonprofit Success Pack Codebase Documentation. Abbreviations, alphabetically:
- ACCT = Account
- ADDR = Address
- AFFL = Affiliations
- ALLO = Allocations
- BDE = Batch Data Entry
- BDI = Batch Data Import
- CON = Contact (Merge)
- CONV = Conversion
- CTRL = Control
- EP = Engagement Plans
- ERR = Error
- HH = Households
- LD = Lead (conversion)
- LVL = Level
- MTCH = Matching (gifts)
- OPP = Opportunity
- PMT = Payment
- PSC = Payment Soft Credits
- RLLP = Rollup
- RD = Recurring Donations
- RP =
- REL = Relationships
- SDRs = Sales Relationship Representatives
- STG = Settings
- TDDM = Table-Driven Trigger Management
- USER = Users
- UTIL = Utility
“Dev” is the only permanent branch.
In Opportunity objects, many non-profits use General Accounting Units (GAUs) to segregate donated funds for specific purposes or special restrictions (such as a scholarship GAU specifically for scholarships).
https://powerofus.force.com/articles/Resource/NPSP-Apex-Class-Descriptions describes each Table-Driven Trigger Management class in the code at: https://github.com/SalesforceFoundation/Cumulus/tree/rel/3.110/src/classes
Setup for DX:
- In the orgs folder, a json file defines features enabled in each environment (feature, dev, beta, release)
- sfdx-project.json points to the src folder.
- In folder push, txt files define scratch org ids
- File cumulusci.yml define tasks, flows, and json for each scratch org defined in the orgs folder
Column “#Builds” is from https://mrbelvedereci.herokuapp.com/repos which presents the status of builds on the build server on Heroku
Log in by authorizing mrbelvedereci-sfdo (third-party OAuth application)
Subject “[mrbelvedereci] Please Confirm Your E-mail Address” Click “Confirm” in the web page that pops up.
There is also https://github.com/SFDO-Tooling used by Salesforce.org’s Products team for managing devOps and release of Salesforce projects. https://metadeploy-staging.herokuapp.com/products
Much of the code is written in Python (file .py), thus the use of the Python-based Robot Framework RF is written to be a “keyword-driven”, using the human-readable “Gherkin” syntax for specifying tests.
SCREENCAST: installing cumulus CI 2.0
View the Continuous Integration (CI) and Project Cumulus Jan 31, 2014 [1:00:49] by Jason Lantz
CucumulusCI at https://github.com/SalesforceFoundation/CumulusCI is a Python framework for building portable automation for Salesforce projects
https://github.com/SalesforceFoundation/Cumulus/wiki/Cumulus-CI-Build-Instructions Jenkins build processes used in the Cumulus release process as well as instructions for solving common build issues.
https://cumulusci.readthedocs.io/en/latest/ CumulusCI’s documentation!
Cumulus Continuous Integration
The “Mr. Belvedere” GitHub repository at
Lightweight, Salesforce specific CI app run on Heroku to build Github repositories configured for CumulusCI
https://github.com/SalesforceFoundation/CumulusCI CumulusCI is a Python framework for building portable automation for Salesforce projects.
https://github.com/SalesforceFoundation/CumulusCI-Test CumulusCI-Test is a dummy project used to test CumulusCI - CumulusCI will run this project through the whole CI flow to verify everything works
Python framework for building portable automation for Salesforce projects
Jenkins, Ant, GitHub, and internal packages
Ant is used (instead of Maven) because there is a Force.com Ant Migration tool. Ant is extenable with macros and targets. It runs build.xml properties file in GitHub.
The list of class names provides an indication of the functional scope of the effort.
Testing with Cinnamon
Volunteers for Salesforce (V4S)
Trailhead module: Volunteers for Salesforce (V4S) Basics describes how V4S handles common volunteer management processes:
- Managing volunteer jobs that an organization needs filled
- Tracking skills volunteers have and matching volunteers to jobs by skills and availability
- Tracking hours against specific volunteer shifts
- Allowing volunteers to sign up for shifts via the website
- Displaying a calendar of jobs and shifts on an organization’s website
- Sending email reminders for upcoming shifts to confirmed volunteers
Sending Thank You emails to volunteers that sign up for a shift from the website
- Allowing volunteers to report the hours they’ve worked
- Tracking the hours a volunteer works
- Tracking the volunteer hours and jobs for a specific event
Tabs included in V4S include: Volunteers Help, Volunteers Wizard (to create new campaigns, jobs, and shifts), Volunteer Jobs, Shift Calendar, Calendar view, Find Volunteers.
Looking into https://github.com/SalesforceFoundation/Volunteers-for-Salesforce
With src folder processed using SOAP requests:
- package.xml defines member names within types: ApexClass, ApexComponent, ApexPage, ApexTrigger, CustomField, CustomLabel, etc.
- Groundwire_Volunteers.app defines tabs defined by …tab files within the tabs folder.
- Each tab file specifies the page layout and associated label and motif.
- folder translations has language text files for German (de), Spanish (es), French (fr), Hebrew (iw), Japanese (ja), and Dutch (nl_NL)
- labels contains display text for US and potentially other languages
- folder objectTranslations
- folder staticresources
https://www.youtube.com/watch?v=L8ip1tWhEKU Importing Data into Salesforce for Nonprofits – Offered Monthly by Salesforce.org
PROTIP: When adding contacts, in the Contact Details section, enter all relevant details for your new Contact (but leave the Account Name field blank). Leaving the Account Name field blank is the key step to creating a new Household. Salesforce automatically creates a Household, and derives the name of the Household from the name of the Contact.
To create a new Contact within a Household, in the upper right hand corner of the Account Detail page, click Manage Household.
MetaCI CLI replaces mrbelvedereci.
metaci repo list metaci plan list metaci org list metaci build list metaci build info 2 --log metaci service list metaci service add metaci plan run 1 etc.
Documentation about installation is included among other topics at:
https://www.youtube.com/watch?v=8MZMVBJMW4Q 13:43 Explaining the NPSP Account Models by Caroline Renard
https://www.youtube.com/watch?v=An2aeOisJK0 9:26 Nonprofit Success Pack (NPSP) 3.0 in less than 10 minutes by Redpath Consulting Group
https://www.youtube.com/watch?v=IATQdFl5LOQ 16:56 Live Demo: Nonprofit Fundraising
https://www.youtube.com/watch?v=IATQdFl5LOQ 16:56 Live Demo: Nonprofit Fundraising by Salesforce.org
Playlist: https://www.youtube.com/watch?v=1Acc7Fq8CfQ&list=PLU8xqF8ZASbXC-QFldf_Nm-oa0v1Hra9q Get Started with Salesforce for Nonprofits
https://cumulusci.readthedocs.io/en/latest/ talks about the Python-based Robot Framework for testing.
https://github.com/SalesforceFoundation/Cumulus/wiki/Cumulus-CI-Build-Instructions Cumulus CI Build Instructions
More about Salesforce
This is one of a series about Salesforce
- Salesforce Ohana (about the Salesforce company, offices, mascots, emojis, and store)
- Salesforce Glossary (of acronyms)
- Salesforce Events (Conferences, local Meetups, ) to meet people face-to-face
- Salesforce Exhibitors (at Dreamforce)
- Salesforce Onboarding (Trailhead and IDEs)
- Salesforce Offerings (Clouds, Industries, Domains, GitHub, editions, pricing, features, versions)
- Salesforce Certifications (training and exams)
- Salesforce Projects, Superbadges, and Sample Apps
- Salesforce Project Plans
- Salesforce Jobs (within Salesforce, with partners, etc.)
- Salesforce Apps (in AppExchange)
- Salesforce Alexa
- Salesforce Heroku (external apps)
- Salesforce Non-Profit support
- Salesforce Data Management
- Salesforce Einstein
- Salesforce Selenium (test automation)