So beheben Sie INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST bei Salesforce-Deployments

Ein Datensatz wird mit einem Picklist-Wert, oder ohne Wert, gespeichert, der nicht im eingeschränkten Wertesatz des Felds in der Ziel-Org enthalten ist.

Tritt auf bei: Laufzeit-DML, bei Datenimporten, Integrationen und Apex-Testaufbau

Was das bedeutet

INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST tritt auf, wenn ein Picklist-Feld so eingestellt ist, dass es Werte auf die definierten beschränkt, und ein Datensatz versucht, einen Wert außerhalb dieser Liste zu speichern, oder eine erforderliche eingeschränkte Picklist leer bleibt. Der Wert kann in der Quell-Org durchaus gültig sein; das Problem ist, dass der Wertesatz der Ziel-Org nicht übereinstimmt.

Das Einschränken einer Picklist ist eine Opt-in-Einstellung pro Feld; eine uneingeschränkte Picklist akzeptiert stillschweigend jede Zeichenfolge, auch mit Tippfehlern, während eine eingeschränkte den definierten Wertesatz streng durchsetzt, weshalb dieser Fehler typischerweise genau dann auftaucht, wenn die Einschränkung eines Felds erstmals aktiviert wird.

Diagnose

Häufige Ursachen

Wertesatz unterscheidet sich zwischen Quell- und Ziel-Org
Die aktiven Werte der Picklist wurden in den Feldmetadaten einer Org bearbeitet, aber die Änderung wurde nie in die andere deployt.
Datensatztyp enthält den Wert nicht
Die Picklist-Wertzuordnung eines Datensatztyps schließt einen Wert aus, den die globale Picklist ansonsten zulässt.
Datenimport sendet einen deaktivierten Wert
Ein Wert wurde in der Picklist deaktiviert, aber eingehende Daten oder eine API-Integration senden ihn weiterhin.

Die Lösung

  1. Den Picklist-Wertesatz zusammen mit dem Feld deployen
    Nehmen Sie die vollständige Liste aktiver Werte sowie alle Datensatztyp-Wertzuordnungen in dasselbe Deployment auf wie die Feld- oder Datensatztypänderung.
  2. Den fehlenden Wert zur Picklist der Ziel-Org hinzufügen
    Wenn der Wert dort ebenfalls gültig sein sollte, fügen Sie ihn dem Wertesatz der Picklist hinzu, bevor Sie das Deployment erneut versuchen.
  3. Daten vor dem Import zuordnen oder bereinigen
    Aktualisieren Sie die eingehenden Daten so, dass ein aktiver, zugeordneter Wert verwendet wird statt eines, den die Picklist der Ziel-Org nicht mehr akzeptiert.
In der Praxis

Wie Serpent das verhindert

Serpent synchronisiert Picklist-Wertesätze und Datensatztyp-Zuordnungen zusammen mit den von ihm verwalteten Sandboxes, sodass eine eingeschränkte Picklist über jede Org hinweg abgestimmt bleibt, statt still auseinanderzudriften. Siehe die Bibliothek der Salesforce-Deployment-Fehler.

Metadaten und Daten in einem einzigen Deployment-Flow in Serpent

Prävention

Picklist-Wertesätze und Datensatztyp-Zuordnungen gemeinsam versionieren
Verwalten Sie den Wertesatz des Felds und die Geschäftsprozess- oder Wertzuordnung jedes Datensatztyps als eine Einheit in der Versionskontrolle, nicht als separate Ad-hoc-Änderungen in Setup.
Niemals einen Picklist-Wert deaktivieren, ohne zuerst aktive Integrationen zu prüfen
Durchsuchen Sie Integrationszuordnungen und Flow-Logik nach jedem Verweis auf einen Wert, bevor Sie ihn deaktivieren, damit ein nachgelagertes System nicht weiterhin einen Wert sendet, den die Org nicht mehr akzeptiert.
Eingehende Picklist-Werte vor dem Import gegen eine Nachschlagetabelle validieren
Prüfen Sie jeden eingehenden Picklist-Wert während der Transformation des Datenimports gegen den aktiven Wertesatz der Ziel-Org, statt die Abweichung erst beim Einfügen zu entdecken.
Häufige Fragen

INVALID_OR_NULL_FOR_RESTRICTED_PICKLIST, erklärt

Warum funktioniert derselbe Datenimport in einer Sandbox, aber nicht in einer anderen?
Die beiden Orgs haben mit ziemlicher Sicherheit unterschiedliche aktive Werte oder Datensatztyp-Zuordnungen bei der Picklist. Vergleichen Sie den Wertesatz des Felds und die Datensatztyp-Zuweisungen zwischen den beiden Orgs.
Kann ich die Einschränkung statt die Werte zu korrigieren einfach abschalten?
Ja, das Deaktivieren von „Picklist auf die im Wertesatz definierten Werte beschränken“ entfernt die Einschränkung vollständig, entfernt aber auch die Datenqualitätsgarantie, die das Feld durchsetzen sollte, behandeln Sie es also als letzten Ausweg.
Wird ein deaktivierter Picklist-Wert bei bestehenden Datensätzen, die ihn bereits tragen, weiterhin angezeigt?
Ja. Das Deaktivieren eines Werts entfernt ihn nicht von Datensätzen, die ihn bereits tragen; es blockiert nur, dass neue Speichervorgänge diesen Wert künftig verwenden, weshalb sich alte Datensätze und neue Speichervorgänge unterschiedlich verhalten können.

Kostenlos starten. Keine Kreditkarte, keine Installation, keine Verpflichtung.

Einrichtung in unter 15 Minuten. Keine DevOps-Fachkraft nötig.

Neugierig auf schnelleres Shipping, bevor Sie einsteigen? Sprechen wir

Unverbindlich.