作者:tomkoo

以下例子中 采用了jbpm console 的几个实例用户

项目提交人 : ernie .

主管审批 : bert

会签 : ernie , bert , grover

老板审批 : grover

正常流程: 项目金额 >= 500W RMB

提交项目 --> 主管审批 --> 会签 --> 老板审批 --> 审批通过(结束)

正常流程: 项目金额 < 500W RMB

提交项目 --> 主管审批 --> 会签 --> 审批通过(结束)

其中主管审批, 会签, 老板审批 , 不通过, 全部退回给项目提交人修改.

会签中: 所有人全通过, 则通过. 任何一人不通过, 停止其他会签任务.退回给提交人.

流程定义如下:

name="tc_prj_approval">

create-tasks="false">

class="net.chenj.jbpm.sample.TaskEndCountersign">

class="net.chenj.jbpm.sample.CreateTaskInstanceCountersign">

#{amount>= 500}

会签swimlane class

packagenet.chenj.jbpm.sample;

importorg.jbpm.graph.exe.*;

importorg.jbpm.taskmgmt.def.*;

importorg.jbpm.taskmgmt.exe.Assignable;

publicclassCosingerAssiHandlerimplementsAssignmentHandler {

privatestaticfinallongserialVersionUID = 1L;

publicvoidassign(Assignable assignable, ExecutionContext executionContext) {

// 从数据库或者ldap 读取会签人设置

String[] a = {"ernie","bert","grover"};

assignable.setPooledActors(a);

}

}

创建会签任务实现类

packagenet.chenj.jbpm.sample;

importorg.jbpm.graph.def.ActionHandler;

importorg.jbpm.graph.exe.ExecutionContext;

importorg.jbpm.graph.exe.Token;

importorg.jbpm.graph.node.TaskNode;

importorg.jbpm.taskmgmt.def.Task;

importorg.jbpm.taskmgmt.exe.TaskMgmtInstance;

publicclassCreateTaskInstanceCountersignimplementsActionHandler {

privatestaticfinallongserialVersionUID = 1L;

publicvoidexecute(ExecutionContext executionContext)throwsException {

Token token = executionContext.getToken();

TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();

TaskNode taskNode = (TaskNode) executionContext.getNode();

Task task = taskNode.getTask("tc_prj_countersign");

// 从数据库或者ldap 读取会签人设置创建任务实例

tmi.createTaskInstance(task, token).setActorId("ernie");

tmi.createTaskInstance(task, token).setActorId("bert");

tmi.createTaskInstance(task, token).setActorId("grover");

}

}

结束不通过时结束其他会签任务实现

packagenet.chenj.jbpm.sample;

importjava.util.Collection;

importjava.util.Iterator;

importorg.jbpm.graph.def.ActionHandler;

importorg.jbpm.graph.exe.ExecutionContext;

importorg.jbpm.taskmgmt.exe.TaskInstance;

importorg.jbpm.taskmgmt.exe.TaskMgmtInstance;

publicclassTaskEndCountersignimplementsActionHandler {

privatestaticfinallongserialVersionUID = 1L;

publicvoidexecute(ExecutionContext executionContext)throwsException {

booleanisDisapprove = Boolean.valueOf((String) executionContext

.getVariable("isDisapprove"));

// 如果有一个任务实例拒绝通过则结束除当前任务实例外其他任务实例

if(isDisapprove) {

TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();

TaskInstance ti = executionContext.getTaskInstance();

finalString actorId = ti.getActorId();

Collection c = tmi.getSignallingTasks(executionContext);

for(Iterator it = c.iterator(); it.hasNext();) {

TaskInstance task = (TaskInstance) it.next();

if(!(actorId.equals(task.getActorId())) && (!task.hasEnded())) {

task.end("disapprove");

}

}

}

}

}

posted on 2007-10-15 17:34 jbpm 阅读(6030) 评论(0)  编辑  收藏 所属分类: jbpm实例

java代码实现流程中的会签_一个简单的会签实例相关推荐

  1. java代码在jsp中怎么写_在jsp中写java代码

    该服务器上的所有的访问者的所有 jsp 页面 D.该服务器上的所有的访问者的所有 jsp 页面和 Java 程序 6.在 JSP 中调用 JavaBean 时不会用到的标记是( )...... jav ...

  2. src获取同级目录中的图片_一个简单的Python爬虫实例:百度贴吧页面下载图片

    本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片. 1. 概述 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片.下载图片的步骤如下: 获取网页html文本内容: 分析html ...

  3. java modify的使用方法图解,经过JDT修改(Modify)Java代码的流程步骤

    通过JDT修改(Modify)Java代码的流程步骤 1.ICompilationUnit originalUnit = ...;// Get original compilation unit 获取 ...

  4. 教你如何使用Java代码从网页中爬取数据到数据库中——网络爬虫精华篇

    文章目录 1:网络爬虫介绍 2:HttpClients类介绍 2.1 HttpGet参数问题 2.2 HttpPost参数问题 2.3 连接池技术问题 3:Jsoup介绍 4:动手实践如何抓取网页上数 ...

  5. Java代码---求数组中的平均值

    Java代码-求数组中的平均值 /*** 求数组中的平均值*/ class Demo5 {public static void main(String[] args) {int[] array = { ...

  6. Java Tread多线程(0)一个简单的多线程实例

    作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/39341887 本文演示,一个简单的多线程实例,并简单分析一下线程. 编程多 ...

  7. 函数式编程中的战斗机(二) --运用elm语言MUV设计模式做一个简单的应用实例

    @函数式编程中的战斗机(二) -运用elm语言MUV设计模式做一个简单的应用实例 1 elm语言设计模式的特点 1.1 面向对象设计模式的特点 每种编程语言都有其独特的语法和优缺点,从而导致与众不同的 ...

  8. 工作中关于rpm的一个简单但头疼的问题

    工作中关于rpm的一个简单但头疼的问题: 公司有个需要自动化更新rpm包的需求,rpm包名是:tingyun-agent-php-1.0.5-1.x86_64,本来是一个很简单的东西,一行代码就可以实 ...

  9. android计算器功能实现,在android中利用 studio实现一个简单的计算器功能

    在android中利用 studio实现一个简单的计算器功能 发布时间:2020-11-07 15:35:20 来源:亿速云 阅读:168 作者:Leah 这篇文章将为大家详细讲解有关在android ...

  10. java如何向数据库中插入数据_如何控制Java代码向数据库中插入数据

    慕哥6287543 Java程序向数据库中插入数据,代码如下:123456789101112131415161718192021222324252627282930313233343536373839 ...

最新文章

  1. 【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )
  2. 周志华教授:如何做研究与写论文?(附PPT下载)
  3. Django模版(三)
  4. 科学的分析猪八戒到底是什么猪,黑猪还是白猪?
  5. 面试官 | 说一下 JVM 常用参数有哪些?
  6. gin源码解析(1) - gin 与 net/http 的关系
  7. Java 9 揭秘(18. Streams API 更新)
  8. python语言分数等级转化_如何把分数转化成等级
  9. oppok1刷原生android10,OPPOK1系统升级最新ColorOSV6刷机包(完整固件rom下载ColorOSV6安卓9.0)...
  10. fckeditor组件使用---fckeditor调用的三种方法1
  11. g++能过,c++过不了
  12. 常用的C#方法【Format.CS】
  13. js原生方式实现bind方法
  14. JavaWeb学习--Servlet认识
  15. sql server 表结构信息查询
  16. W12Scan:一款功能强大的网络安全资产扫描引擎
  17. JQuery提交表单
  18. 【转载】Unity3D导入FBX模型的相关属性介绍
  19. 《中國哲學書電子化計劃》網頁文本處理[Word VBA]
  20. SparkStreaming可视化之Wisp

热门文章

  1. Office365强制Microsoft Authenticator验证登录如何关闭
  2. JQuery日历 日期选择
  3. 库卡c2机器人编程语言,有一篇文章知道库卡-C2机器人的内部结构
  4. Verilog 基本电路1-与或非,异或门
  5. 登录失败 12306服务器不稳定,12306无法正常登录怎么办?12306登陆不上的解决方法...
  6. 7474触发器 异步三进制加法计数器
  7. 深度学习环境配置2——windows下的torch=1.2.0环境配置
  8. 射影几何----极点极线割线共点四点调和定理
  9. 微信小程序使用Socket
  10. 祭出黑白共济战略,海信、TCL、创维、康佳能否打开增量消费市场?