083_SFDC Limit(二) 及良好的开发习惯
关于常见开发中遇到的limit,应如何处理:https://developer.salesforce.com/page/Apex_Code_Best_Practices
链接内容很好,就不一一做解释
总结一下:在开发的过程中要养成好的习惯
常见的用法如 List<Account>, Account[]acc = new Account[]; ,Map,Set,List,要分清什么场合,用哪种比较合适,根据实际开发来决定
1.不能再loop中有DML操作
2. 尽量简化soql,比如 account,opportunity之间的查询,尽量合并再一个语句中
3.尽量一个Trigger 对应一个Handler
4.当准备批量操作一批数据时,尽量简化soql,接收值为Set、 map、list 等
5.@future (@future static method) ,如果考虑操作数据量较大,可以考虑后台空闲时执行,每个Apex 限制最多10个调用,系统24小时内限制200个
trigger accountAsyncTrigger on Account (after insert, after update) {
//By passing the @future method a set of Ids, it only needs to be
//invoked once to handle all of the data.
asyncApex.processAccount(Trigger.newMap.keySet());
}
6.避免Hard coding方式去取数据,比如id = ‘1*********15’,尽量用名字或更多的条件检索到具体的数据,而不是直接拿ID来用
System.debug('Total Number of SOQL Queries allowed in this Apex code context: ' + Limits.getLimitQueries());
System.debug('Total Rows of SOQL Queries allowed in this Apex code context: ' + Limits.getLimitQueryRows());
System.debug('Total Number of DML records that can be operated(insert,update,delete等无select) in this Apex code context: ' + Limits.getLimitDmlRows());
System.debug('Total Number of DML statements allowed in this Apex code context: ' + Limits.getLimitDmlStatements() );
System.debug('Total Number of CPU usage time (in ms) allowed in this Apex code context: ' + Limits.getLimitCpuTime());
List<Account> acc = [Select id ,Name,Title_AZ_CN__c from Account where Name = 'Company ABC'];
System.debug('Acc Size:'+acc.size());
System.debug('1. Number of Queries used in this Apex code so far: ' + Limits.getQueries());
System.debug('2. Rows of Queries used in this Apex code so far: ' + Limits.getQueryRows());
System.debug('3. Number of DML rows queried in this Apex code so far: ' + Limits.getDmlRows());
System.debug('4. Number of DML statements used so far: ' + Limits.getDmlStatements());
System.debug('5. Amount of CPU time (in ms) used so far: ' + Limits.getCpuTime());
List<Account> updateAcc = new List<Account>();
for(Account upacc: acc){
upacc.Title_AZ_CN__c = 'lead';
updateAcc.add(upacc);
}
update updateAcc;
System.debug('11. Number of Queries used in this Apex code so far: ' + Limits.getQueries());
System.debug('22. Rows of Queries used in this Apex code so far: ' + Limits.getQueryRows());
System.debug('33. Number of DML rows queried in this Apex code so far: ' + Limits.getDmlRows());
System.debug('44. Number of DML statements used so far: ' + Limits.getDmlStatements());
System.debug('55. Amount of CPU time (in ms) used so far: ' + Limits.getCpuTime());

代码解读:
1-5: 是系统默认的限制,所有的限制都是在Limits 封装类中可以查到
8:实际检索List.size();
9:目前只有一个query结果
10:query结果为3条
11、12:DML Row:尚没有DML操作
13:CPU time
22:目前只有一个query结果
23:这个query结果为3条
24&25:有一个DML操作(update:对系统数据做了实际的更改,查询并不改变数据,因此不作为DML),这个DML操作结果是3条数据
26:CPU time
7. 比如页面输入一个值,后台进行查询:
String query = 'SELECT Id, Name FROM Account WHERE Name = \'' + userInputString + '\''; result = Database.execute(query);
但是这种写法 容易被恶意注入 乱码等其他,比如limit 1之类的,本来name 可以查出10条,加上limit 仅仅查出1条,那么这种写法就需要重新考虑
result = [SELECT Id, Name FROM Account WHERE Name = :userInputString];
选择这种方式可以避免
8 回滚
Savepoint sp1 = Database.setSavepoint();
Account a = new Account();
// 设置 Account 对象的属性
// ...
insert a; Savepoint sp2 = Database.setSavepoint();
// 更改 Account 对象的属性
// ...
update a // 回滚数据到 sp1 的状态
Database.rollback(sp1);
9. System.UserInfo.getUserId();
10.
Strin gs = Datetime.newInstance(DateField,Time.newInstance(0, 0, 0, 0)).format('yyyy-MM-dd\'T\'HH:mm:ss\'Z\'');
HH 代表24小时制 hh代表12小时制
11.
083_SFDC Limit(二) 及良好的开发习惯的更多相关文章
- 一名Delphi程序员的开发习惯
一名Delphi程序员的开发习惯 有关开发习惯的一些想法,如鲠在喉,不吐不快.究其发贴动机,当然不排除有骗取参与分的可能,但另一方面,也希望能给同行(念Xing)者提供一些 建议,或者参考(希望不是误 ...
- Appium移动自动化测试(二)--安装Android开发环境(转)
Appium移动自动化测试(二)--安装Android开发环境 2015-06-04 17:30 by 虫师, 35299 阅读, 23 评论, 收藏, 编辑 继续Appium环境的搭建. 第二节 ...
- (二)Hololens Unity 开发入门 之 Hello HoloLens~
学习源于官方文档 微软官文~ 笔记一部分是直接翻译官方文档,部分各人理解不一致的和一些比较浅显的保留英文原文 (二)Hololens Unity 开发入门 之 Hello HoloLens~ 本文主要 ...
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...
- 个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 2
接上篇:个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 1 Step1 在主程序中设置连接数据库 从Model类库的 App.Config 把数据库字符串拷贝出来, ...
- 20155235 《Java程序设计》 实验二 实验三 敏捷开发与XP实践
20155235 <Java程序设计> 实验二 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验内容 没有Linux基础的同学建议先学习<Linux基础入 ...
- UI标签库专题二:JEECG智能开发平台Column(列) 子标签
UI标签库专题二:JEECG智能开发平台Column(列) 子标签 1.1. Column(列) 子标签 1.1.1. 演示样例 <t:dgCol title="年龄" ...
- JavaWeb-RESTful(二)_使用SpringMVC开发RESTful_上
JavaWeb-RESTful(一)_RESTful初认识 传送门 JavaWeb-RESTful(二)_使用SpringMVC开发RESTful_上 传送门 JavaWeb-RESTful(三)_使 ...
- WebService学习总结(二)--使用JDK开发WebService
一.WebService的开发方法 使用java的WebService时可以使用一下两种开发手段 使用jdk开发(1.6及以上版本) 使用CXF框架开发(工作中) 二.使用JDK开发WebServic ...
- 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明
目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...
随机推荐
- mysql 简单查询
查询特定列SELECT ename,birthday FROM emp; 查询所有的select*from emp; 给列起别名select ename AS 姓名, salary AS 工资 FRO ...
- iterator_traits技法
问题 在 C++ 泛型编程中,如何知道"迭代器所指对象的类型",以便声明临时变量呢?我们把迭代器所指对象的类型称为value type. template <class It ...
- 构建api gateway之 如何给openresty打patch
如何给openresty打patch 由于很多功能实现的限制,我们不得不修改openresty,但我们又不一定能持续维护一个 openresty 分支,所有有了patch 这一操作. patch是怎么 ...
- JavaScript 疑难记录(未解决)
异步迭代器与生成器的联系和区别
- Spacemacs换源无效果
我改了发现没用,找了好久问题,才发现变量名改了,以前修改源是configuration-layer–elpa-archives这个变量,现在改为configuration-layer-elpa-arc ...
- zookeeper04---ZAB协议
转https://www.jianshu.com/p/2bceacd60b8a 1.什么是Zab协议 1.1Zab协议简介 1.2 Zab 协议的特性(怎么保持数据一致性) 2.Zab 协议实现的作用 ...
- Vue的介绍
目录 Vue介绍 一.前端发展史 二.Vue介绍 1.Vue是什么? 2.M-V-VM 架构思想 3.组件化开发.单页面应用 4.版本问题 三.第一个helloworld 1.了解开发前端的编辑器 2 ...
- MySQL8.0 高可用集群化 · mysql-shell · mysql-router · docker · 单主多从
高可用集群的基本特点 负载均衡 / 读写分离 / 故障转移本文以此为目标,利用 mysql-shell.mysql-router,基于 docker 的环境架构(篇幅太长,内容多了点儿). 一.名词及 ...
- JuiceFS 在火山引擎边缘计算的应用实践
火山引擎边缘云是以云计算基础技术和边缘异构算力结合网络为基础,构建在边缘大规模基础设施之上的云计算服务,形成以边缘位置的计算.网络.存储.安全.智能为核心能力的新一代分布式云计算解决方案. 01- 边 ...
- day14-异常处理
异常处理 1.基本介绍 SpringMVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler映射.数据绑定以及目标方法执行时发生的异常 有两种方案来进行异常 ...