Salesforce LWC创建自定义对象记录无报错却失败,求问题排查
1. Toast提示的Variant拼写错误
你代码中成功提示的variant写的是'Success',但Salesforce的ShowToastEvent要求variant值为小写('success'/'error'),错误的大小写会导致Toast不显示,让你误以为记录没创建。
解决:把成功Toast的variant改成小写:
new ShowToastEvent({ title: 'Success', message: 'Asset Created Successfully', variant: 'success' // 修正为小写 })
2. 必填字段未全部传入
检查自定义对象Asset__c是否存在其他必填字段(除Name、Brand__c、Model__c、Asset_type__c之外),如果有,必须在fields对象中传入对应值,否则createRecord会静默失败。
排查:
- 进入Salesforce Setup查看
Asset__c对象的字段设置,确认所有必填字段都已在代码中赋值。 - 查看控制台中
Record Fields的日志,确认每个字段都有有效值,没有undefined的情况。
3. 错误信息获取逻辑不兼容
如果创建失败,你的错误Toast使用error.body.message获取信息,但Salesforce的错误结构可能是error.body[0].message或error.message,导致错误Toast无法显示,让你误以为没有报错。
优化:修改catch中的错误信息获取逻辑,兼容不同错误结构:
.catch(error => { let errorMsg = error.body?.message || error.body?.[0]?.message || '未知错误'; this.dispatchEvent( new ShowToastEvent({ title: 'Error', message: errorMsg, variant: 'error' }) ) })
4. 输入框name属性与handleChange不匹配
检查HTML模板中输入框的name属性是否和handleChange中的判断完全一致(比如输入框name是assetName还是AssetName),如果不匹配,对应的字段值不会被赋值,导致fields中字段为空,触发创建失败。
排查:查看控制台的Record Fields日志,如果某个字段值是undefined,说明对应的输入框name和handleChange中的判断不匹配,修正即可。
5. 用户权限不足
确认当前操作的用户是否拥有Asset__c对象的创建权限,如果没有权限,createRecord会失败,但可能因为错误信息未正确显示导致你没察觉。
排查:进入Salesforce Setup检查用户的Profile或Permission Set,确认已授予Asset__c的创建权限。
内容的提问来源于stack exchange,提问作者Ayush Mishra

