我在 spring-boot 中使用 Flowable 6.4.1 来创建进程并从我的 java 代码运行,但要求是不使用任何 xml,因此我遇到了封锁。
我有一个用户任务,从用户那里获取输入,根据该输入,调用相应的服务任务。
下面是我要做的一个简短的例子:
基本流程.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>
上面,XML 显示了这个过程,我正在使用 REST API 开始这个过程下面是控制器:
定义Controller.java:
@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());
return "ProcessInstance id is "+instance.getProcessInstanceId();
}
}
FirstServiceTask.java:
public class FirstServiceTask implements JavaDelegate{
@Override
public void execute(DelegateExecution execution) {
System.err.println("Came in first service task");
}
}
sysoutSecondServiceTask.java
语句除外。
REST RESPONSE:我在控制台中打印了相应服务任务的 processInstance Id 和 sysout 语句。
从 xml 连接服务任务类非常容易,但是如果我不使用 XML,我将需要使用flowable-modeler
FLOWABLE 的 api 创建相同的进程。
所以,基本上我想从我的 java 代码中控制这些服务任务,为了做到这一点,我如何连接使用flowable-modeler
我的 java 代码创建的服务任务?
我已经浏览了文档,但只找到了 xml 方式。