Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Want time delay before function call in apex code

I want time delay before function call in apex code. I already created one delay method but it is not working as per expectation. So, is there any way to get this working.

Thanks in advance.

like image 464
Yogini Mane Avatar asked May 28 '13 12:05

Yogini Mane


People also ask

How do you call a future method in Apex?

To define a future method, simply annotate it with the future annotation, as follows. Methods with the future annotation must be static methods, and can only return a void type. The specified parameters must be primitive data types, arrays of primitive data types, or collections of primitive data types.

Can we call trigger from Apex?

You can call an Apex class from Trigger as well. Triggers are called when a specified event occurs and triggers can call the Apex class when executing. Following is the sample code that shows how a class gets executed when a Trigger is called.

How do you call a function in Apex?

To call the apex method in the lightning web component, First, we have to create the apex class and add the @AuraEnabled method at the first line, i.e., before starting the method. To call it from Wire Service, the method should be cacheable. Hence, add cacheable=true in @AuraEnabled.


2 Answers

Probably a better way to do this would be to break up your Apex code such that the part you want to execute later is in a separate method. You can then call this method from another method that has an @future annotation, or use the Apex Scheduler to schedule that code for a future time. Either of these methods will cause the code to be executed asynchronously after your original method has completed (the @future method is easier to implement but the scheduler method has the advantage of running at a predictable time).

like image 108
amrcn_werewolf Avatar answered Nov 15 '22 08:11

amrcn_werewolf


If you need something like the sleep() function, one way to do it is to make a call to a http service which will sleep a requested amount of time. This is fairly simple to do, and there are existing publicly available services for it, for example the one at http://1.cuzillion.com/bin/resource.cgi.

First you have to Configure a new Remote Site in SalesForce (Security Controls -> Remote Site Settings), name it however you want but make sure the Remote Site URL matches the above URL, and that the "Active" checkbox is checked.

After that, you can define your method in code like so:

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');
}

Running it yields:

sleep(1);
-> 08:46:57.242 (1242588000)|USER_DEBUG|[10]|DEBUG|Duration: 1202ms
like image 44
casedeck Avatar answered Nov 15 '22 09:11

casedeck