关于常见开发中遇到的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(二) 及良好的开发习惯的更多相关文章

  1. 一名Delphi程序员的开发习惯

    一名Delphi程序员的开发习惯 有关开发习惯的一些想法,如鲠在喉,不吐不快.究其发贴动机,当然不排除有骗取参与分的可能,但另一方面,也希望能给同行(念Xing)者提供一些 建议,或者参考(希望不是误 ...

  2. Appium移动自动化测试(二)--安装Android开发环境(转)

    Appium移动自动化测试(二)--安装Android开发环境 2015-06-04 17:30 by 虫师, 35299 阅读, 23 评论, 收藏, 编辑 继续Appium环境的搭建. 第二节   ...

  3. (二)Hololens Unity 开发入门 之 Hello HoloLens~

    学习源于官方文档 微软官文~ 笔记一部分是直接翻译官方文档,部分各人理解不一致的和一些比较浅显的保留英文原文 (二)Hololens Unity 开发入门 之 Hello HoloLens~ 本文主要 ...

  4. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

  5. 个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 2

    接上篇:个人 WPF+EF(DBFirst) 简单应用开发习惯及EF学习测试(备忘) -- 1 Step1 在主程序中设置连接数据库 从Model类库的 App.Config 把数据库字符串拷贝出来, ...

  6. 20155235 《Java程序设计》 实验二 实验三 敏捷开发与XP实践

    20155235 <Java程序设计> 实验二 实验三 敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 实验内容 没有Linux基础的同学建议先学习<Linux基础入 ...

  7. UI标签库专题二:JEECG智能开发平台Column(列) 子标签

    UI标签库专题二:JEECG智能开发平台Column(列) 子标签  1.1. Column(列) 子标签 1.1.1. 演示样例 <t:dgCol title="年龄" ...

  8. JavaWeb-RESTful(二)_使用SpringMVC开发RESTful_上

    JavaWeb-RESTful(一)_RESTful初认识 传送门 JavaWeb-RESTful(二)_使用SpringMVC开发RESTful_上 传送门 JavaWeb-RESTful(三)_使 ...

  9. WebService学习总结(二)--使用JDK开发WebService

    一.WebService的开发方法 使用java的WebService时可以使用一下两种开发手段 使用jdk开发(1.6及以上版本) 使用CXF框架开发(工作中) 二.使用JDK开发WebServic ...

  10. 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

随机推荐

  1. Vue+elementui前后端分离,单个图片文件上传和上传时出现的跨域问题的解决方案

    在后端解决跨域问题: 我是通过配置文件来解决跨域问题的 @Configurationpublic class CorsConfig {//解决前后端分离的跨域问题! /** * cors suppor ...

  2. Java基础学习笔记-数据类型、数制

    数据类型,跟JS感觉差异不是很大,但是有个String不是很一样的样子 数据类型分为 基本数据类型和复合数据类型 基本数据类型分为下面三种 数值类型 1.整数类型:byte,short,int,lon ...

  3. drf入门规范、序列化器组件、视图组件、请求与响应

    DRF框架之入门规范 ​ 本篇文章会详细介绍web开发模式.API接口及其接口测试工具.restful规范.还有经常分不清又很重要的序列化与反序列化的部分,初级交接触APIView.Request类. ...

  4. Task记录1.CancellationToken 取消Task任务的操作

    //1.创建取消令牌数据 CancellationTokenSource tokenSource = new CancellationTokenSource(); //2.创建取消令牌 Cancell ...

  5. P11_组件-button和image组件的基本用法

    其它常用组件 button 按钮组件 功能比 HTML 中的 button 按钮丰富 通过 open-type 属性可以调用微信提供的各种功能(客服.转发.获取用户授权.获取用户信息等) image ...

  6. Git 多账号 SSH 配置

    [前言] 在企业工作环境中,我们一般会用企业的github或gitlab等账号,同时也会配置相关的ssh访问方式. 当我们想要同时操作个人github或gitlab仓库时,就无法重复使用现有的ssh公 ...

  7. H3C MS4300V2配置mac地址与接口绑定

    配置mac地址与接口绑定 例: <h3c>system-view     //进入系统视图 [h3c]int g 1/0/45 //进入45接口 [h3c-GigabitEthernet1 ...

  8. 安装redhat6.10 出现的问题

    安装redhat6.10 操作系统不定时重启情况说明   曾出现报错如下: 在UEFI模式下安装RHEL6.10,安装完毕后系统第一次重启无法进入操作系统,同时屏幕上出现错误提示: Invalid m ...

  9. dotnet总结——类型系统

    包括2种大的类型: 引用类型和值类型, 放一张图说明继承层次: 一 值类型: 内置的值类型,如下 用户自定义值类型就是用户定义的枚举或者结构类型. 可空类型(Nullable<T>)属于 ...

  10. RocketMQ - 消费者Rebalance机制

    客户端是通过Rebalance服务做到高可靠的.当发生Broker掉线.消费者实例掉线.Topic 扩容等各种突发情况时,消费者组中的消费者实例是怎么重平衡,以支持全部队列的正常消费的呢? Rebal ...