Salesforce - Apex 触发器需要在托管包代码后触发

Salesforce - Apex Trigger Needs to Fire after Managed Package Code

我写了一些代码来更新托管包对象。我可以在调试日志中看到代码应该工作,但问题是托管包代码在我的代码运行的同时或之后执行。我正在更新记录,并且更新在托管代码运行后被删除。有没有一种方法可以让我等到托管代码运行之后。我试图在其中放置一个等待语句,但有时他们的代码运行速度很快,有时却没有,所以我想我首先需要检查代码是否为 运行。

尝试使用等待。

  If (clsCheckRecursive.IsItFirstRun == True) {
    clsCheckRecursive.IsItFirstRun = False;

      Long startingTime = System.now().getTime(); 
  Integer delayInMilliseconds = 20000; // One-second delay
while (System.now().getTime() - startingTime < delayInMilliseconds)  {

        // Do nothing until desired delay has passed
 }

      //Then My Code

因此,如果我等待的时间超过此时间,我会收到超时错误。如果我等待的时间不够长,我的更新语句就会失败。是否可以检查托管包操作是否已完成。我在调试器中看不到代码。它所说的只是 VFRemoting。

触发器不在并行线程中执行,因此除了消耗 CPU 时间限制外,等待什么都不做。

您无法控制 Apex 触发器在平台上的执行顺序。相反,您将不得不重构您的代码。在不知道托管代码正在做什么的情况下,最简单的方法是将您的代码推送到一个单独的事务中。您可以通过 @future 方法、Queueable Apex 或平台事件,甚至可能通过编写更改事件触发器来执行此操作。

但是,如果您的代码在该单独事务中所做的更改导致托管触发器再次 运行ning 并更改您的更改,这将无法解决问题。您可能需要详细了解托管包 运行 的确切操作顺序,这可能需要咨询供应商,因为您看不到代码。解决托管触发器通常非常具有挑战性。