6

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

 1 year ago
source link: https://www.cnblogs.com/zero-zyq/p/16330242.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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。其他的以此类推。

910966-20220531140209724-1231481746.png

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

910966-20220531153119144-246133535.png

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

910966-20220531144043175-360813366.png

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

910966-20220531144216600-1731114064.png

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

910966-20220531144712074-1365245829.png

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

910966-20220531145533167-1587287002.png

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

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

910966-20220531144459028-1967415984.png

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

910966-20220531151257598-2048839698.png

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

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

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

2. static resource进行了变换。

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

作者:zero

博客地址:http://www.cnblogs.com/zero-zyq/

本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接

如果文章的内容对你有帮助,欢迎点赞~

为方便手机端查看博客,现正在将博客迁移至微信公众号:Salesforce零基础学习,欢迎各位关注。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK