FIELD_CUSTOM_VALIDATION_EXCEPTION in Salesforce-deployments oplossen

Een custom validation rule in de doel-org blokkeerde het record, en de foutmelding is de eigen boodschap van de rule.

Komt voor bij: runtime DML, meestal tijdens de uitvoering van Apex-tests

Wat het betekent

FIELD_CUSTOM_VALIDATION_EXCEPTION betekent dat een validation rule die jij of een andere admin hebt geconfigureerd het opgeslagen record afwees. Salesforce voegt de exacte foutmelding van de validation rule toe aan de exception, dus de oplossing is meestal direct zichtbaar in de foutmelding, zodra je weet welk record en welke rule dit veroorzaakte.

Omdat deployments naar productie Apex-tests uitvoeren tegen de echte, actieve validation rules van productie, is dit een van de meest voorkomende manieren waarop een validation rule die prima werkte in een sandbox een release blokkeert: de sandbox had die rule simpelweg niet ingeschakeld.

Diagnose

Veelvoorkomende oorzaken

Testdata voldoet niet aan de rule
De datafactory van een Apex-test bouwt records die een validation rule schenden die actief is in de doel-org maar niet in de bron-sandbox.
Validation rule inconsistent tussen omgevingen
De activeringsstatus of logica van de rule verschilt tussen omgevingen omdat een wijziging niet overal is doorgevoerd.
Nieuwe rule conflicteert met bestaande datapatronen
Een validation rule die in dezelfde deployment is toegevoegd conflicteert met de manier waarop bestaande automatisering of tests records bouwen.

De oplossing

  1. Lees de eigen foutmelding van de rule
    De melding na de foutcode benoemt de exacte voorwaarde die faalde; begin daar in plaats van te gokken.
  2. Werk de testdatafactory bij
    Pas de Apex-testsetup aan zodat gegenereerde records voldoen aan de voorwaarde van de validation rule.
  3. Stem ruleactivering af tussen orgs
    Bevestig dat de validation rule consistent actief (of inactief) is in elke omgeving die de deployment raakt.
In de praktijk

Hoe Serpent dit voorkomt

Serpent AI toont de exacte validation rule-melding al tijdens de preflight, vóórdat de echte deployment draait, zodat je de rule of de data eenmalig repareert in plaats van te gokken. Zie de bibliotheek met Salesforce-deploymentfouten.

Metadata en data in één deploymentflow in Serpent

Preventie

Deploy validation rules met dezelfde striktheid als Apex
Volg wijzigingen aan validation rules in broncodebeheer en promoot ze via dezelfde pipeline als code, in plaats van ze ad hoc te bewerken in de Setup van één org.
Bouw testdatafactories op basis van de actieve rules van het object, niet op stilzwijgende kennis
Bekijk elke actieve validation rule op een object bij het schrijven van de testdatafactory, in plaats van te vertrouwen op wat toevallig in het verleden slaagde.
Valideer tegen een productie-achtige sandbox vóór de release
Voer een check-only deploy uit tegen een volledige sandbox met de echte, actieve validation rules van productie, zodat een hiaat in de rules vóór het releasevenster aan het licht komt, niet erdoorheen.
Veelgestelde vragen

FIELD_CUSTOM_VALIDATION_EXCEPTION, beantwoord

Is het veilig om de validation rule gewoon te deactiveren tijdens de deployment?
Alleen als laatste redmiddel, en nooit in productie. Het repareren van de onderliggende testdata of het record is veiliger dan het uitschakelen van een rule die echte data beschermt.
Kan een validation rule afgaan op een veld dat niet zichtbaar is op de page layout?
Ja. Validation rules evalueren de opgeslagen veldwaarden van het record ongeacht de zichtbaarheid in de page layout, dus een verborgen veld kan nog steeds een opslag blokkeren.
Waarom slaagt dezelfde test wanneer deze alleen wordt uitgevoerd, maar faalt deze in de volledige suite?
Een eerdere test in de run heeft waarschijnlijk gedeelde status gewijzigd, een custom setting, een record dat de validation rule controleert, waar de data van de falende test nu tegen ingaat. Isoleer de eerdere test om dit te bevestigen.

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

Binnen 15 minuten ingesteld. Geen DevOps-aanwerving nodig.

Benieuwd naar sneller releasen voordat je instapt? Laten we praten

Vrijblijvend.