5

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

提前致谢。

4

3 回答 3

5

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

于 2013-05-29T00:10:15.400 回答
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
于 2013-05-29T15:03:07.353 回答
1

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

于 2013-05-28T16:08:30.407 回答