- 汇总trigger:子的数量更新到父的字段。
1. trigger作用于子对象
2.获取父id的集合:
1 ) 插入
2 ) 更新:A--B , A--NULL , NULL--A
3 ) 删除:使用trigger.old
3.使用子查询/Map<Id,List>方式获取到父子对象的关系集合
4.对符合条件的父对象字段赋值。
/* wendy 2017-4-19 汇总客户下的地产培训的个数 */ trigger SumDTCount on DTraining__c (after insert,after update,after delete) { Set<Id> accIdSet = new Set<Id>(); if(trigger.isInsert) { for(DTraining__c dt : trigger.new) { if(dt.Account__c == null) continue;//当插入的地产培训数据的客户信息为空时,不考虑此数据 accIdSet.add(dt.Account__c); } } /* 1.从A更新到B 2.从A更新为空 3.从空更新为A */ if(trigger.isUpdate) { for(DTraining__c dtNew : trigger.new) { DTraining__c dtOld = trigger.oldMap.get(dtNew.Id); if(dtNew.Account__c == null && dtOld.Account__c == null) continue; //null to A,将A的数量++ if(dtNew.Account__c != dtOld.Account__c && dtOld.Account__c==null && dtNew.Account__c!=null) accIdSet.add(dtNew.Account__c); //A to null,将A的数量-- if(dtNew.Account__c != dtOld.Account__c && dtOld.Account__c!=null && dtNew.Account__c==null) accIdSet.add(dtOld.Account__c); //A to B,将A的数量--,B的数量++ if(dtNew.Account__c != dtOld.Account__c && dtOld.Account__c!=null && dtNew.Account__c!=null) { accIdSet.add(dtNew.Account__c); accIdSet.add(dtOld.Account__c); } } } if(trigger.isDelete) { for(DTraining__c dt : trigger.old) { if(dt.Account__c == null) continue;//当插入的地产培训数据的客户信息为空时,不考虑此数据 accIdSet.add(dt.Account__c); } } if(accIdSet!=null)//当map为空时,过滤掉,不去查询数据库 { List<Account> list_dt = [select id,(select id from Account_DTrain__r) //子对象为地产培训 from Account where Id in: accIdSet ]; for(Account acc : list_dt ) { acc.SumDTCount__c = acc.Account_DTrain__r.size(); } update list_dt; } }
-
Shedule
编写ApexClass类实现Schedulable接口,实现execute方法
要执行定时batch操作则在execute方法调用,
可以把batch类同时实现Schedulable接口,execute中调用自身。
Database.execute(new Batch());
执行定时任务两种方法:
1.force.com界面:设置->开发->Apex类->计划Apex
Paste_Image.png在"作业->计划作业"中查看计划的作业,在Apex作业中查看所有作业。
2.代码调用: System.Schedule();
System.schedule()方法有三个参数:第一个参数为定时任务名称;第二个参数为定时任务执行时间;第三个参数为需要执行的定时任务的对象。(代码调用可以精确到小时分钟秒)。
http://www.cnblogs.com/zero-zyq/p/5287343.html
-
Controller:
与Controller交互:
-
<apex:pageBlockTable value={!对象集合} var='代号'>
<apex:column value=“{!代号.字段名}”></xxxx>
... -
button使用action制定controller的方法调用
-
controller里提供全局变量设置{get;set;},直接和前台页面引用到的值绑定,实现前台值改变后,controller直接使用变量时就是最新的值。
网友评论