我正在尝试编写一个触发器,其中插入,更新或删除记录(行项目)将更新金额字段。现在所有这些记录将具有相同的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;
}
答案 0 :(得分:0)
看起来您的代码是After触发器。当你在触发上下文之后,你必须做DML来更新记录。
在我看来,你在单个触发器中尝试做太多,最好单独采用每种方法,以便你可以完全控制你正在做的事情。
我看到你确实已经注释掉了Upsert DML语句,但是你最好不要使用Update这个特定的实例,因为你没有使用外部id或决定创建或插入哪个是upsert的目的