添加商机线时,Apex会触发默认字段值

时间:2012-08-14 14:38:31

标签: salesforce apex-code

我不是开发人员,但我正在尝试学习,因为我已经达到了需要代码来进一步自定义和自动化的程度。我为Opportunity Products创建了一个自定义“销售价格”字段,用于替换标准销售价格字段。我希望自定义字段默认为价格手册条目清单价格(unitprice)值,标准销售价格字段也是如此。然后,我将标准销售价格字段更新为等于自定义销售价格乘以月份条款的数量(将在机会级别更新的自定义字段,并通过触发器自动填充在机会产品的反射自定义字段中)。我已经为默认的Sales Price值和默认的Month Terms创建了触发器,但现在似乎都没有。以下是创建新商机订单项时销售价格值的触发器。添加新的产品系列商品时,不确定如何将价格设置为默认值?它应该只在添加new时默认,因为我不希望它覆盖它们放入和保存的任何数量。但是如果他们回到对手并稍后添加其他物品,它也需要工作。非常感谢对此的任何意见。我花了几个小时搜索帖子和其他文档,但我没有那个天生的开发人员大脑,我正在敲打我的脑袋!

trigger SalesPricecustom on OpportunityLineItem (before insert) {
    Set<Id> pbeIds = new Set<Id>();
        for (OpportunityLineItem oli : Trigger.new) 
        pbeIds.add(oli.pricebookentryid);

    Map<Id, PricebookEntry> entries = new Map<Id, PricebookEntry>(
        [select UnitPrice from pricebookentry 
         where id in :pbeIds]);     

for (OpportunityLineItem oli :trigger.new){
     if(pricebookentry.unitprice <> null && oli.sales_price__c == null){

    oli.sales_price__c = entries.get(oli.pricebookEntryId).UnitPrice;  
  }
}} 

谢谢!

1 个答案:

答案 0 :(得分:0)

换句话说,你能描述一下你的问题吗?如果您想在更新旧数据时重新计算销售价格字段(不仅仅是插入新行),您应该为此触发器使用“更新前”事件,如下所示:

trigger SalesPricecustom on OpportunityLineItem (before insert, before update){
    //Here is your code
}

此外,您可以检查哪些字段已更改,如果其他字段已更新,它将帮助您不再执行触发逻辑(用于此触发器上下文变量 - Trigger.new,Trigger.old,Trigger。 newMap,Trigger.oldMap)。