Release Note
v0.342 Release Note - Bugfix - SOQL Module-Fix "&" causing query exception - New features - SetPermission Module - Add support for Permission Set - Function improvement - None
此版本主要有两项更新
- 修复了SOQL中包含“&”会导致查询报错的问题。
- SetPermission模块增加Permission Set的支持。
概述
修复了SOQL中包含“&”会导致查询报错的问题
众所周知,为了标识HTTP请求URI的各个部分,使用了很多特殊的符号。例如https://,/,?,&,#,=等。
其中,&是用来分隔不同的HTTP查询参数,例如 http://example.com?param1=a¶m2=2¶m3=z
这里表示该请求携带三个查询参数,分别是param1、param2与param3。
所以在查询参数的值当中,就不应该再次出现&,否则服务器在解析URI时会因为额外的&导致对查询参数的切割出现错误,从而导致处理失败。
那么当确实需要使用&的时候该怎么办呢?
Javascript原生提供两个方法,分别是encodeURIComponent()和encodeURI()。
首先,根据https://datatracker.ietf.org/doc/html/rfc3986,由于URL中不可出现ASCII以外的字符,所以当URI中包含非ASCII字符时,需要对URI进行转码,然后由请求接收方进行解码。
Javascript既提供了encodeURI(),可以对整个URI进行百分号编码(percent-encoding),但不转码所有的保留字,方便后续将完整的URI进行打包传输;又提供了encodeURIComponent(),不管是不是保留字,整体全部进行百分号编码,将百分号编码的参数值放入URI中,就不会影响后续URI查询参数的解析。
本次出现的问题是在调用SFDC Rest API进行查询时,SOQL作为查询参数的值,使用了不对保留字下手的encodeURI(),导致当SOQL中包含&字符时,会被SFDC错误地切割,导致SOQL不完整,查询失败。
其实这个问题在较早前,在其他模块修复过一次,但没有做好grep调查。最终,该修的bug一个都跑不掉。
SetPermission模块增加Permission Set的支持
在SFDC UI中创建字段时,作为创建页面中的一步,可以在页面上直接勾选需要给哪些Profile设置该字段的权限。但是随着这几年SFDC产品经理的哲学思考,他觉得Object Permission与FLS等应该放到permission set上,并且大手一挥,将来Profile上不应该有任何的表与权限设定,很是豪迈。
作为SFDC的开发者,我很赞成这个哲学观点,但是,我有个疑问啊——通过UI创建字段时,也没有选择Permission Set的步骤啊?
难不成,伟大的产品经理是打算让我创建完字段之后,点进每个Permission Set挨个勾选吗?
也许伟大的产品经理自有打算,或者创建字段时可以选Permission Set已经安排在了路线图上。
但是,毕竟,现在还没有。
所以为了make it possible,我在SetPermission模块增加了为Permission Set设置Object Permission与Field Permission的选项。并且为了增加操作便利性,增加了Permission Set Picker,可以方便选择Permission Set。
总体上为查询Permission Set与Profile,为Permission Set与Profile设置权限,本质上都在同一张表里(ObjectPermissions与FieldPermissions),不同的只是ParentId,然而本质上Profile也是一种Permission Set,因为Profile也存在于Permission Set表,只不过type不同,一种是Regular,一种是Profile。
所以增加Permission Set模式只是调整了一下SOQL语句的条件。
关于增加Permission Set Picker,借由之前做User Maintain Module时增加的SelectTable web component,节省了大量的重复劳动,此功能就演变成了做一个modal并塞一个selectTable进去。
计划还会增加Apex class,Tab与Record Type的分配,二阶段继续增加user permission与特殊权限的分配。不过由于工作量与测试量超出目前的可用时间(由于目前处在一个管理上很混乱的项目,导致我可用时间甚至是负数XD)。待恢复足够的可支配时间,会继续有限拓展该模块。
Chrome Extension
Salesforce Toolkit
https://chrome.google.com/webstore/detail/salesforce-toolkit/kgjlcplagigepdkknapcdijkcdbkehjp?hl=zh-CN
Microsoft Edge Extension
Salesforce Toolkit
https://microsoftedge.microsoft.com/addons/detail/ajljhokkkbjedmnnkgbmlfjcjjjoemca