2015-10-21 2 views
2

Я следую пример REST Service TaskREST Service Task

я начинаю процесс двигателя с помощью

val configuration = new StandaloneProcessEngineConfiguration(); configuration.setProcessEngineName(processEngineName) 

Вот мой BPMN файл сниппет

<process id="approve-loan" name="Loan Approval" isExecutable="true"> 
<serviceTask id="process_task" activiti:class="com.noggin.bpm.loan.ProcessRequestDelegate" activiti:exclusive="true" name="compute&#xA;Task"> 
    <extensionElements> 
    <activiti:connector> 
     <activiti:connectorId>http-connector</activiti:connectorId> 
     <activiti:inputOutput> 
     <activiti:inputParameter name="url">http://127.0.0.1:5004/Hello/sayhello</activiti:inputParameter> 
     <activiti:inputParameter name="method">POST</activiti:inputParameter> 
     <activiti:inputParameter name="headers"> 
      <activiti:map> 
      <activiti:entry key="Accept">application/json</activiti:entry> 
      <activiti:entry key="Content-type">application/json</activiti:entry> 
      </activiti:map> 
     </activiti:inputParameter> 
     <activiti:inputParameter name="payload"><![CDATA[{"bundleId":"101","script":"def greet = {\n  \"Hello World\"\n  }\n  greet()"}]]></activiti:inputParameter> 
     <activiti:outputParameter name="isActive">Result</activiti:outputParameter> 
     </activiti:inputOutput> 
    </activiti:connector> 
    </extensionElements> 

Я начинаю процесс, как этот

val processEngine = ProcessEngines.getProcessEngine(processEngineName) 
    val runtime   = processEngine.getRuntimeService 
    val processInstance = runtime.startProcessInstanceByKey(processInstanceKey) 

Успешно, я могу отправить полезную нагрузку (http://127.0.0.1:5004/Hello/sayhello).

Вопрос: как получить ответное сообщение из местоположения, в котором я начал экземпляр. Поскольку ответ будет в сообщении Json, которое должно быть отправлено обратно инициатору процесса.

ответ

1

Я считаю, что вчера я увидел подобный вопрос от вас, отправленный на форум Camunda. В любом случае, я считаю, что вопрос и ответ такие же.

Позвольте мне убедиться, что я понимаю, о чем вы просите. 1. Вы запускаете экземпляр с использованием Java API 2. В вашем определении процесса имеется одна служебная задача, которая вызывает вызов REST. 3. Класс JavaDelegate заполняет переменную процесса «Результат» ответом вызова REST. 4. Вы хотите захватить ответ.

Если у меня есть ваше требование, я думаю, что проблема заключается в том, как вы думаете, как работает двигатель BPMN.

В процессе, когда вы его смоделировали, экземпляр процесса запустится, запустит вызов REST, заполнит переменную Response и сразу же закроется.

Как вы в настоящее время смоделировали процесс, вы не сможете зафиксировать ответ во время выполнения процесса.

Ваши варианты: 1. Измените свою модель, чтобы либо отправить «Результат», используя какую-либо службу сообщений, либо добавить состояние ожидания, в котором вы можете получить ответ. 2. Используйте исторический запрос REST API (или эквивалентный Java API) для извлечения полезной нагрузки результата из заполненного экземпляра.

Это действительно зависит от вашего варианта использования в отношении наиболее подходящего варианта.

Cheers, Greg