salesforce零基础学习(一百一十五)记一个有趣的bug
本篇参考:https://help.salesforce.com/s/articleView?language=en_US&type=1&id=000319486
page layout要展示图片,我们最常用的做法就是 formula 方式,使用IMAGE函数加上 static resource存储icon资源引用即可,这种需求是特别常见的需求,而且想必做salesforce一年左右的人基本都会有过这种类似的需求的经历。当然,就是这种需求,最近翻了个车,出现了一个有趣的bug,特意记录一下,免得以后再遇见想不起来。
背景: 需求是一个 picklist字段有3个值,分别对应着 blue/ green / yellow这三个值,且必填。客户希望使用一个 icon来直观显示,当这个picklist字段的值为 blue,则展示blue这个icon。其他的以此类推。
这种需求其实实现起来特别容易,这几个资源放在一个目录或者直接打成zip,然后上传到 static resource中。接下来 formula写一下函数即可。下图中我们可以看到,我们的图片放在了一个 color的folder,然后打成了zip,然后 static resource的名称为 demo_colorIcon,我们只需要使用 IMAGE函数,通过/resource相对路径获取到静态资源即可。
展示效果大概如下,当我们Color的值为 Blue的情况下, Color Icon展示我们的 static resource配置的内容。
除此之外,在session setting中将cache setting启用的。
上述的内容是大家常用的内容以及设计,想必到这里就结束了,然而这个问题刚刚开始。客户说蓝色有点丑,要么换一个蓝色吧,作为开发人员来说,理论上将新版的icon替换一下,打成zip,在扔到 static resource,需求搞定,完全不需要额外的effort。
但是当替换以后,结果并不想象中的那么顺利。我们发现,尽管已经替换了图片,但是刷新以后,还是会展示老版本图片,而不是展示新版本上传的图片,即使我们尝试了清空了浏览器缓存或者换一个浏览器,但是还是会偶发的展示老版本的icon。
我们可以打开检查,然后定位到这个图片,打开当前来源的图片,多刷新几遍或者使用 shift + F5 进行清除缓存的刷新,我们会发现图片时而展示老版本,时而展示新版本,这种问题肯定是会让客户崩溃的,因为你可能刚打开的时候展示第一个版本的icon,结果打开其他记录的时候,可能展示第二个版本的icon。
给salesforce 提了 support以后,给出了一个 workaround solution。当我们上传 static resource以后,我们在 view file的时候右键可以复制链接地址。
第一个版本复制以后的URL为:https://zhangyueqi-5-dev-ed--c.visualforce.com/resource/1653979036000/demo_colorIcon?
第二个版本复制以后的URL为:https://zhangyueqi-5-dev-ed--c.visualforce.com/resource/1653980026000/demo_colorIcon?
看出来区别了吗?resource以后有一个 unique id,这个 unique id在不同版本的 static resource上传以后,会变化不同的 uid。尽管我们已经上传了最新版,理论上会替换到老版本的icon,老版本的文件应该被垃圾回收,但是现在表象来看应该还是放在某个回收站进行管理,所以如果不指定uid,只是 resource/这种相对路径获取,偶发性会获取到老版本。这个可以说是salesforce的bug,但是没啥办法,我们只能将 uid放在 formula里面,保证获取的永远是正确版本 uid对应的文件资源。
但是需要注意,不同系统迁移这个字段,static resource的UID理论上肯定不同并且需要manual deploy这个字段,所以这点需要注意。
总结:当然,这种特殊的情况不是所有的场景都可以复现,也不知道是不是 summer22 release期间的问题。当然最近的话,按照上述的条件基本可以100%复现。满足两个条件。
1. session setting启用了浏览器缓存
2. static resource进行了变换。
感兴趣的可以尝试一下。如果遇见类似的坑的可以考虑这种解决方案。
salesforce零基础学习(一百一十五)记一个有趣的bug的更多相关文章
- salesforce 零基础学习(四十五)Approval Lock & UnLock相关注意事项
我们都知道,当一条记录进入审批流程以后会自动加锁,apex提供Approval类的lock和unlock方法可以让我们使用代码对记录进行加锁和解锁. 项目中遇到一个需求,需要当某种情况下对记录进行先解 ...
- salesforce 零基础学习(三十五) 通过Process Builder和Approval Processes锁定记录(Lock Record)
有的时候我们可能有这样的需求,当某个字段为特定的值情况下,便锁定此条记录,仅允许Profile为System Admin的用户修改或者解锁,其他的用户只能查看此条记录,不能修改此条记录,这种情况下我们 ...
- salesforce零基础学习(七十五)浅谈SOSL(Salesforce Object Search Language)
在工作中,我们更多操作的是一个表的对象,所以我们对SOQL的使用很多.但是有时候,我们需要对几个表进行查询操作,类似salesforce的全局搜索功能,这时,使用SOQL没法满足功能了,我们就需要使用 ...
- salesforce零基础学习(八十五)streaming api 简单使用(接近实时获取你需要跟踪的数据的更新消息状态)
Streaming API参考链接: https://trailhead.salesforce.com/en/modules/api_basics/units/api_basics_streaming ...
- salesforce 零基础学习(二十五)PickList简单联动操作
有的时候,项目需要一些联动的操作,比如省和市之间的联动,不同的省应该显示不同的城市. 操作步骤如下: 1.新建provice字段,并且初始化相关的值 2.新建city字段,并且初始化相关的值 3.在P ...
- salesforce 零基础学习(六十五)VF页面应善于使用变量和函数(一)常用变量的使用
我们在使用formula或者validation rules等的时候通常会接触到很多function,这些函数很便捷的解决了我们很多问题.其实很多函数也可以应用在VF页面中,VF页面有时候应该善于使用 ...
- salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现
项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...
- salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件
在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...
- salesforce 零基础学习(六十八)http callout test class写法
此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...
- salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见
项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...
随机推荐
- Json学习笔记、思维导图
- 关于iOS 二维数组,对象映射的问题
数据格式如下: 遇到的问题是二维数组的 对象无法 通过 yymodel 直接实力话 ~~~ -"scoring_probability_distribution": [ -[ -{ ...
- Blazor技术开发了一个访客管理系统
简单介绍一下系统功能 该系统为了在疫情期间能很好管理访客登记做好风险管控,同时可以整合智能设备做到自动确认并跟踪访客的行动轨迹,该项目完全开源. 系统流程 访客可以同通过手机进行预注册,同时上传照片, ...
- OllyDbg---循环、串操作和寻址方式
循环 字符串指令和寻址方式 循环 XOR ECX,ECX MOV ECX,15H LABEL: DEC ECX CMP ECX,0 JNE LABEL LOOP 重复循环,直到计数器的值为0,每次循环 ...
- centos7 装机后的基本配置
安装完centos7.3后,做一些基本的操作 下面是我的环境的配置,你们可以根据自己的环境搭配相应的配置.修改下就可以了.基本操作一:主机名 centos7有一个新的修改主机名的命令hostnatct ...
- Blazor 在开发环境保存机密(User Secrets)
前言 在应用程序开发的过程中,有的时候需要在代码中保存一些机密的信息,比如微信appkey, 连接字符串,加密密钥,字符串,或者是用户名密码等.通常的做法是保存到一个配置文件中,例如 appsetti ...
- Codeforces Round #771 (Div. 2), problem: (B) Odd Swap Sort
Problem - B - Codeforces 就是给你个序列, 给他整成升序的, 每次操作可以使相邻两个数交换位置, 交换条件是二数之和为奇数 结果只需输出是否可以整成升序的 思路: 需要奇数偶数 ...
- Redis HyperLogLog 是什么?这些场景使用它,让我枪出如龙,一笑破苍穹
在移动互联网的业务场景中,数据量很大,我们需要保存这样的信息:一个 key 关联了一个数据集合,同时对这个数据集合做统计. 比如: 统计一个 APP 的日活.月活数: 统计一个页面的每天被多少个不同账 ...
- 查找SQL SERVER卡顿语句
SELECT [session_id], [blocking_session_id] AS '正在阻塞其他会话的会话ID', DB_NAME([database_id]) AS '数据库名称', [r ...
- JuiceFS 缓存预热详解
缓存预热是一个比较常见的概念,相信很多小伙伴都有所了解.对于 JuiceFS 来说,缓存预热就是将需要操作的数据预先从对象存储拉取到本地,从而获得与使用本地存储类似的性能表现. 缓存预热 JuiceF ...