案例对象的顶点触发器

时间:2016-09-10 15:11:37

标签: triggers salesforce apex

我在Case Object上尝试了一个简单的触发器。在Case中有一个字段Hiring_Manager__c(查找用户)。在更新或插入案例时,必须使用案例所有者的Manager填充此字段。我创建了触发器如下。由于我只是尝试单个记录,因此没有批量化。 我可以看到在调试语句中正确填充的值。但它没有在记录中更新。

trigger HiringManagerupdate_case on Case (before insert,before update) {

Case updatedCaseRec= [select id,ownerId,Hiring_Manager__c,CaseNumber from case where id in :Trigger.new];
  system.debug('Case Number'+updatedCaseRec.CaseNumber);
  system.debug('Manager before updation'+updatedCaseRec.Hiring_Manager__c);

try{
   User caseOwner = [Select Id,Name, ManagerId, Manager.Email From User Where Id = :updatedCaseRec.ownerId];
            updatedCaseRec.Hiring_Manager__c=caseOwner.ManagerId;
                }
Catch(DMLException de){
    system.debug('Could not find Manager');
}
system.debug('Manager'+updatedCaseRec.Hiring_Manager__c); 

}

我在开发人员论坛上得到了一个回复,其代码运行正常。

trigger HiringManagerupdate_case on Case (before insert,before update) {
for(Case  cas :Trigger.new){
    try{
   User caseOwner = [Select Id,Name, ManagerId, Manager.Email From User Where Id = :cas.ownerId];
            cas.Hiring_Manager__c=caseOwner.ManagerId;
         }
Catch(DMLException de){
    system.debug('Could not find Manager');
}
system.debug('Manager'+cas.Hiring_Manager__c);

}

我想知道

1)如果我只尝试更新一条记录,两种方法的逻辑差异?我在调试语句中填充值但不在屏幕上填充。

2)循环(第二种方法)中的select语句是否会影响调控器限制?

3)我们是否需要为before触发器显式调用update?我的理解是在before触发器的字段更新之后发生了保存和提交,因此更改将自动保存而不调用update语句。?

提前感谢。 尼莎

1 个答案:

答案 0 :(得分:0)

1)如果您正在尝试访问触发before触发器的对象的记录,则必须迭代Trigger.new。您无法查询它,因为记录可能尚未在数据库中。

2)是的,它可以。对于要插入或更新的每个Case记录执行查询。如果您有1,000个此类案例,则查询将执行1,000次。

3)不,我们不需要为before触发器调用update。你的理解是正确的。