在 spring boot 中完成 camunda 用户任务

Complete camunda user task on springboot

我有一个 运行 使用 spring 启动的 Camunda 服务器,我可以在我的本地主机上点击它的 API 来启动一个进程,完成用户任务等。 我正在寻找一种从 Camunda 服务器内完成用户任务的方法。我找到了一种启动流程的方法:

runtimeService.startProcessInstanceById(processName, variables);

但是,我找不到有关如何完成流程的信息。如果我使用其余的 API 它将分两步完成:

如何从 java 代码(而不是 API)中执行相同的操作?因为通过 Rest API 调用自身功能而不是调用代码很奇怪。我相信 Rest API 正在调用系统中的一些代码,我想直接使用它而不是使用 API。我搜索了 Camunda 文档,但没有找到任何内容。

我的情况是,当接收到特定消息时,此 Camunda 服务器将侦听消息代理并启动进程或完成用户任务等。

我找到方法了,我可以这样做:

public void completeUserTask(String processInstanceId, String taskName, Map<String, Object> variables) {
    // taskService is instance of org.camunda.bpm.engine.TaskService
    String taskId = taskService.createTaskQuery()
            .processInstanceId(processInstanceId)
            .list()
            .stream()
            .filter(task -> task.getTaskDefinitionKey().equals(taskName))
            .findFirst()
            .orElseThrow(() -> new RuntimeException(
                    String.format("Could not find task with name %s on processInstanceId %s",
                            taskName,
                            processInstanceId))).getId();
    taskService.complete(taskId, variables);
}

这将是一个更好的解决方案,因为它在数据库级别进行过滤,而不是遍历客户端上找到的所有任务。它也更简单,只考虑活动任务。

String taskId = taskService.createTaskQuery()
            .processInstanceId(processInstanceId)
            .taskDefinitionKey(taskName)
            .active().singleResult().getId();