Recurring post-upsert flow
Note
This flow is self-documenting and should be viewed within Salesforce (Setup > Process Automations > Flows). This document is to support working through a visual flow. The flow commentary in this document was generated with AI assistance.
Overview#
Flow name: MoveData_Donation_Recurring_Post Label: [MoveData] Donation: Recurring - Post-Upsert Type: Auto-Launched Flow Template API version: 60.0 Status: Active
This flow executes post-processing operations following the creation or updating of recurring donation records, with a primary focus on generating campaign member entries for recurring donors connected to campaigns.
Purpose#
The flow performs post-upsert operations that:
- Create campaign member records for recurring donors
- Establish campaign member entries with appropriate status hierarchy
- Support configurable campaign member status labels
- Maintain status priority to prevent downgrading existing higher-priority statuses
Input variables#
Core recurring donation data#
| Variable | Type | Required | Description |
|---|---|---|---|
Record |
npe03__Recurring_Donation__c | Yes | The processed recurring donation record |
DonationCampaign |
Campaign SObject | No | Associated campaign for the donation |
DonorContact |
Contact SObject | No | Contact linked to the donation |
Campaign member configuration#
| Variable | Type | Default | Description |
|---|---|---|---|
CampaignIdList |
String Collection | - | Campaign IDs for member creation |
Config_CreateCampaignMembers |
Boolean | true | Enables/disables campaign member creation |
Config_CampaignMemberDeleteExistingStatuses |
Boolean | false | Controls removal of existing statuses |
Config_CampaignMemberLabelRecurringDonor |
String | "Recurring Donor" | Status label for recurring donors |
Config_CampaignMemberLabelTeamLeader |
String | "Team Leader" | Status label for campaign leaders |
Config_CampaignMemberLabelFundraiser |
String | "Fundraiser" | Status label for active fundraisers |
Config_CampaignMemberLabelDonor |
String | "Donor" | Status label for one-time donors |
Config_CampaignMemberLabelProspect |
String | "Prospect" | Status label for potential donors |
Output variables#
| Variable | Type | Description |
|---|---|---|
Errors |
String[] | Error collection |
Logs |
MoveDataLogEntry[] | Processing logs |
LogsJSON |
String | JSON representation of logs |
Flow logic#
1. Prerequisites validation#
The flow validates essential conditions before proceeding:
- Valid
DonationCampaignwith non-null ID - Valid
DonorContactwith non-null ID Config_CreateCampaignMembersenabled
All three conditions must be satisfied; otherwise, processing terminates gracefully.
2. Campaign member status initialisation#
The InitialiseCampaignMemberComponent Apex action prepares the campaign's member status picklist values for assignment.
3. Status hierarchy establishment#
The flow constructs a prioritised status hierarchy (highest to lowest):
| Priority | Status | Description |
|---|---|---|
| 1 | Team Leader | Campaign organisers/leaders |
| 2 | Fundraiser | Active campaign fundraisers |
| 3 | Recurring Donor | Target status for this flow |
| 4 | Donor | One-time contributors |
| 5 | Prospect | Non-donors with donation potential |
4. Campaign member record creation#
The CreateCampaignMemberComponentWithLogs Apex action creates campaign member records using intelligent status assignment:
- Preserves higher-priority statuses (Team Leader, Fundraiser)
- Upgrades lower-priority statuses (Donor, Prospect) to "Recurring Donor"
- Assigns "Recurring Donor" status when no existing status exists
Error handling#
The flow implements graceful termination for:
- Missing campaign association
- Missing contact association
- Disabled campaign member feature
Dependencies#
InitialiseCampaignMemberComponent(Apex action)CreateCampaignMemberComponentWithLogs(Apex action)