salesforce零基础学习(九十六)项目中的零碎知识点小总结(四)
本篇参考:
一. Currency 处理
我们在develop console执行以下的SQL,发现会报错, Unknown error parsing query。
select id, name,AnnualRevenue
from account
where AnnualRevenue >= 10000000000

当时其实疑问挺多的,因为 AnnualRevenue是Currency类型,在我想象中,salesforce会使用 Decimal进行解析,Decimal的范围是 -2的63次方--2的63次方-1。在问群里大神以后知道了,如果值传递的是整数情况下,会使用 Integer进行转换,而 Integer的范围是 -2的31次方到2的31次方-1即-2147483648~2147483647,图中输入的值超过了这个值,所以报错。解决方案只需要后面变成 .0即可,salesforce便会将其转换成Decimal,从而可以进行正常搜索。

二. inherited sharing

在 Winter 19 version 44的时候,salesforce针对 sharing modal设置了三个模式, with sharing / with out sharing 以及 inherited sharing。在我们之前的篇中讲过salesforce 零基础开发入门学习(十二)with sharing 、without sharing 、无声明区别 无声明通常用于不知道当前的类应该 with/ with out,取决于前一个调用类的 sharing modal情况下使用无声明,在 v44以后,官方不建议使用 无声明的类,而是应该使用 inherited sharing这个声明,这种声明和无声明方式大体功能相同,但是更安全。他们也不是一点区别都没有,最大的区别如下:
当当前的class直接和前端页面交互时, inherited sharing默认是 with sharing,但是 不声明方式是without sharing。验证如下:
1. 类中使用 inherited sharing
public inherited sharing class InheritedSharingClass{
public List<Contact> getAllTheSecrets(){
return [SELECT Name FROM Contact];
}
}
2. vf页面直接关联当前的页面作为controller
<apex:page controller="InheritedSharingClass">
<apex:repeat value="{!allTheSecrets}" var="record">
{!record.Name}
</apex:repeat>
</apex:page>
当前的 contact的 OWD设置的 private,找一个低权限的人运行,展示效果如下:

我们可以看到,因为他没有Own以及被share的数据,所以展示空空如也。将apex 改一下:
public class InheritedSharingClass{
public List<Contact> getAllTheSecrets(){
return [SELECT Name FROM Contact];
}
}
结果展示:

可以看出来如果直接连接前台页面作为 controller的情况下两者的区别。另外需要考虑, inherited sharing只有v44以后才可以使用,以前的项目version低不可以使用。V44版本以后没有使用模式声明的情况下,建议添加 inherited sharing
三. WITH SECURITY_ENFORCED
security_enforced是 v45作为beta,48作为正式版,所以我们如果使用 SECURITY_ENFORCED最好在V48及以后使用。我们都知道,apex运行在 system上下文,也就是说运行时,apex会忽略当前的用户对某个表是否有权限,某个字段是否有权限,均可以进行CRUD操作。作为 ISV进行package开发或者其他严格的权限访问场景,可能需要根据当前的用户权限来决定是否可以访问哪些字段,比如schema命名空间去查看某个字段是否 isAccessable等等。 当我们在SOQL使用WITH SECURITY_ENFORCED以后,会严格按照当前user权限来走,如果当前权限对select的内容或者from内容有权限,按照正常走,如果没有权限,直接抛出异常。需要注意的是,这个关键字只针对 SELECT以及FROM内容的表字段有效,比如where或者order by等关键字后面的字段没有权限不影响。值得注意的是,这个关键字只能在apex中使用。官方给的demo如下:如果当前用户对 parent的website没有权限,则会抛出异常,结果返回空。
List<Account> act2 = [SELECT Id, parent.Name, parent.Website
FROM Account WITH SECURITY_ENFORCED]
总结:篇中对三部分进行简单的小结,更细节的使用方式建议自行查看官方文档。使用前一定要注意一下当前的版本号。篇中有错误地方欢迎指出,有不懂欢迎留言。
salesforce零基础学习(九十六)项目中的零碎知识点小总结(四)的更多相关文章
- salesforce零基础学习(九十)项目中的零碎知识点小总结(三)
本次的内容其实大部分人都遇到过,也知道解决方案.但是因为没有牢记于心,导致问题再次出现还是花费了一点时间去排查了原因.在此记录下来,好记性不如烂笔头,争取下次发现类似的现象可以直接就知道原因.废话少说 ...
- salesforce 零基础学习(六十八)http callout test class写法
此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...
- salesforce零基础学习(一百零三)项目中的零碎知识点小总结(五)
本篇参考:Salesforce Admin篇(四) Security 之Two-Factor Authentication & Single Sign On https://developer ...
- salesforce零基础学习(八十八)项目中的零碎知识点小总结(二)
通过做项目以及群里面的一些大神的聊天,总结一下关于项目中的两个知识点,以后当做参考. 一. 在custom setting中配置集成接口信息后刷sandbox的问题 我们做项目时,经常会遇见和其他平台 ...
- salesforce零基础学习(一百一十二)项目中的零碎知识点小总结(四)
本篇参考: https://trailblazer.salesforce.com/issues_view?id=a1p4V0000003znDQAQ https://salesforce.stacke ...
- salesforce零基础学习(七十二)项目中的零碎知识点小总结(一)
项目终于告一段落,虽然比较苦逼,不过也学到了好多知识,总结一下,以后当作参考. 一.visualforce标签中使用html相关的属性使用 曾经看文档没有看得仔细,导致开发的时候走了一些弯路.还好得到 ...
- salesforce 零基础学习(六十五)VF页面应善于使用变量和函数(一)常用变量的使用
我们在使用formula或者validation rules等的时候通常会接触到很多function,这些函数很便捷的解决了我们很多问题.其实很多函数也可以应用在VF页面中,VF页面有时候应该善于使用 ...
- salesforce 零基础学习(六十三)Comparable实现Object列表数据的自定义排序
项目中通常有些需求为需要将某个sObject的数据列表按照某种规则排序显示到前台页面上,但是list上面的sort远远满足不了复杂的功能,此种情况需要自定义比较两个object大小的方法,所以需要创建 ...
- salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)
本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...
随机推荐
- 传值&传值引用
转自http://www.cnblogs.com/androidsuperman/p/9012320.html 首先对传值和传引用要有个基本的概念 传值:传递的是值的副本.方法中对副本的修改,不会影响 ...
- java代码复用(继承,组合以及代理)
作为一门面向对象开发的语言,代码复用是java引人注意的功能之一.java代码的复用有继承,组合以及代理三种具体的表现形式,下面一一道来. 第一种方式是通过按照现有的类的类型创建新类的方式实现代码的复 ...
- Nginx【常见知识点速查】
文章更新时间:2020/04/10 一.简介 定义:Nginx是一个高性能的HTTP和反向代理web服务器 作用: 反向代理 正向代理 负载均衡 HTTP静态资源服务器(动静分离) 二.正向代理与反向 ...
- Spring循环依赖的三种方式
引言:循环依赖就是N个类中循环嵌套引用,如果在日常开发中我们用new 对象的方式发生这种循环依赖的话程序会在运行时一直循环调用,直至内存溢出报错.下面说一下Spring是如果解决循环依赖的. 第一 ...
- ServletContex对象学习
问题: 不同的用户使用相同的数据 解决: ServletContext对象 特点: 服务器创建 用户共享 作用域: 整个项目内 生命周期: 服务器启动到服务器关闭 使用: 1.获取SercvletCo ...
- Asp.Net Core SignalR 系列博客
系列 SignalR+Vue SignalR+Vue 服务端向客户端发送信息 SignalR+Vue+Log4net 实时日志推送 待定...... 源码地址:https://github.com/Q ...
- vue学习06 v-show指令
目录 vue学习06 v-show指令 v-show指令是:根据真假切换元素的显示状态 原理是修改元素的display,实现显示隐藏 指令后面的内容,最终都会解析为布尔值(true和false) 练习 ...
- tomcat在windows下安装
1.下载地址:https://tomcat.apache.org/download-90.cgi Binary是编译好的,可以直接使用的版本: tar.gz,解压即可用: Source是源代码版本,需 ...
- Alink漫谈(二十二) :源码分析之聚类评估
Alink漫谈(二十二) :源码分析之聚类评估 目录 Alink漫谈(二十二) :源码分析之聚类评估 0x00 摘要 0x01 背景概念 1.1 什么是聚类 1.2 聚类分析的方法 1.3 聚类评估 ...
- 一道Postgresql递归树题
转载请注明出处: https://www.cnblogs.com/funnyzpc/p/13698249.html 也是偶然的一次,群友出了一道题考考大家,当时正值疫情最最严重的三月(借口...),披 ...