Javascript元素选择器的另一种选择

最近喜欢阅读代码,好的代码比好的文章还好看。

这次的起因是在看新的浏览器API叫做Push API,作用是作为服务器端可以向所有的订阅客户端推送消息。这个就厉害了,以前是没有方法进行主动推送的,都是在服务器端做轮询。不过还在起草阶段。其中有个Demo代码,我就下来看。

结果,发现了好东西querySelector()

以往我只会使用标准Js的getElementByXX与Jquery的$()。没想到新的Web API中居然自带了性能爆表的QuerySelector。语法与Jquery的选择器非常相似。

目前从官方文档看来,其他浏览器还好,IE系的话只支持IE8以上。下次决定试一下。

Salesforce与Trigger的故事续篇

Selseforce与Trigger又有新的故事发生了。
目前没有官方文档对此现象有相关描述。

具体现象是这样的。
假设有一个Object叫做ObjectA,上面有个字段A__c是Lookup字段,比如Lookup Contact。
还有一个字段B__c是公式字段,公式的内容是A__r.Account.Id。

问题出在我们在ObjectA的Before Insert Trigger上,做了A__c的赋值操作。
如果我们在触发Trigger的时候,所插入的数据并没有对A__c进行过任何操作,在Trigger里对A__c进行赋值的话,在Trigger里取B__c的值居然是为空的。

如果我们在触发Trigger的时候,对A__c进行赋值,那么在Trigger里再次对A__c进行赋值,在Trigger里取得B__c的值的话,呵呵呵呵呵呵,里面居然是在触发前设定的那个Contact关联的Account的ID。就是说,在Trigger里更改A的值,并没有对公式字段B造成影响。

推断如下,
因为公式字段的内容为__r,所以需要在后台进行一次查询,但是因为在Trigger里,本条数据虽然还没有插入数据库,但是还是被锁住了,导致无法及时的更新公式字段的值。

或者,只要是进入了Apex代码范围,所有公式字段皆无法进行实时更新。

// Update1

已证实,只要进入Apex范围公式就不会更新,但会保留进入之前的计算结果。

// Update2 2018-01-12

写这篇文章的时候,貌似sfdc刚刚release了recalculate formula的函数。所以当时傻乎乎的以为没办法。现在知道了,直接调用SObject.recalculateFormulas()方法就好了。不过需要注意的是,cross-object的formula并不会被重新计算。