Hoe je MALFORMED_ID in Salesforce-implementaties oplost

Een waarde die is doorgegeven waar Salesforce een record-ID verwacht, is helemaal geen geldig ID, niet slechts het verkeerde.

Komt voor tijdens: DML en SOQL op runtime, bij data-imports, integraties en Apex-tests

Wat het betekent

MALFORMED_ID betekent dat de waarde die Salesforce ontving syntactisch geen geldig record-ID is: verkeerde lengte, ongeldige tekens, of een waarde die helemaal geen ID is. Dit verschilt van INVALID_ID_FIELD, waarbij het ID correct gevormd is maar naar het verkeerde record of object verwijst; MALFORMED_ID betekent dat de string zelf kapot is.

Een geldig Salesforce-ID bestaat altijd uit 15 of 18 alfanumerieke tekens, beginnend met een drieledig objectsleutelvoorvoegsel; alles wat korter, langer is, of tekens buiten [A-Za-z0-9] bevat, mislukt deze controle voordat Salesforce ooit probeert het naar een record op te lossen.

Diagnose

Veelvoorkomende oorzaken

Een lege of null-waarde doorgegeven als ID
Code of testdata geeft een lege string of null door waar een verplicht ID-veld een echte waarde verwacht.
CSV of data-import heeft een ID afgekapt
Een data-importbestand heeft tekens afgesneden tijdens export, of een spreadsheet heeft de ID-kolom automatisch geformatteerd en de waarde beschadigd.
Een niet-ID-string toegewezen aan een ID-veld
Testsetup of een hardcoded constante wijst een naam, label of placeholdertekst toe aan een variabele van het type Id.

De oplossing

  1. Valideer het ID-formaat vóór gebruik
    Controleer of elk dynamisch opgebouwd of geïmporteerd ID exact 15 of 18 alfanumerieke tekens telt voordat het aan DML of een lookup wordt doorgegeven.
    Boolean looksLikeId = idValue != null
        && idValue.isAlphanumeric()
        && (idValue.length() == 15 || idValue.length() == 18);
  2. Exporteer data-importbestanden opnieuw zonder herformattering
    Exporteer CSV's als platte tekst en schakel automatische spreadsheetformattering uit die ID-kolommen kan strippen of wijzigen.
  3. Hardcode nooit placeholder-ID's in testsetup
    Query naar een echt record-ID in testsetup in plaats van een letterlijke string toe te wijzen aan een variabele van het type Id.
In de praktijk

Hoe Serpent dit voorkomt

Serpent AI lost verwijzingen op via een business key in plaats van ruwe ID-strings bij het verplaatsen van wijzigingen tussen omgevingen, zodat een misvormd of hardcoded ID nooit de implementatie van een doelorganisatie bereikt. Zie de bibliotheek met Salesforce-implementatiefouten.

Metadata en data in één deploymentflow in Serpent

Preventie

Forceer platte-tekstformattering van de ID-kolom vóór elke export
Stel het formaat van de ID-kolom expliciet in spreadsheettools in voordat je naar CSV exporteert, zodat automatische formattering de waarde nooit stilletjes verminkt.
Typeer ID-houdende variabelen als Id, nooit als String
Gebruik het Apex-type Id overal waar een variabele een recordidentificatie bevat, zodat een ongeldige toewijzing direct faalt in plaats van later als runtime DML-fout naar voren te komen.
Voeg een formaatcontrole toe aan elke integratiegrens
Valideer de vorm van het ID op het punt waar externe data Salesforce binnenkomt, een integratie-middlewarestap of een data-import-transformatie, niet alleen binnen Apex.
Veelgestelde vragen

MALFORMED_ID, uitgelegd

Hoe verschilt MALFORMED_ID van INVALID_ID_FIELD?
MALFORMED_ID betekent dat de waarde helemaal geen geldige ID-string is. INVALID_ID_FIELD betekent dat het ID correct gevormd is maar verwijst naar een record dat niet bestaat of bij het verkeerde object hoort.
Vangt Apex' Id.valid()-methode dit betrouwbaar af vóór DML?
Ja, voor controles van lengte en tekenset. Het bevestigt dat de string de vorm heeft van een geldig Salesforce-ID, maar kan niet bevestigen dat het record daadwerkelijk bestaat; dat is een aparte controle.
Kan alleen een spatie aan het einde al MALFORMED_ID veroorzaken?
Ja. Een gekopieerd-geplakt ID met een spatie of newline-teken aan het einde faalt de alfanumerieke controle, ook al zijn de zichtbare ID-tekens zelf correct.

Begin gratis. Geen creditcard, geen installatie, geen verplichtingen.

In minder dan 15 minuten ingericht. Geen DevOps-aanwerving nodig.

Benieuwd naar sneller releasen voordat je instapt? Laten we praten

Vrijblijvend.