实现一个简单的工作流例子全过程

2023-11-10

test.png



test.jpdl.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <process name="test" xmlns="http://jbpm.org/4.4/jpdl">  
  4.    <start g="247,9,48,48" name="start1">  
  5.       <transition g="-69,-22" name="to 员工提交申请" to="员工提交申请"/>  
  6.    </start>  
  7.    <end g="244,326,48,48" name="end1"/>  
  8.    <task assignee="员工" g="223,84,92,52" name="员工提交申请">  
  9.       <transition g="-93,-22" name="to 部门经理审批" to="部门经理审批"/>  
  10.    </task>  
  11.    <task assignee="部门经理" g="226,161,92,52" name="部门经理审批">  
  12.       <transition g="-81,-22" name="to 总经理审批" to="总经理审批"/>  
  13.    </task>  
  14.    <task assignee="总经理" g="222,244,92,52" name="总经理审批">  
  15.       <transition g="-50,-22" name="to end1" to="end1"/>  
  16.    </task>  
  17. </process>  

Task

assignee

员工提交申请

员工

部门经理审批

部门经理

总经理审批

总经理

1.部署流程定义

a) 通过直接拿到.jpdl.xml.png方式部署


[java]  view plain  copy
  1. private ProcessEngine processEngine = new Configuration().setResource("jbpm.cfg.xml").buildProcessEngine();  
  2.   
  3.     @Test  
  4.     public void createSchema() { // hbm2ddl.auto=update  
  5.         new org.hibernate.cfg.Configuration().configure("jbpm.hibernate.cfg.xml").buildSessionFactory();  
  6.     }  
  7.   
  8.     // 一、部署流程定义  
  9.     @Test  
  10.     public void deployProcessDefinition() {  
  11.         processEngine.getRepositoryService()//  
  12.                 .createDeployment()//  
  13.                 .addResourceFromClasspath("helloworld/test.jpdl.xml")//  
  14.                 .addResourceFromClasspath("helloworld/test.png")//  
  15.                 .deploy();  
  16.     }  


b) 部署完后,在jbpm4_ployment表中有一条记录;在jbpm4_lob表有两条记录,分别为test.jpdl.xmltest.png

2.启动流程实例

a) 通过key启动流程实例,.jpdl.xmlkey不写默认为name属性

[java]  view plain  copy
  1. @Test  
  2.     public void startProcessInstance() {  
  3.         processEngine.getExecutionService().startProcessInstanceByKey("test");  
  4.     }  

b) 启动流程实例后:jbpm4_execution表中有一条员工提交申请的活动记录,此时进行到to员工提交申请环节。

3.员工操作

a) 查询未办理的任务列表

[java]  view plain  copy
  1. @Test  
  2.     public void findMyTaskList() {  
  3.         // 查询任务  
  4.         String userId = "员工";  
  5.         List<Task> list = processEngine.getTaskService().findPersonalTasks(userId);  
  6.   
  7.         // 显示任务  
  8.         System.out.println("========= 【"+userId+"】的未办理的任务列表 =========");  
  9.         for (Task task : list) {  
  10.             System.out.println("id=" + task.getId()//  
  11.                     + ", name=" + task.getName()//  
  12.                     + ", assignee=" + task.getAssignee()//  
  13.                     + ", createTime=" + task.getCreateTime());  
  14.         }  
  15.     }  

b) 查看到信息如下:有一条任务id20002

========== 【员工】的未办理的任务列表 =========

id=20002, name=员工提交申请, assignee=员工, createTime=2014-05-02 16:48:04.0

c) 员工办理任务:提交申请环节

[java]  view plain  copy
  1. @Test  
  2.     public void completeTask() {  
  3.         String taskId = "20002";  
  4.         processEngine.getTaskService().completeTask(taskId);  
  5.     }  

d) 员工执行完任务,即员工提交申请环节结束,环节进行到to部门经理审批,此时员工再查询个人任务列表结果为空。

4.部门经理操作

a) 查询未办理的任务列表

[java]  view plain  copy
  1. @Test  
  2.     public void findMyTaskList() {  
  3.         // 查询任务  
  4.         String userId = "部门经理";  
  5.         List<Task> list = processEngine.getTaskService().findPersonalTasks(userId);  
  6.   
  7.         // 显示任务  
  8.         System.out.println("========= 【"+userId+"】的未办理的任务列表 =========");  
  9.         for (Task task : list) {  
  10.             System.out.println("id=" + task.getId()//  
  11.                     + ", name=" + task.getName()//  
  12.                     + ", assignee=" + task.getAssignee()//  
  13.                     + ", createTime=" + task.getCreateTime());  
  14.         }  
  15.     }  

b) 查看到信息如下:有一条任务id30001

========== 【部门经理】的未办理的任务列表 =========

id=30001, name=部门经理审批, assignee=部门经理, createTime=2014-05-02 16:49:06.0

c) 部门经理办理任务:提交申请环节

[java]  view plain  copy
  1. @Test  
  2.     public void completeTask() {  
  3.         String taskId = "30001";  
  4.         processEngine.getTaskService().completeTask(taskId);  
  5.     }  

d) 部门经理执行完任务,即部门经理审批环节结束,环节进行到to总经理审批,此时部门经理再查询个人任务列表结果为空。

5.总经理操作

a) 查询未办理的任务列表

[java]  view plain  copy
  1. @Test  
  2.     public void findMyTaskList() {  
  3.         // 查询任务  
  4.         String userId = "总经理";  
  5.         List<Task> list = processEngine.getTaskService().findPersonalTasks(userId);  
  6.   
  7.         // 显示任务  
  8.         System.out.println("========= 【"+userId+"】的未办理的任务列表 =========");  
  9.         for (Task task : list) {  
  10.             System.out.println("id=" + task.getId()//  
  11.                     + ", name=" + task.getName()//  
  12.                     + ", assignee=" + task.getAssignee()//  
  13.                     + ", createTime=" + task.getCreateTime());  
  14.         }  
  15.     }  

b) 查看到任务id40001

========== 【总经理】的未办理的任务列表 =========

id=40001, name=总经理审批, assignee=总经理, createTime=2014-05-02 16:49:33.0

c) 总经理办理任务:提交申请环节

[java]  view plain  copy
  1. @Test  
  2.     public void completeTask() {  
  3.         String taskId = "40001";  
  4.         processEngine.getTaskService().completeTask(taskId);  
  5.     }  


d) 总经理执行完任务,即总经理审批环节结束,环节进行到to end1,此时总经理再查询个人任务列表结果为空。

6.流程实例执行完毕,此时jbpm4_execution表为空,历史记录表:jbpm4_hist_procinst出现一条记录

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现一个简单的工作流例子全过程 的相关文章

  • python使用xpath批量爬取图片

    import requests from lxml import etree import os if name main 创建文件夹存放照片 if not os path exists day07图片解析 素材 os mkdir day0
  • C语言输出中文

    include
  • 【CSS模块化之路3】 使用

    CSS是一门几十分钟就能入门 但是却需要很长的时间才能掌握好的语言 它有着它自身的一些复杂性与局限性 其中非常重要的一点就是 本身不具备真正的模块化能力 系列文章链接 CSS模块化之路1 使用BEM与命名空间来规范CSS CSS模块化之路2
  • 如何对云服务进行安装措施

    云服务器系统安全建议 1 修改云服务器系统默认远程登录端口 Linux远程端口修改参考文档 https cloud tencent com developer article 1124500 2 腾讯云平台有安全组功能 里面您只需要放行业务
  • 【Shader\j简单\Unity】Flowmap与光栅立体卡片效果

    Flowmap与光栅立体卡片效果 前言 FlowMap 代码 前言 实际上是尝试复原ta101第五课的一个小demo 目前还没有开课 我也穷 既然大纲给出来了 如果有时间摸鱼那么就可以慢慢磨 前面一大半的章节都比较基础适合我这种菜鸟 前期咱
  • 华为云主机被植入挖矿,主机变肉鸡破解实录。

    1 主机被植入挖矿主机现象 早上一大早来公司发现自己的华为云主机cpu使用一直飙高 然后使用top命令查看 发现top命令不能用 此时得我知道事情不简单了 然后使用last查看登录记录 发现记录都被清空了 然后history也是清空的 看不
  • 【华为OD机试真题 python】数字字符串组合倒序 【2022 Q4

    题目描述 数字字符串组合倒序 对数字 字符 数字串 字符串 以及数字与字符串组合进行倒序排列 字符范围 由 a 到 z A 到 Z 数字范围 由 0 到 9 符号的定义 作为连接符使用时作为字符串的一部分 例如 20 years 作为一个整
  • 初体验ipad

    初体验ipad 今天星期六 阳光明媚 在去饭堂吃早餐的路上 远远看见排球场人群涌动 听见舞台上有人在唱歌 心想肯定是什么飚歌大赛 跟咱无关 正准备转头离开 突然瞄到 3G体验 几个大字 由于没戴眼镜 看不清 就眯着眼睛看了看 写着 ipho
  • 群晖服务器性能测试,对群晖DS716+进行性能测试_群晖 DS716+_企业存储技术与评测-中关村在线...

    Iometer是一个工作在单系统和集群系统上用来衡量和描述I O子系统的工具 可以被配置为模拟任何程序或者基准测试程序的磁盘和网络I O的负载 或者用来产生整个综合的I O负载 它也可以用来产生并测量单系统或者多系统 网络 的负载 在性能测
  • 【CUDA学习笔记】OneFlow公众号CUDA算子优化文章学习笔记

    1 CUDA学习资料合集 OneFlow 岁末年初 为你打包了一份技术合订本 2 GPU概念介绍 GPU的硬件结构与执行原理 开源100天 OneFlow送上 百天大礼包 深度学习框架如何进行性能优化 2 1 内存模型 2 1 1 Bank
  • 模式分类识别

    模式分类识别 Python实现基于TCN时间卷积网络实现模式分类识别 目录 模式分类识别 Python实现基于TCN时间卷积网络实现模式分类识别 效果一览 文章概述 模型描述 程序设计 参考资料 效果一览 文章概述 TCN的设计十分巧妙 同
  • 【已解决】IDEA程序包com.mchange.v2.c3p0不存在解决方法

    IDEA程序包com mchange v2 c3p0不存在解决方法 解决方法 右键项目 Maven Reimport 如图
  • python opencv输出中文的方法 putText 支持中文输出

    python opencv输出中文 opencv在视频中通过putText函数能添加文字 但对于中文则无能为力 一般需要FreeType字体库进行处理 在python可以通过PIL转换一下 现将在视频中添加中文封装成函数如下 def pai
  • 10年历史回顾:数字货币市场投资逻辑变迁

    我们可见的未来的趋势之一就是数字货币行业不再围绕着 区块链 这个主题发展 本文经 代观 授权转载 作者 缺氧 内容旨在传递更多市场信息 不构成任何投资建议 经济学家阿尔钦说过 经济学其实不关心人是否理性 而关心人是否可以存活 进一步说 其实
  • 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是 ________ ( )(我觉得就是可以自己定义呗)

    正确答案 B 你的答案 D 错误 地址传递 单向值传递 由实参传给形参 再由形参传回实参 传递方式由用户指定 个人认为 这里的简单变量应该是指内置类型 内置类型数据在传入函数时 使用值传递方式的效率要高于引用传递和指针传递 因此编译器会采用
  • Web服务器群集:部署Tomcat

    目录 一 理论 1 Tomcat 2 JDK 3 Tomcat安装 4 Tomcat优化 5 Tomcat虚拟主机设置 二 实验 1 JDK安装 2 Tomcat安装 3 Tomcat优化 4 Tomcat 虚拟主机配置 三 总结 一 理论
  • CTF_ctfshow_web7_sql注入之过滤空格

    打开靶机 打开每一个列表 发现有一个id 所以为get传参 ok 找一下注入点 2 union select 1 2 3 这里发现过滤了空格 所以直接用 代替空格进行绕过 发现回显点为2 3 下面开始查库吧 2 union select 1
  • Zotero使用指南06:Markdown笔记

    转载Zotero使用指南06 Markdown笔记 这篇推文主要介绍如何通过插件实现在Zotero用markdown做笔记 首先下载Markdown Here源码包 这里已为大家准备好 需要墙 https github com piyixi
  • python读写txt文件

    当我们做深度学习项目时实验数据规模非常庞大 而xls格式 最多6万多行 xlsx格式 和csv 最多100多万行 格式等都有写入上限 而txt格式下没有写入限制 因此我们可以利用txt格式读写大规模的实验数据 具体代码如下 import n
  • dz论坛开启html,DZ论坛解决https开启后部分出现http的网址问题导致https不能显示方法...

    首先 申请并且配置好服务器ssl证书 快云IDC https kuaiyunidc cn都有免费的 同时都有教程 配置完毕后需要配置以下几处 1 后台 全局 站点URL 2 后台 站长 ucenter设置 3 ucenter 应用 编辑 4

随机推荐

  • 大数据入门成长指南

    1 Java编程技术 Java编程技术是大数据学习的基础 Java是一种强类型语言 拥有极高的跨平台能力 可以编写桌面应用程序 Web应用程序 分布式系统和嵌入式系统应用程序等 是大数据工程师最喜欢的编程工具 因此 想学好大数据 掌握Jav
  • PCL 耳切三角剖分算法

    目录 一 算法原理 1 原理概述 2 主要函数 二 代码实现 三 结果展示 一 算法原理 1 原理概述 简单多边形的耳朵 是指由连续顶点 V 0 V 0 V
  • Net Core API跨域的处理 vs2017

    Startup ConfigureServices public void ConfigureServices IServiceCollection services services AddCors options gt options
  • 利用html模板发送邮件

    扣扣分享交流群 1125844267 一 背景 刚刚在测试别的项目组的项目时 突然发现人家的邮件内容怎么那么好看呢 再看看自己的 就几行字发过去了 不要说客户能不能满意 首先自己就感觉不好看 所以自己也搞一个试试 二 展示 完成后的邮件内容
  • python里的override(重写)

    本文翻译自Let s override 什么是override override字面理解是无效 消除的意思 在Python里两个同名的方法但执行不同程序 其中一个方法使得另外一个方法无效的 这就叫override 重写 通常情况下 父类中的
  • Unity Vuforio 导出安卓apk后摄像头识别不出物体

    可以看一下是不是场景导错了
  • Linux下查看进程、线程

    ps ef f 用树形显示进程和线程 在Linux下面好像因为没有真正的线程 是用进程模拟的 有一个是辅助线程 所以真正程序开的线程应该只有一个 ps ef f grep httpd root apache dhj ps ef f grep
  • 【IDEA】超级舒服的IDEA界面

    设置目录栏字体 设置Editor字体
  • BigDecimal的String类型

    java本身对浮点型的计算会丢失精度 这个一定要注意 必须要用BigDecimal的String类型才能解决精度的问题 BigDecimal一共有四个构造方法 我们在计算商品价格的时候 一定要用BigDecimal的String构造器才好
  • Nginx 四层代理配置模板

    worker processes 4 worker rlimit nofile 40000 events worker connections 8192 http upstream rancher server IP NODE 1 80 s
  • 阿里云服务器架构X86计算、ARM、GPU/FPGA、裸金属和超级计算集群

    阿里云服务器架构有什么区别 X86计算 ARM计算 GPU FPGA ASIC 弹性裸金属服务器 超级计算集群有什么区别 阿里云服务器网分享云服务器ECS架构详细说明 目录 阿里云服务器ECS架构说明 X86计算 ARM计算 GPU FPG
  • 文举论金:黄金原油全面走势分析策略指导。

    市场没有绝对 涨跌没有定势 所以 对市场行情的涨跌平衡判断就是你的制胜法宝 欲望 有句意大利谚语 让金钱成为我们忠心耿耿的仆人 否则 它就会成为一个专横跋扈的主人 空头 多头都能赚钱 唯有贪心不能赚 是你掌控欲望还是欲望掌控你 古人云 不积
  • win无法启动资源修复服务器,Win10修复:Windows Defender无法启动两步解决

    有些IT之家用户在升级安装Win10后 发现内置杀软Windows Defender无法正常启动 IT之家发现这类用户基本上都是从Win7升级而来 而且之前可能用过MSE 虽然MSE在正常情况下升级后会被清除 但也有清理不干净的情况 这可能
  • deepspeed训练模型报错:磁盘空间不够

    解决方法 修改huggingface缓存路径 让数据存到其它分区上 不和目录 cache 在同一分区即可 export TRANSFORMERS CACHE data0 xxx huggingface export HF HOME data
  • 我这里有一款情侣之间用来记录生活的app Android端和web端的

    我这里有一款情侣之间用来记录生活的app app下载地址 复制链接到网页下载即可 web网页端地址 当今社会 情侣之间的交流方式越来越多样化 而一款专门为情侣设计的数据共享应用程序也应运而生 这款应用程序可以帮助情侣们更好地分享彼此的生活
  • Python通过注册表获取串口列表

    工作中需要使用CameraLink接口自带的串口与设备进行通信 DALSA采集卡软件中可以将CameraLink接口里的串口映射到一个COM口 但是在使用第三方串口库 nodejs的serialport python的serial 提供的获
  • 攻防世界Web_php_unserialize

    最近开始刷攻防世界的web题目 遇到一个比较有意思的题目 ctf小白大家勿喷 访问题目链接 是一段php代码 对代码进行初步审计 发现unserialize函数 可以确定是一个php反序列化的利用 由于刚开始学习php的反序列化 对php不
  • 芯片培训的套路与Bug

    近两年 芯片培训的广告蜂拥而至 揭露某些不靠谱培训的内容也越来越多 比如说 光明日报 就在今年1月7日发表过 上4个月网课拿25万年薪 芯片培训这么神 的报道 各家自媒体 Up主对 芯片培训骗局 的揭露提醒更是不计其数 然而即使在这么多揭露
  • 用matlab进行拉普拉斯滤波,matlab拉普拉斯滤波器

    laplace 拉普拉斯 锐化 matlab 程序 部门 xxx 时间 xxx 整理范文 仅供参考 高通滤波器可以看成是 1 减去相应低通滤 波器 从低通滤波器的性质可以看出 在 用中值滤波 多维滤波 使用中心为 4 8的拉普 拉斯滤波器
  • 实现一个简单的工作流例子全过程

    test png test jpdl xml html view plain copy