Salesforce 添加opportunity line时,Apex触发默认字段值

Salesforce 添加opportunity line时,Apex触发默认字段值,salesforce,apex-code,Salesforce,Apex Code,我不是一名开发人员,但我正在尝试学习,因为我已经达到了需要代码来进一步定制和自动化的程度。我为Opportunity产品创建了一个自定义的“销售价格”字段,用于替换标准销售价格字段。我希望自定义字段与标准销售价格字段一样默认为价目表条目列表价格(单价)值。然后,我更新了标准销售价格字段,使其等于自定义销售价格乘以月条款数(自定义字段将在Opportunity级别更新,并通过触发器自动填充到Opportunity Products上的reflective custom field中)。我已经为默认

我不是一名开发人员,但我正在尝试学习,因为我已经达到了需要代码来进一步定制和自动化的程度。我为Opportunity产品创建了一个自定义的“销售价格”字段,用于替换标准销售价格字段。我希望自定义字段与标准销售价格字段一样默认为价目表条目列表价格(单价)值。然后,我更新了标准销售价格字段,使其等于自定义销售价格乘以月条款数(自定义字段将在Opportunity级别更新,并通过触发器自动填充到Opportunity Products上的reflective custom field中)。我已经为默认的销售价格值和默认的月份条款创建了触发器,但现在两者似乎都不起作用。以下是创建新的opportunity line项目时销售价格值的触发器。不确定添加新产品线项目时如何将价格设置为默认值?它应该只在添加新内容时默认,因为我不希望它覆盖他们输入和保存的任何金额。但是,如果他们回到opp并在以后添加其他项目,这也需要起作用。对此,我们非常感谢您的任何意见。我花了数小时搜索帖子和其他文档,但我没有天生的开发人员头脑,我的头都快撞到了

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;  
  }
}} 
在OpportunityLineItem上触发SalesPrice自定义(插入前){
Set pbeIds=新集合();
对于(OpportunityLineItem:Trigger.new)
pbeIds.add(oli.pricebookentryid);
地图条目=新地图(
[从pricebookentry中选择单价
其中id在:pbeIds]);
对于(OpportunityLineItem:trigger.new){
if(pricebookentry.unitprice null&&oli.sales\u price\u c==null){
oli.sales\u price\u c=entries.get(oli.pricebookeryid).UnitPrice;
}
}} 

谢谢

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

trigger SalesPricecustom on OpportunityLineItem (before insert, before update){
    //Here is your code
}
此外,您可以检查哪些字段已更改,如果其他字段已更新(用于此触发器上下文变量-trigger.new、trigger.old、trigger.newMap、trigger.oldMap),这将帮助您不再执行触发器逻辑