- 浏览: 49435 次
- 性别:
- 来自: 浙江
最新评论
-
eppen:
就是在workflow之外单独实现的呗?
新版代理人解决方案 -
eppen:
文章针对的是jbpm的哪个版本?
流程情景应用--用户与代理人之间的任务分派 -
eppen:
既然用户和代理人都能看到任务,那么第三项(当用户取消代理人设置 ...
流程情景应用--用户与代理人之间的任务分派 -
abcd880129:
没有jar包
jbpm应用实例(Struts2+Spring2+iBatis2.3+WebService) -
demojava:
辛苦了,不管怎么样,无私贡献出来,好人
jbpm应用实例(Struts2+Spring2+iBatis2.3+WebService)
在企业应用中,会有很多这样的情况,一个人起草之后,会需要他的上级一级一级的签,直到签到符合要求的那个主管等级,然后结束。这种情况,有不过不固定,因为每个人的上级不一样,所以如果要把这个图都画出来的话及其复杂,这样就有了以下的构思。通过同一个node的循环,来实现这种需要上级签合的情况。
下面是一个我们公司的资讯申请单流程
xml 代码
- <?xml version="1.0" encoding="UTF-8"?>
- <process-definition xmlns="urn:jbpm.org:jpdl-3.1"
- name="IT_InformationRequisition">
- <swimlane name="user" />
- <swimlane name="userHandler">
- <assignment class="com.ivo.engine.wf.swinlane.UserSwimlane" />
- </swimlane>
- <swimlane name="handler">
- <assignment class="com.ivo.engine.wf.swinlane.HandlerSwimlane" />
- </swimlane>
- <swimlane name="handlerClose">
- <assignment class="com.ivo.engine.wf.swinlane.HandlerCloseSwimlane" />
- </swimlane>
- <swimlane name="leader">
- <assignment class="com.ivo.engine.wf.swinlane.DomainLeaderSwimlane" />
- </swimlane>
- <swimlane name="userManager">
- <assignment class="com.ivo.engine.wf.swinlane.UserManagerSwimlane" />
- </swimlane>
- <start-state name="start">
- <task swimlane="user"> </task>
- <transition name="draft" to="Drafting"></transition>
- <transition name="accept" to="HandlerAcceptance"></transition>
- </start-state>
- <end-state name="end"></end-state>
- <task-node name="HandlerAcceptance" create-tasks="false">
- <task name="HandlerAcceptance"></task>
- <event type="node-enter">
- <action name="createInstance" class="com.ivo.engine.wf.action.DynamicTaskAction">
- </action>
- </event>
- <transition name="accept" to="LeaderConfirmation"></transition>
- </task-node>
- <task-node name="LeaderConfirmation">
- <task swimlane="leader"> </task>
- <transition name="accept" to="HandlerClose"></transition>
- <transition name="reject" to="Drafting"></transition>
- </task-node>
- <task-node name="Drafting">
- <task swimlane="userHandler"> </task>
- <transition name="accept" to="HandlerAcceptance"></transition>
- <transition name="delete" to="end"></transition>
- </task-node>
- <task-node name="HandlerClose">
- <task swimlane="handler"> </task>
- <transition name="accept" to="UserAcceptance"></transition>
- </task-node>
- <task-node name="UserAcceptance">
- <task swimlane="userHandler"> </task>
- <transition name="accept" to="UserDeptAcceptance"></transition>
- <transition name="reject" to="HandlerClose"></transition>
- </task-node>
- <task-node name="UserDeptAcceptance" create-tasks="false">
- <task name="deptAcceptance"></task>
- <event type="node-enter">
- <action name="createInstance" class="com.ivo.engine.wf.action.UserManagerAction">
- </action>
- </event>
- <transition name="loop" to="UserDeptAcceptance"></transition>
- <transition name="accept" to="DomainLeaderClose"></transition>
- <transition name="reject" to="HandlerClose"></transition>
- </task-node>
- <task-node name="DomainLeaderClose">
- <task swimlane="leader"> </task>
- <transition name="accept" to="end"></transition>
- <transition name="reject" to="HandlerClose"></transition>
- </task-node>
- </process-definition>
这里应用到循环节点的是UserDeptAcceptance,需要签上级,直到处级主管。
通过UserManagerAction,来动态创建taskInstance,jbpm好像有一个特性,一个node的task第一次创建之后,如果重新回到这个node,这个taskInstance的actorId还是原来的那个,所以我就用动态创建taskInstance,这样可以在每次进入这个node的时候给这个赋予不同的actorId。
java 代码
- package com.ivo.engine.wf.action;
- 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;
- import com.ivo.engine.dao.HRDao;
- import com.ivo.engine.model.Employee;
- public class UserManagerAction implements ActionHandler {
- private static final long serialVersionUID = 1L;
- public void execute(ExecutionContext executionContext) throws Exception {
- String actorId = "";
- String currDeptLevel = null;
- String loopActorId = (String)executionContext.getVariable("LoopActorId");
- String startActorId = (String)executionContext.getVariable("StartActorId");
- String emp = null;
- Employee manager = null;
- if ( loopActorId == null ){
- emp = startActorId;
- } else {
- emp = loopActorId;
- }
- manager = HRDao.getManager(emp);
- actorId = manager.getDeptManager_FK();
- currDeptLevel = manager.getDeptLevel();
- // set variables
- executionContext.setVariable("LoopActorId", actorId.trim());
- executionContext.setVariable("CurrDeptLevel", currDeptLevel);
- executionContext.setVariable("LoopTag", "loop");
- // create task
- Token token = executionContext.getToken();
- TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
- TaskNode taskNode = (TaskNode) executionContext.getNode();
- Task task = (Task)taskNode.getTasks().iterator().next();
- tmi.createTaskInstance(task, token).setActorId(actorId.trim());
- }
- }
通过两个variable,来控制这个loop是否继续。
在taskInstance end的时候判断两个variable。
下面是end的方法实现。
java 代码
- ContextInstance contextInstance = taskInstance.getTaskMgmtInstance().getProcessInstance().getContextInstance();
- String loopTag = (String)contextInstance.getVariable("LoopTag");
- if (loopTag != null && loopTag.equals("loop")) {
- Integer deptLevel = Integer.valueOf((String)contextInstance.getVariable("DeptLevel"));
- if ( deptLevel == null )
- throw new WorkflowException("in loop node , variable(DeptLevel) is null, pls set at start node");
- Integer currDeptLevel = Integer.valueOf((String)contextInstance.getVariable("CurrDeptLevel"));
- if ( currDeptLevel == null)
- throw new WorkflowException("in loop node , variable(CurrDeptLevel) is null, pls set at swimlane");
- if (currDeptLevel <=deptLevel) {
- taskInstance.end("accept");
- contextInstance.setVariable("LoopTag", null);
- }
- else taskInstance.end("loop");
- }else {
- taskInstance.end("accept");
- }
- jbpmContext.save(taskInstance);
评论
1 楼
dyw8021
2007-08-30
请教一个问题。就是说我有一个审批流程,在每个task-node接点呢,我有三个transition,分别是指向通过、不通过、返回修改task-node。我看过很多例子,大部分的作法是要调用TaskInstance.end()方法人为去指向某个接点。我感觉这样子工作流没有充分发挥作用,有没有办法就是说我在task-node配置一个expression或是别的,通过我传的参数值让jbpm自动帮我判断走向呢。我知道变通的作法就是再加一个decision,但是每个审批步骤再加一个decision或是共用一个decision会弄得流程图非常难看、复杂。有没有更好的办法呢,请赐教?
发表评论
-
会签(二)--二次会签
2007-11-08 09:58 1690需求描述:用户可以在任意环节开启会签,用以征求意见。意见征求完 ... -
会签方案(一)
2007-11-08 09:48 2053需求描述: 用户提出会签之后,需要等所有的会签任务完成之后,再 ... -
新版代理人解决方案
2007-11-08 09:35 1810上次讲到代理人的解决方案,但是在使用的过程中出了很多的问题,在 ... -
动态增加PooledActor
2007-10-10 10:17 2744请看代码 java 代码 taskInstanc ... -
有关会签的讨论
2007-10-10 10:10 2264这里仅讨论通过action动态创建task来实现的方式。 决定 ... -
任务处理人设置的几种方式
2007-10-09 20:40 2171就目前了解 有那么几种方式 swimlane: 在我 ... -
jbpm应用实例(Struts2+Spring2+iBatis2.3+WebService)
2007-07-17 16:30 5987晕,保存了一下原来写的东西没了,哭啊~~~~~~~(下次再补 ... -
实际应用中的两个通用化实现(struts2)
2007-07-09 20:18 2285现在手头的工作流页面端用的是struts2,由于以前没有用过w ... -
Swimlane的理解
2007-07-04 13:04 4145刚开始的时候,对这个概念超先不懂,什么叫泳道啊(主要是UML自 ... -
流程控制的实现类
2007-07-03 19:01 2391这是第一个版本,写的可能比较龊,还请大家见谅 java 代码 ... -
终于一个流程整合完成了
2007-07-03 18:44 2103在经历了2个星期的学习 ... -
jBPM实际应用中的一些问题及思考
2007-06-20 10:29 18321、一个node中的task,在创建之后,如果重新回退到这个n ... -
流程情景应用--用户与代理人之间的任务分派
2007-06-14 09:38 1954公司对于代理人在流程中有这样的应用: 当用户设置了代 ... -
ActorID & PooledActors
2007-06-13 16:58 2635jBPM有两种分配任务的模 ... -
jBPM流程发布
2007-05-24 09:20 4993最近在研究jBPM,碰到了 ...
相关推荐
1. **流程设计**:使用jbpm提供的BPMN编辑器(如Eclipse插件或Web表单),绘制业务流程图,定义各个活动、任务和决策节点。 2. **部署流程**:将设计好的流程模型打包成jbpm可识别的格式,然后部署到jbpm服务器上。...
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
jBPM4作为该系列的一个版本,提供了一套完整的流程管理和执行框架,允许开发者构建灵活的工作流应用,以实现业务流程自动化。本指南由胡奇编写,旨在为开发者提供一个全面的参考,帮助他们快速学习和掌握使用jBPM4...
jbpm应用开发指面(胡奇).pdf可能是胡奇专家对jbpm应用开发的实践经验分享,可能包含了最佳实践、常见问题解决方案和案例研究。开发者可以从中学到如何在实际项目中有效地运用jbpm,以及如何解决开发过程中遇到的...
NULL 博文链接:https://zpchen.iteye.com/blog/264455
综上所述,jBPM是一个功能强大、易于使用的商业流程管理工作流引擎。它不仅具备丰富的特性和高度的灵活性,而且在实际应用中也表现出了出色的稳定性和性能。对于寻求提高业务流程管理效率、简化软件开发过程的企业来...
jbPM的其他特殊功能还包括强大的监控和管理工具,如流程实例的跟踪、审计和可视化,以及支持动态流程变更和集成能力。它还提供了丰富的API和事件模型,方便开发者实现定制化的流程行为。此外,jbPM可以与其他Java EE...
在jBPM中,你可以设计流程图,这些图通过BPMN2.0语言来描述,包含了各种元素如开始节点、结束节点、用户任务、服务任务、并行网关、序列流等。这种图形化的表示方式使得业务流程易于理解,并且能与非技术人员进行...
**jBPM4工作流应用开发指南** jBPM4是一款强大的开源工作流管理系统,它为业务流程管理和执行提供了一套完整的解决方案。本指南将深入探讨jBPM4的特性和使用方法,帮助开发者实现高效的工作流应用开发。 **1. jBPM...
同时它还能被部署在任何一款JAVA应用服务器上 JBPM的工程文件,大家可以到如下网站上去下载:http://www.jboss.com/products/jbpm 目前的最新版本是3.2.1,本文就以此版本为例。在这里请大家下载jbpm-starters-...
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
【JBPM工作流应用开发文档】深入解析 JBPM(java Business Process Management)是一个基于JavaEE的轻量级工作流管理系统,旨在支持企业级的流程定义、部署、执行和管理。作为JBoss的一个子项目,它与其他优秀开源...
jbpm不仅支持工作流的建模、执行,还提供了监控和管理功能,使得开发者可以方便地构建和部署复杂的业务流程。本资料主要围绕jbpm的核心组件——jPDL进行讲解,帮助学习者深入理解jbpm的工作原理和应用。 jPDL(jBPM...
jbpm实例
理解这个应用的关键在于熟悉JBPM5的核心功能以及如何在Tomcat环境下配置和部署。 首先,JBPM5提供了以下核心功能: 1. **工作流引擎**:JBPM5内置了一个强大的工作流引擎,能够执行各种复杂的业务流程,包括任务...
JBPM_NODE JBPM_PROCESSDEFINITION FK_PROCDEF_STRTSTA STARTSTATE_ 此关系表示那个节点是开始节点 JBPM_TRANSITION JBPM_TRANSITION FK_TRANS_PROCDEF PROCESSDEFINITION_ 一个流程可能会有很多的 TRANSITION...
jbPM 3.2是该系统的一个版本,它提供了丰富的功能,包括流程设计、执行、监控以及优化,为企业构建灵活且可扩展的业务流程解决方案。 ### 一、jbPM 3.2 环境配置 在开始jbPM 3.2的开发之前,你需要配置好相应的...
### jBoss --JBPM介绍及应用 #### 一、引言与概述 JBoss jBPM(Job Business Process Management)是JBoss提供的一个强大的工作流引擎,它支持业务流程管理和自动化,尤其适用于Java环境中开发WS(Web Services)...