Loading

"An unhandled fault has occurred in this flow" when crediting bonus points

게시 일자: Jul 7, 2026
상세 설명

Loyalty Management flows (loyalty program processes and autolaunched/record-triggered flows that call the Credit Points or accrual actions) throw an unhandled fault and send the standard Flow exception email. We see an unhandled fault email from a flow" and "the Credit Enrollment Bonus Points action inside the flow is failing for multiple test classes with INVALID_REQUEST for programName, programCurrencyName, loyaltyProgramMemberId".

The fault appears when the flow runs during member enrollment, an accrual transaction, or a subflow that updates the member record. Typical triggers:  the Credit Points action receives a null or incorrect [ProgramName], [ProgramCurrencyName], or [LoyaltyProgramMemberId];  the running user lacks field-level read/edit access to fields the flow references, producing INVALID_REQUEST or a missing-field error; or a validation rule or managed-package trigger on the target object (for example a custom validation on Event or the loyalty record) rejects the update the flow performs, surfacing as FIELD_CUSTOM_VALIDATION_EXCEPTION. The flow itself may not name the failing field, which is why the error appears "non-descript". No editions or feature flags restrict this behaviour; it affects any org running Loyalty flows.

솔루션

Cause 1: Missing or mismatched inputs in the Credit Points action (INVALID_REQUEST for programName, programCurrencyName, loyaltyProgramMemberId)
1. Open Setup > Flows and click the failing flow (for example the enrollment bonus flow).
2. Open the failing element named in the error email (for example the Credit Points action labeled "Credit Enrollment Bonus Points").
3. In the action inputs, confirm [LoyaltyProgramMemberId] is set to a non-null variable that holds the member record Id created earlier in the flow. If the member is created in a prior element, set this input to that element's output Id, not a hardcoded value.
4. Set [ProgramName] to the exact API name or value of an active loyalty program and [ProgramCurrencyName] to a currency that exists under that program. The values are case-sensitive and must match a record in [LoyaltyProgramCurrency].
5. If we credit a currency subtype, in the action first select Fixed Value in the [CurrencyName] field, then select the currency, then select the currency subtype. The subtype must be associated with a traceable non-qualifying currency.
6. Save and activate the flow.

Cause 2: Running user lacks field-level security on referenced fields
1. Identify the user or automated process user that runs the flow (the From address on the exception email, or the System Context setting of the flow).
2. Go to Setup > Permission Sets, open the permission set assigned to that user, and click Object Settings.
3. For each object the flow reads or updates (for example [LoyaltyProgramMember], [Event], [GiftTransaction]), set Read and Edit to enabled on every field the flow references, including fields named in the error such as [ObjectSourceCodeId] and [PaymentInstrumentId].
4. Verify the field exists on the object the flow actually queries. The error may not state the object, so confirm the field is on the queried object and not a related object.
5. To run the flow in system context regardless of user permissions, set the flow's How to Run the Flow option to System Context Without Sharing, or move the record update into an autolaunched subflow configured to run in system context, then call that subflow from the original flow.

Cause 3: A validation rule or managed-package trigger blocks the record update (FIELD_CUSTOM_VALIDATION_EXCEPTION)
1. Read the exception email; the message after FIELD_CUSTOM_VALIDATION_EXCEPTION names the rule's error text (for example "This event refers to a visit...").
2. Go to Setup > Object Manager > <target object> > Validation Rules and open the rule matching that text.
3. Adjust the rule's formula so the value the flow sets satisfies the rule, or add a bypass condition such as $Permission or a custom checkbox that the flow's running user meets.
4. If a managed trigger (for example a Consumer Goods Cloud or Loyalty managed trigger) blocks the update, change the flow to set the field to a value the managed logic accepts, or perform the update through the supported managed action rather than a direct FlowRecordUpdate.
5. Save the validation rule and reactivate the flow.

Verification: Confirm the issue is resolved by enrolling a test member (or triggering the source record) and watching for the Credit Points action to complete; the member's points balance updates in the related loyalty ledger and no Flow exception email is sent.

Knowledge 기사 번호

005387512

 
로드 중
Salesforce Help | Article