首页 > 其他分享 >Salesforce LWC学习(四十四) Datatable 显示日期类型的有趣点思考

Salesforce LWC学习(四十四) Datatable 显示日期类型的有趣点思考

时间:2023-05-13 23:33:47浏览次数:66  
标签:findContacts Salesforce contacts track numeric salesforce error LWC Datatable

本篇参考:https://developer.salesforce.com/docs/component-library/documentation/en/lwc/lwc.reference_salesforce_modules

背景: 项目中经常用到datatable显示日期类型字段,并要求日期类型字段基于指定格式显示。这种是一个很常见的需求,而且demo很容易找到,无论是官方文档中还是网上。这里列一个简单的demo,因为apex只是获取数据比较简单,这里不做显示,只列出关键内容。

contactListSample.js

import { LightningElement, track,wire } from 'lwc';
import findContacts from '@salesforce/apex/ContactControllerForDay7.findContacts';

export default class ContactListSample extends LightningElement {

    @track contacts;
    @track errors;

    columns = [

      {
        type: "text",
        fieldName: "Name",
        label: "Contact Name"
      },
      {
        type: "date",
        fieldName: "CreatedDate",
        label: "Created Date",
        typeAttributes:{day:'numeric',month:'numeric',year:'numeric',
          hour:'2-digit',minute:'2-digit',hour12:true
        }
      }];


    @wire(findContacts)
  wiredContacts({data,error}) {
    if(data) {
        this.contacts = data;
        this.errors = undefined;
        console.log('execute success');
    } else if(error) {
        this.errors = error;
        this.contacts = undefined;
        console.log('execute failed');
    }
  }
}

contactListSample.html

<template>
    <lightning-datatable columns={columns} data={contacts} key-field="Id">
    </lightning-datatable>
</template>

效果显示:以指定格式显示。

问题:这里我们需要对日期类型显示进行一个思考。官方文档介绍,datatable针对日期类型的渲染,使用的是lightning-formatted-date-time进行解析。问题来了,当对日期进行解析时,使用的是salesforce中的user的 locale setting还是用户当前的地区的本地时区设置呢?曾几何时,因为官方的文档没太读懂以及英语不太好,有了一些误解,认为获取的是salesforce中的user setting的timezone,其实不然,官方的默认行为获取的是当前用户当前访问的电脑设置的本地时区的设置。我们可以看一下相关的截图。上个截图中显示时间是曾经我在中国区GMT+8的时间显示,现在我修改成 GMT-4 美国时间。

 上图的datatable还是没有变化。但是详情页却相差了12小时时差。

这种场景在实际的使用中很难存在,因为实际的user大部分场景应该和所在地保持一致,即salesforce的user setting所配置的locale以及timezone会和本地保持一致,但是有种特殊场景,比如call center在国外,倒班有时差,需要配合客户的时间,需要将自己的salesforce账户的时间配置转换成客户时区,那这里就会出现这样的问题了。那如何修复呢? salesforce给我们预留了功能,只需要传递一下当前用户的salesforce中配置的地址时区即可。我们修改一下js部分代码:

import { LightningElement, track,wire } from 'lwc';
import findContacts from '@salesforce/apex/ContactControllerForDay7.findContacts';
import timeZone from '@salesforce/i18n/timeZone';
export default class ContactListSample extends LightningElement {
    @track contacts;
    @track errors;

    columns = [

      {
        type: "text",
        fieldName: "Name",
        label: "Contact Name"
      },
      {
        type: "date",
        fieldName: "CreatedDate",
        label: "Created Date",
        typeAttributes:{day:'numeric',month:'numeric',year:'numeric',
          hour:'2-digit',minute:'2-digit',hour12:true,timeZone:timeZone
        }
      }];


    @wire(findContacts)
  wiredContacts({data,error}) {
        if(data) {
            this.contacts = data;
            this.errors = undefined;
            console.log('execute success');
        } else if(error) {
            this.errors = error;
            this.contacts = undefined;
            console.log('execute failed');
        }
    }
}

改动上述位置以后的结果显示:已经基于具体的salesforce中配置的timezone进行显示时间。

总结: 本篇实际使用场景可能仅适用于用户实际时区和配置时区不同的优化方案,大部分场景并不会有问题,篇中有错误欢迎指出,有不懂欢迎留言。

标签:findContacts,Salesforce,contacts,track,numeric,salesforce,error,LWC,Datatable
From: https://www.cnblogs.com/zero-zyq/p/17398465.html

相关文章

  • Salesforce Experience Cloud_体验云顾问认证考试,快速通关攻略!
    SalesforceExperienceCloud顾问认证专为具有Experiences应用程序实施和咨询经验的顾问设计的,适用于使用Experience平台的声明性自定义功能展示其在设计、配置、构建和实施SalesforceExperience应用程序方面的技能和知识的备考者。备考者需要有6个月的ExperienceCloud平台管......
  • 20230509001 - DataTable 导出成Excel
               DataTabledt_e=DataSet0.Tables[0];           SaveFileDialogsaveFileDialog=newSaveFileDialog();           saveFileDialog.Filter="Execlfiles(*.xls)|*.xls";           saveFileDialog.FilterIndex......
  • django-datatable-view==0.9.0 Django 3.1.3: ImportError:无法导入名称'FieldDoesNot
    问题答案来自于:https://cloud.tencent.com/developer/ask/sof/891274源码:fromdjango.db.models.fieldsimportFieldDoesNotExist 替换:fromdjango.core.exceptionsimportFieldDoesNotExist......
  • ListToDataTable
    1///<summary>2///ListtoDataTable3///</summary>4///<typeparamname="T"></typeparam>5///<paramname="list">List数据</param>6///<returns></returns>7publicstaticSy......
  • DataTable添加数据
       在ASP.NET中添加数据到DataTable可以使用以下步骤: 1.创建DataTable对象: DataTabledt=newDataTable(); 2.添加列名: dt.Columns.Add("列名1");dt.Columns.Add("列名2");dt.Columns.Add("列名3"); 3.添加行数据: DataRowrow1=dt.NewRow();ro......
  • Salesforce LWC学习(四十三) lwc 零基础学习路径的视频已上传B站
    本篇参考:https://www.bilibili.com/video/BV1QM411G7pN/还记得salesforce零基础学习(一百二十五)零基础学习SF路径 中描述的那样,预计今年年底以前基于0基础学习的内容录制成视频,更好的更方便的进行学习和互动。当时的一个动机是以前公司做veeva的同事或者java以及.net转过来的同事......
  • 将C#中的DataTable转换为Word表格
    usingMicrosoft.Office.Interop.Word;usingSystem.Data;namespaceDataTableToWord{classProgram{staticvoidMain(string[]args){//创建Word应用程序对象Applicationapp=newApplication();//创建一个新......
  • LWC属性变化时的一种处理方法
    LWC(LightningWebComponent)的属性name,role发生变化,或者要删除某个属性时,Salesforce会自动检查是否有Flow引用这个lwc,如果有,则会提示,不能删除。手工操作,需要在Flow中先去掉这个lwc,然后发布修改后的lwc,再在Flow中加回去。问题是Flow往往有好几个版本(version),一个个地手工调整,非......
  • 全球不到400人拥有该证书,成为Salesforce技术架构师前景如何?
    Salesforce技术架构师认证于2011年推出,是认证领域的“巅峰”。迄今为止,全球范围内的技术架构师还不到400人,成为技术架构师似乎是一个虚幻的目标。技术架构师是多年学习、多项必备认证和经验的累积成果,仅考试费用就高达6000美元。并且,还需要投入大量时间学习相关知识,参加相关培训......
  • 一统天下 flutter - widget 列表类: DataTable - 数据表格
    源码https://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-widget列表类:DataTable-数据表格示例如下:lib\widget\list\data_table.dart/**DataTable-数据表格*/import'dart:math';import'package:flutter/material.dart';import......