Hoe je FIELD_INTEGRITY_EXCEPTION in Salesforce-deployments oplost

Een op te slaan waarde komt niet overeen met wat het veld verwacht, meestal een picklistwaarde die niet bestaat in de doelorg.

Treedt op bij: runtime DML, meestal tijdens de uitvoering van Apex-tests of een data load

Wat het betekent

FIELD_INTEGRITY_EXCEPTION betekent dat een waarde niet slaagde voor het platform's eigen integriteitscontrole voor een veld, meestal een picklistwaarde die niet is gedefinieerd in de doelorg, of een waarde die een restricted picklist of een typebeperking schendt. Picklistwaarden zijn org-specifieke metadata, dus ze moeten net als elk ander component worden gedeployed en gesynchroniseerd.

De Metadata API deployt wijzigingen in picklistwaarden van standaardobjecten als onderdeel van de metadata van het object, dus een mismatch hier is bijna altijd terug te voeren op een picklistwaarde-wijziging die wel in Setup van de ene org terechtkwam, maar nooit in versiebeheer of een bijpassende deployment.

Diagnose

Veelvoorkomende oorzaken

Picklistwaarde ontbreekt in de doelorg
Een Apex-test of record gebruikt een picklistwaarde die in de bronorg is toegevoegd maar nooit is gedeployed naar de waardenset van de doelorg.
Restricted picklist wijst de waarde af
Het veld is ingesteld op een restricted picklist, en de op te slaan waarde staat niet op de goedgekeurde lijst van de org.
Veldtype komt niet overeen na een schemawijziging
Het type van een veld is gewijzigd, bijvoorbeeld van tekst naar getal, en oude testdata of formules gaan nog steeds uit van het vorige type.

De oplossing

  1. Deploy eerst de picklistwaarden
    Neem de global value set of de picklistwaarde-wijziging op veldniveau op in dezelfde deployment als alles wat deze gebruikt.
    <valueSet>
      <valueSetDefinition>
        <sorted>false</sorted>
        <value><fullName>Renewal_Pending</fullName><default>false</default></value>
      </valueSetDefinition>
    </valueSet>
  2. Houd restricted picklists gesynchroniseerd
    Controleer restricted picklistwaarden over omgevingen heen zodat bron- en doelorg dezelfde set toestaan.
  3. Werk afhankelijke testdata bij
    Werk na een veldtypewijziging alle Apex-testdata of formulevelden bij die van het oude type uitgingen.
In de praktijk

Hoe Serpent dit voorkomt

De omgevingsdiff van Serpent AI laat precies zien welke picklistwaarden in de ene org bestaan en niet in de andere, voordat een deployment ooit draait. Zie de bibliotheek met Salesforce-deploymentfouten.

Metadata en data in één deploymentflow in Serpent

Preventie

Beheer picklist-waardensets in versiebeheer, net als andere metadata
Haal GlobalValueSet- en veldmetadatawijzigingen op en commit ze via dezelfde source-control workflow als Apex, in plaats van waarden ad hoc te wijzigen in Setup.
Bundel een picklistwaarde met de code of test die deze als eerste gebruikt
Lever de nieuwe waarde uit in dezelfde deployment als de klasse, trigger of test die ernaar verwijst, zodat de twee nooit in de verkeerde volgorde landen.
Beoordeel wijzigingen aan restricted picklists op impact stroomafwaarts
Zoek voordat je een picklist verder beperkt naar Apex, Flow en integraties die waarden schrijven die de beperking voortaan zou afwijzen.
Veelgestelde vragen

FIELD_INTEGRITY_EXCEPTION, beantwoord

Hoe kom ik erachter welke picklistwaarde ontbreekt?
De foutmelding noemt meestal direct het veld en de veroorzakende waarde. Vergelijk de waardenset van dat veld tussen de bron- en doelorg om het gat te bevestigen.
Kan dit ook optreden bij een niet-picklistveld?
Ja, minder vaak. Het kan ook optreden bij typemismatches na een veldconversie, of bij andere platformniveau-waardebeperkingen buiten picklists specifiek.
Worden record type-picklistwaardemappings automatisch meegedeployed met de picklistwaarde?
Niet altijd. Het toevoegen van een waarde aan een global value set maakt deze niet automatisch beschikbaar op elk record type; de mappingmetadata van het record type heeft vaak zijn eigen expliciete update nodig.

Start gratis. Geen creditcard, geen installatie, geen verplichting.

Binnen 15 minuten ingericht. Geen DevOps-medewerker nodig.

Benieuwd naar sneller releasen voordat je instapt? Laten we praten

Vrijblijvend.