【问题标题】:To achieve all the functionality of this code in Before event在 Before 事件中实现此代码的所有功能
【发布时间】:2020-01-16 05:31:17
【问题描述】:

我将如何在之前的事件中实现此代码的所有功能,无论是重新育儿、更新、插入还是其他任何事情。所以,这是在每种情况下都可以正常工作的代码,但是如果我想在 Before 事件中做所有相同的事情怎么办。 谢谢

    //Trigger

trigger InvoiceProductTrigger on Invoice_Product__c (before insert, before update, after insert, after update, after delete) {
    if((Trigger.isInsert || Trigger.isUpdate) && Trigger.isBefore){
        InvoiceClass.invoiceProduct(Trigger.new);
    }
    if(Trigger.isAfter && (Trigger.isInsert || Trigger.isUpdate)){
        InvoiceClass.invoiceAmountUpdate(Trigger.new);
    } 
    if(Trigger.isAfter && Trigger.isDelete){
        InvoiceClass.invoiceAmountUpdate(Trigger.old);
    }
    if(Trigger.isAfter && Trigger.isUpdate){
        InvoiceClass.invoiceAmountUpdate(Trigger.old);
    }
}

//Handler class
public class InvoiceClass {
    public static void invoiceProduct(List<Invoice_Product__c> invProduct){
        for(Invoice_Product__c inv : invProduct){
            inv.Total_Price__c = inv.Price__c * inv.Quantity__c;
        }
    }
    public static void invoiceAmountUpdate(List<Invoice_Product__c> invProduct ){
        Set<id> invoiceIds = new Set<id>();
        for(Invoice_Product__c invPro : invProduct){
            if(invPro.InvoiceLookUp__c != Null){
                invoiceIds.add(invPro.InvoiceLookUp__c);   
            }
        }
        List<Invoice__c> invoices = [Select id, Total_Amount__c, (Select id, Total_Price__c
                                                                  From Invoice_Products__r)
                                     From Invoice__c where id in : invoiceIds];
        for(Invoice__c inv: invoices){
            inv.Total_Amount__c = 0;
            for(Invoice_Product__c invProd : inv.Invoice_Products__r){
                inv.Total_Amount__c += invProd.Total_Price__c;
            }
        }
        if(invoices != Null){
            update invoices;
        }
    }
}

【问题讨论】:

    标签: triggers salesforce apex


    【解决方案1】:

    您不能仅在 before 事件中实现汇总触发器 - 至少,不容易,而且不清楚您为什么要这样做。您无法从 Invoice_Product__c before insertbefore update 触发器中查询您的 Invoice_Product__c 记录,因为它们尚未提交到数据库。

    考虑使用Declarative Lookup Rollup Summaries 来定义汇总,而不是从头开始编写汇总触发器。

    【讨论】:

    • 我确实同意你的看法,但问题是这是我的任务,但我的经理要求我在之前的活动中使用所有功能做同样的事情。
    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 2021-07-01
    • 2011-12-11
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多