GET https://localhost:8080/asynchronous_operation
ce106553-fe04-405b-b452-096928632c30
GET https://localhost:8080/asynchronous_operation?iop_deferred_operation_id=ce106553-fe04-405b-b452-096928632c30
|
Return Code
|
Meaning
|
|---|---|
|
202
|
Operation running.
|
|
500
|
Operation failed.
|
|
410
|
Operation does not exist, or its results have been deleted.
|
|
200
|
Operation successful. Results appear in response body.
|
Object realExecute(Map<String, Object> parameters);
Object getResult(IImmutableEntityTransaction transaction, Map<String, Object> parameters);
String getOperationFullIdentifier();
void cleanUp(UUID operationUUID);
package com.servicemax.core.asynchronous_operation
import java.util.Map
import com.intalio.core.data.api.IImmutableEntityTransaction;
import com.intalio.core.data.api.DeferredOperationUtils
class AsynchronousOperationExample extends AsynchronousOperation {
@Override
public Object realExecute(Map<String, Object> parameters) {
//emulates processing
sleep(1000 * 60);
//writes the result to a file
def file = new File(getFileName(parameters))
file.text = ''' This is the result'''
return null;
}
@Override
public Object getResult(IImmutableEntityTransaction transaction, Map<String, Object> parameters) {
//reads the result from the file written in realExecute
def file = new File(getFileName(parameters))
def lines = file.readLines()
//cleanup the result
DeferredOperationUtils.cleanupOperation(transaction, parameters);
return lines.join("\n")
}
@Override
public String getOperationFullIdentifier() {
return "io_asynchronous_operation_example";
}
private String getFileName(Map<String, Object> parameters) {
UUID operationUUID = DeferredOperationUtils.getOperationUUID(parameters)
getFileName(operationUUID)
}
private String getFileName(UUID operationUUID) {
"result_${operationUUID}"
}
}
|
|
When this execute method runs, no transaction is attached to it, so be sure to create an execution environment inside which any record can be accessed.
|
package com.servicemax.core.some_package
import com.servicemax.core;
\public class MyLauncherOperation {
@Override
public Object execute(Map<String, Object> parameters) {
\
//do something with the received parameters, add parameters,etc
def newParameters = processParameters(parameters);
// call another Operation asynchronously
Max.currentTransaction.deferOperation("my_deferred_operation_a",
newParameters, false, 0);
return "true";
}
@Override
public Map<String, Object> processParameters( Map<String, Object> parameters) {
//do something, add parameters, etc
return parameters;
}
}