当前位置: 首页 > news >正文

flowable使用01

流程部署

act_re_repository : 部署记录表
每一次部署都会生成一条部署记录

  • name_ : 部署的名字
  • category_ : 分类
  • deploy_time_ : 部署时间

act_re_procdef : 流程定义表
存储了流程定义,,, 一次部署可能会部署多个BPMN文件,,也就有多个流程定义

  • category_ : 分类,来自部署的类别
  • name_ : 流程定义的名字(BPMN文件中的name)
  • key_ : 流程的唯一键 (BPMN文件中的id)
  • version : 版本号,, 当部署相同的key的BPMN文件时,,版本号回自增1
  • deployment_id : 关联 act_re_deployment表的id,,表名这个流程来自于那一次部署
  • resource_name : 对应act_ge_bytearray ,存放BPMN的xml的name_ 字段
  • dgrm_resource_name : 对应 act_ge_bytearray表中存放流程图片文件的name_字段

act_ge_bytearray : 资源文件表
ge: general
用来存储所有的二进制文件

  • name_ : 资源的原始文件名字
  • deployment_id : 关联的部署id
  • bytes : 文件的二进制内容
  • generated : 标识是引擎自己生成的,还是用户上传的

流程部署: 是每一次的部署记录,,一次可以部署多个流程定义,,,
流程定义: 用来描述流程是什么,,同样的一个key的流程定义,,部署多次的话,version会自增
流程实例:相当于用户启动的一个流程,,, 这个是Execution的子类,,,也就是归属于执行实例。。。流程实例是代表一个流程定义的特定的执行实例,,通俗的讲,启动了一个流程,就是创建了一个流程实例
执行实例:是流程实例中一条执行路径,他既可以表示流程实例本身,也可以表示流程中的具体节点,,如果是并行网关的情况下,一个流程实例可能会同时有多个执行实例


  1. 部署BPMN的xml文件,,会在act_re_deployment这个表里面有一个部署记录,,act_ge_bytearray:这个表会存放你上传的xml文件的byte,引擎会根据你的xml生成这个流程的显示图片,,act_re_procdef:这里面记录了流程定义的信息,,一次部署可能对应多个流程定义
   @Testpublic void test(){RepositoryService repositoryService = processEngine.getRepositoryService();Deployment deployment = repositoryService.createDeployment().name("请假").key("leave").category("请假分类").addClasspathResource("ask_for_leave.bpmn20.xml").deploy();System.out.println("deployment.getId() = " + deployment.getId());}

打印最新的流程定义:

  private static final Logger logger = LoggerFactory.getLogger(Test02.class);@Testpublic void test02(){RepositoryService repositoryService = processEngine.getRepositoryService();List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()// 最后一个版本的.latestVersion().list();for (ProcessDefinition pd : list) {logger.info("id:{},name:{},version:{},category:{}",pd.getId(),pd.getName(),pd.getVersion(),pd.getCategory());}}

根据指定的key去找流程定义,,,也就是根据指定xml的id去找:

  @Testpublic void test02(){RepositoryService repositoryService = processEngine.getRepositoryService();List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery()// 根据xml中的id 去找.processDefinitionKey("ask_for_leave")// 按照版本号排序.orderByProcessDefinitionKey().desc() // 这个desc好像没什么用.list();for (ProcessDefinition pd : list) {logger.info("id:{},name:{},version:{},category:{}",pd.getId(),pd.getName(),pd.getVersion(),pd.getCategory());}}

根据流程部署去找对应的流程定义:

public void test03(){RepositoryService repositoryService = processEngine.getRepositoryService();List<Deployment> list = repositoryService.createDeploymentQuery().list();for (Deployment d : list) {List<ProcessDefinition> pdList = repositoryService.createProcessDefinitionQuery().deploymentId(d.getId()).list();for (ProcessDefinition pd : pdList) {logger.info("id:{},name:{},version:{},category:{}",pd.getId(),pd.getName(),pd.getVersion(),pd.getCategory());}}}

删除流程部署: 删除流程部署之后,,涉及到流程定义的表,,都会被删除

    RepositoryService repositoryService = processEngine.getRepositoryService();List<Deployment> list = repositoryService.createDeploymentQuery().list();for (Deployment deployment : list) {repositoryService.deleteDeployment(deployment.getId());}

流程实例 ProcessInstance

和执行实例的区别,, 流程实例也算一个执行实例,只不过他是流程的根的执行实例,,

act_ru_execution : 执行实例表
当前所有运行中的执行实例,,,在流程实例运行过程中,,执行实例会表示当前的活跃节点(或分支)

  • rev_ : 版本号: 用于乐观锁
  • proc_inst_id : 对应的流程实例id
  • business_key : 业务键 : 启动流程实例的时候传入
  • parent_id : 父执行实例的id : 用于子流程
  • act_id: 当前活动的id(当前流程实例,执行实例所在的节点)
  • is_active : 是否活跃(表示这个执行实例是否正在执行)
  • is_concurrent : 是否并发(用于并行网关产生的分支)
  • is_scope : 是否作用域

act_ru_actinst : 运行时活动实例表
所有活动(节点) 的实例信息,,包含当前正在执行和已经执行完了的节点,,他记录了流程实例经过每一个节点的详细信息(包括:开始节点,用户任务,服务任务,网关,结束点 等)

  • proc_def_id : 流程定义id
  • proc_inst_id : 流程实例id
  • execution_id : 执行实例id
  • act_id : 活动id(BPMN文件中每一个节点都会有的那个id)
  • act_name: 活动名称
  • act_type : 活动类型(userTask,startEvent,endEvent 等)
  • start_time : 活动开始时间
  • end_time : 活动结束时间
  • duration : 活动持续时间

act_ru_task : 运行时任务表
流程到达了一个用户任务,,就会在这个表中创建一条记录,当任务完成时,这个记录就消失了

  • name : 任务名称
  • parent_task_id : 父任务id(如果存在子任务的话)
  • description: 任务描述
  • priority : 任务优先级
  • create_time : 任务创建时间
  • assignee : 任务指派给谁
  • proc_inst_id : 流程实例id
  • execution_id : 执行实例id
  • task_def_key : 任务定义的key(也就是BPMN中用户任务的id)

发起一个流程,,首先会在act_ru_execution这个表中创建执行实例,,一般会有两个,一个是根执行实例,,一个是正在执行的执行实例,,,,
如果当前节点是 用户任务,就会在act_ru_task中添加一条任务数据

发起流程:

   @Testpublic void test(){RuntimeService runtimeService = processEngine.getRuntimeService();String processDefinitionKey = "ask_for_leave";ProcessInstance pi = runtimeService.startProcessInstanceByKey(processDefinitionKey);logger.info("definitionId:{},id:{},name:{}", pi.getProcessDefinitionId(), pi.getId(), pi.getName());}

判断流程是否执行结束了:
如果流程执行结束了,在ru表中是找不到的:

    @Testpublic void test02(){RuntimeService runtimeService = processEngine.getRuntimeService();// 如果流程不存在,,说明结束,,,如果存在,说明流程正在执行ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId("xxx").singleResult();}

查看指定人的任务:

    @Testpublic void test01(){TaskService taskService = processEngine.getTaskService();List<Task> taskList = taskService.createTaskQuery().taskAssignee("cc").list();for (Task task : taskList) {logger.info("id:{},assignee:{},name:{}",task.getId(),task.getAssignee(),task.getName());}}

查看当前处于的活动id :

 @Testpublic void test03(){RuntimeService runtimeService = processEngine.getRuntimeService();List<Execution> list = runtimeService.createExecutionQuery().list();for (Execution execution : list) {// 当前执行实例 活动的节点List<String> activeActivityIds = runtimeService.getActiveActivityIds(execution.getId());System.out.println(activeActivityIds.size());for (String activeActivityId : activeActivityIds) {logger.info("activeActivityId:{}", activeActivityId);}}}

删除流程:

    @Testpublic void test06(){RuntimeService runtimeService = processEngine.getRuntimeService();List<ProcessInstance> list = runtimeService.createProcessInstanceQuery().list();for (ProcessInstance processInstance : list) {String deleteReason = "想删除";runtimeService.deleteProcessInstance(processInstance.getId(),deleteReason);}}

还有挂起流程,恢复挂起,,这种一般用于,,系统出现规则漏洞,,或者系统定期维护,,员工离职审计,,,通过脚本或者管理后台挂起全系统的所有的流程实例,,等到维护结束,在批量激活

DataObject

全局变量

在这里插入图片描述

这里配置全局变量,,全局变量是跟流程关联,,

在这里插入图片描述

全局变量会被存放在act_ru_variable 这个表中

获取全局变量:

  @Testpublic void test08(){RuntimeService runtimeService = processEngine.getRuntimeService();ProcessInstance processInstance = runtimeService.startProcessInstanceById("ask_for_leave:3:10004");Map<String, DataObject> dataObjects = runtimeService.getDataObjects(processInstance.getId());for (String s : dataObjects.keySet()) {DataObject data = dataObjects.get(s);logger.info("id:{},name:{},value:{},type:{}",data.getId(),data.getName(),data.getValue(),data.getType());}}
http://www.dtcms.com/a/582970.html

相关文章:

  • 做国外直播网站有哪些渭南seo快速排名
  • 做的网站百度找不到广州市天河区工程建设监督网站
  • 网站攻击方式wordpress手机上用的
  • 攻防世界-Misc-掀桌子
  • 如何用SETNX实现分布式锁
  • 广州市品牌网站建设平台WordPress文章首页缩进
  • 泰兴网站推广wordpress vaptcha
  • AI与就业:在变革中主动驾驭未来
  • container_of宏
  • 创建网站要钱吗windows系统没有wordpress
  • 网站开发流程三大部分测评网站怎么做
  • iPhone 17 Pro Max 的评测和用户反馈
  • Python 中的异步编程:从基础到实战
  • 怎么制作自己的个人网站网址导航发布页
  • 网站建设售后服务方案百度招聘
  • 做网站编辑好还是美工好番禺区住房和建设局物业网站
  • Unity YooAsset HybridCLR 热更基础教程
  • 【Nginx】怎样清除 Nginx 的缓存?
  • 网站制作公海南省海口市龙华区
  • 【电子元器件·17】三极管的发射极e、基极b、集电极c 和 类型、主回路电流方向 的 快速判断方法
  • 浙江省城乡和住房建设厅网站首页dede做购物网站
  • ps做素材下载网站装潢设计和室内设计的区别
  • 程序员求职突围
  • 江苏营销型网站公司如何做网络推广推广
  • 网站建设与维护的论述题网站建设销售的技巧话语
  • 进程替换(主要接口讲解)
  • 网站开发常用语言总结怎么让别人访问我建的网站
  • 接平面设计私活的网站怎样做旅游城市住宿网站
  • nodejs同时做网站和后台管理怎么申请一个域名
  • 天津营销类网站设计网站建设管理要求