【问题标题】:Apex Trigger Between Two Child Objects两个子对象之间的 Apex 触发器
【发布时间】:2020-01-20 17:05:54
【问题描述】:

我正处于学习 Apex 并尝试为特定场景编写一些代码的早期阶段。我有两个名为OutstandingTransaction 的自定义对象,它们都是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

当 Transaction 的开始日期更改为 2019 年 1 月 2 日时,我希望触发器找到相关的未完成记录 2 并将结束日期更新为 2019 年 12 月 31 日。

希望这是有道理的。如果没有,请告诉我,我会再次尝试解释。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 你试过什么?你被困在哪里了?如果您需要入门帮助,Trailhead 有一个很好的介绍模块。

标签: triggers salesforce apex


【解决方案1】:
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;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2023-03-28
    相关资源
    最近更新 更多