‘flowable’可以在不改变BPMN的xml的情况下更换负责人或者添加任务吗?

问题描述 投票:0回答:1

我对开源有很多疑问

flowable
。 这很重要 所有情况的共同点是,不应因 xml 更改而重新启动服务器。

可能吗?

  1. Flowable可以把负责人换成其他人吗? 这是我的过程。 我想在我的过程中把肯交给罗伊。 enter image description here

  2. flowable可以在不改变BPMN的xml的情况下添加任务吗? 我想在不重新启动服务器的情况下添加正在处理的服务任务。 enter image description here

  3. 如果过程中被拒绝,所有的历史记录都会被累积吗? 如果Ben拒绝,则流程重置,但历史记录会累积。 汤姆批准,肯批准,本拒绝,然后这个过程首先从汤姆开始。 enter image description here

我真的很感谢你的帮助。谢谢!!!

我运行了演示并检查了任务逻辑,我看到了表结构。

但是理解上面的内容还是不够。

enter image description here

这是我在 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();

  }
}
spring-boot bpmn flowable
1个回答
0
投票
  1. 您可以使用 TaskService#setAssignee 方法更改特定任务的受让人。但是,它不会更改图表中的标签。
  2. 在不更改 XML 的情况下,您无法轻松地在流程中引入新步骤。理论上,该功能可以通过“自动添加任务侦听器”来完成。但是,在这种情况下,您也需要重新发布 BPMN 图。我建议不要重新启动服务器,而是使用 RepositoryService 或相应的 REST API 来创建新部署并发布更新的 BPMN 文件,而无需重新启动服务器。 历史记录将包含所有已执行并保存到数据库的活动。由于您的流程中有用户任务,这可能会导致用户任务多次出现。注意:图中使用独占网关会很好。这强调了任务之后正在发生一个决定。
© www.soinside.com 2019 - 2024. All rights reserved.