2014-03-14 86 views
1

我想写一个触发器插入,更新或删除记录(行项目)将更新金额字段。现在所有这些记录将具有相同的ParentID(费用)和名称(行项目)。基本上重复的记录除了联系人名称将有所不同。因此,当我使用相同的父母和姓名添加具有新金额的新订单项时,触发器应关闭并查询具有相同父级的所有订单项,并应重新计算金额。批量触发字段更新salesforce

因此,如果我输入第一行项目并说总金额应为100.然后我输入第二行项目,触发器应触发并更新两个记录上的金额'50 .00'。出于某种原因,即使它正确计算,我的触发器也不会更新。错误在哪里?请帮忙!!!

trigger Test on Expense_Line_Item__c (after insert, after update, after delete) { 
    set<id>testlist = new set<id>(); 
    //List<Expense_Line_Item__c> listItem= new List<Expense_Line_Item__c>(); 

    for (Expense_Line_Item__c a : trigger.new) { 
     testlist.add(a.expense__c); 
    } 

    list<Expense_Line_Item__c> mapParent = 
     new list<Expense_Line_Item__c>([SELECT name, 
              id, 
              Amount__c 
             FROM Expense_Line_Item__c 
             WHERE expense__c IN:testlist]); 

    Decimal Total = 0.0; 
    Integer Count = 0; 

    for (Expense_Line_Item__c exp : mapParent) { 
     Total = Total + exp.Amount__c; 
     Count++; 
     System.debug('Total during iterator::::::::::::::::::::::' + Total); 
     System.debug('Counter:::::::::::::::::::::::::::::::::::::' + Count); 
    } 

    if (Count > = 1) 
     Total = Total/Count; 

    System.debug('Total count after division::::::::::::::::::::::' + Total); 

    List <Expense_Line_Item__c> insertLineItem = new List <Expense_Line_Item__c>(); 

    for (Expense_Line_Item__c lineItem : MapParent) { 
     lineItem.Amount__c = Total; 
     //insertLineItem.add(lineItem); 
     //System.debug('LineItem Amount getting inserted::::::::::::::::::::::'+lineItem.Amount__c); 
    } 

    // upsert insertLineItem; 

} 

回答

0

它看起来像你的代码是一个触发后。当你在触发器上下文中时,你必须执行DML来更新记录。

在我看来,你试图在单个触发器中做得太多,它总是更好地采取每个方法,以便你可以完全控制你在做什么。

我看到你有一个Upsert DML语句注释掉了,但是你最好使用这个特定实例的Update,因为你没有使用外部id或者决定创建或插入这个目的upsert