批量触发字段更新salesforce

时间:2014-03-14 01:18:08

标签: triggers salesforce apex-code bulk apex

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

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

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;

}

1 个答案:

答案 0 :(得分:0)

看起来您的代码是After触发器。当你在触发上下文之后,你必须做DML来更新记录。

在我看来,你在单个触发器中尝试做太多,最好单独采用每种方法,以便你可以完全控制你正在做的事情。

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