Salesforce自定义lightning-datatable编辑Time字段报错如何解决
解决方案
1. 时间字段展示优化(仅展示时间的更优方案)
lightning-datatable的date列类型原生支持仅展示时间,只需要在typeAttributes中配置timeOnly: true即可,列定义参考如下:
const columns = [ // 其他列配置省略 { label: '开始时间', fieldName: 'Start_Time__c', type: 'date', editable: true, typeAttributes: { timeOnly: true, hour: '2-digit', minute: '2-digit', // 按需配置时区,不填默认用用户上下文的时区 timeZone: 'Asia/Shanghai' } } ]
2. 保存前的字段值格式转换
报错的核心原因是:Salesforce 时间类型(Time)字段要求的ISO 8601格式仅包含时间部分,而datatable编辑事件返回的是带默认日期前缀(1970-01-01)的完整DateTime字符串,所以无法被识别。
你只需要在保存前对Start_Time__c的值做一次截取/转换即可,修改代码中给fields赋值的部分:
const fields = {}; fields[ID_FIELD.fieldApiName] = event.detail.draftValues[0].Id; // 新增转换逻辑 const rawDateTime = event.detail.draftValues[0].Start_Time__c; // 方案A:直接截取时间部分,适合不需要调整时区的场景 const formattedTime = rawDateTime.split('T')[1]; // 方案B:如果需要适配本地时区,避免时差问题,用Date对象处理 // const dt = new Date(rawDateTime); // const hours = String(dt.getHours()).padStart(2, '0'); // const minutes = String(dt.getMinutes()).padStart(2, '0'); // const seconds = String(dt.getSeconds()).padStart(2, '0'); // const ms = String(dt.getMilliseconds()).padStart(3, '0'); // const formattedTime = `${hours}:${minutes}:${seconds}.${ms}Z`; fields[START_TIME.fieldApiName] = formattedTime; // 后续的updateRecord逻辑保持不变即可
修改后即可正常保存时间类型字段。
内容的提问来源于stack exchange,提问作者cmptrer
相关产品推荐
相关产品推荐

