- 浏览: 452012 次
- 性别:
- 来自: 北京
博客专栏
-
Jeecg快速开发平台
浏览量:0
文章分类
- 全部博客 (1498)
- java (109)
- jeecg (140)
- minidao (18)
- 移动 (4)
- git (1)
- svn (2)
- maven (3)
- mybatis (5)
- 快速开发 (60)
- 代码生成器 (23)
- 培训 (1)
- 微信 (8)
- 微信二次开发 (7)
- 微营销 (1)
- easyui (2)
- springmvc (3)
- 微网站 (2)
- 开源年会 (1)
- mongodb (2)
- 架构师 (1)
- 工作流 (2)
- 架构培训 (1)
- 微信开发 (3)
- 插件开发 (1)
- 支付窗 (2)
- jeecg,JEEWX,集群定时任务 (0)
- 简易工具,开源,easypoi (2)
- jeecg,数据权限 (1)
- jeecg,高级查询 (2)
- jeecg,部门管理 (1)
- jeecgonline,唯一性校验 (1)
- jeecg,组织机构 (1)
- jeecg,接口权限 (1)
- jeecg,java,online表单,表单填值 (4)
- jeecg,接口 (1)
- jeecg,java,online自定义 (2)
- jeecg,表单配置,树形表单 (1)
- jeecg,Redis (1)
- 摘要: JEECG 是一款基于代码生成器的J2EE快速开发平台,开源界“小普元”超越传统商业企业级开发平台。引领新的开发模式(Online Coding模式(自定义表单)->代码生成器模式->手工MERGE智能开发), 可以帮助解决Java项目60%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。她可以用于所有的Web应用程序,如:MIS,CRM,OA,ERP,CMS,网站后台,微信管家,等等,当然,您也可以对她进行深度定制,以做出更强系统。 (0)
- jeewx (7)
- 捷微 (2)
- JAVA微信管家 (0)
- 企业微信 (1)
- 微信,JEEWX,企业微信,微信二次开发,java微信管家 (3)
- JEEWX,微信企业号,企业微信,java (1)
- 微信SDK (3)
- jeecg,ng2-admin,Angular4 (1)
- jeecg,企业应用,JEasyPoi (7)
- Excel (2)
- Word (2)
- 企业应用 (4)
- JEasyPoi (1)
- 小程序 (6)
- webstorm (1)
- 开源社区, (1)
- Bootstrap (3)
- Vue (5)
- Spring (3)
- 插件开发,jeecg-P3, (2)
- 持久层,Mybatis,Hibernate,jeecg (2)
- easypoi,poi (1)
- 简易导入导出 (1)
- 工作流,快速开发平台 (1)
- jeecg,小程序,java,开源 (4)
- jeewx,小程序,H5活动,营销活动 (3)
- 代码生成器,plupload (1)
- java,砍价,捷微,H5 (1)
- 微服务 (1)
- JavaScript (1)
最新评论
-
a3617096:
这个jar包哪里有下载的?
【JEECG插件集成文档】JEECG在线聊天插件 - 集成文档 -
ppm218:
我用maven 下载不了jar啊,有哪位仁兄可以发一下给我吗? ...
【JEECG技术文档】JEECG在线聊天插件功能集成文档 -
lijing_smile:
jeecg 你好!在线聊天集成到jeecg_3.6.3中去但是 ...
【JEECG技术文档】JEECG在线聊天插件功能集成文档 -
来去无痕:
链接都过期了
开源社区JAVA视频网盘分享 -
LinApex:
已经失效了
【jeecg-mybatis版本】 mybatis+spring mvc 完美整合方案 查询,保存,更新,删除自动生成
利用JBPM4.4的AssignmentHandler实现用户角色整合另一种构思
Jbpm4提供的IdentitySession接口并不是一种很好的处理方式,鉴于我们每个业务系统都有一套自己的用户及权限认证管理机制,需要与jbpm4.4集成的话,就比较周折了,我们经常需要查询的就是用户自己的任务。jbpm4的任务里有一个比较好的任务人员指派定义方式,就是使用AssignmentHandler接口,其定义如下所示:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <processname="TaskAssignmentHandler"xmlns="http://jbpm.org/4.4/jpdl">
- <startg="20,20,48,48">
- <transitionto="review"/>
- </start>
- <taskname="review"g="96,16,127,52">
- <assignment-handlerclass="org.jbpm.examples.task.assignmenthandler.AssignTask">
- <fieldname="assignee">
- <stringvalue="johndoe"/>
- </field>
- </assignment-handler>
- <transitionto="wait"/>
- </task>
- <statename="wait"g="255,16,88,52"/>
- </process>
- <?xmlversion="1.0"encoding="UTF-8"?>
- <processname="TaskAssignmentHandler"xmlns="http://jbpm.org/4.4/jpdl">
- <startg="20,20,48,48">
- <transitionto="review"/>
- </start>
- <taskname="review"g="96,16,127,52">
- <assignment-handlerclass="org.jbpm.examples.task.assignmenthandler.AssignTask">
- <fieldname="assignee">
- <stringvalue="johndoe"/>
- </field>
- </assignment-handler>
- <transitionto="wait"/>
- </task>
- <statename="wait"g="255,16,88,52"/>
- </process>
<?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>
- packageorg.jbpm.examples.task.assignmenthandler;
- importorg.jbpm.api.model.OpenExecution;
- importorg.jbpm.api.task.Assignable;
- importorg.jbpm.api.task.AssignmentHandler;
- /**
- *@authorTomBaeyens
- */
- publicclassAssignTaskimplementsAssignmentHandler{
- privatestaticfinallongserialVersionUID=1L;
- Stringassignee;
- publicvoidassign(Assignableassignable,OpenExecutionexecution){
- assignable.setAssignee(assignee);
- }
- }
- packageorg.jbpm.examples.task.assignmenthandler;
- importorg.jbpm.api.model.OpenExecution;
- importorg.jbpm.api.task.Assignable;
- importorg.jbpm.api.task.AssignmentHandler;
- /**
- *@authorTomBaeyens
- */
- publicclassAssignTaskimplementsAssignmentHandler{
- privatestaticfinallongserialVersionUID=1L;
- Stringassignee;
- publicvoidassign(Assignableassignable,OpenExecutionexecution){
- assignable.setAssignee(assignee);
- }
- }
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之后的版本,启动流程及运行流程时,都会去读取流程定义,因此,我们可以动态修改以上配置文件,让其生成类似如下的配置格式即可以满足我们的要求:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <processname="TaskAssignmentHandler"xmlns="http://jbpm.org/4.4/jpdl">
- <startg="20,20,48,48">
- <transitionto="review"/>
- </start>
- <taskname="review"g="96,16,127,52">
- <assignment-handlerclass="com.htsoft.core.jbpm.AssignmentHandler">
- <fieldname="userIds">
- <stringvalue="1"/>
- </field>
- <fieldname="roleIds">
- <stringvalue="1,2"/>
- </field>
- </assignment-handler>
- <transitionto="wait"/>
- </task>
- <statename="wait"g="255,16,88,52"/>
- </process>
- <?xmlversion="1.0"encoding="UTF-8"?>
- <processname="TaskAssignmentHandler"xmlns="http://jbpm.org/4.4/jpdl">
- <startg="20,20,48,48">
- <transitionto="review"/>
- </start>
- <taskname="review"g="96,16,127,52">
- <assignment-handlerclass="com.htsoft.core.jbpm.AssignmentHandler">
- <fieldname="userIds">
- <stringvalue="1"/>
- </field>
- <fieldname="roleIds">
- <stringvalue="1,2"/>
- </field>
- </assignment-handler>
- <transitionto="wait"/>
- </task>
- <statename="wait"g="255,16,88,52"/>
- </process>
<?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字段中去则可,这是持久化的处理。
也可以临时调用类似以下的代码动态实现以上效果:
- /**
- *为流程定义加上任务的指派人员接口
- *@paramdeployId
- */
- publicvoidaddAssignHandler(ProUserAssignproUserAssign){
- ProcessDefinitionImplpd=(ProcessDefinitionImpl)repositoryService.createProcessDefinitionQuery().deploymentId(proUserAssign.getDeployId()).uniqueResult();
- EnvironmentFactoryenvironmentFactory=(EnvironmentFactory)processEngine;
- EnvironmentImplenv=null;
- try{
- env=environmentFactory.openEnvironment();
- //找到任务的定义
- TaskDefinitionImpltaskDef=pd.getTaskDefinition(proUserAssign.getActivityName());
- UserCodeReferenceuserCodeReference=newUserCodeReference();
- ObjectDescriptordescriptor=newObjectDescriptor();
- //加上任务的人员动态指派
- descriptor.setClassName("com.htsoft.core.jbpm.UserAssignHandler");
- //动态加参数
- FieldOperationuserIdsFo=newFieldOperation();
- userIdsFo.setFieldName("userIds");
- userIdsFo.setDescriptor(newStringDescriptor(proUserAssign.getUserId()));
- FieldOperationgroupIdsFo=newFieldOperation();
- groupIdsFo.setFieldName("groupIds");
- groupIdsFo.setDescriptor(newStringDescriptor(proUserAssign.getRoleId()));
- List<Operation>listOp=newArrayList<Operation>();
- listOp.add(userIdsFo);
- listOp.add(groupIdsFo);
- descriptor.setOperations(listOp);
- userCodeReference.setCached(false);
- userCodeReference.setDescriptor(descriptor);
- taskDef.setAssignmentHandlerReference(userCodeReference);
- }catch(Exceptionex){
- logger.error("ADDAssignHandlerError:"+ex.getMessage());
- }finally{
- if(env!=null){
- env.close();
- }
- }
- }
- /**
- *为流程定义加上任务的指派人员接口
- *@paramdeployId
- */
- publicvoidaddAssignHandler(ProUserAssignproUserAssign){
- ProcessDefinitionImplpd=(ProcessDefinitionImpl)repositoryService.createProcessDefinitionQuery().deploymentId(proUserAssign.getDeployId()).uniqueResult();
- EnvironmentFactoryenvironmentFactory=(EnvironmentFactory)processEngine;
- EnvironmentImplenv=null;
- try{
- env=environmentFactory.openEnvironment();
- //找到任务的定义
- TaskDefinitionImpltaskDef=pd.getTaskDefinition(proUserAssign.getActivityName());
- UserCodeReferenceuserCodeReference=newUserCodeReference();
- ObjectDescriptordescriptor=newObjectDescriptor();
- //加上任务的人员动态指派
- descriptor.setClassName("com.htsoft.core.jbpm.UserAssignHandler");
- //动态加参数
- FieldOperationuserIdsFo=newFieldOperation();
- userIdsFo.setFieldName("userIds");
- userIdsFo.setDescriptor(newStringDescriptor(proUserAssign.getUserId()));
- FieldOperationgroupIdsFo=newFieldOperation();
- groupIdsFo.setFieldName("groupIds");
- groupIdsFo.setDescriptor(newStringDescriptor(proUserAssign.getRoleId()));
- List<Operation>listOp=newArrayList<Operation>();
- listOp.add(userIdsFo);
- listOp.add(groupIdsFo);
- descriptor.setOperations(listOp);
- userCodeReference.setCached(false);
- userCodeReference.setDescriptor(descriptor);
- taskDef.setAssignmentHandlerReference(userCodeReference);
- }catch(Exceptionex){
- logger.error("ADDAssignHandlerError:"+ex.getMessage());
- }finally{
- if(env!=null){
- env.close();
- }
- }
- }
/** * 为流程定义加上任务的指派人员接口 * @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类代码如下:
- packagecom.htsoft.core.jbpm;
- importorg.apache.commons.lang.StringUtils;
- importorg.apache.commons.logging.Log;
- importorg.apache.commons.logging.LogFactory;
- importorg.jbpm.api.model.OpenExecution;
- importorg.jbpm.api.task.Assignable;
- importorg.jbpm.api.task.AssignmentHandler;
- importcom.htsoft.core.Constants;
- /**
- *尚未开始使用
- *<B><P>Joffice--http://www.jee-soft.cn</P></B>
- *<B><P>Copyright(C)2008-2010GuangZhouHongTianSoftwareCompany(广州宏天软件有限公司)</P></B>
- *<B><P>description:</P></B>
- *<P></P>
- *<P>product:joffice</P>
- *<P></P>
- *@seecom.htsoft.core.jbpm.UserAssignHandler
- *<P></P>
- *@author
- *@versionV1
- *@create:2010-11-23下午02:58:01
- */
- publicclassUserAssignHandlerimplementsAssignmentHandler{
- privateLoglogger=LogFactory.getLog(UserAssignHandler.class);
- //授予用户ID
- StringuserIds;
- //授权角色ID
- StringgroupIds;
- @Override
- publicvoidassign(Assignableassignable,OpenExecutionexecution)throwsException{
- StringassignId=(String)execution.getVariable(Constants.FLOW_ASSIGN_ID);
- logger.info("assignId:===========>"+assignId);
- //在表单提交中指定了固定的执行人员
- if(StringUtils.isNotEmpty(assignId)){
- assignable.setAssignee(assignId);
- return;
- }
- //在表单中指定了执行的角色TODO
- //在表单中指定了会签人员
- StringsignUserIds=(String)execution.getVariable(Constants.FLOW_SIGN_USERIDS);
- if(signUserIds!=null){
- //TODO取到该任务,进行会签设置
- }
- logger.debug("EnterUserAssignHandlerassignmethod~~~~");
- if(userIds!=null){//若用户不为空
- String[]uIds=userIds.split("[,]");
- if(uIds!=null&&uIds.length>1){//多于一个人的
- for(StringuId:uIds){
- assignable.addCandidateUser(uId);
- }
- }else{
- assignable.setAssignee(userIds);
- }
- }
- if(groupIds!=null){//若角色组不为空
- String[]gIds=userIds.split("[,]");
- if(gIds!=null&&gIds.length>1){//多于一个角色的
- for(StringgId:gIds){
- assignable.addCandidateGroup(gId);
- }
- }else{
- assignable.addCandidateGroup(groupIds);
- }
- }
- }
- }
相关推荐
《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)、数据源...
在Jbpm4.4中整合Spring,可以利用Spring的这些优势,比如将Jbpm的流程实例管理、任务分配等操作集成到Spring容器中,实现流程服务的声明式配置和管理。 **3. Hibernate4整合** Hibernate4是流行的ORM(对象关系映射...
1. **流程建模**:JBPM4.4支持BPMN(Business Process Modeling Notation)2.0标准,这是一种图形化语言,使得业务流程的建模更为直观和易于理解。用户可以通过Eclipse插件或直接编写XML文件来创建流程定义。 2. **...
### jBPM4.4开发指南关键知识点解析 #### 一、工作流基础与概念 **1. 工作流定义** 工作流是指业务过程的部分或整体在计算机应用环境下的自动化,其目的是为了使在多个参与者之间按照某种预定义的规则传递文档、...
本文将深入探讨JBPM4.4 API中的关键知识点,并分析其实现类的重要性。 首先,我们要理解JBPM4.4的核心概念。它是基于BPMN(Business Process Model and Notation)标准的,提供了一种图形化的方式来设计、部署和...
【jbpm4.4+SSH】是一个集成的Java企业级应用框架,主要涉及的是工作流管理系统jbpm4.4与Spring、Struts2(SSH)三大框架的整合。jbpm4是一个开源的工作流程管理系统,它提供了流程定义、执行、监控和优化等一系列...
jbpm 4.4是该系统的一个版本,本指南将深入探讨其核心特性和使用方法,帮助开发者和业务分析师更好地理解和应用jbpm。 一、jbpm简介 jbpm(Java Business Process Management)是一个基于Java的业务流程管理系统,...