想要在顶点代码中调用函数之前的时间延迟

时间:2013-05-28 12:20:06

标签: salesforce apex-code

我希望在顶点代码中调用函数之前有时间延迟。我已经创建了一个延迟方法,但它没有按预期工作。那么,有没有办法让这个工作。

提前致谢。

3 个答案:

答案 0 :(得分:4)

执行此操作的更好方法可能是分解您的Apex代码,以便稍后要执行的部分采用单独的方法。然后,您可以从另一个具有@future annotation的方法调用此方法,或使用Apex Scheduler为将来的时间安排该代码。这两种方法都会导致代码在原始方法完成后异步执行(@future方法更易于实现,但调度程序方法具有在可预测的时间运行的优势)。

答案 1 :(得分:4)

如果您需要类似sleep()函数的方法,一种方法是调用一个http服务,该服务将睡眠所需的时间。这很简单,并且现有公共服务,例如http://1.cuzillion.com/bin/resource.cgi的服务。

首先,您必须在SalesForce中配置新的远程站点(安全控制 - >远程站点设置),根据需要为其命名,但要确保远程站点URL与上述URL匹配,并且“活动”复选框是检查。

之后,您可以在代码中定义您的方法,如下所示:

public static void sleep(Integer sleepSeconds) {
    Long startTS = System.currentTimeMillis();
    HttpRequest req = new HttpRequest();
    req.setEndpoint('http://1.cuzillion.com/bin/resource.cgi?sleep=' + sleepSeconds);
    req.setMethod('GET');
    Http http = new Http();
    HTTPResponse res = http.send(req);
    Long duration = System.currentTimeMillis() - startTS;
    System.debug('Duration: ' + duration + 'ms');
}

运行它会产生:

sleep(1);
-> 08:46:57.242 (1242588000)|USER_DEBUG|[10]|DEBUG|Duration: 1202ms

答案 2 :(得分:1)

您可以在Visualforce中轻松完成此操作。使用apex:actionPoller并将timeout属性设置为您想要的间隔。或者在JavaScript中使用window.setTimeout(function,1000)。然后,您可以使用JavaScript中的函数JavaScript Remotingapex:actionFunction来回调Apex。