关于常见开发中遇到的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.

最新文章

  1. [转]WebPack 常用功能介绍
  2. Windwos下常用DOS命令
  3. WCF 下载“http://localhost:XXX”时出错。无法连接到远程服务器。由于目标计算机积极拒绝,无法连接。
  4. 用PHP语言刷OJ题
  5. 跟开涛老师学shiro -- 身份验证
  6. codeforce Codeforces Round #201 (Div. 2)
  7. FreeModbus Slave 改进的eMbPoll()【worldsing 笔记】
  8. 【原】本地win7,远程服务器XP系统,两台机器间不能拖动文件
  9. redis例子
  10. python成长之路11
  11. asp.net权限认证:OWIN实现OAuth 2.0 之密码模式(Resource Owner Password Credential)
  12. Laravel 开发笔记
  13. Spring OAuth2 GitHub 自定义登录信息
  14. Dynamics CRM 插件Plugin中获取和更新时间字段值的准确转换
  15. 【zabbix教程系列】五、邮件报警设置(脚本方式)
  16. Maven 的 settings.xml 配置中的mirror节点
  17. 【代码笔记】Web-HTML-布局
  18. circos 绘制关系型图ribbon,并加入透明度
  19. 经典幻灯片插件Swiper
  20. unity发射弓箭轨迹的实现

热门文章

  1. 数学 in OI-数论-1
  2. 被iframe页面更改顶层的跳转链接
  3. day13-实现Spring底层机制-03
  4. 音频编辑服务UI SDK接入指导及常见问题
  5. chatGPT 桌面版安装教程
  6. day07-SpringMVC底层机制简单实现-03
  7. CentOS7登录到控制台后无网络
  8. Linux10-rpm和yum
  9. Servlet HTTP Request Response笔记
  10. 简要介绍WASAPI播放音频的方法