salesforce零基础学习(一百一十五)记一个有趣的bug

虚幻大学 xuhss 133℃ 0评论

? 优质资源分享 ?

学习路线指引(点击解锁) 知识定位 人群定位
? Python实战微信订餐小程序 ? 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
?Python量化交易实战? 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

本篇参考: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。其他的以此类推。

adafd0059aa8eee4daa2a8b88ea7ac1f - salesforce零基础学习(一百一十五)记一个有趣的bug

这种需求其实实现起来特别容易,这几个资源放在一个目录或者直接打成zip,然后上传到 static resource中。接下来 formula写一下函数即可。下图中我们可以看到,我们的图片放在了一个 color的folder,然后打成了zip,然后 static resource的名称为 demo_colorIcon,我们只需要使用 IMAGE函数,通过/resource相对路径获取到静态资源即可。

03430dd2c6a6e8480815e3a7e1ed4eb8 - salesforce零基础学习(一百一十五)记一个有趣的bug

展示效果大概如下,当我们Color的值为 Blue的情况下, Color Icon展示我们的 static resource配置的内容。

8f742565f66fc2341bdc894a28545351 - salesforce零基础学习(一百一十五)记一个有趣的bug

除此之外,在session setting中将cache setting启用的。

eaa72cd52bf407e20d70babc4ed62631 - salesforce零基础学习(一百一十五)记一个有趣的bug

上述的内容是大家常用的内容以及设计,想必到这里就结束了,然而这个问题刚刚开始。客户说蓝色有点丑,要么换一个蓝色吧,作为开发人员来说,理论上将新版的icon替换一下,打成zip,在扔到 static resource,需求搞定,完全不需要额外的effort。

36f68f43cf141ace0195cec30af0b160 - salesforce零基础学习(一百一十五)记一个有趣的bug

但是当替换以后,结果并不想象中的那么顺利。我们发现,尽管已经替换了图片,但是刷新以后,还是会展示老版本图片,而不是展示新版本上传的图片,即使我们尝试了清空了浏览器缓存或者换一个浏览器,但是还是会偶发的展示老版本的icon。

ee4b14b181a651bf0a1145424a781628 - salesforce零基础学习(一百一十五)记一个有趣的bug

我们可以打开检查,然后定位到这个图片,打开当前来源的图片,多刷新几遍或者使用 shift + F5 进行清除缓存的刷新,我们会发现图片时而展示老版本,时而展示新版本,这种问题肯定是会让客户崩溃的,因为你可能刚打开的时候展示第一个版本的icon,结果打开其他记录的时候,可能展示第二个版本的icon。

给salesforce 提了 support以后,给出了一个 workaround solution。当我们上传 static resource以后,我们在 view file的时候右键可以复制链接地址。

27280f1c16ff2605c2ecc7707d13f1e9 - salesforce零基础学习(一百一十五)记一个有趣的bug

第一个版本复制以后的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对应的文件资源。

8833688aa408d592fedbb69725441684 - salesforce零基础学习(一百一十五)记一个有趣的bug

但是需要注意,不同系统迁移这个字段,static resource的UID理论上肯定不同并且需要manual deploy这个字段,所以这点需要注意。

总结:当然,这种特殊的情况不是所有的场景都可以复现,也不知道是不是 summer22 release期间的问题。当然最近的话,按照上述的条件基本可以100%复现。满足两个条件。

  1. session setting启用了浏览器缓存

  2. static resource进行了变换。

感兴趣的可以尝试一下。如果遇见类似的坑的可以考虑这种解决方案。

转载请注明:xuhss » salesforce零基础学习(一百一十五)记一个有趣的bug

喜欢 (0)

您必须 登录 才能发表评论!