- 浏览: 485707 次
- 性别:
- 来自: 武汉
最新评论
-
zyzyzy123:
请问有工程吗,我现在正在实现打电话的功能,但是一直不通,怀疑是 ...
实用的java 串口通信程序 -
wuhaitong:
引用[img][/img][*][url][/url] ...
jbpm -
迷糊_le:
maven命令, 蛮好的,谢谢
maven eclipse -
Wuaner:
不错的文章 , 谢谢分享!
Hadoop -
yuqihengsheng:
strong 很细
HighLighter
一个简单的会签实例
作者:tomkoo
以下例子中 采用了jbpm console 的几个实例用户
项目提交人 : ernie .
主管审批 : bert
会签 : ernie , bert , grover
老板审批 : grover
正常流程: 项目金额 >= 500W RMB
提交项目 --> 主管审批 --> 会签 --> 老板审批 --> 审批通过(结束)
正常流程: 项目金额 < 500W RMB
提交项目 --> 主管审批 --> 会签 --> 审批通过(结束)
其中主管审批, 会签, 老板审批 , 不通过, 全部退回给项目提交人修改.
会签中: 所有人全通过, 则通过. 任何一人不通过, 停止其他会签任务.退回给提交人.
流程定义如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <process-definition xmlns="urn:jbpm.org:jpdl-3.1"
- name="tc_prj_approval">
- <swimlane name="initiator" />
- <!项目提交人 >
- <swimlane name="requester">
- <assignment expression="user(ernie)" />
- </swimlane>
- <! 主管 >
- <swimlane name="chief">
- <assignment expression="user(bert)" />
- </swimlane>
- <!老板 >
- <swimlane name="boss">
- <assignment expression="user(grover)" />
- </swimlane>
- <!会签人 >
- <swimlane name="cosinger">
- <assignment class="net.chenj.jbpm.sample.CosingerAssiHandler">
- </assignment>
- </swimlane>
- <start-state name="start">
- <task name="tc_prj_newprj" swimlane="initiator"></task>
- <transition name="to_submit" to="tc_prj_submit"></transition>
- </start-state>
- <task-node name="tc_prj_submit">
- <task name="tc_prj_submit"></task>
- <transition name="to_chiefapprove" to="tc_prj_chiefapprove"></transition>
- </task-node>
- <task-node name="tc_prj_chiefapprove">
- <task name="tc_prj_chiefapprove"></task>
- <transition name="approve" to="tc_prj_countersign"></transition>
- <transition name="disapprove" to="tc_prj_submit"></transition>
- </task-node>
- <task-node name="tc_prj_countersign" signal="last-wait"
- create-tasks="false">
- <task name="tc_prj_countersign">
- <event type="task-end">
- <action
- class="net.chenj.jbpm.sample.TaskEndCountersign">
- </action>
- </event>
- </task>
- <event type="node-enter">
- <action name="createInstance"
- class="net.chenj.jbpm.sample.CreateTaskInstanceCountersign">
- </action>
- </event>
- <transition name="approve" to="amount_decision"></transition>
- <transition name="disapprove" to="tc_prj_submit"></transition>
- </task-node>
- <decision name="amount_decision">
- <transition name="to_bossapprove" to="tc_prj_bossapprove"></transition>
- <transition name="to_end" to="end1"></transition>
- </decision>
- <task-node name="tc_prj_bossapprove">
- <task name="tc_prj_bossapprove"></task>
- <transition name="approve" to="end1"></transition>
- <transition name="disapprove" to="tc_prj_submit">
- <condition>#{amount >= 500}</condition>
- </transition>
- </task-node>
- <end-state name="end1"></end-state>
- </process-definition>
<script></script>
会签swimlane class
- package net.chenj.jbpm.sample;
- import org.jbpm.graph.exe.*;
- import org.jbpm.taskmgmt.def.*;
- import org.jbpm.taskmgmt.exe.Assignable;
- public class CosingerAssiHandler implements AssignmentHandler {
- private static final long serialVersionUID = 1L;
- public void assign(Assignable assignable, ExecutionContext executionContext) {
- // 从数据库或者ldap 读取会签人设置
- String[] a = { "ernie", "bert", "grover" };
- assignable.setPooledActors(a);
- }
- }
<script></script>
创建会签任务实现类
- package net.chenj.jbpm.sample;
- import org.jbpm.graph.def.ActionHandler;
- import org.jbpm.graph.exe.ExecutionContext;
- import org.jbpm.graph.exe.Token;
- import org.jbpm.graph.node.TaskNode;
- import org.jbpm.taskmgmt.def.Task;
- import org.jbpm.taskmgmt.exe.TaskMgmtInstance;
- public class CreateTaskInstanceCountersign implements ActionHandler {
- private static final long serialVersionUID = 1L;
- public void execute(ExecutionContext executionContext) throws Exception {
- 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");
- }
- }
<script></script>
结束不通过时结束其他会签任务实现
- package net.chenj.jbpm.sample;
- import java.util.Collection;
- import java.util.Iterator;
- import org.jbpm.graph.def.ActionHandler;
- import org.jbpm.graph.exe.ExecutionContext;
- import org.jbpm.taskmgmt.exe.TaskInstance;
- import org.jbpm.taskmgmt.exe.TaskMgmtInstance;
- public class TaskEndCountersign implements ActionHandler {
- private static final long serialVersionUID = 1L;
- public void execute(ExecutionContext executionContext) throws Exception {
- boolean isDisapprove = Boolean.valueOf((String) executionContext
- .getVariable("isDisapprove"));
- // 如果有一个任务实例拒绝通过则结束除当前任务实例外其他任务实例
- if (isDisapprove) {
- TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
- TaskInstance ti = executionContext.getTaskInstance();
- final String 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");
- }
- }
- }
- }
- }
发表评论
-
安装和使用memcached
2014-04-16 16:24 644如何将 memcached 融入到 ... -
applicationContext.xml
2013-08-09 09:05 947<?xml version="1.0&quo ... -
注释驱动的 Spring cache 缓存介绍
2013-08-08 07:04 664概述 Spring 3.1 引入了激动人心的基于注释(an ... -
Spring2.5 Annotations
2013-08-08 06:33 861完成setXxxx功能,即配置文件的 <propert ... -
Spring基于注解的缓存配置--EHCache AND OSCache
2013-08-07 23:21 1031本文将构建一个普通工程来说明spring注解缓存的使用方式, ... -
Ehcache 整合Spring 使用页面、对象缓存
2013-08-07 22:51 898Ehcache 整合Spring 使用页面、对象缓存 ... -
javassist教程和示例
2013-05-18 08:57 2014Javassist是一个执行字节 ... -
ZooKeeper官方文档
2013-05-16 17:09 1563介绍(源自ZooKeeper官方文档) 学习HBase过程 ... -
ZooKeeper -例子
2013-05-16 17:08 1216ZooKeeper ZooKeepe ... -
Spring整合Hessian访问远程服务
2013-05-15 13:44 859Spring整合Hessian访问远程服务 目录 1.1 ... -
redis
2013-05-14 11:44 772redis是一个key-value存储系统。和Memcach ... -
spring 资源访问
2013-05-13 08:26 1002spring在java基础上封装了资源访问,简单易用。 R ... -
ZooKeeper——入门
2013-05-08 16:12 912ZooKeeper——入门 博客分类: ZooK ... -
分布式服务框架 Zookeeper -- 管理分布式环境中的数据(IBM)
2013-05-08 14:07 787安装和配置详解 本文 ... -
分布式协调服务---Zookeeper
2013-05-08 14:05 7781、Zookeeper overview Zookee ... -
Hibernate
2013-03-28 13:04 926一、简述 Hibernate 和 JD ... -
Apache+Tomcat集群配置详解
2013-02-01 10:52 897Apache + Tomcat集群配置详解(1) 一、 ... -
Apache+Jboss集群基于反向代理的负载均衡
2013-02-01 10:40 2497假设三台机器IP分别为172.29.128.100、172. ... -
spring + ibatis 多数据源事务(分布式事务)管理配置方法
2012-12-17 15:18 1269spring + ibatis 多数据源事务(分布式事务 ... -
Hessian序列化不设SerializerFactory性能问题
2012-10-31 09:47 1503Hessian序列化不设SerializerFactor ...
相关推荐
【描述】"Activiti多实例任务实现会签"这一主题主要关注的是如何通过Activiti的工作流定义语言(BPMN 2.0)中的`user task`元素,结合`multi-instance`属性来创建一个需要多人签字的任务。这种任务的特点是,每个...
1. **工作流设计**:首先,我们需要设计一个符合会签逻辑的工作流。这通常包括一系列顺序或并发的活动,每个活动代表一个参与者的审批步骤。在WF4.0中,可以通过设计工具如Visual Studio中的Workflow Designer来实现...
下面是一个简单的会签任务创建示例: ```java TaskService taskService = ... // 获取TaskService实例 Task task = taskService.createTask(); taskService.addCandidateUser(task.getId(), "user1"); taskService....
JBPM 是一个开源的工作流管理系统,它允许开发者和业务分析师设计、部署和执行业务流程。会签,即多人参与并同意后才能继续流程的步骤,是流程管理中的重要环节,尤其在企业协作和审批流程中常见。 【描述】"简单的...
5. **会签**:会签是一种特殊的流转方式,需要多个参与者共同完成一个任务。在UFLO中,会签功能可以实现多人审批,确保决策的公正性和合理性,尤其适合于企业内部的审批流程。 6. **流程设计**:UFLO通常配备图形化...
在IT行业中,Activity是BPM(Business Process Management)系统中的核心概念,它是业务流程中的一个操作或任务单元。在这个名为"activity功能代码"的压缩包中,我们可以推测它包含的是一些实现特定业务逻辑的代码,...
总的来说,飞龙工作流FlowLong是一款强大的国产工作流解决方案,结合了JSON的灵活性和易读性以及类似飞书钉钉的用户体验,为开发者和业务人员提供了一个高效、易用的流程管理平台。无论是流程设计、执行还是监控,...
- **工作流实例(Process Instance)**:流程定义在运行时的实体,每个实例代表一个具体的流程执行。 - **任务(Task)**:流程中的一个步骤,可以分配给一个或多个参与者执行。 - **节点(Node)**:流程图中的...
在这个“snakerflow工作流案例”中,我们将探讨如何将Snakerflow与Struts2和Spring框架相结合,创建一个高效、灵活的工作流应用。 首先,让我们了解一下Snakerflow的核心概念。Snakerflow基于模型驱动的设计思想,...
JWFDv0.96是一个开源的工作流引擎设计,其核心目标是通过自定义的流程拓扑数学模型和一系列SQL-API原子操作函数,构建一个流程自动运行控制器。该控制器负责用户对流程实例的操控,使得流程自动化运行,减少了人为...
1. **最简单的流程定义**:每个节点上只能设置一个审批人。 2. **并行审批**:审批节点上允许设置多个审批人,同一节点上的审批人并行审批。 3. **多实例会签/或签/比例签**:适用于需要多人参与的审批场景。 #### ...
多实例是指在一个普通活动上添加额外的属性定义,使得活动可以执行多次。这种特性常用于实现会签功能。 **5.1.1.1 使用说明** 1. **多实例类型**:可以选择并行或顺序执行模式。 2. **基数(多实例)**:定义实例的...
手册会通过实例讲解如何创建一个简单的请假申请流程,涉及任务分配、审批、会签等多个环节,以及如何使用Activiti的API和事件机制实现流程的控制和监控。 通过《Activiti5用户手册》,新手不仅可以理解Activiti的...
- **项目设计**: 设计一个简单的Web应用,展示如何使用jBPM4处理业务流程。 - **功能实现**: 包括流程定义、流程实例管理、任务分配等功能。 **Web 展示追踪图** - **追踪图**: 展示流程实例的当前状态和进度。 - *...
本指南将引导你如何搭建Activiti开发环境,并创建一个简单的Activiti项目。 首先,要搭建Activiti开发环境,你需要在Eclipse中安装Activiti插件。在Eclipse中点击“Add”,在Name选项中填写一个描述性名称,例如...
67 5.4 通过API删除已部署的流程 69 5.5 使用API发起新的流程实例 69 5.5.1 发起流程实例的常规方法 70 5.5.2 指定业务键发起流程实例 70 5.5.3 指定变量发起流程实例 71 5.6 唤醒一个等待状态的执行 71 5.7 任务...
通过拖拽和连接各个节点,如开始、结束、审批、会签等,可以直观地构建出符合组织需求的流程模型。每个节点都可配置特定的规则和条件,如审批人、审批意见、流转时间等。 2. **表单设计**:工作流通常与业务表单...
5. **审批流程**:对于需要审批的业务,SuperFlow支持多级审批和会签机制,确保每个环节的决策都得到充分考虑。审批人可以在系统内查看详细信息,进行在线审批,提高决策效率。 6. **报表与统计**:平台提供了丰富...