Zo los je INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST op bij Salesforce-deployments

Een record wordt opgeslagen met een picklistwaarde, of geen waarde, die niet in de beperkte waardeset van het veld in de doelorganisatie staat.

Treedt op tijdens: runtime DML, bij data-imports, integraties en Apex-testopzet

Wat het betekent

INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST treedt op wanneer een picklistveld is ingesteld om waarden te beperken tot de gedefinieerde set, en een record probeert een waarde buiten die lijst op te slaan, of een verplichte beperkte picklist leeg wordt gelaten. De waarde kan volledig geldig zijn in de bronorganisatie; het probleem is dat de waardeset van de doelorganisatie niet overeenkomt.

Het beperken van een picklist is een instelling per veld; een onbeperkte picklist accepteert stilzwijgend elke tekenreeks, inclusief typefouten, terwijl een beperkte picklist de gedefinieerde waardeset strikt afdwingt, wat precies verklaart waarom deze fout meestal opduikt zodra de beperking van een veld voor het eerst wordt ingeschakeld.

Diagnose

Veelvoorkomende oorzaken

Waardeset verschilt tussen bron- en doelorganisatie
De actieve waarden van de picklist zijn gewijzigd in de veldmetadata van één organisatie, maar de wijziging is nooit naar de andere gedeployed.
Recordtype bevat de waarde niet
De picklistwaarde-mapping van een recordtype sluit een waarde uit die de globale picklist verder wel toestaat.
Data-import stuurt een gedeactiveerde waarde
Een waarde is op de picklist gedeactiveerd, maar binnenkomende data of een API-integratie stuurt deze nog steeds.

De oplossing

  1. Deploy de picklist-waardeset samen met het veld
    Neem de volledige lijst met actieve waarden, en eventuele recordtype-waardemappings, op in dezelfde deployment als de wijziging van het veld of recordtype.
  2. Voeg de ontbrekende waarde toe aan de picklist van de doelorganisatie
    Als de waarde daar ook geldig zou moeten zijn, voeg deze dan toe aan de waardeset van de picklist voordat je de deploy opnieuw probeert.
  3. Map of reinig de data vóór het importeren
    Werk de binnenkomende data bij zodat een actieve, gemapte waarde wordt gebruikt in plaats van een waarde die de picklist van de doelorganisatie niet meer accepteert.
In de praktijk

Hoe Serpent dit voorkomt

Serpent synchroniseert picklist-waardesets en recordtype-mappings samen met de sandboxes die het beheert, zodat een beperkte picklist over elke organisatie afgestemd blijft in plaats van stilzwijgend uit elkaar te lopen. Zie de bibliotheek met Salesforce-deploymentfouten.

Metadata en data in één deploymentflow in Serpent

Preventie

Beheer picklist-waardesets en recordtype-mappings samen in versiebeheer
Beheer de waardeset van het veld en de business process- of waardemapping van elk recordtype als één geheel in versiebeheer, in plaats van als losse ad-hoc-wijzigingen in Setup.
Deactiveer nooit een picklistwaarde zonder eerst actieve integraties te controleren
Doorzoek integratiemappings en flow-logica op elke verwijzing naar een waarde voordat je deze deactiveert, zodat een downstreamsysteem geen waarde blijft sturen die de organisatie niet meer accepteert.
Valideer binnenkomende picklistwaarden tegen een opzoektabel vóór het importeren
Controleer elke binnenkomende picklistwaarde tijdens de transformatie van de data-import tegen de actieve waardeset van de doelorganisatie, in plaats van de mismatch pas bij het invoegen te ontdekken.
Veelgestelde vragen

INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST, uitgelegd

Waarom werkt dezelfde data-import in de ene sandbox wel maar in de andere niet?
De twee organisaties hebben vrijwel zeker verschillende actieve waarden of recordtype-mappings op de picklist. Vergelijk de waardeset van het veld en de recordtype-toewijzingen tussen beide organisaties.
Kan ik de beperking uitschakelen in plaats van de waarden te repareren?
Ja, het uitvinken van 'Picklist beperken tot de waarden gedefinieerd in de waardeset' verwijdert de beperking volledig, maar het verwijdert ook de datakwaliteitsgarantie die het veld moest afdwingen, dus behandel dit als laatste redmiddel.
Blijft een gedeactiveerde picklistwaarde zichtbaar op bestaande records die deze al hebben?
Ja. Het deactiveren van een waarde verwijdert deze niet van records die de waarde al hebben; het blokkeert alleen dat nieuwe opslagacties deze waarde vanaf nu gebruiken, waardoor oude records en nieuwe opslagacties zich anders kunnen gedragen.

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

Ingericht in minder dan 15 minuten. Geen DevOps-engineer nodig.

Benieuwd naar sneller releasen voordat je instapt? Laten we praten

Vrijblijvend.