通过REST API调用执行Flowable工作流并得到结果



我正在使用REST API调用启动并完成Flowable进程。那么如何才能等待并获得最终的"胜利"呢;ServiceTask";结果将其发回给调用者?

基本流程.bpmn20.xml:

<process id="basicprocess" name="Basic Process" isExecutable="true">
<startEvent id="startEvent"/>
<sequenceFlow sourceRef="startEvent" targetRef="getInput"/>
<userTask id="getInput" name="Get input from user" />
<sequenceFlow sourceRef="getInput" targetRef="decision"/>
<exclusiveGateway id="decision"/>
<sequenceFlow sourceRef="decision" targetRef="firstServiceTask">
<conditionExpression xsi:type="tFormalExpression">
<![CDATA[
${number>100}
]]>
</conditionExpression>
</sequenceFlow>
<sequenceFlow  sourceRef="decision" targetRef="secondServiceTask">
<conditionExpression xsi:type="tFormalExpression">
<![CDATA[
${number<=100}
]]>
</conditionExpression>
</sequenceFlow>
<serviceTask id="firstServiceTask" name="Number is greater than predefined target"
flowable:class="demo.service.tasks.FirstServiceTask"/>
<sequenceFlow sourceRef="firstServiceTask" targetRef="greaterEnd"/>
<serviceTask id="secondServiceTask" name="Number is less than predefined target"
flowable:class="demo.service.tasks.SecondServiceTask"/>
<sequenceFlow sourceRef="secondServiceTask" targetRef="lesserEnd"/>
<endEvent id="greaterEnd"/>
<endEvent id="lesserEnd"/>
</process>

REST API调用:

@RestController
@SuppressWarnings("rawtypes")
public class DefinitionsController {
@Autowired
private RepositoryService mRepositoryService;
@Autowired
private RuntimeService mRuntimeService;
@Autowired
private TaskService mTaskService;
@PostMapping("/start-service")
public String startService(@RequestBody String input) {
Integer request = Integer.parseInt(input);
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("number", request);
ProcessInstance instance = mRuntimeService.startProcessInstanceByKey("basicprocess", variables);
Task userTask = mTaskService.createTaskQuery().processInstanceId(instance.getId()).taskDefinitionKey("getInput").singleResult();
mTaskService.complete(userTask.getId());
// How can I invoke the result of FirstServiceTask to return as a response value     
// result = "FirstServiceTask has been executed";
return "FirstServiceTask has been executed"
}
}

服务任务:

public class FirstServiceTask implements JavaDelegate{
@Override
public void execute(DelegateExecution execution) {
System.err.println("Came in first service task");
// Need to invoke this result vale from REST API call for passing to caller as result
String result = "FirstServiceTask has been executed";
}
}

一旦完成第一个任务,就没有等待阶段。因此,所有序列流和服务任务都在同一事务中执行。在您的java委托中,您可以通过设置结果

execution.setVariable("varName", result);

然后在您的rest服务中,一旦您的任务完成,您就可以从runtimeService检索流程变量。

最新更新