Hi,The Receive Task can be waked up by a signal sent by code or api rest.The code (current release 5.13) implements both :- the simple service ( RuntimeService.signal(String executionId) ) - the extended service ( RuntimeService.signal(String executionId, Map<String,Object> processVariables) ) In the new api-rest is exposed only the simple version and not the extended while in the legacy rest-api was exposed the complex too.Could you expose the complex version in the next version?I inspected the related class of the 5.13-alf-20130918 version ( org.activiti.rest.api.runtime.process.ExecutionResource.java ) and seems that it's enought add just the call :
@Put
public ExecutionResponse performExecutionAction(ExecutionActionRequest actionRequest) {
if(!authenticate()) {
return null;
}
Execution execution = getExecutionFromRequest();
if(ExecutionActionRequest.ACTION_SIGNAL.equals(actionRequest.getAction())) {
if(actionRequest.getVariables() != null) { // <—– ADDED
ActivitiUtil.getRuntimeService().signal(execution.getId(), getVariablesToSet(actionRequest)); // <—– ADDED
} else { // <—– ADDED
ActivitiUtil.getRuntimeService().signal(execution.getId());
} // <—– ADDED
} else if(ExecutionActionRequest.ACTION_SIGNAL_EVENT_RECEIVED.equals(actionRequest.getAction())) {
if(actionRequest.getSignalName() == null) {
throw new ActivitiIllegalArgumentException("Signal name is required");
}
if(actionRequest.getVariables() != null) {
ActivitiUtil.getRuntimeService().signalEventReceived(actionRequest.getSignalName(), execution.getId(), getVariablesToSet(actionRequest));
} else {
ActivitiUtil.getRuntimeService().signalEventReceived(actionRequest.getSignalName(), execution.getId());
}
} else if(ExecutionActionRequest.ACTION_MESSAGE_EVENT_RECEIVED.equals(actionRequest.getAction())) {
if(actionRequest.getMessageName() == null) {
throw new ActivitiIllegalArgumentException("Message name is required");
}
if(actionRequest.getVariables() != null) {
ActivitiUtil.getRuntimeService().messageEventReceived(actionRequest.getMessageName(), execution.getId(), getVariablesToSet(actionRequest));
} else {
ActivitiUtil.getRuntimeService().messageEventReceived(actionRequest.getMessageName(), execution.getId());
}
} else {
throw new ActivitiIllegalArgumentException("Invalid action: '" + actionRequest.getAction() + "'.");
}
// Re-fetch the execution, could have changed due to action or even completed
execution = ActivitiUtil.getRuntimeService().createExecutionQuery().executionId(execution.getId()).singleResult();
if(execution == null) {
// Execution is finished, return empty body to inform user
setStatus(Status.SUCCESS_NO_CONTENT);
return null;
} else {
return getApplication(ActivitiRestServicesApplication.class).getRestResponseFactory()
.createExecutionResponse(this, execution);
}
}