jBPM Как получить результаты WorkItemHandler - PullRequest
1 голос
/ 24 февраля 2012

У меня есть сервисный узел, который будет запускаться WorkItemHandler.

В конце executeWorkItem() Я делаю:

manager.completeWorkItem(workItem.getId(), resultMap);

Как я могу получить доступ из других мест к resultMap? Где находится?

Ответы [ 3 ]

2 голосов
/ 27 февраля 2012

Что бы вы хотели с этим сделать? Где бы вы хотели получить к нему доступ?

Эти результаты передаются в экземпляр процесса, поэтому в задаче, которая использовалась для запуска этой службы, вы можете отобразить эти результаты обратно в переменные процесса, чтобы их можно было использовать в остальной части вашего экземпляра процесса. Например, если ваш обработчик возвращает результат с именем «result» и вы сопоставляете этот параметр результата с переменной (используя сопоставление результатов), вы можете затем использовать эту переменную в сценариях или решениях или сопоставить его как входные данные для следующей службы и т. д.

Kris

1 голос
/ 05 октября 2014

Просто чтобы уточнить, что сказал Крис (кстати, Kris & co, хорошая работа на 6.1) ...

 variable = ((WorkflowProcessInstance) processInstance).getVariable("variableName");

И

 ((WorkflowProcessInstance) processInstance).setVariable("variableName", variable);

Вам нужно разыгратьэкземпляр процесса, который вы возвращаете из KieSession для ввода WorkflowProcessInstance, чтобы использовать API переменной.

См. http://docs.jboss.org/jbpm/v6.1/userguide/jBPMBPMN2.html#d0e3371

0 голосов
/ 25 марта 2012

Самый простой способ вернуть результаты из WorkItemHandler - сопоставить HashMap, содержащий ключи результата, с ранее определенной переменной процесса.Вы можете сделать это в представлении «Сопоставление результатов».«Параметр» должен быть ключом HashMap, а «Переменная» - это требуемая переменная процесса.

Вот пример.

WorkItemHandler:

Map<String, Object> results = new HashMap<String, Object>();
results.put("price", price);
wim.completeWorkItem(wi.getId(), results);

Сейчассопоставьте переменные в представлении процесса, и ваше определение процесса (в представлении TextEditor) должно выглядеть следующим образом:

<dataOutputAssociation>
    <sourceRef>_11_priceOutput</sourceRef>
    <targetRef>myFlowPriceVariable</targetRef>
</dataOutputAssociation>
...