我对开源有很多疑问
flowable
。
这很重要
所有情况的共同点是,不应因 xml 更改而重新启动服务器。
可能吗?
flowable可以在不改变BPMN的xml的情况下添加任务吗? 我想在不重新启动服务器的情况下添加正在处理的服务任务。
如果过程中被拒绝,所有的历史记录都会被累积吗? 如果Ben拒绝,则流程重置,但历史记录会累积。 汤姆批准,肯批准,本拒绝,然后这个过程首先从汤姆开始。
我真的很感谢你的帮助。谢谢!!!
我运行了演示并检查了任务逻辑,我看到了表结构。
但是理解上面的内容还是不够。
这是我在 Spring Boot 应用程序中的 WorkflowService 源代码
@Slf4j
@RestController
public class ArticleWorkflowController {
@Autowired
private ArticleWorkflowService service;
@PostMapping("/submit")
public void submit(@RequestBody Article article) {
service.startProcess(article);
}
@PostMapping("/restart")
public void restart(@RequestBody Article article) {
service.restartProcess(article);
}
@GetMapping("/tasks")
public List<Article> getTasks(@RequestParam String assignee) {
return service.getTasks(assignee);
}
@PostMapping("/review")
public void review(@RequestBody Approval approval) {
service.submitReview(approval);
}
@GetMapping("/history")
public List<HistoricActivityInstance> getHistoryList() {
return service.getHistory();
}
}
@Slf4j
@RequiredArgsConstructor
@Service
public class ArticleWorkflowService {
private final RuntimeService runtimeService;
private final ProcessEngine processEngine;
private final TaskService taskService;
@Transactional
public void startProcess(Article article) {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("author", article.getAuthor());
variables.put("url", article.getUrl());
runtimeService.startProcessInstanceByKey("articleReview", variables);
log.info("task size is {}", taskService.createTaskQuery().list().size());
}
@Transactional
public void restartProcess(Article article) {
Map<String, Object> variables = new HashMap<>();
variables.put("author", article.getAuthor());
variables.put("url", article.getUrl());
//
//
//
// runtimeService.startProcessInstanceByKey("articleReview", variables);
}
@Transactional
public List<Article> getTasks(String assignee) {
List<Task> tasks = taskService.createTaskQuery()
.taskCandidateGroup(assignee)
.list();
return tasks.stream()
.map(task -> {
Map<String, Object> variables = taskService.getVariables(task.getId());
return new Article(
task.getId(), (String) variables.get("author"), (String) variables.get("url"));
})
.collect(Collectors.toList());
}
@Transactional
public void submitReview(Approval approval) {
Map<String, Object> variables = new HashMap<>();
variables.put("approved", approval.isStatus());
taskService.complete(approval.getId(), variables);
}
@Transactional(readOnly = true)
public List<HistoricActivityInstance> getHistory() {
HistoryService historyService = processEngine.getHistoryService();
return historyService.createHistoricActivityInstanceQuery()
.list();
}
}