FIELD_FILTER_VALIDATION_EXCEPTION in Salesforce-Deployments beheben

Ein Lookup-Feldwert erfüllt den für dieses Feld konfigurierten Lookup-Filter nicht.

Tritt auf bei: Laufzeit-DML, überall dort, wo ein Lookup-Wert gesetzt wird, auch in Apex-Tests

Was das bedeutet

FIELD_FILTER_VALIDATION_EXCEPTION bedeutet, dass eine Lookup- oder Master-Detail-Beziehung auf einen Wert gesetzt wird, der den für dieses Feld definierten Lookup-Filter nicht besteht. Lookup-Filter beschränken, welche Datensätze anhand von Kriterien wie Status oder Datensatztyp ausgewählt werden können, und Salesforce erzwingt sie bei jedem Speichern, nicht nur über die Benutzeroberfläche.

Anders als eine Validierungsregel wird ein Lookup-Filter direkt am Feld selbst in Setup konfiguriert statt als Formel geschrieben, weshalb man leicht vergisst, dass er existiert, bis Seed-Daten oder ein Migrationsskript einen Wert setzen, den der Filter eigentlich ablehnen sollte.

Diagnose

Häufige Ursachen

Migrierte Daten verweisen auf einen Datensatz, der den Filter nicht besteht
Ein Migrationsskript setzt einen Lookup auf einen Datensatz, dessen Status oder Typ nicht den aktuellen Filterkriterien der Zielorg entspricht.
Ein Lookup-Filter wurde nach dem Schreiben der Seed-Daten verschärft
Die Kriterien des Filters änderten sich in einem späteren Release, und bestehende Test- oder Seed-Skripte wurden nicht entsprechend aktualisiert.
Das Test-Setup verweist auf einen inzwischen ausgeschlossenen Datensatz
Das Daten-Setup für einen Apex-Test verweist auf einen Datensatz in einem Status, den ein Lookup-Filter nun ausschließt, wodurch der Test beim Deployment fehlschlägt.

Die Lösung

  1. Migrations- oder Seed-Daten an die aktuellen Filterkriterien anpassen
    Richten Sie den Lookup auf einen Datensatz aus, der den aktiven Lookup-Filter der Zielorg erfüllt.
  2. Den Lookup-Filter beim Deployment von Daten prüfen, die eine Ausnahme benötigen
    Lockern Sie den Filter vorübergehend, wenn ein bestimmter Massenladevorgang ihn wirklich umgehen muss, und stellen Sie ihn danach wieder her.
  3. Lookup-Filter nach Änderungen am Objektmodell prüfen
    Prüfen Sie bei jeder Änderung der Filterkriterien bestehende Automatisierungen und Testdaten auf Referenzen, die den Filter nun nicht mehr bestehen würden.
In der Praxis

Wie Serpent das verhindert

Serpent validiert Deployments vor der Beförderung eines Tasks gegen die aktuellen Metadaten der Zielorg, sodass ein in einem späteren Release verschärfter Lookup-Filter während der CI auffällt statt während eines Produktions-Datenladevorgangs. Siehe die Bibliothek der Salesforce-Deploymentfehler.

Metadaten und Daten in einem einzigen Deployment-Flow in Serpent

Prävention

Die Kriterien jedes Lookup-Filters direkt am Feld dokumentieren
Halten Sie in der Feldbeschreibung oder in der Schemadokumentation kurz fest, was der Filter einschränkt, damit künftige Migrationen von der Einschränkung wissen.
Änderungen an Lookup-Filtern als überprüfungspflichtige Breaking Changes behandeln
Markieren Sie jedes Deployment, das die Kriterien eines Lookup-Filters verschärft, zur Prüfung gegen bestehende Automatisierungen und Testdaten, bevor es gemerged wird.
Test-Setup-Datensätze mit den aktuellen Filterkriterien abgleichen
Überprüfen Sie Apex-Testdatenfabriken erneut, sobald sich ein Lookup-Filter auf ein von ihnen berührtes Objekt ändert, nicht nur wenn sich der Test selbst ändert.
Häufige Fragen

FIELD_FILTER_VALIDATION_EXCEPTION, erklärt

Blockiert ein Lookup-Filter API-Inserts genauso wie die Benutzeroberfläche?
Ja. Lookup-Filter werden bei jedem Speichern erzwungen, unabhängig davon, ob der Datensatz aus der Benutzeroberfläche, der API oder einem Datenladevorgang stammt.
Ist ein Lookup-Filter dasselbe wie eine Validierungsregel?
Nein. Ein Lookup-Filter wird direkt am Lookup-Feld in Setup konfiguriert und schränkt ein, welche Datensätze ausgewählt werden können; eine Validierungsregel ist eine separate, formelbasierte Prüfung, die jedes Feld des Datensatzes referenzieren kann.
Kann ein Lookup-Filter optional statt erforderlich sein?
Ja. Salesforce unterstützt sowohl erforderliche Filter, die nicht passende Datensätze immer blockieren, als auch optionale Filter, die den Benutzer nur in der Benutzeroberfläche warnen, aber API- oder Apex-Inserts nicht blockieren.

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

In unter 15 Minuten eingerichtet. Keine DevOps-Einstellung nötig.

Neugierig auf schnelleres Shipping, bevor Sie einsteigen? Sprechen wir

Unverbindlich.