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

重庆品牌餐饮加盟网站建设帝国cms 做网站地图

重庆品牌餐饮加盟网站建设,帝国cms 做网站地图,建设银行官网首页网站购纪念币,网站通知模板前言在用 RuntimeService 接口启动流程实例时,总是分不清楚不同 startProcessInstanceXXX 接口之间的区别,这篇文章基于 Activiti 7.0.0.GA 版本,对这一类接口进行一个梳理和归类。详解接口列表RuntimeService 接口中以 startProcessInstance…

前言

在用 RuntimeService 接口启动流程实例时,总是分不清楚不同 startProcessInstanceXXX 接口之间的区别,这篇文章基于 Activiti 7.0.0.GA 版本,对这一类接口进行一个梳理和归类。

详解

接口列表

RuntimeService 接口中以 startProcessInstance 开头的所有方法如下,共计 20 个。

ProcessInstance startProcessInstanceByKey(String processDefinitionKey);ProcessInstance startProcessInstanceByKey(String processDefinitionKey, String businessKey);ProcessInstance startProcessInstanceByKey(String processDefinitionKey, Map<String, Object> variables);ProcessInstance startProcessInstanceByKey(String processDefinitionKey, String businessKey, Map<String, Object> variables);ProcessInstance startProcessInstanceByKeyAndTenantId(String processDefinitionKey, String tenantId);ProcessInstance startProcessInstanceByKeyAndTenantId(String processDefinitionKey, String businessKey, String tenantId);ProcessInstance startProcessInstanceByKeyAndTenantId(String processDefinitionKey, Map<String, Object> variables, String tenantId);ProcessInstance startProcessInstanceByKeyAndTenantId(String processDefinitionKey, String businessKey, Map<String, Object> variables, String tenantId);ProcessInstance startProcessInstanceById(String processDefinitionId);ProcessInstance startProcessInstanceById(String processDefinitionId, String businessKey);ProcessInstance startProcessInstanceById(String processDefinitionId, Map<String, Object> variables);ProcessInstance startProcessInstanceById(String processDefinitionId, String businessKey, Map<String, Object> variables);ProcessInstance startProcessInstanceByMessage(String messageName);ProcessInstance startProcessInstanceByMessageAndTenantId(String messageName, String tenantId);ProcessInstance startProcessInstanceByMessage(String messageName, String businessKey);ProcessInstance startProcessInstanceByMessageAndTenantId(String messageName, String businessKey, String tenantId);ProcessInstance startProcessInstanceByMessage(String messageName, Map<String, Object> processVariables);ProcessInstance startProcessInstanceByMessageAndTenantId(String messageName, Map<String, Object> processVariables, String tenantId);ProcessInstance startProcessInstanceByMessage(String messageName, String businessKey, Map<String, Object> processVariables);ProcessInstance startProcessInstanceByMessageAndTenantId(String messageName, String businessKey, Map<String, Object> processVariables, String tenantId);

分类

分析以上接口,虽接口种类繁多,但总体可按以下几种方式划分归类。

按启动类型分类

按启动类型分类,可分为三类,分别是:

按可传变量

按接口是否可传变量划分,可分为两类,分别是:

按接口名称

按相同接口名称分类(含重载),可分为 5 类 ,分别是:

按内外业务键

按内外业务键划分,可分为两类,分别是:

按租户类型

按租户类型划分,分为单租户和多租户两类,分别是:

知识点

processDefinitionKey 和 processDefinitionId 有什么区别?
processDefinitionKey 是我们在创建流程模型时定义的,而 processDefinitionId 是在流程后得到的。
假设定义一个 multi-product-manage.bpmn20.xml 流程模型文件,processDefinitionKey 是 multi-product-manage-k, 对这个流程模型文件部署三次,得到的 processDefinitionId 分别是:
  1. multi-product-manage-k:1:805003
  2. multi-product-manage-k:2:815003
  3. multi-product-manage-k:3:825003
在同一个 bpmn20.xml 文件被部署多个版本的情况下,如果以 processDefinitionKey(在这里取值 multi-product-manage-k)启动流程实例,Activiti 会选择最新部署的版本来启动流程实例,也就是会以 product-manage-k:3:825003 的这个版本来启动流程实例,不会去采用 multi-product-manage-k:1:805003 或者 multi-product-manage-k:2:815003 启动流程。如果以 processDefinitionId 来启动,传入 multi-product-manage-k:1:805003,Activiti 就会按照我们指定的版本来启动流程实例。
这个就是 processDefinitionKey 和 processDefinitionId 的最大区别。
举例
processDefinitionKey 举例。打开 Activiti Editor 流程模型编辑页面,创建一个流程模型,需要我们输入 model name 和 model key,以及 description。其中的 model key 就是 processDefinitionKey。
processDefinitionId 举例。processDefinitionId 由 processDefinitionKey + 部署次数 + 数字组成,格式为:
processDefinitionKey:部署次数:数字
对生成的 multi-product-manage.bpmn20.xml 流程模型文件进行部署。
第一次部署,得到的 processDefinitionId 如下
第二次部署,得到的 processDefinitionId 如下
仔细观察可发现,部署次数会随着同一个 bpmn20.xml 文件的部署而递增。由此 部署次数 数字就可以看出某个 bpmn20.xml 文件被部署了多少次。
startProcessInstance 中 bussinessKey 的应用场景
提示:应用场景由 deepseek 生成
businessKey在Activiti工作流引擎中是一个重要的概念,它用于将业务流程实例与业务数据关联起来。以下是两个典型的应用示例:
示例1:订单审批流程
假设我们有一个订单审批流程,需要将工作流与具体的订单关联:
// 启动流程时关联业务键
Order order = orderService.createOrder(); // 创建订单业务对象
String businessKey = "ORDER_" + order.getId(); // 构建业务键// 启动流程实例并关联业务键
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("orderApprovalProcess", businessKey,variables
);// 通过业务键查询流程实例
ProcessInstance instance = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();// 在用户任务中获取业务键
Task task = taskService.createTaskQuery().processInstanceBusinessKey(businessKey).singleResult();
这样,在流程的任何环节,我们都能通过订单ID(业务键)快速找到对应的流程实例,实现业务数据与流程的关联。
示例2:请假申请流程
另一个常见场景是员工请假申请流程:
// 员工提交请假申请
LeaveApplication leave = new LeaveApplication();
leave.setEmployeeId("EMP1001");
leave.setDays(3);
leave.setReason("家庭事务");
leaveApplicationService.save(leave);// 使用请假单ID作为业务键启动流程
String businessKey = "LEAVE_" + leave.getId();
Map<String, Object> variables = new HashMap<>();
variables.put("applicant", leave.getEmployeeId());
variables.put("days", leave.getDays());runtimeService.startProcessInstanceByKey("leaveApprovalProcess", businessKey, variables
);// 经理审批时通过业务键获取请假单信息
List<Task> tasks = taskService.createTaskQuery().taskAssignee("manager1").list();for (Task task : tasks) {String bk = task.getBusinessKey();String leaveId = bk.replace("LEAVE_", "");LeaveApplication application = leaveApplicationService.findById(leaveId);// 显示审批页面...
}
通过businessKey,审批人可以快速获取关联的请假单详细信息,审批完成后也能方便地更新业务数据状态。
businessKey的主要作用:
  1. 建立业务流程与业务数据的关联
  2. 方便通过业务ID查询流程状态
  3. 在流程处理中快速定位业务数据
  4. 实现业务数据和流程数据的松耦合关联
在实际应用中,businessKey通常采用"业务类型_业务ID"的格式,如"ORDER_123"、"LEAVE_456"等,以确保唯一性和可读性。
http://www.dtcms.com/a/428599.html

相关文章:

  • 焦作网站网站建设php网站后台登陆地址
  • JAVA锁机制
  • 免费素材库网站怎么用id导入wordpress
  • 【开发日记】LLM开发中的一些参数设置
  • 莆田网站建设平台推广联盟
  • 双抗 ADC 设计的核心密码:从抗体机制与结构看 “精准杀伤” 的底层逻辑
  • 网络销售网站设置购物网站的建设时间
  • 山东城市建设厅网站龙岩论坛
  • 阿里巴巴网站图片如何做白长沙网站建站公司
  • JAVA学习笔记——9道综合练习习题+二维数组
  • 微信编辑器做网站长沙网站开发公司
  • 网站备案信息代码wordpress高亮代码转义
  • 企业响应式网站建设报价网站如何做浏览量
  • 个体工商户可以申请网站建设吗长沙市师德师风建设网站
  • 青海网站建设设计江苏省建筑工程集团有限公司
  • 广东建设行业招聘 什么网站google广告联盟网站
  • dw做网站一般是多大的尺寸医院网站icp备案吗
  • 郑州 网站制作网站运营的案例
  • 学校网站代码模板网站建设平台安全问题有哪些方面
  • ubuntu开启NFS网络文件共享服务,并使用windows访问及排错过程
  • WinForm仪表盘
  • 做网站找酷万体育器材网站模板
  • 如何免费做公司网站wordpress模板带后台
  • Linux日志查看常用命令
  • 泰安整站优化wordpress头部空白
  • 考研408之栈与队列学习
  • 软考-系统架构设计师 软件架构概念详细讲解
  • 都匀网站建设住建部注册中心官网
  • Problem: lab-week4- exercise02 Quick sort
  • 营销型网站策划怎么做中国公司查询网站