Я не вижу способа сделать это с помощью всего лишь api, и даже с встроенным процессом, который делает это без дополнительных запросов и переменных процесса, немного сложно.
Один из способов решения этого вопроса - ввести «контекстный» объект, который либо управляется инфраструктурой инъекции зависимостей, либо как простой ThreadLocal
. Этот контекст будет содержать как входные, так и выходные параметры и может быть доступен при запуске процесса и из сервисных задач.
class Context {
private String address;
private List<String> products;
public Context(String address) { this.address = address; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
public List<String> getProducts() { return products; }
public void setProducts(List<String> products) { this.products = products; }
}
class CurrentContext {
private static final ThreadLocal<Context> value = new ThreadLocal<>();
public static void set(Context context) {
value.set(context);
}
public static Context get() {
return value.get();
}
public static void remove() {
value.remove();
}
}
class GetProductList implements JavaDelegate {
@Override
public void execute(final DelegateExecution execution) {
final Context context = CurrentContext.get();
context.setProducts(getProducts(context.getAddress()));
}
}
Перед началом процесса с использованием Java API вы бы инициализировать контекст, а затем получить результаты из контекста:
final Context context = new Context("address");
CurrentContext.set(context);
try {
runtimeService.startProcessInstanceById(...);
return context.getProducts();
} finally {
CurrentContext.remove();
}
Мы используем эту модель (с контекстом, управляемым обычаем весна scope) довольно успешно.
Куда уходит последний фрагмент кода. Я только начинаю и учась на части REST и исследую другую область. – Swaraj
@Swaraj Извините, я пропустил требование об использовании остального api, в приведенном выше примере используется java api встроенного процесса. –
Спасибо, это поможет при работе с API Camunda. Но одна вещь, которую я узнал, не может получить фактический ответ от REST API, вместо этого нужно использовать processInstanceID/Business Key для получения более подробной информации из экземпляра процесса с использованием REST API. – Swaraj