You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:24:02