So beheben Sie FIELD_INTEGRITY_EXCEPTION in Salesforce-Deployments

Ein zu speichernder Wert entspricht nicht dem, was das Feld erwartet, meist ein Picklist-Wert, der in der Ziel-Org nicht existiert.

Tritt auf bei: DML zur Laufzeit, meist bei der Ausführung von Apex-Tests oder einem Datenladevorgang

Was das bedeutet

FIELD_INTEGRITY_EXCEPTION bedeutet, dass ein Wert die plattformeigene Integritätsprüfung für ein Feld nicht bestanden hat, üblicherweise ein Picklist-Wert, der in der Ziel-Org nicht definiert ist, oder ein Wert, der gegen eine eingeschränkte Picklist oder eine Typbeschränkung verstößt. Picklist-Werte sind org-spezifische Metadaten und müssen daher wie jede andere Komponente deployt und synchron gehalten werden.

Die Metadata API deployt Änderungen an Picklist-Werten von Standardobjekten als Teil der Metadaten des Objekts, sodass eine Abweichung hier fast immer auf eine Picklist-Wert-Änderung zurückgeht, die in Setup einer Org landete, aber nie in die Versionskontrolle oder ein passendes Deployment gelangte.

Diagnose

Häufige Ursachen

Picklist-Wert fehlt in der Ziel-Org
Ein Apex-Test oder Datensatz verwendet einen Picklist-Wert, der in der Quell-Org hinzugefügt, aber nie in den Wertesatz der Ziel-Org deployt wurde.
Eingeschränkte Picklist lehnt den Wert ab
Das Feld ist auf eine eingeschränkte Picklist eingestellt, und der zu speichernde Wert steht nicht auf der genehmigten Liste der Org.
Feldtyp-Konflikt nach einer Schemaänderung
Der Typ eines Feldes hat sich geändert, zum Beispiel von Text zu Zahl, und alte Testdaten oder Formeln gehen noch vom vorherigen Typ aus.

Die Lösung

  1. Zuerst die Picklist-Werte deployen
    Nehmen Sie die globale Werteliste oder die Änderung des Picklist-Werts auf Feldebene in dasselbe Deployment auf wie alles, was sie verwendet.
    <valueSet>
      <valueSetDefinition>
        <sorted>false</sorted>
        <value><fullName>Renewal_Pending</fullName><default>false</default></value>
      </valueSetDefinition>
    </valueSet>
  2. Eingeschränkte Picklists synchron halten
    Prüfen Sie eingeschränkte Picklist-Werte über die Umgebungen hinweg, damit Quell- und Ziel-Org denselben Satz zulassen.
  3. Abhängige Testdaten aktualisieren
    Aktualisieren Sie nach einer Feldtypänderung alle Apex-Testdaten oder Formelfelder, die den alten Typ voraussetzten.
In der Praxis

Wie Serpent das verhindert

Der Umgebungsvergleich von Serpent AI zeigt genau, welche Picklist-Werte in einer Org existieren und in der anderen nicht, noch bevor ein Deployment überhaupt läuft. Siehe die Bibliothek der Salesforce-Deployment-Fehler.

Metadaten und Daten in einem einzigen Deployment-Flow in Serpent

Prävention

Picklist-Wertesätze wie jede andere Metadatenart versionieren
Rufen Sie GlobalValueSet- und Feld-Metadatenänderungen ab und committen Sie sie über denselben Versionskontroll-Workflow wie Apex, statt Werte ad hoc in Setup zu bearbeiten.
Einen Picklist-Wert mit dem Code oder Test bündeln, der ihn zuerst verwendet
Liefern Sie den neuen Wert im selben Deployment aus wie die Klasse, den Trigger oder den Test, der darauf verweist, damit die beiden nie in falscher Reihenfolge ankommen.
Auswirkungen von Änderungen an eingeschränkten Picklists nachgelagert prüfen
Suchen Sie vor einer weiteren Einschränkung einer Picklist nach Apex, Flow und Integrationen, die Werte schreiben, die die Einschränkung neu ablehnen würde.
Häufige Fragen

FIELD_INTEGRITY_EXCEPTION, beantwortet

Wie finde ich heraus, welcher Picklist-Wert fehlt?
Der Fehlertext nennt meist direkt das Feld und den verursachenden Wert. Vergleichen Sie den Wertesatz dieses Feldes zwischen Quell- und Ziel-Org, um die Lücke zu bestätigen.
Tritt das auch bei einem Nicht-Picklist-Feld auf?
Ja, seltener. Es kann auch bei Typkonflikten nach einer Feldkonvertierung auftreten oder bei anderen Wertbeschränkungen auf Plattformebene außerhalb von Picklists im Speziellen.
Werden Picklist-Wertzuordnungen für Datensatztypen automatisch mit dem Picklist-Wert deployt?
Nicht immer. Das Hinzufügen eines Werts zu einer globalen Werteliste macht ihn nicht automatisch für jeden Datensatztyp verfügbar; die Wertzuordnungs-Metadaten des Datensatztyps benötigen oft ein eigenes, explizites Update.

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

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

Neugierig auf schnelleres Shipping, bevor Sie einsteigen? Sprechen wir

Unverbindlich.