工作流JBPM画图与配置

简介: 工作流JBPM画图与配置

☃️7.1 画图


完成以上的配置和概念了解后,我们来画图实际操作吧:

首先,我们画出如下图这样的一个流程图出来:(下图彩线箭头和汉语文字为辅助添加的,不包含在原流程图中)


☃️7.2 配置


7.2.1 配置任务办理人


7.2.1.1 写死的方式配置任务办理人(不推荐)


当我们点击流程图中的每个节点,流程图下方都会出现如下图示的 属性编辑 框。

如果没有弹出该框。请在myeclipse 工具 ,按下图操作:

弹出该框后,我们看到该框有两个编辑栏可编辑:

点击 General 属性,可以在 右侧 输入框 输入 该节点的名称 ,输入名称后 该名称将会作为 该节点的name显示在流程图中和保存在数据库的相关表中(如下图示)。

点击 Assignment 属性,可以在右侧 输入框 配置该节点的

我们将本案例的流程图的 task1 和 task2 的任务办理人按照同样的方式分别设置成 “张三” 和 “李四” 。


7.2.1.2 #{}方式配置任务办理人


如下图操作:

然后,这样设置的是一个动态的,我们在完成 该节点的上一步 的任务的时候去设置该处的具体任务办理人。

具体代码在办理任务的时候添加。


7.2.1.3 实现接口方式配置任务办理人


该方式不需要在画图处设置,但是要在 流程图 的 xml 文件里设置。

我们此处是要设置 task4 的办理人,所以我们打开 流程图 的Source文件(如上图示):

找到 task4 的节点 ,加入如下节点,在该节点指定该处任务办理人的处理类的全路径名(完成后效果如下)。

<task name="task4" g="512,360,92,52">
   <assignment-handler class="com.snow.config.User3AssignmentHandlerImpl">          </assignment-handler>
   <transition name="to join1" to="join1" g="-49,-22"/>
 </task>

注意:该类必须是实现了 AssignmentHandler 接口的类(如下)。

public class User3AssignmentHandlerImpl implements AssignmentHandler {
  private static final long serialVersionUID = 1L;
  @Override
  public void assign(Assignable assignable, OpenExecution execution) throws Exception {
    //  模拟从 数据库 拿到 的 相关人
    String userName = "王五";
    //  将 获取到的办理人 设置 给 该任务
    assignable.setAssignee(userName);  
  }
}

该类的调用时机是在 流程图 的流走到该节点自动调用。


7.2.1.4 方法指定方式分配任务办理人


此方式不需要在流程图中指定。需要在流程走到该节点之前的任何时机指定。

代码如下:

// 使用默认配置文件,先获取流程引擎
ProcessEngine processEngine = Configuration.getProcessEngine(); 
//  获取任务serviec
TaskService taskService = processEngine.getTaskService();
String tasjId = "1010101";
String userId = "赵六";
askService.assignTask(taskId, userId);


7.2.2 配置节点属性


7.2.2.1 判断节点(decision)


这是一个判断节点,流程走到这一步会根据该流程的特定属性进行判断,判断条件写在一个实现了 DecisionHandler 接口的类里,并在这里指定类的全限定类名。

实现类如下:

public class My3DecisionHandlerImpl implements DecisionHandler {
  private static final long serialVersionUID = 2L;
  
  //  根据指定的属性进行流程下一步的判断
  @Override
  public String decide(OpenExecution execution) { 
    //    获取申请数额 (这里的属性是在 流程到达该节点前指定的)
    Double money = Double.parseDouble((String) execution.getVariable("money"));
    //  重新分配流程下一步走向
    if(money > 100000){
      //  task6 节点名称 具体在画图时已指定  
      return "to task6";
    }
    //  end1 介绍节点名称 具体在画图时已指定
    return "to end1";
  }
}

该类控制下图的走向:


7.2.2.2 分支/聚合节点

如上图示:

流程完成 task2 后,会进入 fork(分支) 节点,流程一分为二:指向 task3 和 task4 。此时 task3 和 task4 节点任务办理人分别在他们的任务列表会看到该任务,只有当他们完成了各自的任务后,该流程才能继续往下走(task3 和 task4 任何一个节点任务没有完成,流程都不会再继续往下走),汇入 join 节点。

注意:区别于decision判断节点,分支与聚合节点本身是不需要额外的代码控制的,这两个节点本身自带的逻辑控制功能。


7.3 ☃️完成画图与配置后的效果


7.3.1 完成后的图


至此,我们的流程图 层面的配置就完了,流程图如下:

7.3.2 完成后配置的xml文件


流程图产生的xml文件如下(注意看配置相关节点节后与原xml文件的对比):

<?xml version="1.0" encoding="UTF-8"?><process name="test" xmlns="http://jbpm.org/4.4/jpdl">   <start
相关文章
|
存储 Kubernetes Cloud Native
kubernetes【工具】kaniko【1】【介绍】-无特权构建镜像
kubernetes【工具】kaniko【1】【介绍】-无特权构建镜像
kubernetes【工具】kaniko【1】【介绍】-无特权构建镜像
|
7月前
|
缓存 供应链 架构师
数据架构是什么?一文讲清数据架构和技术架构的区别
本文系统解析企业数字化核心框架——“4A架构”(业务、数据、应用、技术架构),阐明其严格递进的逻辑链:业务架构定方向(做什么)、数据架构转语言(数据化表达)、应用架构落功能(系统实现)、技术架构保运行(稳定支撑)。破除“重技术轻业务”误区,助企业构建贴合实际、可演进的数字化架构体系。
数据架构是什么?一文讲清数据架构和技术架构的区别
|
Web App开发 应用服务中间件 nginx
|
9月前
|
消息中间件 人工智能 自然语言处理
阿里云百炼产品月报【2025年12月】
阿里云百炼重磅升级:支持多模态文件上传与智能解析,MCP体验优化并新增12个云部署服务,知识库交互重构,上线146个应用模板及24款新模型,全面赋能AI应用开发。
1505 3
|
11月前
|
人工智能 边缘计算 安全
阿里云 ESA「函数和Pages」云栖发布:代码即部署,边缘原生落地
阿里云边缘安全加速(ESA)发布全新“函数和Pages”平台,国内首个实现站点托管与边缘函数原生打通,支持全球3200+节点极速部署、企业级安全防护及自动化发布流程。通过GitHub一键集成,结合AI编程助手,实现从代码到全球上线的分钟级交付,定义边缘原生与AI原生的下一代开发体验。
893 0
阿里云 ESA「函数和Pages」云栖发布:代码即部署,边缘原生落地
|
4月前
|
人工智能 IDE 开发工具
Kilo Code超全教程 支持500+模型终端AI编程工具安装配置全解(全能AI编程神器)
在AI赋能开发的时代,终端与IDE融合类编程工具逐渐成为开发者标配,**Kilo Code**凭借支持500+主流大模型、跨终端跨IDE适配、智能任务编排、自动化代码处理等强悍能力迅速出圈。它不仅是普通代码补全插件,更是一体化AI编程代理,可覆盖代码生成、项目重构、Bug自动修复、架构设计、终端指令执行、多智能体协作等全开发流程。
1407 0
|
前端开发 API Android开发
10 大 APP 开发方案比较
本文首发于微信公众号“前端徐徐”,深入剖析了当前最受欢迎的十种APP开发方案,包括传统的iOS和Android开发、跨平台的React Native和Flutter、现代化的CapacitorJS和PWA等,旨在帮助开发者在众多选择中找到最适合的开发路径。通过详细分析每种方案的优缺点及适用场景,文章提供了详尽的比较和实用建议,助力高效、优质的APP开发。
4634 0
10 大 APP 开发方案比较
|
人工智能 数据可视化 搜索推荐
什么是低代码开发?3步让你看懂“低代码开发”与“传统开发”的区别
低代码开发自2014年由Forrester提出后逐渐升温,尤其近两年因高效、易用等特点成为热门领域。本文解析低代码与传统开发的区别,前者通过可视化界面和拖放组件简化开发流程,适用于业务管理层应用;后者以手写代码为主,灵活性高但成本大。低代码的核心价值包括自动数据收集、规范业务流程、促进数据共享、减少开发人员需求、个性化搭建、降低成本及提升市场响应速度等,助力企业数字化转型。未来,结合AI技术的低代码将成企业转型的重要基础设施。
|
搜索推荐 关系型数据库 MySQL
MySQL中的模糊匹配技巧:无需ES的高效实现
在数据库应用中,模糊匹配是一个常见的需求,尤其在处理搜索功能时。虽然Elasticsearch(ES)等搜索引擎在处理文本搜索方面表现出色,但在一些场景下,直接使用MySQL数据库实现模糊匹配也是一个经济且高效的选择。本文将分享如何在不引入ES的情况下,利用MySQL实现模糊匹配的五大步骤和十个实战案例。
1451 1
|
存储 安全 Linux
s3fs挂载S3对象桶
s3fs(Simple Storage Service File System)是一个基于FUSE(Filesystem in Userspace)的文件系统,它允许将S3(Simple Storage Service)或其他兼容S3 API的对象存储服务挂载到本地文件系统中,从而能够像访问本地磁盘一样访问远程对象存储。以下是通过s3fs挂载OBS(Object Storage Service,对象存储服务,这里以华为云OBS为例)对象桶的基本步骤: ### 一、环境准备 1. **安装s3fs**: - 对于CentOS系统,可以使用yum安装s3fs-fuse: ```
3636 7

热门文章

最新文章