尝试更新记录时触发器上的递归操作

问题描述 投票:0回答:1

我在 salesforce 中有 Case 对象。我正在尝试提交 RMA 并收到错误。 错误是 CCS_AS400_Integration:执行 BeforeUpdate 的原因是:System.DmlException:插入失败。第 0 行的第一个异常;第一个错误:CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY、CCS_AS400_Line_Import:执行 AfterInsert 导致:System.DmlException:更新失败。第 0 行的第一个异常,id 为 500Nu000003yy4SIAQ;第一个错误:SELF_REFERENCE_FROM_TRIGGER,对象(id = 500Nu000003yy4S)当前处于触发器CCS_AS400_Integration中,因此它无法递归更新自身:[] Trigger.CCS_AS400_Line_Import:第17行,第1列:[] Class.CCS_Line_Item_Manager.consolidateLineItems:第138行,第1列触发器.CCS_AS400_Integration:第 156 行,第 1 列

我尝试更新触发器但没有成功。

triggers salesforce apex
1个回答
0
投票

您可以发布您的代码吗?

为了防止递归,您可以利用静态变量来确保特定功能仅执行一次。首先将静态布尔变量初始化为“false”。然后,在您的代码中,执行检查以在变量为“false”时执行该功能;随后,将该变量设置为“true”以将其标记为已执行。这样,代码将在后续调用中跳过该功能。

总而言之,静态变量充当一个标志来控制所需的功能是否已经执行,以防止递归调用。

示例:

//Trigger
Trigger triggerName on Object (after update){
    if(Trigger.isAfter && Trigger.isUpdate){
        triggerHandler.afterInsert(Trigger.oldMap,Trigger.newMap);
    }
}

// Recursion handler class
public class recursionClass{
     public static Boolean recursionVar = false;
}
//trigger handler
public class triggerHandler{
   public static void afterInsert(Map<Id,object> oldMap, Map<Id,object> newMap){
     if(!recursionClass.recursionVar){
        //your logic
         recursionClass.recursionVar =true;
     }
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.