So beheben Sie MALFORMED_ID in Salesforce-Bereitstellungen

Ein Wert, der übergeben wird, wo Salesforce eine Datensatz-ID erwartet, ist überhaupt keine gültige ID, nicht nur die falsche.

Tritt auf bei: DML und SOQL zur Laufzeit, bei Datenimporten, Integrationen und Apex-Tests

Was das bedeutet

MALFORMED_ID bedeutet, dass der von Salesforce empfangene Wert syntaktisch keine gültige Datensatz-ID ist: falsche Länge, ungültige Zeichen oder ein Wert, der überhaupt keine ID ist. Das unterscheidet sich von INVALID_ID_FIELD, wo die ID wohlgeformt ist, aber auf den falschen Datensatz oder das falsche Objekt verweist; MALFORMED_ID bedeutet, dass die Zeichenfolge selbst fehlerhaft ist.

Eine gültige Salesforce-ID besteht immer aus 15 oder 18 alphanumerischen Zeichen, beginnend mit einem dreistelligen Objekt-Schlüsselpräfix; alles, was kürzer, länger ist oder Zeichen außerhalb von [A-Za-z0-9] enthält, scheitert an dieser Prüfung, bevor Salesforce überhaupt versucht, es zu einem Datensatz aufzulösen.

Diagnose

Häufige Ursachen

Ein leerer oder Null-Wert wird als ID übergeben
Code oder Testdaten übergeben eine leere Zeichenfolge oder null, wo ein Pflicht-ID-Feld einen echten Wert erwartet.
CSV oder Datenimport hat eine ID abgeschnitten
Eine Datenimportdatei hat beim Export Zeichen abgeschnitten, oder eine Tabellenkalkulation hat die ID-Spalte automatisch formatiert und den Wert beschädigt.
Eine Nicht-ID-Zeichenfolge wird einem ID-Feld zugewiesen
Test-Setup oder eine fest codierte Konstante weist einer als Id typisierten Variable einen Namen, ein Label oder einen Platzhaltertext zu.

Die Lösung

  1. ID-Format vor der Verwendung validieren
    Prüfen Sie, ob jede dynamisch erzeugte oder importierte ID genau 15 oder 18 alphanumerische Zeichen hat, bevor sie an DML oder einen Lookup übergeben wird.
    Boolean looksLikeId = idValue != null
        && idValue.isAlphanumeric()
        && (idValue.length() == 15 || idValue.length() == 18);
  2. Datenimportdateien ohne Neuformatierung erneut exportieren
    Exportieren Sie CSVs als reinen Text und deaktivieren Sie die automatische Formatierung der Tabellenkalkulation, die ID-Spalten entfernen oder verändern kann.
  3. Niemals Platzhalter-IDs im Test-Setup fest codieren
    Fragen Sie im Test-Setup eine echte Datensatz-ID ab, statt einer als Id typisierten Variable eine literale Zeichenfolge zuzuweisen.
In der Praxis

Wie Serpent das verhindert

Serpent AI löst Referenzen beim Verschieben von Änderungen zwischen Umgebungen über einen Business Key statt über rohe ID-Zeichenfolgen auf, sodass eine fehlerhafte oder fest codierte ID das Deployment einer Ziel-Org nie erreicht. Siehe die Bibliothek der Salesforce-Bereitstellungsfehler.

Metadaten und Daten in einem einzigen Deployment-Flow in Serpent

Prävention

Formatierung der ID-Spalte vor jedem Export auf Klartext erzwingen
Legen Sie das Format der ID-Spalte in Tabellenkalkulationstools explizit fest, bevor Sie in CSV exportieren, damit die automatische Formatierung den Wert nie stillschweigend verfälscht.
ID-haltende Variablen als Id typisieren, niemals als String
Verwenden Sie den Apex-Typ Id überall dort, wo eine Variable eine Datensatzkennung enthält, damit eine ungültige Zuweisung sofort fehlschlägt, statt später als DML-Laufzeitfehler aufzutauchen.
An jeder Integrationsgrenze eine Formatprüfung hinzufügen
Validieren Sie die ID-Form an dem Punkt, an dem externe Daten in Salesforce eintreten, einem Integrations-Middleware-Schritt oder einer Datenimport-Transformation, nicht nur innerhalb von Apex.
Häufige Fragen

MALFORMED_ID, erklärt

Wie unterscheidet sich MALFORMED_ID von INVALID_ID_FIELD?
MALFORMED_ID bedeutet, dass der Wert überhaupt keine gültige ID-Zeichenfolge ist. INVALID_ID_FIELD bedeutet, dass die ID wohlgeformt ist, aber auf einen nicht existierenden Datensatz oder das falsche Objekt verweist.
Erkennt die Apex-Methode Id.valid() dies zuverlässig vor dem DML?
Ja, für Längen- und Zeichensatzprüfungen. Sie bestätigt, dass die Zeichenfolge wie eine gültige Salesforce-ID geformt ist, kann aber nicht bestätigen, dass der Datensatz tatsächlich existiert; das ist eine separate Prüfung.
Kann allein ein nachgestelltes Leerzeichen MALFORMED_ID verursachen?
Ja. Eine kopierte und eingefügte ID mit einem nachgestellten Leerzeichen oder Zeilenumbruch scheitert an der alphanumerischen Prüfung, obwohl die sichtbaren ID-Zeichen selbst korrekt sind.

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.