我正在关注一个例子REST 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
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消息中,应该将其发送回进程启动器。
答案 0 :(得分:1)
我相信我昨天在Camunda论坛上看到了一个类似的问题。 无论哪种方式,我相信问题和答案是一样的。
让我确保理解你的要求。 1.您正在使用Java API启动实例 2.您的流程定义包括一个进行REST调用的服务任务。 3.您的JavaDelegate类使用REST调用的响应填充“Result”流程变量。 4.您想要捕获响应。
如果我已经捕获了您的要求,那么我认为问题在于您对BPMN引擎如何工作的理解。
使用您建模的流程,流程实例将启动,进行REST调用,填充Response变量,然后立即结束。
由于您当前已对流程建模,因此您无法在流程执行期间捕获响应。
您的选择: 1.将模型更改为使用某种消息服务发送“结果”,或添加等待状态以便检索响应。 2.使用历史查询REST API(或等效的Java API)从已完成的实例中检索Result有效内容。
这实际上取决于您使用的最合适的选项。
干杯, 格雷格