BPM API
可以使用 Flowable API 与流程引擎交互。API 支持以编程的方式启动流程实例、完成任务以及执行各种查询,例如,获取用户的所有任务或者获取流程定义中激活的实例。
有两种方式获取 Flowable 服务:
-
使用
ProcessEngines
作为起点:ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); RuntimeService runtimeService = processEngine.getRuntimeService(); RepositoryService repositoryService = processEngine.getRepositoryService(); TaskService taskService = processEngine.getTaskService();
-
在 bean 中直接注入服务,因为服务也是作为 Spring bean 注册的:
@Component("sample_MyCustomBean") public class MyCustomBean { @Autowired private RuntimeService runtimeService;
扩展组件提供 BpmTaskService
服务,该服务继承自 Flowable 中的 TaskService
。下面 有使用示例。
编程式启动流程
下面示例中,流程在常规实体编辑界面中使用 RuntimeService
编程式启动:
@Autowired
private RuntimeService runtimeService;
@Subscribe("commitAndCloseBtn")
public void onCommitAndCloseBtnClick(Button.ClickEvent event) {
Customer customer = getEditedEntity();
String name = customer.getName();
Map<String, Object> params = new HashMap<>();
params.put("customer", customer); (1)
params.put("name", name); (2)
runtimeService.startProcessInstanceByKey( (3)
"new-customer", (4)
params); (5)
}
1 | 将编辑实体作为流程变量传入,使用 customer 变量名。 |
2 | 将客户的名称也作为字符串类型的流程变量传入。 |
3 | RuntimeService 用于启动流程。 |
4 | new-customer 是流程定义键值。 |
5 | 传入流程变量 map。 |
获取用户任务列表
下面示例展示如何获取当前认证用户的激活任务列表:
@Autowired
private TaskService taskService;
@Autowired
private CurrentAuthentication currentAuthentication;
public List<Task> getCurrentUserTasks() {
return taskService.createTaskQuery() (1)
.processDefinitionKey("approval") (2)
.taskAssignee(currentAuthentication.getUser().getUsername()) (3)
.active()
.orderByTaskCreateTime()
.desc()
.list();
}
1 | 使用 TaskService 获取任务列表。 |
2 | 搜索 approval 流程的任务。 |
3 | 搜索分配给当前用户的任务。 |
获取流程实例列表
下面示例展示如何获取与指定 Order
实体相关的 approval
定义的流程实例列表:
@Autowired
private RuntimeService runtimeService;
public List<ProcessInstance> getActiveProcessInstances() {
return runtimeService.createProcessInstanceQuery() (1)
.processDefinitionKey("approval") (2)
.variableValueEquals("orderId", "N-1") (3)
.active()
.list();
}
1 | 使用 RuntimeService 获取任务列表。 |
2 | 搜索 approval 流程的实例。 |
3 | 通过指定的 orderId 流程变量搜索流程实例。 |
使用 BpmTaskService
BpmTaskService
继承自 TaskService
并添加一个用于完成带有输出的任务:
void completeTaskWithOutcome(String taskId, String outcomeId, Map<String, Object> processVariables);
可以在 Spring 组件中注入该服务:
@Autowired
private BpmTaskService bpmTaskService;
或者使用 ProcessEngines
类:
BpmTaskService bpmTaskService = (BpmTaskService) ProcessEngines
.getDefaultProcessEngine()
.getTaskService();
本页是否有帮助?
感谢您的反馈