An outreach/recall campaign in the service module: it defines who is targeted (rule-built ServiceCampaignMember rows over Accounts or Assets, per dynamicMemberObject and the child ServiceCampaignRule rows) and what is offered (child ServiceCampaignItem rows), then its Process* server actions generate the downstream records - Leads, Opportunities (with lines copied from the campaign items), or AssetMaintenance rows - one per member, plus contract/maintenance-schedule reminder leads driven by the reminderDaysOffset fields. Every Process action requires the campaign to be active and (except ProcessMembers, which checks it internally) inside its start/end date window. Generated records are tagged with a per-run batch instance id and each rerun sweeps the previous run's output, so campaign output reflects the latest member set rather than accumulating.
Fields
| Field | Label | Type | Required | What it does |
AccountId | Account | Lookup | | |
AdjustedAmount | Adjusted Amount | Currency | | |
AdjustmentId | Adjustment | Lookup → Adjustment | | |
Amount | Amount | Decimal | | |
ApexJobId | Apex Job | Text | | |
BranchId | Branch | Lookup → Branch | | |
CreatedById | Created By | Lookup → UserAccount | Yes | |
CreatedDateTime | Created Date | DateAndTime | Yes | |
Currency | Currency | PickList | | Values: USD. |
DocumentDate | Document Date | Date | Yes | |
DynamicMemberObject | Dynamic Member Object | PickList | | Which entity the member build targets: Account (also the default when empty) or Asset. Values: Asset, Account. |
DynamicMemberType | Dynamic Member Type | PickList | | Values: Field Filter, Report Data. |
EndDate | End Date | Date | | |
ExternalId | External | Text | | |
FromEngineSeries | From Engine Series | Number | | |
GeneralLedgerId | General Ledger | Lookup | | |
GLAccountId | GL Account | Lookup | | |
GLAmount | GL Amount | Decimal | | |
Id | Id | Guid | Yes | |
IsActive | Is Active | Boolean | Yes | Master switch for the generation actions: every Process* action validates the campaign is active (and, except ProcessMembers, within its start/end dates) before running; the services re-check the same gates when loading the campaign. |
IsGLPosted | Is GL Posted | Boolean | Yes | |
IsGLPostingApproved | Is GL Posting Approved | Boolean | Yes | |
ItemMaintenanceScheduleId | Item Maintenance Schedule | Lookup → ItemMaintenanceSchedule | | |
ItemServiceContractId | Service Contract | Lookup → ItemServiceContract | | The service-contract product this campaign follows up on: ProcessContractSchedule scans un-utilized AssetServiceContract rows with this itemServiceContractId falling due inside the reminder window and creates the reminder leads from them. |
LeadId | Lead | Lookup → Lead | | |
ManualAssetAction | ManualAssetAction | Boolean | | Controls when the campaign's pending AssetMaintenance items are pulled into an Opportunity or ServiceOrder for the asset: false means they are added automatically when the document is created; true means they are added only when a user explicitly triggers the populate-asset-maintenance flag on the document. The pull matches campaigns whose flag equals the invocation mode, so an automatic pass never picks up manual-only campaigns and vice versa. |
ModifiedById | Modified By | Lookup → UserAccount | Yes | |
Name | Document Number | Text | Yes | |
Notes | Notes | MultiLineText | | |
OpenAmount | Open Amount | Decimal | | |
OwnerId | Owner | Lookup → UserAccount | Yes | |
ParentServiceCampaignId | Service Campaign | Lookup → ServiceCampaign | | |
PartnerAccountId | Partner Account | Lookup → Account | | |
PerformGLPosting | Perform GL Posting | Boolean | Yes | |
RecordTypeId | Record Type | Guid, hidden | | |
ReminderDaysOffset1 | Reminder Days Offset 1 | Number | | First reminder window in days for the schedule-driven actions: ProcessContractSchedule / ProcessMaintenanceSchedule create a reminder Lead when a contract's due date is exactly today plus this offset (the lead's ReminderOffsetNumber is stamped 1). The largest of the three offsets bounds how far ahead contracts are scanned. |
ReminderDaysOffset2 | Reminder Days Offset 2 | Number | | Second reminder window in days - a due date exactly today plus this offset produces a reminder Lead stamped ReminderOffsetNumber 2. See reminderDaysOffset1 for the mechanism. |
ReminderDaysOffset3 | Reminder Days Offset 3 | Number | | Third reminder window in days - a due date exactly today plus this offset produces a reminder Lead stamped ReminderOffsetNumber 3. See reminderDaysOffset1 for the mechanism. |
ReportId | Report | Text | | |
RuleSuccessCriteria | Rule Success Criteria | PickList | | How the ServiceCampaignRule rows combine in the member build: 'Always (No Criteria)' or empty matches every row, 'All Rules Are Met' requires all, 'Any Rule Is Met' requires at least one, 'Custom Logic Is Met' evaluates ruleSuccessCustomLogic. Gotcha: the engine matches these exact strings and treats anything unrecognized as all-rules-must-match - the seeded picklist spelling 'Any Rules Are Met' is NOT the engine's 'Any Rule Is Met' and therefore behaves as ALL. Values: All Rules Are Met, Any Rules Are Met, Always (No Criteria), Custom Logic Is Met. |
RuleSuccessCustomLogic | Rule Success Custom Logic | Text | | Boolean expression over the rules' 1-based sequence numbers, e.g. '1 AND (2 OR 3)', used when ruleSuccessCriteria is 'Custom Logic Is Met'. Evaluated in memory by the group-rule engine. |
ServiceContractId | Service Contract | Lookup | | |
ServiceLeadId | ServiceLead | Guid | | |
StartDate | Start Date | Date | | |
Status | Status | PickList | | Values: Draft, Start, In Progress, On Hold. |
ToEngineSeries | To Engine Series | Number | | |
Type | Type | PickList | | Values: Recall - Asset Actions, Marketing;Service. |
UIProps | UI Props | Text | | |
UpdatedDateTime | Modified Date | DateAndTime | Yes | |
Actions
| Action | Label | Type | What it does |
BulkDelete | Delete | Delete | Delete the selected records. |
Clone | Clone | ServerAction (Clone) | Create a copy of this record |
Delete | Delete | Delete | Delete |
DeleteInList | Delete | Delete | Delete in a list page |
Edit | Edit | EditInline | Edit |
Edit2 | Edit | EditInline | Edit |
EditInLine | Edit | Edit | Edit in page. |
EditRow | Edit | Edit | Edit |
New | New | New | New |
ProcessAssets | Process Assets | ServerAction (ProcessAssets) | Creates AssetMaintenance rows - one per member per ServiceCampaignItem - carrying the member's asset and the item's quantity/contract/mandatory attributes. These are the pending recall/maintenance actions later pulled into Opportunities or ServiceOrders for the asset (automatically or manually per the campaign's manualAssetAction). Requires the campaign active and inside its date window; reruns sweep the previous batch. |
ProcessContractSchedule | Process Contract Schedule | ServerAction (ProcessContractSchedule) | Generates contract-renewal reminder Leads: scans un-utilized AssetServiceContract rows for the campaign's itemServiceContractId whose dueDate lands exactly on today plus one of the campaign's reminderDaysOffset1/2/3, and creates one lead per hit stamped with the matching ReminderOffsetNumber. Requires the campaign active and inside its date window. Intended to run daily (each day matches the contracts whose due date crosses an offset boundary). |
ProcessLeads | Process Leads | ServerAction (ProcessLeads) | Creates one Draft Lead per ServiceCampaignMember, carrying the member's account/asset/partner/branch links and a back-reference to the campaign and member. Requires the campaign active and inside its start/end window. Each run tags its leads with a batch id and hard-deletes the campaign's leads from earlier runs - so rerunning replaces previously generated (unconverted) leads rather than adding to them. |
ProcessMaintenanceSchedule | Process Maintenance Schedule | ServerAction (ProcessMaintenanceSchedule) | Requires the campaign active and inside its date window. |
ProcessMembers | Process Members | ServerAction (ProcessMembers) | Rebuilds the campaign's member list: resolves the Accounts or Assets (per dynamicMemberObject) matching the ServiceCampaignRule rows under ruleSuccessCriteria, inserts one ServiceCampaignMember per match tagged with a fresh batch id, then soft-deletes members from earlier runs - build and sweep commit in one unit of work so the campaign is never left member-less in between. Run this before any of the generation actions - they all fan out from the current member rows. |
ProcessOpportunities | Process Opportunities | ServerAction (ProcessOpportunities) | Creates one Opportunity per ServiceCampaignMember plus one OpportunityLine per ServiceCampaignItem under each (copying item, quantity, contract link and the mandatory flag). Requires the campaign active and inside its date window. Reruns replace: earlier runs' opportunities for this campaign are deleted and the new batch takes their place. |
Lookup filters
| Filter | Lookup field | Notes |
| Branch For Partner Account | BranchId | |
| Customer Account Filter | AccountId | |
| Partner Account Filter | PartnerAccountId | |