- 浏览: 432837 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
man1900:
想部署及学习了解,可参考本人新的博客获得下载源代码。http: ...
JOffice 中的JBPM4在线流程设计器--初览(Applet版) -
atgoingguoat:
哎。假的。
JOffice 中的JBPM4在线流程设计器--初览(Applet版) -
电竞杀神张无忌:
这是主流程调用子流程报的错大神指导原因吗? ...
JBPM4的子流程与父流程的设计及开发 -
贝塔ZQ:
pageoffice也是office在线编辑的吧,J.Offi ...
J.Office另一种在线Office编辑器整合 -
Mybonnie1:
你好,想问下,串行的多实例任务能做到回退么
Activiti 多个并发子流程的应用
我们知道jbpm4.4提供了三种比较方便的分支跳转方式,如下所示:
1.通过expression
<?xml version="1.0" encoding="UTF-8"?> <process name="DecisionExpression" xmlns="http://jbpm.org/4.4/jpdl"> <start g="16,102,48,48"> <transition to="evaluate document"/> </start> <decision name="evaluate document" expr="#{content}" g="96,102,48,48"> <transition name="good" to="submit document" g="120,60:-36,23" /> <transition name="bad" to="try again" g=":-15,-21" /> <transition name="ugly" to="give up" g="120,189:-35,-41" /> </decision> <state name="submit document" g="175,35,122,52" /> <state name="try again" g="176,100,122,52" /> <state name="give up" g="177,164,122,52" /> </process>
2.通过handler
<?xml version="1.0" encoding="UTF-8"?> <process name="DecisionHandler" xmlns="http://jbpm.org/4.4/jpdl"> <start g="16,102,48,48"> <transition to="evaluate document" name=""/> </start> <decision name="evaluate document" g="96,102,48,48"> <handler class="org.jbpm.examples.decision.handler.ContentEvaluation"/> <transition name="good" to="submit document" g="120,60:-37,22" /> <transition name="bad" to="try again" g=":-19,-22" /> <transition name="ugly" to="give up" g="120,189:-33,-39" /> </decision> <state name="submit document" g="175,35,122,52" /> <state name="try again" g="176,100,122,52" /> <state name="give up" g="177,164,122,52" /> </process>
3.通过condition
<?xml version="1.0" encoding="UTF-8"?> <process name="DecisionConditions" xmlns="http://jbpm.org/4.4/jpdl"> <start g="16,102,48,48"> <transition to="evaluate document" /> </start> <decision name="evaluate document" g="96,102,48,48"> <transition to="submit document" g="120,60:"> <condition expr="#{content=="good"}" /> </transition> <transition to="try again"> <condition expr="#{content=="bad"}" /> </transition> <transition to="give up" g="120,189:" /> </decision> <state name="submit document" g="175,35,122,52"/> <state name="try again" g="176,100,122,52"/> <state name="give up" g="177,164,122,52"/> </process>
我们发现这种方式,若一旦我们的流程定义完成后,再想在运行中动态改变这种分支条件的设计就很难了,但是我们知道可以在流程定义发布到后台后,我们可以提供动态修改xml的方式,用handler的方式加上我们的分支决定的decision(需要实现jpbm的decision接口即可),通过handler来实现分支有一个比较大的优点就是我们可以在handler动态去执行我们需要工作流额外执行的代码,并且可以通过这个判断来决定其跳转的路径。
但我们不可能为所有的有分支决定的流程都加一个decision handler,并且在里面进行动态的分支判断。那样的工作很大,并且不灵活。
我们看一下第二种handler的接口:
package org.jbpm.examples.decision.handler; import org.jbpm.api.jpdl.DecisionHandler; import org.jbpm.api.model.OpenExecution; public class ContentEvaluation implements DecisionHandler { private static final long serialVersionUID = 1L; public String decide(OpenExecution execution) { String content = (String) execution.getVariable("content"); if (content.equals("you're great")) { return "good"; } if (content.equals("you gotta improve")) { return "bad"; } return "ugly"; } }
在这里我们可以看到,可以通过动态返回跳转路径则可。在上面我说过了,不能把这个返回值交给具体的decisionHandler来决定,这个决定应该由流程运行来动态决定,我们需要告诉这个handler,你需要按我的规则来运行计算,得到一个运行跳转的路径。于是我想到能不能用bsh有脚本来动态返回告诉这个handler如何执行。
以下我们以一个简单的订单流程来说明如何实现这个动态设计分支跳转。
首先我在线设计了一个流程,如下所示:
发布后,设计其分支条件,如下所示:
我们在条件那里加入流程干预:
String tranTo="金额小于2000元"; if(price*quantity>=2000){ tranTo="金额大于等于2000"; }
这个tranTo则是由我们系统的管理员来控制,大家发现其本身就是java代码来的,熟悉一些简单的java语法均可以。当然若我们在这里还可以做一些更复杂的操作,如执行调用第三方系统的接口等。
那么以上的price与quantity变量来自哪里呢?它们是流程表单里的字段,于是我们为这个流程动态绑定一个流程表单。
首先我们设计一个流程表单:
其对应的字段映射为:
在后台绑定该表单:
启动流程:
执行后,可以看到流程自动判断跳转:
我们看一下本身我们的handler如何写:
package com.htsoft.oa.workflow.handler; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jbpm.api.ProcessDefinition; import org.jbpm.api.ProcessEngine; import org.jbpm.api.jpdl.DecisionHandler; import org.jbpm.api.model.Activity; import org.jbpm.api.model.OpenExecution; import bsh.EvalError; import bsh.Interpreter; import com.htsoft.core.util.AppUtil; import com.htsoft.oa.model.flow.ProHandleComp; import com.htsoft.oa.service.flow.ProHandleCompService; /** * 实现分支决定,可以在这里根据业务逻辑计算,决定分支的跳转 * @author * */ public class DecisionHandlerImpl implements DecisionHandler{ private static final Log logger=LogFactory.getLog(DecisionHandlerImpl.class); @Override public String decide(OpenExecution execution) { logger.debug("enter decision handler...."); ProcessEngine processEngine=(ProcessEngine)AppUtil.getBean("processEngine"); ProHandleCompService proHandleCompService=(ProHandleCompService)AppUtil.getBean("proHandleCompService"); String pdId=execution.getProcessDefinitionId(); ProcessDefinition processDefinition= processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId(pdId).uniqueResult(); String deployId=processDefinition.getDeploymentId(); Activity curActivity=execution.getActivity(); List<ProHandleComp> list=proHandleCompService.getByDeployIdActivityNameHandleType(deployId, curActivity.getName(), ProHandleComp.HANDLE_TYPE_HANDLER); if(list.size()>0){ ProHandleComp proHandleComp=list.get(0); logger.info("exeCode:" + proHandleComp.getExeCode()); //执行动态 Interpreter it=new Interpreter(); try { //取得所有流程变量,放于bsh环境,方便在bsh脚本环境中运行以方便决定流程跳转 Map<String,Object> vars=(Map<String,Object>)execution.getVariables(); Iterator<Entry<String, Object>> iterator= vars.entrySet().iterator(); while(iterator.hasNext()){ Entry<String, Object> entry=iterator.next(); String key=entry.getKey(); Object val=entry.getValue(); it.set(key.replace(".", "_"), val); } logger.info("dynamic execution code tranTo:"+proHandleComp.getExeCode()); it.eval(proHandleComp.getExeCode()); String tran=(String)it.get("tranTo"); logger.info("return tranTo:"+tran); return tran; } catch (EvalError e) { e.printStackTrace(); } } return null; } }
里面其实比较简单,就是通过动态执行那个给用户开放的代码片段,并且根据其tranTo变量的值来决定其如何跳转,在上面的例子就是流程表单中的金额是否大于2000元来跳转。
同样,我们知道jbpm4_lob中存着jbpm4的流程定义的xml文件,只要把动态修改jbpm4的流程定义,可以为我们的作何节点加上我们需要流程动态执行的事件及代码。请关注后续的文章,有介绍如何扩展jbpm4的流程事件。
在线看预览情况:
http://bbs.jee-soft.cn/swf/design_decision.html
http://bbs.jee-soft.cn/posts/list/285.page#384
在线测试地址:
网通:
http://oa.jee-soft.cn:8080/index.jsp
电信:
http://office.jee-soft.cn:8080/index.jsp
用户:admin,密码:1
发表评论
-
Activiti 工作流会签开发设计思路
2012-07-26 12:12 28500Activiti 工作流会签开 ... -
基于开源流程引擎Activiti5的工作流开发平台
2012-05-17 11:28 7233http://www.redxun.cn:8 ... -
Jbpm4或Activiti5的流程任务分发与汇总
2012-03-20 18:28 6283应用场景:在企业或事业单位,经常需要把一个任务分派给多条线去 ... -
关于Activiti或JBPM流程的回退的讨论之一
2011-12-30 12:08 8896需求: ... -
Activiti 5 在线流程设计器开发
2011-11-30 08:56 23779jbpm4的开发成员to ... -
基于标签方式的工作流启动及任务执行开发说明
2011-09-25 21:21 2309基于现在的系统的整 ... -
JOffice2 发布了开源的开发者体验版本啦!
2011-08-09 23:42 7303JOffice的爱好者有福音了,经公司决定,现在发布 ... -
关于JOffice的业务表单与流程的整合问题
2011-07-26 23:55 3322关于 JOffice 的业务表 ... -
JBPM4的子流程与父流程的设计及开发
2011-07-14 11:23 5669【JBPM4的子流程 ... -
Jbpm4中的会签设计及实现
2011-05-05 15:20 7678会签任务是工作流里一个比较觉见的任务方式,意思是一 ... -
J.Office 2 JBPM4.4 工作流增强版特性
2011-04-27 16:00 37332.0主要在工作流方面提供了很强的改进,jbpm升级至jbpm ... -
JOffice2的在线表单设计示例(JBPM4.4)
2011-03-16 13:52 6003JOffice2目前升级至jbpm ... -
JOffice2中的JBPM4的任务回退实现
2010-12-07 15:27 3590任务回退的工作可以有两种实现方式: 1. 完成当前 ... -
利用JBPM4.4的AssignmentHandler实现用户角色整合另一种构思
2010-11-26 17:05 6250Jbpm4提供的IdentitySession ... -
分享宏天免费的JBPM4流程设计器(Applet)
2010-07-07 11:56 312JBPM4一直没有一个很好的在线流程设计器,基于这种方式,跟大 ... -
JOffice中的自定义发文流程与运行模板设计
2010-07-05 22:59 3219开发与设计公文流程在所有的政府oa项目上都少不了此需求,而能灵 ... -
JBPM4中的任务回退、补签、自由流程实现
2010-04-22 16:12 10454最近在实施政府办公项 ... -
OA JBPM中的公文(发文、收文)流程
2010-03-25 00:10 11460公文管理主要包括两大模块,其一是发文管理,其二是收文管理,非常 ... -
JBPM在线流程设计器的分析与实现部分构想
2010-03-10 13:54 7389在发表文章之前,先 ... -
取得任务节点的对外所有跳转Transition对象
2010-03-09 11:32 2406在流程的任务里,我们需要把当前的任务节点的下一步的跳转选择显示 ...
相关推荐
在《jBPM4.4开发指南》中,开发者可以了解到jBPM4.4的核心功能和设计原理。该指南通常涵盖以下几个关键知识点: 1. **系统架构**:jBPM4.4基于Eclipse Persistence API(JPA)和Hibernate ORM,提供了持久化服务,...
本教程将深入探讨jbpm4.4的在线设计流程图特性,以及如何利用ext(一个JavaScript UI库)和raphael(一个矢量图形库)进行流程图的绘制与交互。 首先,jbpm4.4中的在线设计流程图功能依赖于ext库,它提供了丰富的...
3. **用户界面**:为了便于非技术背景的用户使用,jBPM 4.4提供了图形化的设计工具,允许用户通过拖放操作来构建复杂的业务流程,而无需编写任何代码。 4. **事件驱动架构**:jBPM 4.4采用了事件驱动的架构,这意味...
1. 示例项目:通过分析jbpm4.4提供的示例项目,了解实际应用中的流程设计和实现。 2. 自定义服务:学习如何定义和实现自定义的服务任务,与外部系统交互。 3. 监控与报表:了解jbpm的监控工具和报表功能,用于分析...
通过这个入门实例,开发者可以学习到如何使用jBPM4.4进行流程设计、部署和执行的基本操作,并逐步掌握其在实际项目中的应用。在实践中不断探索和深入,才能更好地利用jBPM4.4实现业务流程自动化,提高工作效率。
**jbpm4.4中文开发指南** JBPM(Java Business Process Management)是一个开源的工作流管理系统,专注于业务流程的建模、执行和管理。jbpm4.4是该系统的某一版本,它提供了丰富的功能,包括流程定义、流程实例的...
### jBPM4.4开发指南关键知识点解析 #### 一、工作流基础与概念 **1. 工作流定义** 工作流是指业务过程的部分或整体在计算机应用环境下的自动化,其目的是为了使在多个参与者之间按照某种预定义的规则传递文档、...
**jBPM 4.4 用户手册 中文PDF** **jBPM 4.4** 是一个开源的工作流程管理系统,由Red Hat公司开发并维护,主要用于业务流程管理(BPM)和工作流自动化。该系统提供了强大的流程建模、执行和监控功能,支持Java平台,...
在JBPM4.4版本中,开发者可以利用其提供的API和工具来设计、部署和执行复杂的业务流程。 首先,让我们深入了解一下JBPM4.4的核心特性: 1. **流程建模**:JBPM4.4支持BPMN(Business Process Modeling Notation)...
jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd jbpm4.4 schema.xsd
- jbpm4.4是jbpm的第4代版本,提供了一套完整的流程管理解决方案,包括流程设计、执行、监控和优化。 - 它支持BPMN2.0标准,使得业务流程可以通过图形化的方式进行建模,非技术人员也能理解和修改。 - jbpm4.4...
### jBPM4.4 API 详解:工作流自动化的核心技术 #### 一、工作流基础知识 工作流,作为业务过程的部分或整体自动化,旨在通过计算机应用环境实现文档、信息或任务在多个参与者间的自动传递,以达到预期的业务目标...
JBPM4.4与SSH2之整合(附完整源码) 这些天,想着把jbpm4.4与ssh2整合一下,由于之前从来没用过jbpm,也不知道各版本之间会有什么差异(经过网上的收集对比,还真有些差异),整合起来,还真是有些步履艰难。收集了...
这份文档主要面向开发者,详细阐述了如何在项目中集成和使用jBPM 4.4进行流程设计和开发。它涵盖了以下关键知识点: 1. **环境配置**:介绍如何设置开发环境,包括JDK、Maven以及Eclipse等开发工具的安装和配置。 ...
"jBPM4.4.docx" 文件可能是关于 jbPM 4.4 示例的详细文档,它可能包含如何安装、配置、创建和运行流程实例的步骤,以及可能遇到的问题和解决办法,对于学习和使用 jbPM 4.4 是非常有价值的参考资料。 总结,jbPM ...
JBPM4.4提供了一套强大的工具,包括流程设计工具(如Graclipse)、服务器端的流程引擎以及API,使得流程的生命周期管理变得简单。 3. **报销流程** - 报销流程通常涉及员工提交报销申请、财务部门审批、会计核算等...
【jbpm4.4+SSH】是一个集成的Java企业级应用框架,主要涉及的是工作流管理系统jbpm4.4与Spring、Struts2(SSH)三大框架的整合。jbpm4是一个开源的工作流程管理系统,它提供了流程定义、执行、监控和优化等一系列...
JBPM4.4是JBoss Business Process Management (BPM)平台的一个特定版本,它提供了用于设计、执行和管理业务流程的工具和框架。在JBPM4.4中,数据库是存储流程实例、流程定义以及相关元数据的关键部分。以下是关于...
【标题】"jbpm4.4spring.rar_jbpm4_jbpm4.4" 提供的是一个关于JBPM4.4与Spring框架整合的实际应用案例。JBPM(Java Business Process Management)是一款开源的工作流管理系统,它允许开发者设计、执行、管理和监控...