Loading

Invalid Cross Reference ID Errors on Donor Gift Summary Writeback in a Data Processing Engine Recipe

Julkaisupäivä: Jul 29, 2026
Kuvaus

The nightly Donor Gift Summary batch (a Data Processing Engine recipe) completes with a Completed status, but a fixed number of writeback records fail with:

invalid cross reference id

In the reported case, the recipe calculated 8,086 donor summaries; 7,721 wrote successfully and 365 failed. The org contained exactly 7,721 existing Donor Gift Summary records, so the 365 failures correspond one-to-one with donors who have no existing summary record.

Root cause:

  1. The recipe routes all calculated summaries to a single writeback node configured with the Update operation.
  2. An Update operation must match an existing target record. For donors who already have a Donor Gift Summary, the update succeeds.
  3. For donors with no existing Donor Gift Summary, there is no record to match, and the platform returns the generic Invalid Cross Reference ID error.
  4. The separate Insert node that would create records for new donors is processing 0 rows, so new donors are never inserted. This is a routing gap in the recipe, not a data problem with any specific account.

Common data-related causes were ruled out: no recently deleted or merged donor accounts, no summaries pointing at a deleted campaign, and nothing in the Donor Gift Summary recycle bin.

Ratkaisu

Change the writeback step so new donors are inserted and existing donors are updated in one pass. The Upsert approach is the cleanest fix:

  1. Go to Setup and search for Data Processing Engine. Open the affected recipe (for example, the Donor Gift Summary recipe) to view the canvas and its writeback nodes.
  2. Select the writeback node currently configured as Update (the node throwing the errors).
  3. In its configuration panel, change the Operation from Update to Upsert.
  4. When prompted, choose the matching field Upsert uses to decide update vs. insert. Use the field that uniquely ties each summary to its donor (the account or contact lookup the recipe populates, or a record Id carried through the recipe).
  5. Save the node, then save and activate the recipe.

After this change, the next run updates existing summaries and inserts the new ones in the same pass, with no failures. Once Upsert is in place, the separate Insert node becomes redundant (it processes 0 rows); it can be left in place or removed later.

Alternative: keep the Insert and Update nodes separate and repair the branch logic so summaries with no matching existing record are routed to the Insert node instead of the Update node. Upsert is the simpler path.

Note: a forced/manual run may complete with zero failures if the timing changes which records exist; confirm which scheduled run produced the failures when comparing results.

Knowledge-artikkelin numero

005390228

 
Ladataan
Salesforce Help | Article