Campaign 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. Please note: the flow commentary is produced using AI.
Overview#
Flow name: MoveData_Donation_Campaign_Post Label: [MoveData] General: Campaign - Post Upsert Type: Auto-Launched Flow Template API version: 60.0 Status: Active
This flow handles post-processing operations after campaign records are created or updated, including campaign member structure initialisation, gift designation copying from parent campaigns, and campaign member creation.
Purpose#
The flow performs post-upsert operations that:
- Initialise campaign member status structures with configurable labels
- Copy gift designations from parent campaigns to child campaigns
- Create campaign member records for primary contacts
- Establish hierarchical campaign member value structures
- Identify and process campaigns for member creation based on configuration
Salesforce fields#
This flow interacts with the Salesforce Campaign object and its related fields. Below is a mapping of all fields utilised:
| Field API name | Field type | Purpose in flow |
|---|---|---|
| Id | ID | Unique record identifier |
| ParentId | Lookup to Campaign | Links to parent campaign for gift designations |
Input variables#
Core campaign data#
| Variable | Type | Required | Description |
|---|---|---|---|
Record |
Campaign SObject | Yes | The Campaign record being processed |
CampaignContact |
Account SObject | No | Primary contact to be added as campaign member |
Type |
String | No | Campaign type ('team'/'organisation' or other) affecting member status |
CampaignIdList |
String Collection | No | List of campaign IDs for member processing |
CampaignCount |
Number | No | Count of campaigns in hierarchy |
CampaignIndex |
Number | No | Position in campaign hierarchy |
Campaign member configuration#
| Variable | Type | Default | Description |
|---|---|---|---|
Config_CampaignMemberAll |
Boolean | false | Create members for all campaigns |
Config_CampaignMemberParentCampaign |
Boolean | false | Create members for parent campaigns |
Config_CampaignMemberTopLevelCampaign |
Boolean | false | Create members for top-level campaigns |
Config_CampaignMemberDeleteExistingStatuses |
Boolean | false | Remove existing member statuses |
Config_CampaignMemberLabelTeamLeader |
String | "Team Leader" | Label for team leader status |
Config_CampaignMemberLabelFundraiser |
String | "Fundraiser" | Label for fundraiser status |
Config_CampaignMemberLabelRecurringDonor |
String | "Recurring Donor" | Label for recurring donor status |
Config_CampaignMemberLabelDonor |
String | "Donor" | Label for donor status |
Config_CampaignMemberLabelProspect |
String | "Prospect" | Label for prospect status |
Gift designation configuration#
| Variable | Type | Default | Description |
|---|---|---|---|
Config_DonationSuppressGiftDesignations |
Boolean | false | Disable gift designation copying |
Config_DonationGiftDesignationsCache |
Boolean | true | Enable caching for gift designations |
Output variables#
| Variable | Type | Description |
|---|---|---|
Logs |
MoveDataLogEntry Collection | Processing logs for quality tracking |
LogsJSON |
String | JSON representation of processing logs |
Flow logic#
1. Campaign member structure initialisation#
The flow first determines if MoveData campaign member structure should be used:
- Formula check: Evaluates if any campaign member configuration is enabled
- If enabled: Initialises campaign member statuses with configurable labels
- Component:
CampaignMemberInitialiseComponent
2. Gift designation processing#
When gift designations are enabled:
- Condition:
Config_DonationSuppressGiftDesignationsis not true - Action: Copies gift designations from parent campaign to current campaign
- Component:
CopyGiftDesignationsComponent - Source: Uses
Record.ParentIdas source campaign - Target: Uses
Record.Idas target campaign
3. Campaign member creation logic#
The flow processes campaign member creation when a primary contact exists:
Campaign identification#
- Component:
CampaignMemberEvaluateComponent - Configuration: Uses member creation flags to determine which campaigns to process
- Result: Returns list of campaign IDs for member creation
Member status determination#
Uses formula logic to determine member status:
- Team/Organisation type: Assigns "Team Leader" status
- Other types: Assigns "Fundraiser" status
Campaign member creation#
- Component:
CampaignMemberCreateComponent - Contact: Uses provided campaign contact
- Status: Applies determined member status
- Hierarchy: Respects value hierarchy for status precedence
4. Member value hierarchy setup#
The flow establishes a hierarchical order of campaign member statuses:
- Team Leader (highest priority)
- Fundraiser
- Recurring Donor
- Donor
- Prospect (lowest priority)
This hierarchy ensures contacts receive the highest applicable status when added to multiple campaigns.
Processing summary#
- Member structure check: Determine if campaign member processing should occur
- Structure initialisation: Set up campaign member statuses if enabled
- Gift designation processing: Copy from parent campaign if enabled
- Contact validation: Check for primary contact and member creation settings
- Campaign identification: Determine which campaigns need members
- Campaign iteration: Log identified campaigns for processing
- Hierarchy setup: Establish member status precedence
- Member creation: Create campaign member records with appropriate status
Configuration options#
Campaign member creation control#
- All campaigns:
Config_CampaignMemberAll = truecreates members for all campaigns - Parent only:
Config_CampaignMemberParentCampaign = truecreates members for parent campaigns - Top level only:
Config_CampaignMemberTopLevelCampaign = truecreates members for top-level campaigns
Gift designation control#
- Suppress processing:
Config_DonationSuppressGiftDesignations = truedisables gift designation copying - Cache control:
Config_DonationGiftDesignationsCachecontrols caching behaviour
Member status labels#
All member status labels are configurable, allowing organisations to customise campaign member terminology.
Error handling#
Formula-based processing control#
- Create members check: Uses formula to determine if any member creation is enabled
- Status assignment: Uses formula to assign appropriate member status based on campaign type
- Graceful degradation: Skips processing when conditions are not met
Logging integration#
- Component logging: Logs campaign identification and member creation activities
- JSON output: Provides structured logging for troubleshooting
- Process tracking: Maintains audit trail of campaign member operations
Dependencies#
CampaignMemberInitialiseComponent(Apex action)CopyGiftDesignationsComponent(Apex action)CampaignMemberEvaluateComponent(Apex action)CampaignMemberCreateComponent(Apex action)movedata__WriteToLogFlowComponent(Apex action)movedata__MoveDataLogEntry(Apex class)