Для достижения всей функциональности этого кода в до события - PullRequest
0 голосов
/ 16 января 2020

Как мне достичь всей функциональности этого кода перед событием, будь то переопределение, обновление, вставка или что-то еще. Итак, вот код, который отлично работает в любых условиях, но что, если я хочу сделать все то же самое в событии 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;
        }
    }
}

1 Ответ

0 голосов
/ 17 января 2020

Вы не можете реализовать триггеры свертки исключительно в событиях before - по крайней мере, не легко, и неясно, почему вы этого хотите. Вы не можете запросить записи Invoice_Product__c из триггера Invoice_Product__c before insert или before update, поскольку они еще не были зафиксированы в базе данных.

Рассмотрите возможность использования Сводных сводок декларативного поиска для определения свертки, а не записи триггеров свертки с нуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...