- 浏览: 431973 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
man1900:
想部署及学习了解,可参考本人新的博客获得下载源代码。http: ...
JOffice 中的JBPM4在线流程设计器--初览(Applet版) -
atgoingguoat:
哎。假的。
JOffice 中的JBPM4在线流程设计器--初览(Applet版) -
电竞杀神张无忌:
这是主流程调用子流程报的错大神指导原因吗? ...
JBPM4的子流程与父流程的设计及开发 -
贝塔ZQ:
pageoffice也是office在线编辑的吧,J.Offi ...
J.Office另一种在线Office编辑器整合 -
Mybonnie1:
你好,想问下,串行的多实例任务能做到回退么
Activiti 多个并发子流程的应用
Jbpm4提供的IdentitySession接口并不是一种很好的处理方式,鉴于我们每个业务系统都有一套自己的用户及权限认证管理机制,需要与jbpm4.4集成的话,就比较周折了,我们经常需要查询的就是用户自己的任务。jbpm4的任务里有一个比较好的任务人员指派定义方式,就是使用AssignmentHandler接口,其定义如下所示:
<?xml version="1.0" encoding="UTF-8"?> <process name="TaskAssignmentHandler" xmlns="http://jbpm.org/4.4/jpdl"> <start g="20,20,48,48"> <transition to="review" /> </start> <task name="review" g="96,16,127,52"> <assignment-handler class="org.jbpm.examples.task.assignmenthandler.AssignTask"> <field name="assignee"> <string value="johndoe" /> </field> </assignment-handler> <transition to="wait" /> </task> <state name="wait" g="255,16,88,52" /> </process>
package org.jbpm.examples.task.assignmenthandler; import org.jbpm.api.model.OpenExecution; import org.jbpm.api.task.Assignable; import org.jbpm.api.task.AssignmentHandler; /** * @author Tom Baeyens */ public class AssignTask implements AssignmentHandler { private static final long serialVersionUID = 1L; String assignee; public void assign(Assignable assignable, OpenExecution execution) { assignable.setAssignee(assignee); } }
这要求我们在设计流程定义后,任务的处理人已经必须定下来了,但若我们在流程发布后,还需要手工改这里的任务执行人员(并且人员是我们系统的用户),甚至人员可能在流程运行过程中,由用户在任务表单或计算过程中动态指定,以上的方式并不能满足我们的要求。
基于这种想法,应该设计另一种允许用户修改流程定义中的人员,并且跟我们的系统用户角色结合起来。
jbpm4之后的版本,启动流程及运行流程时,都会去读取流程定义,因此,我们可以动态修改以上配置文件,让其生成类似如下的配置格式即可以满足我们的要求:
<?xml version="1.0" encoding="UTF-8"?> <process name="TaskAssignmentHandler" xmlns="http://jbpm.org/4.4/jpdl"> <start g="20,20,48,48"> <transition to="review" /> </start> <task name="review" g="96,16,127,52"> <assignment-handler class="com.htsoft.core.jbpm.AssignmentHandler"> <field name="userIds"> <string value="1" /> </field> <field name="roleIds"> <string value="1,2" /> </field> </assignment-handler> <transition to="wait" /> </task> <state name="wait" g="255,16,88,52" /> </process>
以上的userIds的1,以及roleIds的1,2则代表我们系统中的用户id与角色的id,其值由后台用户在后面通过界面来设置。
其设置后,就生成以上的代码写至jbpm4_lob表中的blobvalue字段中去则可,这是持久化的处理。
也可以临时调用类似以下的代码动态实现以上效果:
/** * 为流程定义加上任务的指派人员接口 * @param deployId */ public void addAssignHandler(ProUserAssign proUserAssign){ ProcessDefinitionImpl pd=(ProcessDefinitionImpl)repositoryService.createProcessDefinitionQuery().deploymentId(proUserAssign.getDeployId()).uniqueResult(); EnvironmentFactory environmentFactory = (EnvironmentFactory) processEngine; EnvironmentImpl env=null; try { env = environmentFactory.openEnvironment(); //找到任务的定义 TaskDefinitionImpl taskDef=pd.getTaskDefinition(proUserAssign.getActivityName()); UserCodeReference userCodeReference = new UserCodeReference(); ObjectDescriptor descriptor = new ObjectDescriptor(); //加上任务的人员动态指派 descriptor.setClassName("com.htsoft.core.jbpm.UserAssignHandler"); //动态加参数 FieldOperation userIdsFo = new FieldOperation(); userIdsFo.setFieldName("userIds"); userIdsFo.setDescriptor(new StringDescriptor(proUserAssign.getUserId())); FieldOperation groupIdsFo=new FieldOperation(); groupIdsFo.setFieldName("groupIds"); groupIdsFo.setDescriptor(new StringDescriptor(proUserAssign.getRoleId())); List<Operation> listOp=new ArrayList<Operation>(); listOp.add(userIdsFo); listOp.add(groupIdsFo); descriptor.setOperations(listOp); userCodeReference.setCached(false); userCodeReference.setDescriptor(descriptor); taskDef.setAssignmentHandlerReference(userCodeReference); }catch(Exception ex){ logger.error("ADD AssignHandler Error:" + ex.getMessage()); }finally{ if(env!=null){ env.close(); } } }
不过该方式没有持久久,重启系统后,保存的用户及角色设置并不会生效。
UserAssignHandler类代码如下:
package com.htsoft.core.jbpm; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jbpm.api.model.OpenExecution; import org.jbpm.api.task.Assignable; import org.jbpm.api.task.AssignmentHandler; import com.htsoft.core.Constants; /** * 尚未开始使用 * <B><P>Joffice -- http://www.jee-soft.cn</P></B> * <B><P>Copyright (C) 2008-2010 GuangZhou HongTian Software Company (广州宏天软件有限公司)</P></B> * <B><P>description:</P></B> * <P></P> * <P>product:joffice</P> * <P></P> * @see com.htsoft.core.jbpm.UserAssignHandler * <P></P> * @author * @version V1 * @create: 2010-11-23下午02:58:01 */ public class UserAssignHandler implements AssignmentHandler{ private Log logger=LogFactory.getLog(UserAssignHandler.class); //授予用户ID String userIds; //授权角色ID String groupIds; @Override public void assign(Assignable assignable, OpenExecution execution) throws Exception { String assignId=(String)execution.getVariable(Constants.FLOW_ASSIGN_ID); logger.info("assignId:===========>" + assignId); //在表单提交中指定了固定的执行人员 if(StringUtils.isNotEmpty(assignId)){ assignable.setAssignee(assignId); return; } //在表单中指定了执行的角色TODO //在表单中指定了会签人员 String signUserIds=(String)execution.getVariable(Constants.FLOW_SIGN_USERIDS); if(signUserIds!=null){ //TODO 取到该任务,进行会签设置 } logger.debug("Enter UserAssignHandler assign method~~~~"); if(userIds!=null){//若用户不为空 String[]uIds=userIds.split("[,]"); if(uIds!=null && uIds.length>1){//多于一个人的 for(String uId:uIds){ assignable.addCandidateUser(uId); } }else{ assignable.setAssignee(userIds); } } if(groupIds!=null){//若角色组不为空 String[]gIds=userIds.split("[,]"); if(gIds!=null&& gIds.length>1){//多于一个角色的 for(String gId:gIds){ assignable.addCandidateGroup(gId); } }else{ assignable.addCandidateGroup(groupIds); } } } }
评论
4 楼
jakey766
2011-10-31
我现在正碰到这样个问题,想请教下楼主:
String assignId=(String)execution.getVariable(Constants.FLOW_ASSIGN_ID);
logger.info("assignId:===========>" + assignId);
//在表单提交中指定了固定的执行人员
if(StringUtils.isNotEmpty(assignId)){
assignable.setAssignee(assignId);
return;
}
这样的话如果execution.getVariable(Constants.FLOW_ASSIGN_ID)获取到的值不为空,那该流程的后面每一步都能取到该值?
如果在流程的第一个表单选择指派一个人,然后之后的环节又不指派人,那不是后面的环节都只有这个指派的人有权限么?
String assignId=(String)execution.getVariable(Constants.FLOW_ASSIGN_ID);
logger.info("assignId:===========>" + assignId);
//在表单提交中指定了固定的执行人员
if(StringUtils.isNotEmpty(assignId)){
assignable.setAssignee(assignId);
return;
}
这样的话如果execution.getVariable(Constants.FLOW_ASSIGN_ID)获取到的值不为空,那该流程的后面每一步都能取到该值?
如果在流程的第一个表单选择指派一个人,然后之后的环节又不指派人,那不是后面的环节都只有这个指派的人有权限么?
3 楼
jakey766
2011-10-31
<assignment-handler class="org.jbpm.examples.task.assignmenthandler.AssignTask">
<field name="assignee">
<string value="johndoe" />
</field>
</assignment-handler>
你好,请问如果我在定义中这样写,又想在代码中也可以动态给org.jbpm.examples.task.assignmenthandler.AssignTask传递参数,该怎样做?
(如果在表单选了指派人,则只分派给所选的人,否则默认分派给johndoe)
<field name="assignee">
<string value="johndoe" />
</field>
</assignment-handler>
你好,请问如果我在定义中这样写,又想在代码中也可以动态给org.jbpm.examples.task.assignmenthandler.AssignTask传递参数,该怎样做?
(如果在表单选了指派人,则只分派给所选的人,否则默认分派给johndoe)
2 楼
xuanzd
2011-07-03
aizhimin 写道
我采用了类似的方式,只不过我不去修改流程定义的xml,而是将每个人工任务的参与者分配保存到数据库的一张表中,然后UserAssignHandler 中读取实现。
UserAssignHandler 中读取具体是怎么实现的呢,能分享一下吗?
1 楼
aizhimin
2011-01-06
我采用了类似的方式,只不过我不去修改流程定义的xml,而是将每个人工任务的参与者分配保存到数据库的一张表中,然后UserAssignHandler 中读取实现。
发表评论
-
Activiti 工作流会签开发设计思路
2012-07-26 12:12 28467Activiti 工作流会签开 ... -
基于开源流程引擎Activiti5的工作流开发平台
2012-05-17 11:28 7224http://www.redxun.cn:8 ... -
Jbpm4或Activiti5的流程任务分发与汇总
2012-03-20 18:28 6275应用场景:在企业或事业单位,经常需要把一个任务分派给多条线去 ... -
关于Activiti或JBPM流程的回退的讨论之一
2011-12-30 12:08 8885需求: ... -
Activiti 5 在线流程设计器开发
2011-11-30 08:56 23766jbpm4的开发成员to ... -
基于标签方式的工作流启动及任务执行开发说明
2011-09-25 21:21 2301基于现在的系统的整 ... -
JOffice2 发布了开源的开发者体验版本啦!
2011-08-09 23:42 7295JOffice的爱好者有福音了,经公司决定,现在发布 ... -
关于JOffice的业务表单与流程的整合问题
2011-07-26 23:55 3313关于 JOffice 的业务表 ... -
JBPM4的子流程与父流程的设计及开发
2011-07-14 11:23 5662【JBPM4的子流程 ... -
Jbpm4中的会签设计及实现
2011-05-05 15:20 7667会签任务是工作流里一个比较觉见的任务方式,意思是一 ... -
jbpm4.4在线设计分支跳转
2011-05-02 14:30 4391我们知道jbpm4.4提供了三种比较方便的分支跳转方式 ... -
J.Office 2 JBPM4.4 工作流增强版特性
2011-04-27 16:00 37042.0主要在工作流方面提供了很强的改进,jbpm升级至jbpm ... -
JOffice2的在线表单设计示例(JBPM4.4)
2011-03-16 13:52 5993JOffice2目前升级至jbpm ... -
JOffice2中的JBPM4的任务回退实现
2010-12-07 15:27 3577任务回退的工作可以有两种实现方式: 1. 完成当前 ... -
分享宏天免费的JBPM4流程设计器(Applet)
2010-07-07 11:56 312JBPM4一直没有一个很好的在线流程设计器,基于这种方式,跟大 ... -
JOffice中的自定义发文流程与运行模板设计
2010-07-05 22:59 3191开发与设计公文流程在所有的政府oa项目上都少不了此需求,而能灵 ... -
JBPM4中的任务回退、补签、自由流程实现
2010-04-22 16:12 10443最近在实施政府办公项 ... -
OA JBPM中的公文(发文、收文)流程
2010-03-25 00:10 11448公文管理主要包括两大模块,其一是发文管理,其二是收文管理,非常 ... -
JBPM在线流程设计器的分析与实现部分构想
2010-03-10 13:54 7354在发表文章之前,先 ... -
取得任务节点的对外所有跳转Transition对象
2010-03-09 11:32 2401在流程的任务里,我们需要把当前的任务节点的下一步的跳转选择显示 ...
相关推荐
《jBPM4.4开发指南》与《jBPM4.4中文用户手册》是深入理解jBPM4.4这一开源工作流管理系统的重要参考资料。jBPM,全称Java Business Process Management,是一个用于执行业务流程的轻量级、灵活的开源框架,它为业务...
JBPM4.4与SSH2之整合(附完整源码) 这些天,想着把jbpm4.4与ssh2整合一下,由于之前从来没用过jbpm,也不知道各版本之间会有什么差异(经过网上的收集对比,还真有些差异),整合起来,还真是有些步履艰难。收集了...
通过JBPM4.4、Spring和EXT的整合,可以构建出一个功能完善、易用性强的流程管理系统,不仅能够有效地管理业务流程,还能提供直观的用户界面,提升用户体验。这种整合方式在现代企业级应用中具有很高的实用价值。
**jBPM 4.4 用户手册 中文PDF** **jBPM 4.4** 是一个开源的工作流程管理系统,由Red Hat公司开发并维护...通过深入研究并应用《jBPM 4.4 用户手册》,用户可以充分利用这些特性来优化和自动化业务流程,提高工作效率。
1. **流程定义语言**:jBPM 4.4支持多种流程定义语言,包括BPMN2.0(Business Process Model and Notation),这是一种标准化的图形表示法,用于描述业务流程。此外,它还支持JPDL(jBPM Process Definition ...
jBPM 4.4是Java Business Process Management(业务流程管理)的一个版本,它是一个开源的工作流管理系统,用于实现业务流程自动化。这个压缩包包含了两个关键文档:《jBPM 4.4 开发指南》和《jBPM 4.4 用户指南》,...
**jBPM4.4开发实例** jBPM(Java Business Process Management)是一个开源的工作流管理系统,用于管理和执行业务流程。...在实践中不断探索和深入,才能更好地利用jBPM4.4实现业务流程自动化,提高工作效率。
### jBPM 4.4与SSH框架的整合:深入解析与实践 #### jBPM:Java业务流程管理引擎 jBPM,全称为java Business Process Management,是JBoss旗下的一款开源工作流引擎,专为Java EE环境设计,提供了一种轻量级的解决...
jbpm4.4是JBoss企业级业务流程管理(Business Process Management)平台的一个重要版本,它为开发者提供了全面的工作流和业务流程管理解决方案。本文将深入解析jbpm4.4的相关知识点,帮助那些寻找优质学习资源的朋友...
1. **流程建模**: jbpm4.4使用BPMN(Business Process Model and Notation)2.0标准进行流程建模,这是一种图形化的方式,使得业务人员和开发者可以直观地理解并创建流程。BPMN符号包括活动、事件、网关、数据对象等...
jbpm4.4 ibatis-spring 整合
【jbpm4.4用户手册中文版】是针对企业级工作流管理系统的详细介绍,主要...通过阅读和理解【jbpm4.4用户手册中文版】,读者将能够熟练地利用jbpm4.4进行工作流程的设计、实施和管理,提升企业业务流程的效率和灵活性。
整合SSH与JBPM 4.4的目标是为了利用SSH的强大功能来构建和控制业务流程。以下是整合步骤: 1. **配置Spring**:首先,在Spring配置文件中添加JBPM的相关bean,如流程引擎工厂(ProcessEngineFactoryBean)、数据源...
1. **流程建模**:JBPM4.4支持BPMN(Business Process Modeling Notation)2.0标准,这是一种图形化语言,使得业务流程的建模更为直观和易于理解。用户可以通过Eclipse插件或直接编写XML文件来创建流程定义。 2. **...
本文将深入探讨JBPM4.4 API中的关键知识点,并分析其实现类的重要性。 首先,我们要理解JBPM4.4的核心概念。它是基于BPMN(Business Process Model and Notation)标准的,提供了一种图形化的方式来设计、部署和...
在Jbpm4.4中整合Spring,可以利用Spring的这些优势,比如将Jbpm的流程实例管理、任务分配等操作集成到Spring容器中,实现流程服务的声明式配置和管理。 **3. Hibernate4整合** Hibernate4是流行的ORM(对象关系映射...
【jbpm4.4+SSH】是一个集成的Java企业级应用框架,主要涉及的是工作流管理系统jbpm4.4与Spring、Struts2(SSH)三大框架的整合。jbpm4是一个开源的工作流程管理系统,它提供了流程定义、执行、监控和优化等一系列...
jbpm 4.4是该系统的一个版本,本指南将深入探讨其核心特性和使用方法,帮助开发者和业务分析师更好地理解和应用jbpm。 一、jbpm简介 jbpm(Java Business Process Management)是一个基于Java的业务流程管理系统,...
jbpm4.4 shh2 项目示例是基于jbpm4.4版本与SSH2(Struts2、Spring和Hibernate)集成的一个实战项目。jbPM(Business Process Management)是一款开源的工作流管理系统,用于实现业务流程自动化。SSH2是Java开发中的...