SalesforceToolkit开发日志v0.342

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

此版本主要有两项更新

  1. 修复了SOQL中包含“&”会导致查询报错的问题。
  2. SetPermission模块增加Permission Set的支持。

概述

修复了SOQL中包含“&”会导致查询报错的问题

众所周知,为了标识HTTP请求URI的各个部分,使用了很多特殊的符号。例如https://,/,?,&,#,=等。

其中,&是用来分隔不同的HTTP查询参数,例如 http://example.com?param1=a&param2=2&param3=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