首页 > 其他分享 >Flowable 常用类及其作用

Flowable 常用类及其作用

时间:2024-10-14 22:48:30浏览次数:6  
标签:常用 ProcessEngineConfiguration Flowable RepositoryService 及其 实例 variables Process

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

标签:常用,ProcessEngineConfiguration,Flowable,RepositoryService,及其,实例,variables,Process
From: https://www.cnblogs.com/Higurashi-kagome/p/18466345

相关文章

  • Mapper 映射文件常用标签
    1.<mapper>作用:定义映射文件的根元素。包含所有的SQL语句和映射配置。属性:namespace:用于指定当前映射文件对应的接口类的全限定名,起到命名空间的作用。<mappernamespace="com.example.mapper.UserMapper"><!--SQL语句和映射关系--></mapper>2.<select......
  • String常用类
    String​(byte[] bytes,int offset,int length)通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String 。  String​(byte[] bytes,int offset,int length,String charsetName)通过使用指定的字符集解码指定的字节子String构造新的St......
  • 【QT】常用控件(一)
    个人主页~常用控件一、控件是什么二、QWidget核心属性1、enabled2、geometry3、windowTitle4、windowIcon5、windowOpacity6、cursor7、font8、toolTip9、focusPolicy10、styleSheet一、控件是什么ui设计界面左边的这些都叫控件,除了这些以外,QT还允许自定义控件,满......
  • Mybatis的Mapper映射文件中常用标签
    "mapper":是整个映射文件的根元素,包含了所有的其他标签,有一个重要的属性:namespace,用来指定映射文件对应的接口的全限定名,保证多个映射文件中使用相同的ID不会产生冲突,因为每个ID都是基于其命名空间唯一的点击查看代码<mappernamespace="com.example.mapper.Use......
  • Mybatis的Mapper映射文件中常用标签及作用
    MyBatis的Mapper映射文件是一种XML格式的配置文件,它用于定义SQL语句和Java对象之间的映射关系。以下是一些常用的标签及其作用。!DOCTYPEmapperPUBLIC#定义文档类型和公共标识符,用于XML文档的开头。<mapper>#根标签,定义一个映射文件。<namespace>#定义映射文件的命......
  • Mybatis的Mapper映射文件中常用标签及作用
    1、<mapper>:根元素,表示一个Mapper接口的配置。2、<select>:用于编写sql查询语句。3、<insert>:用于编写sql插入数据的<details>4、<update>:用于编写sql更新数据的语句。5、<delete>:用于编写sql删除数据的语句。6、<resultMap>:定义了如何将数据库中的列与Java对象的属......
  • Mybatis的Mapper映射文件中常用标签
    select点击查看代码<selectid="selectPerson"parameterType="int"parameterMap="deprecated"resultType="hashmap"resultMap="personResultMap"flushCache="false"useCache="true"time......
  • Mybatis的Mapper映射文件中常用标签及作用
    MyBatis是一个广泛使用的持久层框架,能够将对象与数据库中的记录进行映射。在MyBatis的Mapper映射文件中,有许多常用标签,它们各自有不同的功能。以下是一些常见标签及其作用:1.select标签作用:用来定义查询操作。示例:点击查看代码<selectid="selectUser"resultType="Use......
  • Mybatis的Mapper映射文件中常用标签及作用
    mapper标签作用:根标签,用于定义一个Mapper文件。属性:namespace,指定Mapper接口的全限定名。select标签作用:定义一个查询语句。属性:id:语句的唯一标识符,对应Mapper接口中的方法名。parameterType:输入参数的类型。resultType:返回结果的类型。resultMap:返回结果......
  • Mybatis的Mapper映射文件中常用标签
    增删改查标签增:<insertid=""parameterType=""useGeneratedKeys="true"keyProperty="id">id接口名,parameterType传参类型,useGeneratedKeys是否使用数据库生成的主键,keyProperty将主键映射到哪个属性删:<deleteid=""></delete>改......