Flowable 常用类及其作用

news/2024/10/14 23:01:11
img

ProcessEngineConfiguration 和 ProcessEngine

  • ProcessEngineConfiguration:流程引擎配置类。
  • ProcessEngine:流程引擎。

ProcessEngineConfiguration 封装 ProcessEngine 的配置信息,ProcessEngine 由具体的 ProcessEngineConfiguration 实例化。

public class HolidayRequest {public static void main(String[] args) {ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration().setJdbcUrl("jdbc:h2:mem:flowable;DB_CLOSE_DELAY=-1").setJdbcUsername("sa").setJdbcPassword("").setJdbcDriver("org.h2.Driver").setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);ProcessEngine processEngine = cfg.buildProcessEngine();}
}

如上所示,可通过 ProcessEngineConfiguration 配置数据源等。

RepositoryService、Deployment 和 ProcessDefinition

  • RepositoryService:资源管理类。
  • Deployment:流程部署信息。
  • ProcessDefinition:流程定义。

有了 ProcessEngine,里面还没有流程,具体来说就是还没有流程定义。

平时通过绘制的流程图来定义流程,绘制的流程图底层是一个 XML(BPMN 2.0 XML)。

有了 XML,还需要将它部署到引擎中。将流程定义部署至 Flowable 引擎,需要使用 RepositoryService,其可以从 ProcessEngine 对象获取。

RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment().addClasspathResource("holiday-request.bpmn20.xml").deploy();

如上,使用 RepositoryService,按指定的 XML 文件创建一个新的部署 (Deployment),并调用 deploy() 方法完成流程定义的部署。

部署好流程后,可通过 RepositoryService 获取流程定义(ProcessDefinition)。

ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
System.out.println("Found process definition : " + processDefinition.getName());

RuntimeService 和 ProcessInstance

  • RuntimeService:流程运行管理类。
  • ProcessInstance:流程实例。

有了流程定义之后,可以使用 RuntimeService 启动一个流程实例。一个流程定义可以启动多个流程实例(ProcessInstance),流程定义相当于流程实例的蓝图。

RuntimeService runtimeService = processEngine.getRuntimeService();Map<String, Object> variables = new HashMap<String, Object>();
variables.put("employee", employee);
variables.put("nrOfHolidays", nrOfHolidays);
variables.put("description", description);ProcessInstance processInstance =runtimeService.startProcessInstanceByKey("holidayRequest", variables);

同时注意到启动流程实例时,传入了一个 Map,其中保存着一些字段信息。这样这些字段信息就和这个流程实例关联起来了。

TaskService 和 Task

  • TaskService:任务管理类。
  • Task:审批任务。

启动流程实例后,会生成对应的审核任务(Task)记录。可使用 TaskService 查询任务。

TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("managers").list();

查到任务后,可以将其完成,也就是完成审核。

// 选择任务
System.out.println("Which task would you like to complete?");
int taskIndex = Integer.valueOf(scanner.nextLine());
Task task = tasks.get(taskIndex - 1);// 确认提示
Map<String, Object> processVariables = taskService.getVariables(task.getId());
System.out.println(processVariables.get("employee") + " wants " +processVariables.get("nrOfHolidays") + " of holidays. Do you approve this?");// 封装信息到 Map
boolean approved = scanner.nextLine().toLowerCase().equals("y");
variables = new HashMap<String, Object>();
variables.put("approved", approved);// 完成审核
taskService.complete(task.getId(), variables);

HistoryService 和 HistoricActivityInstance

  • HistoryService:历史管理类。
  • HistoricActivityInstance:历史活动实例。

Flowable 可以自动存储所有流程实例的审计数据或历史数据。

如果希望显示流程实例已经执行的时间,可以从 ProcessEngine 获取 HistoryService,查询历史活动(historical activities)信息。

HistoryService historyService = processEngine.getHistoryService();
List<HistoricActivityInstance> activities =historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstance.getId()).finished().orderByHistoricActivityInstanceEndTime().asc().list();for (HistoricActivityInstance activity : activities) {System.out.println(activity.getActivityId() + " took "+ activity.getDurationInMillis() + " milliseconds");
}

参考:

Flowable BPMN 用户手册 (v 6.3.0)

BV1oQ4y1J76o

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71638.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

win7证书问题

安装证书即可, https://www.microsoft.com/pkiops/Docs/Repository.htm留待后查,同时方便他人 联系我:renhanlinbsl@163.com

第八次作业

1、利用宽字节注入实现“库名-表名”的注入过程,写清楚注入步骤; 爆库名: 在宽字节注入框输入kobe%df union select database(),version()#语句爆库名和版本号burp抓包,将URL编码后的%的%25中的数字25删掉爆出库名爆表名: 在宽字节注入框输入kobe%df union select 1,table_…

Apache Kafka各Api模块说明

Kafka API微信公众号:阿俊的学习记录空间 小红书:ArnoZhang wordpress:arnozhang1994 博客园:arnozhang CSDN:ArnoZhang1994Kafka 包含五个核心 API:Producer API 允许应用程序将数据流发送到 Kafka 集群中的topic。 Consumer API 允许应用程序从 Kafka 集群中的topic读取…

IDEA如何用maven打包(界面和命令两种方式)

前言 我们在使用IDEA开发时,如果是springboot项目的话,一般是用maven来管理我们的依赖的。然后,当我们开发完成之后,就需要打包部署了。那么,我们应该如何打包呢? 如何打包(jar包) 首先,我们点击右侧的maven侧边栏,然后点击里面的【clean】,先将以前的包清理掉。然后…

odoo18.0 POS微信支付

我们在前面一节中介绍了如何在销售点(Point of Sale)中使用支付宝进行收款/退款,本节我们将介绍如何使用微信支付完成同样的操作。 模块安装 在设置-POS设置-支付终端中开启微信支付:开启之后,系统会自动把微信支付模块安装上,同样地,POS微信的设置也复用的网站应用中的微…

传统题

题面$\quad $ 我们记 \(F(x)\) 为 \(x\) 为真的方案数,\(len\) 为序列最长连续相同子段长度。 $\quad $ 那么就有: \[ans=\sum _{i=1}^{n}F(len=i)*i \]$\quad $ 也就是: \[\sum _{i=1}^{n}F(len>=i) \]$\quad $ 这里可以画个图,发现结果形如三角形,即可得出上式。再改…

AE软件下载安装

Adobe AE安装步骤 2.1准备工作 https://pan.baidu.com/s/1Hdl1gGIpi4LH9zxUflv5DA?pwd=oap4 下载Adobe After Effects安装包并解压。 确保计算机满足软件安装的配置要求。 2.2安装过程 双击安装程序:双击解压后的文件夹中的 set-up安装程序。 更改安装位置:在安装界面点击文…