Salesforce开发踩的小坑
- Apex获取《自定义元数据》的时候,除了通过soql查询(优点:减少1次sqol查询次数),还能通过
X__mdt.getAll().get('api')获取(Api版本 > V46.0),如果元数据存在字段类型为文本域(Text Area),通过这种方式获取到的记录对应的文本域字段只能读取到前255个字符;
- 在标准的《客户》对象,修改所有人时,可以选择“是否保留客户团队”,如果选择了否,那么此客户的客户团队都会被移出,此时在AccountTeamMember触发器捕捉不到被移出的记录。我的解决方式:在Account触发器after update去重新查询对应的Account的AccountTeamMember,查询为空,则说明被清空,或本身就不存在记录。如果一定要知道是否被清空,可以结合before update去对比;
- 假如当前用户是GMT8,字段DT是DateTime类型,1)Apex接收时它的字符串形式为“2024-04-20T13:00:52Z”,那么在JSON.deserialize之后,打印DT的值为“2024-04-20 13:00”,insert数据后,DT的值为“2024-04-20T13:00.52.000+0000”,显示在页面上的值为“2024-04-20 21::00”结论:接收的时间格式为TZ,代表是0时区的时间,存入系统,值也为该值,但是根据用户不同时区+-不同差值。2)接收的字符串格式为“2024-04-20T21:00:52+08:00”,经过JSON.deserialize后,值为“2024-04-20 13:00”,结论:因为传入的时间格式是待时区的,Apex在deserialize的时候,自动根据用户+-时区转为0时区的时间;
- 基于第3点,如果传输进来的是本地时间,但是不知道时区,那么一样把格式暂定为0时区(TZ格式),Apex在deserialize后,再把时间校正:DT = DT.addSeconds(-System.UserInfo.getTimeZone().getOffset(DT)/1000); // 因为是毫秒,所以/1000,取-号是因为把本地时间当成了0时区,也就是把时间快进了,现在减去时区差,就是把时间后退回来。