- 浏览: 457062 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (233)
- 技术日志 (87)
- portal (7)
- jBPM/Activiti (34)
- Roller学习 (18)
- Java基础、网站开发 (19)
- 收藏URL (4)
- UML (3)
- linux操作 (7)
- 工作环境准备 (8)
- Mina (15)
- tomcat (8)
- Mylyn (3)
- sina网站 (2)
- 规则引擎 (3)
- 工作记录 (11)
- html(5) (9)
- 手机开发 (3)
- oracle (26)
- 常用的 (2)
- maven (8)
- hadoop (0)
- xml (7)
- 错误解决 (5)
- linux (1)
- c# (2)
- c++ (1)
- node.js (1)
- 银行业务知识 (1)
- Java调试 (0)
最新评论
-
tomcatmeng:
请问候选用户是怎样task自己的任务,看网上说先根据任务id先 ...
jBPM4.4:ForEach的使用--动态设置参与人数 -
maoweiwer:
友情提醒:如果是在MYSQL下创建数据库,则还需要更改\jbp ...
jBPM4.4: 创建数据库表 -
zybing:
ganjiang 写道有点疑惑,请lz指点,1.那个“depl ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤 -
zybing:
ganjiang 写道有点疑惑,请lz指点,1.那个“depl ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤 -
ganjiang:
有点疑惑,请lz指点,1.那个“deployId”不知是那个i ...
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤
工作场景: 有一项任务需要完成,不同的部门领导根据实际情况,有的交给一个人完成,有的会交给2、3甚至更多的人完成,这个时候,流程就是由程序进行设置了,而无法在画流程图的时候写死了。
找到了一些资料:
如:
http://yy629.iteye.com/blog/660701 --- 比较全面
http://phoenix-clt.iteye.com/blog/428242
做了一下,可以通过设置subtask来创建会签流程,有问题正在解决:
1. 如果会签中的一员已经signal了,而其他人还没有完成,怎么把这个subtask complete掉,否则只要其他人没有结束,这个人就是signal了,还是看到这个任务;
在signal中,把ActivityExecution转成ExecutionImpl,调用其getExecution().end即可,这样这个人的会签就结束了;
2. 在例子中,加入的subtask,都需要在HistoryTaskImpl中进行addsubtask,现在一到这里就会发生Exception;
3. 还没有做回退的功能
4.
http://yy629.iteye.com/blog/660701 --- 比较全面
一些说明:
创建流程
在execute方法中,创建subTask
1. 首先创建一个task,将这个task存盘(通过DbSession)
//创建会签任务 // DBSession: DbSession dbsession = EnvironmentImpl.getFromCurrent(DbSession.class); // execution: execute方法的参数 private TaskImpl createCounterSignTask(DbSession dbsession, ExecutionImpl execution) { // 创建一个新Task TaskImpl task = dbsession.createTask(); task.setName(execution.getActivityName() + "_会签"); // 设置了type, 便于以后做流程展示时区别 -- 暂时没有清楚作用 execution.getActivity().setType(COUNTER_SIGN_TASK_TYPE); task.setExecution(execution); task.setProcessInstance(execution.getProcessInstance()); task.setSignalling(false); // false, 自己手工处理execution的跳转 task.setFormResourceName(form); task.setDescription(description); // 存盘,非常重要,获取到task的id dbsession.save(task); // 这个应该和历史事件等相关,目前还不清楚 HistoryEvent.fire(new TaskActivityStart(task), execution); return task; }
2. 创建这个task的subTask,根据人数,每个人一个subtask
// 创建会签子任务 这里才是真正的会签任务.. // 函数参数中的execution:是execute方法中的execution private void newCounterSignSubTask(DbSession dbsession, ExecutionImpl execution, TaskImpl task, String user, HistoryTaskImpl ht) { // 开始创建sub task TaskImpl subtask = task.createSubTask(); // 设置一些属性 subtask.setName(execution.getActivityName() + "$" + user); subtask.setAssignee(user); subtask.setSignalling(false); // false, 自己手工处理execution的跳转 // 这里用的都是父execution,自己写的时候曾经搞错过,错误查都查不出来 ExecutionImpl exec = execution.createExecution(); // 创建子Execution ActivityImpl activity = execution.getActivity(); activity.setType(COUNTER_SIGN_SUB_TASK_TYPE); // 设置类型, 便于区别 exec.setActivity(activity); exec.setState(Execution.STATE_ACTIVE_CONCURRENT); // 再设置原来的type exec.setHistoryActivityStart(Clock.getCurrentTime()); // sub task对应的是 子execution subtask.setExecution(exec); subtask.setFormResourceName(form); subtask.setDescription(description); // 也是需要持久化的,存盘 dbsession.save(subtask); // 下面的这些暂未看,以后再研究 // 修改了jbpm4中的源码, 主要是用来计算任务的url的, 把其中的占位符替:{TASK_ID}换为该task的task id TaskActivity.replaceTaskResourceFormTaskIdMarco(subtask); HistoryEvent.fire(new TaskActivityStart(subtask), exec); ht.addSubTask(dbsession.get(HistoryTaskImpl.class, subtask.getDbid())); }
Signal的实现
1. signalName,作为了审核答复
2. 把task作为map中的一个参数,传给了Signal方法(在signal方法中,通过execution.getTask获取的task,是个null )
3.
4. 将所有的会签结果,放在ProcessInstance的variable中,这样在整个流程中可见
通过传给signal方法的subtask,获取到父Task,通过这个父task,可以获取到其他所有的subtask,把这些task、execution停止;
List<Task> subTaskList = taskService.getSubTasks(task.getId()); // 这个task是父task if (subTaskList != null && subTaskList.size() > 1) { // 处理未完成的会签子任务 String assignee = theSubTask.getAssignee(); for (Task subTask : subTaskList) { if (!assignee.equals(subTask.getAssignee())) { TaskImpl subTaskImpl = (TaskImpl) subTask; subTaskImpl.setSuperTask(null); taskService.completeTask(subTaskImpl.getId(), COUNTER_SIGN_SUB_TASK_CANEL_STATE); subTaskImpl.getExecution().end(COUNTER_SIGN_SUB_EXECUTION_END_STATE); // 结束execution } } }
下面是处理转向的流程
// 定义一个转向 Transition transition = null; // 获得当前的activity Activity activity = executionImpl.getActivity(); // 找到这个转向 if ((outcome == null) || outcome.length() == 0 || ((Task.STATE_COMPLETED.equals(outcome) || TaskConstants.NO_TASK_OUTCOME_SPECIFIED.equals(outcome)) && (activity.getOutgoingTransitions() != null) && (activity.getOutgoingTransitions().size() == 1))) { transition = activity.getOutgoingTransitions().get(0); } else { transition = activity.findOutgoingTransition(outcome); } String transitionName = transition == null ? null : transition.getName(); variables.put(transtionName, transitionName); // 完成父任务,进行转向 taskService.completeTask(task.getId(), transitionName, variables); if (transition != null) { executionImpl.take(transition); }
发表评论
-
jBPM4.4+SpringSecurity用户合并到自己体系中来
2011-12-30 10:53 3520jbPM4.4中的用户: 见:http://zybin ... -
从JBPM4以后的走向
2011-12-23 09:47 2089从JBPM4以后, 原来jBPM的设计师Tom Baeye ... -
jBPM4.4:查找任务完成过程
2011-08-29 11:50 2687在jBPM中,历史的任务,通过historyService可以 ... -
【jBPM】jbpm怎么获取下一个节点的任务定义,注意不是任务实例。
2011-08-27 06:19 3443http://jbpm.group.iteye.com/gro ... -
jBPM4:在Listen中使用Spring的Bean
2010-12-07 10:23 1895jBPM和Spring结合,在spring中配置了大量的Bea ... -
jBPM4:sub-process
2010-11-16 10:03 1845看了一下sub-process, ... -
jBPM4.4:配置(包括和Spring的整合,和Hibernate配置)
2010-11-08 14:50 5275jBPM4.4,获取ProcessEngine是通过Confi ... -
jBPM4.4:如何图示化显示当前的流程执行到了哪一步骤
2010-10-29 11:17 5871流程执行时,有时候需要看一下当前的工作卡在哪一步了,对于熟悉流 ... -
jBPM4:接在现有的系统上,需要更换用户体系
2010-10-08 17:59 2378在现有的应用上,接入jBPM,要修改的就是jBPM的用户体系。 ... -
jBPM4.4:ForEach的使用--动态设置参与人数
2010-09-13 14:34 7714流程确定的情况下,有时候完成一个步骤人数不确定,在任务发布的时 ... -
jBPM4.4:动态创建连接
2010-09-02 18:23 2378参考了这篇文档的思路: http://man1900.ite ... -
jBPM4.4:完成任务的几种方法
2010-09-02 13:46 1770开始了一个Process,需要完成任务,完成任务有以下几种方法 ... -
jBPM4.4:ProcessFactory和ProcessDefinitionBuilder
2010-08-31 15:44 1588在文档中,有例子可以 ... -
jBPM4.4:在看开发指南之前总结一下
2010-08-31 10:08 2147jBPM4.4: 源头是Config ... -
jBPM4.4 -- 深入了解数据库结构、关系
2010-08-27 17:13 2905重新深入了解jBPM4.4的数据库表、以及之间的关系: ... -
jBPM4.4:ProcessDefinition/ProcessInstance/Execution/Task关系和区别
2010-08-24 16:06 9951ProcessDefinition : 这 ... -
jBPM4.4:分配任务的几种方式
2010-08-24 11:19 3366在jBPM中,分配任务可以有几种方式: 按照分配对象,可以分 ... -
jBPM4.4:获取现有的流程
2010-08-19 16:50 1534通过repositoryService, 获取一个Proces ... -
jBPM4.4:创建一个流程的实例
2010-08-19 13:42 3037发布了流程后,创建一个实例,进行执行。 ProcessEng ... -
jBPM4.4:发布自己第一个流程
2010-08-19 11:41 2849开始自己着手尝试:先发布自己第一个流程: 用Eclip ...
相关推荐
【jbpm-4.4.zip part03】这个压缩文件是关于jbpm 4.4版本的组成部分,jbpm(Java Business Process Management)是一个开源的工作流管理系统,它提供了业务流程建模、部署、执行和监控的功能。jbpm 4.4是该系统的一...
《jBPM4.4开发指南》与《jBPM4.4中文用户手册》是深入理解jBPM4.4这一开源工作流管理系统的重要参考资料。jBPM,全称Java Business Process Management,是一个用于执行业务流程的轻量级、灵活的开源框架,它为业务...
在本压缩包 "jBPM4.4Pssh.rar" 中,重点是将 jbPM 4.4 与 SSH(Struts、Spring 和 Hibernate)框架整合的示例。SSH 是 Java Web 开发中常见的三大框架,它们分别负责视图层、业务层和数据持久层的管理。 Struts 是...
- **添加 jPDL 4.4 Schema 校验**:用于校验流程定义文件的 xsd 文件路径为 JBPM_HOME/src/jpdl-4.4.xsd。 - 添加方法: 1. Window -> Preferences 2. 选择 XML -> XML Catalog 3. 点击 Add 4. 打开 Add XML ...
- 浏览并选择文件路径 `D:\jbpm-4.4\install\src\gpd\jbpm-gpd-site.zip`。 - 点击 “Next”,完成安装后重启 MyEclipse。 #### 三、HelloWorld 示例 本节将详细介绍如何创建一个简单的 jBPM HelloWorld 示例。 ...
JBPM4.4是JBoss Business Process Management (BPM)平台的一个特定版本,它提供了用于设计、执行和管理业务流程的工具和框架。在JBPM4.4中,数据库是存储流程实例、流程定义以及相关元数据的关键部分。以下是关于...
- **环境搭建**: 首先,你需要从JBPM官网下载对应版本的jar包,包括jbpm-runtime、jbpm-gwt-console-server等依赖库,将其添加到项目的类路径中。 - **数据库配置**: JBPM4.4需要一个数据库存储流程实例和相关数据,...
jbpm-4.4\jbpm-4.4\doc\javadocsjbpm-4.4\jbpm-4.4\doc\javadocsjbpm-4.4\jbpm-4.4\doc\javadocs
jBPM 4.4的下载地址为:http://sourceforge.net/projects/jbpm/files/jBPM%204/jbpm-4.4/。在下载页面上,你可以找到不同的包,包括源代码、二进制文件和文档。选择适合你需求的包进行下载。安装过程通常涉及解压缩...
完美版JBPM4.4帮助文档,开发必备。
在JBPM4.4版本中,它提供了一个强大的平台来设计、部署和执行复杂的业务流程,其中包括了会签功能。会签,也称为并发审批,是指在业务流程中,需要多个审批人同时或按顺序对同一任务进行审批的场景。本实例通过...
5. 集成能力:jbpm4.4可以与Java EE、Spring、Hibernate等框架无缝集成,便于开发企业级应用。 三、jbpm4.4学习路径 1. 基础概念:首先需要了解BPM的基本概念,如流程实例、任务、事件、信号等。 2. 工具使用:学习...
在这个入门开发实例中,我们将探讨如何利用jBPM4.4进行业务流程的建模、部署和执行。 **一、jBPM4.4核心概念** 1. **流程定义(Process Definition)**:使用jBPM的流程定义语言(BPML或BPMN)来描述业务流程。...
6. **规则集成**: jbpm4.4可以与Drools规则引擎结合,实现业务规则在流程执行过程中的动态应用,提升决策的灵活性。 7. **监控和报表**: 提供了监控工具,允许管理员查看流程实例的状态、跟踪任务执行情况,并生成...
- **业务规则集成**: 可以与Drools规则引擎无缝集成,实现业务规则的动态执行。 ### 3. jbpmDemo实例分析 jbpmDemo实例展示了如何使用jBPM4.4进行流程实例的创建、执行和管理。可能包含以下内容: - **流程定义...
5. **规则集成**:通过与Drools(一个规则引擎)的集成,JBPM4.4允许在流程中嵌入决策逻辑,使得流程可以根据业务规则自动执行不同的路径。 6. **监控和报表**:JBPM4.4提供了监控工具,可以跟踪流程实例的执行状态...
3. **运行交互功能**:实现工作流管理系统与用户、外部应用程序的交互,增强流程的动态适应性。 采用工作流管理系统的优点显著,包括但不限于提升系统柔性以应对业务流程变化、加强业务过程控制、优化客户服务体验...
标题中的"JBPM4.4所需要的包.rar"表明这是一个与JBPM 4.4版本相关的压缩文件,包含了一些必要的库和组件。JBPM(Java Business Process Management)是一个开源的工作流和业务流程管理系统,用于设计、执行和管理...