Триггер Apex между двумя дочерними объектами - PullRequest
0 голосов
/ 20 января 2020

Я нахожусь на ранних стадиях изучения Apex и пытаюсь написать некоторый код для конкретного сценария. У меня есть два пользовательских объекта с именами Outstanding и Transaction, которые оба являются потомками Account. Я хочу написать триггер, который обновляет дату окончания записи Outstanding, которая имеет дату начала >= дату начала Transaction и дату окончания < дату окончания Transaction. Я хочу, чтобы конечная дата в правильной записи Outstanding изменилась на конечную дату в Transaction.

Пример:

Транзакция: Start_Date__ c (изменено на) = 1/2/2019 End_Date__c = 1/31/2020

Выдающиеся записи:

  1. Start_Date __ c 1/4/2018 End_Date __ c 1/4/2019
  2. Start_Date __ c 1/4/2019 End_Date __ c 1/4/2020
  3. Start_Date __ c 1/4/2020 End_Date __ c 1/4/2021

Когда дата начала транзакции изменяется на 1/2/2019, я хочу, чтобы триггер нашел соответствующую непогашенную запись 2 и обновил дата окончания 12/31/2019.

Надеюсь, это имеет смысл. Если это не так, пожалуйста, дайте мне знать, и я постараюсь объяснить это снова. Любая помощь будет оценена. Спасибо.

1 Ответ

0 голосов
/ 21 января 2020
You have to write a trigger on your Transaction Object on after update context. Please try the below codes.
**Trigger** : 
`trigger TransactionTrigger on Transaction__c (after update) {
    Map<Id,Transaction__c> accTraMap = new Map<Id,Transaction__c>();
    for(Transaction__c transac : trigger.new){
        accTraMap.put(transac.Account__c, transac);
    }
    if(!accTraMap.isEmpty()){
        TransactionTriggerHandler.afterUpdate(accTraMap);
    }
}`
**Class :**

    public class TransactionTriggerHandler {
    public static void afterUpdate(Map<Id,Transaction__c> accTransMap){
        list<Outstanding__c> outstanding = [SELECT Id, Name, StartDate__c, EndDate__c, Account__c 
                                 FROM Outstanding__c where Account__c in:accTransMap.keyset()];

        list<Outstanding__c> outstandingToUpdate = new list<Outstanding__c>();

        for(Outstanding__c o : outstanding){
            if(accTransMap.containsKey(o.Account__c)){
                if(o.StartDate__c >= accTransMap.get(o.Account__c).Start_Date__c && o.EndDate__c < accTransMap.get(o.Account__c).End_Date__c){
                  o.EndDate__c = o.EndDate__c.toStartOfMonth().addDays(-1);
                    outstandingToUpdate.add(o);
                }
            }
        }
        system.debug('\n updated outstanding '+outstandingToUpdate);
        if(!outstandingToUpdate.isEmpty()){
            update outstandingToUpdate;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...