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

广州网站建设阿里云京津冀协同发展

广州网站建设阿里云,京津冀协同发展,网站做的相似,app开发制定公司一.简介 为什么需要流程变量。 举个例子,假设有如下一个流程,截图如下: 这是一个请假流程,那么谁请假、请几天、起始时间、请假理由等等,这些都需要说明,不然领导审批的依据是啥?那么如何传递…

一.简介

为什么需要流程变量。
举个例子,假设有如下一个流程,截图如下:
在这里插入图片描述
这是一个请假流程,那么谁请假、请几天、起始时间、请假理由等等,这些都需要说明,不然领导审批的依据是啥?那么如何传递这些数据,我们就需要流程变量。

二.流程变量的分类

目前流程变量可以分为三种类型:

  1. 全局流程变量:在整个流程执行期间,这个流程变量都是有效的。
  2. 本地流程变量:这个只针对流程中某一个具体的 Task(任务)有效,这个任务执行完毕后,这个流程变量就失效了。
  3. 临时流程变量:顾名思义就是临时的,这个不会存入到数据库中。

在接下来学习这些流程变量的用法。

三.全局流程变量

按照上面请假流程,我们一起来看下流程变量的设置和获取。

1.启动时设置

第一种方式,就是在流程启动的时候,设置流程变量,代码如下:

@Test
void test01() {Map<String, Object> variables = new HashMap<>();variables.put("days", 10);variables.put("reason", "休息一下");variables.put("startTime", new Date());ProcessInstance pi = runtimeService.startProcessInstanceByKey("demo01", variables);logger.info("id:{},activityId:{}", pi.getId(), pi.getActivityId());
}

我们可以在启动的时候为流程设置变量,流程变量的 value 也可以是一个对象(不过这个对象要能够序列化,即实现了 Serializable 接口),然后在启动的时候传入这个变量即可

我们在流程启动日志中搜索休息一下 四个字,可以找到和流程变量相关的 SQL,一共有两条,SQL语句如下:

insert into ACT_HI_VARINST (ID_, PROC_INST_ID_, EXECUTION_ID_, TASK_ID_, NAME_, REV_, VAR_TYPE_, SCOPE_ID_, SUB_SCOPE_ID_, SCOPE_TYPE_, BYTEARRAY_ID_, DOUBLE_, LONG_ , TEXT_, TEXT2_, CREATE_TIME_, LAST_UPDATED_TIME_) values ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )INSERT INTO ACT_RU_VARIABLE (ID_, REV_, TYPE_, NAME_, PROC_INST_ID_, EXECUTION_ID_, TASK_ID_, SCOPE_ID_, SUB_SCOPE_ID_, SCOPE_TYPE_, BYTEARRAY_ID_, DOUBLE_, LONG_ , TEXT_, TEXT2_) VALUES ( ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) , ( ?, 1, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )

从表名称上大概就能看出来,ACT_HI_VARINST 是存储流程执行的历史信息的,ACT_RU_VARIABLE 则是保存流程运行时候的信息的
表数据,截图如下:
在这里插入图片描述
从表中可以看到,每一个流程变量都有对应的流程实例 ID,这就说明这些流程变量是属于某一个流程实例的,所以按照如下方式来查询流程变量,代码如下:

@Test
void test01() {List<Execution> list = runtimeService.createExecutionQuery().list();for (Execution execution : list) {Object reason = runtimeService.getVariable(execution.getId(), "reason");logger.info("reason:{}", reason);}
}

对应的查询 SQL语句如下:

: ==>  Preparing: select * from ACT_RU_VARIABLE WHERE EXECUTION_ID_ = ? AND TASK_ID_ is null AND NAME_ = ?
: ==> Parameters: 6fdd2007-4c3a-11ed-aa7e-acde48001122(String), reason(String)
: <==      Total: 1

可以看到,这个就是去 ACT_RU_VARIABLE 表中进行查询,查询条件中包含了变量的名称。
当然,也可以直接查询某一个流程的所有变量,代码如下:

@Test
void test02() {List<Execution> list = runtimeService.createExecutionQuery().list();for (Execution execution : list) {Map<String,Object> variables = runtimeService.getVariables(execution.getId());logger.info("variables:{}", variables);}
}

这个对应的查询 SQL语句如下:

 : ==>  Preparing: select * from ACT_RU_VARIABLE WHERE EXECUTION_ID_ = ? AND TASK_ID_ is null: ==> Parameters: 6fdd2007-4c3a-11ed-aa7e-acde48001122(String): <==      Total: 3

可以看到,这个跟上面的那个差不多,只不过少了 NAME_ 这个条件

2.通过 Task 设置

也可以在流程启动成功之后,再去设置流程变量,步骤如下:
首先启动一个流程,代码如下:

@Test
void test01() {ProcessInstance pi = runtimeService.startProcessInstanceByKey("demo01");logger.info("id:{},activityId:{}", pi.getId(), pi.getActivityId());
}

然后设置流程变量,代码如下:

@Test
void test03() {Task task = taskService.createTaskQuery().singleResult();taskService.setVariable(task.getId(), "days", 10);Map<String, Object> variables = new HashMap<>();variables.put("reason", "休息一下");variables.put("startTime", new Date());taskService.setVariables(task.getId(),variables);
}

查询到某一个 Task,然后设置流程变量,上面这段代码演示了两种设置方式:

  1. 逐个设置
  2. 直接设置一个 Map

上面这个设置流程变量的方式,本质上还是往 ACT_HI_VARINST 和 ACT_RU_VARIABLE 表中插入数据。具体的 SQL 也和前面的一样。

3.完成任务时设置

可以在完成一个任务的时候设置流程变量,代码如下:

@Test
void test04() {Task task = taskService.createTaskQuery().singleResult();Map<String, Object> variables = new HashMap<>();variables.put("reason", "休息一下");variables.put("startTime", new Date());variables.put("days", 10);taskService.complete(task.getId(),variables);
}

涉及到的 SQL语句 都跟前面一样。

4.通过流程设置

由于是全局流程变量,所以也可以通过 RuntimeService 来进行设置,代码如下:

@Test
void test05() {Execution execution = runtimeService.createExecutionQuery().singleResult();runtimeService.setVariable(execution.getId(), "days", 10);Map<String, Object> variables = new HashMap<>();variables.put("reason", "休息一下");variables.put("startTime", new Date());runtimeService.setVariables(execution.getId(), variables);
}
http://www.yidumall.com/news/77618.html

相关文章:

  • 网站被做暗链报告网络营销推广策划书
  • 公司网站备案资料优化网站怎么真实点击
  • wordpress加链接地址公众号关键词排名优化
  • 河东手机站搜索网
  • 博客网站主页代码html网站seo提升
  • 做网站都要买出口带宽吗怎样精选关键词进行网络搜索
  • 免费的电商平台有哪些网站seo设计方案案例
  • 小网站开发百度做推广一般要多少钱
  • flex做的网站百度怎么注册自己的店铺
  • 搭建b2c网站温州网站建设开发
  • 深圳专业做网站技术搜索引擎平台
  • wordpress禁止外链专业排名优化工具
  • 免费做会计试题网站打开app下载
  • 莱州网站建设价格seo刷排名软件
  • 万网做的网站咋样友情下载网站
  • 开发国外优惠卷网站如何做链接购买平台
  • 做网站图片自动切换网站结构有哪几种
  • 上海专业网站制作公司合肥seo服务商
  • 西安疫情2023年seo托管
  • 做渔家乐推广的有哪些好网站注册百度账号免费
  • 网站导航的交互怎么做二级域名查询入口
  • 做一网站要什么软件有哪些现在的seo1发布页在哪里
  • wordpress 流媒体seo是指搜索引擎营销
  • 网站推广公司 wordpress百度排名服务
  • 如何制作小程序图片保定seo网站推广
  • 做网站需要公司吗seo综合
  • 我国b2b电子商务平台专业的seo排名优化
  • 广东专业做网站排名公司seo还有前景吗
  • 网站建设内链其他搜索引擎
  • 学校网站建设制度搜索引擎优化概述