接着上一篇。
从数据库中表的定义不难看出,每篇文章的审批将新建一个JBPM流程实例来跟踪。
文章的表article中,利用PiId来关联一个流程实例,并且定义State字段来表示文章的当前状态(编辑中,审批中,审批通过,nulll),定义AuditState字段来表示文章当前由何权限的人员来审批(一级审批,二级审批,三级审批,四级审批,当然还可以自定义权限)
下面就来演示如何自定义权限
首先在数据库中插入自己定义的权限
insert into userduty(`Name`,`DutyType`,`DutyValue`)
values ('自定义流程权限1','自定义流程权限1','自定义流程权限1');
insert into userduty(`Name`,`DutyType`,`DutyValue`)
values ('自定义流程权限2','自定义流程权限2','自定义流程权限2');
insert into userduty(`Name`,`DutyType`,`DutyValue`)
values ('自定义流程权限3','自定义流程权限3','自定义流程权限3');
insert into userduty(`Name`,`DutyType`,`DutyValue`)
values ('自定义流程权限4','自定义流程权限4','自定义流程权限4');
insert into userduty(`Name`,`DutyType`,`DutyValue`)
values ('自定义流程权限5','自定义流程权限5','自定义流程权限5');
insert into userduty(`Name`,`DutyType`,`DutyValue`)
values ('自定义流程权限6','自定义流程权限6','自定义流程权限6');
然后就是插入自定义用户(需要注意用户与权限之间的关联关系)
insert into user(DutyNo,`LoginName`,`Password`,`UserName`)
values (7,'zpchen1','zpchen1','zpchen1_自定义流程权限1');
insert into user(DutyNo,`LoginName`,`Password`,`UserName`)
values (8,'zpchen2','zpchen1','zpchen2_自定义流程权限2');
insert into user(DutyNo,`LoginName`,`Password`,`UserName`)
values (9,'zpchen3','zpchen3','zpchen3_自定义流程权限3');
insert into user(DutyNo,`LoginName`,`Password`,`UserName`)
values (10,'zpchen4','zpchen4','zpchen4_自定义流程权限4');
insert into user(DutyNo,`LoginName`,`Password`,`UserName`)
values (11,'zpchen5','zpchen15,'zpchen5_自定义流程权限5');
insert into user(DutyNo,`LoginName`,`Password`,`UserName`)
values (12,'zpchen6','zpchen6','zpchen6_自定义流程权限6');
(注意,如果直接copy上面的mysql语句,需要修改下蓝色部分标记的DutyNo,与你自己机子上的值对应起来,上面为我自己机子上数据的值)
OK,数据库要做的变化就是这些了!
接着就是自定义流程定义文件了.借助JBPM的Eclipse插件轻松实现之。
定义好的流程定义文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1"
name="zpchenProcess">
<start-state name="start">
<transition name="编辑我的任务" to="这个任务完
成"></transition>
</start-state>
<state name="这个任务完成">
<transition name="发布任务" to="自定义流程权限1">
<action name="action"
class="c20.jbpm.action.PubActionHandler">
</action>
</transition>
</state>
<state name="自定义流程权限1">
<transition name="同意" to="自定义流程权限2">
<action name="action"
class="c20.jbpm.action.AuditYesActionHandler">
</action>
</transition>
<transition name="实在糟糕" to="这个任务完成">
<action name="action"
class="c20.jbpm.action.AuditNoActionHandler">
</action>
</transition>
</state>
<state name="自定义流程权限2">
<transition name="同意" to="自定义流程权限3">
<action name="action"
class="c20.jbpm.action.AuditYesActionHandler">
</action>
</transition>
<transition name="不太满意" to="这个任务完成">
<action name="action"
class="c20.jbpm.action.AuditNoActionHandler">
</action>
</transition>
</state>
<state name="自定义流程权限3">
<transition name="同意" to="自定义流程权限4">
<action name="action"
class="c20.jbpm.action.AuditYesActionHandler">
</action>
</transition>
<transition name="重新编辑" to="这个任务完成">
<action name="action"
class="c20.jbpm.action.AuditNoActionHandler">
</action>
</transition>
</state>
<state name="自定义流程权限4">
<transition name="同意" to="自定义流程权限5">
<action name="action"
class="c20.jbpm.action.AuditYesActionHandler">
</action>
</transition>
<transition name="不同意" to="自定义流程权限2">
<action name="action"
class="c20.jbpm.action.AuditNoActionHandler">
</action>
</transition>
</state>
<state name="自定义流程权限5">
<transition name="同意" to="自定义流程权限6">
<action name="action"
class="c20.jbpm.action.AuditYesActionHandler">
</action>
</transition>
<transition name="继续完善" to="自定义流程权限3">
<action name="action"
class="c20.jbpm.action.AuditNoActionHandler">
</action>
</transition>
</state>
<state name="自定义流程权限6">
<transition name="很好,同意发表" to="end1">
<action name="action"
class="c20.jbpm.action.AuditFinishYesActionHandler">
</action>
</transition>
<transition name="继续完善" to="这个任务完成">
<action name="action"
class="c20.jbpm.action.AuditFinishNoActionHandler">
</action>
</transition>
</state>
<end-state name="end1"></end-state>
</process-definition>
从流程定义的文件中可以看出,流程的定义相当的灵活。
那么,系统是怎么将一个文章的审批过程按照这个流程定义来执行了?
本文开头就指出了,article表中定义了AuditState字段来表示文章当前由何权限的人员
来审批,当流程在运作当中,利用JBPM的ActionHandler句柄来动态的改变文章的
AuditState状态。然后当OA系统的用户(这里应该是具有文章审批等操作权限的用户,
而非guest,或manager)登录系统后,判断该用户的权限,如果该用户的权限正好和
article表中AuditState相同时候,就将这些权限级别的文章展现给该登录用户审批。这
样就达到了每篇文章的级级审批的过程了。
不过到这里,你登录管理员后可以发布这个自定义流程,guest用户也可以发布文章了,
但是当你以自己定义的用户zpchen1,zpchen2。。。。登录后页面会显示不了审批文章
的菜单,
你可以查看下menu.jsp的代码就会发现问题所在了,
找到如下代码:
<%
}
//如果具有管理员权限
if(userSession != null && userSession.getDutyValue() != null &&
userSession.getDutyType().equals("审批员")){
%>
修改成
<%
}
//如果具有管理员权限
if(userSession != null && userSession.getDutyValue() != null &&
(userSession.getDutyType().equals("审批员")||userSession.getDutyType
().contains("自定义流程权限"))){
%>
OK,到这里应用就完成了。
OVER!
下一篇将介绍如何在页面中动态显示JBPM流程图,敬请关注!
- zpchen.zip (29.1 KB)
- 描述: 这个是新定义的流程processDefinition.xml等文件打包的zip包
- 下载次数: 596
分享到:
相关推荐
【标题】"完整工作流JBPM项目实战全过程教程2---项目详细讲解"涉及的主要知识点是JBPM(Java Business Process Management)的工作流程管理以及如何在实际项目中应用。JBPM是一个开源的工作流管理系统,用于设计、...
通过本教程的学习,读者可以全面了解JBPM的基本概念、安装配置过程以及如何基于JBPM开发实际项目中的工作流应用。无论是初学者还是有一定经验的开发者,都能够从中获得有价值的信息和技术指导。希望读者能够在实践中...
jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip
"jbpm-jpdl-designer-nodeps-3.1.4" 是一个针对Jbpm工作流管理系统中的JPDL设计工具的无依赖版本,主要用于创建和编辑JPDL(Jbpm Process Definition Language)文件。该资源包含了该工具的详细文档、许可证协议以及...
jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载
标题提到的“工作流jbpm---学习文档+简单实例项目”是一份包含学习资料和实际操作案例的资源集合,旨在帮助开发者快速理解和掌握jbpm的使用。其中,"jBPM4.4课程文档.doc"很可能是关于jbpm 4.4版本的详细教程,涵盖...
6. **安装jbpm-gwt-console**:下载`jbpm-5.1.0.Final-gwt-console.zip`,解压缩后有两个文件:`jbpm-gwt-console-5.1.0.Final.war`和`jbpm-gwt-console-server-5.1.0.Final.war`。对`jbpm-gwt-console-server-5.1.0...
### 工作流JBPM开发计划书 #### 一、项目背景与目标 在当前数字化转型的大背景下,企业越来越依赖于高效的工作流程管理来提升业务效率和服务质量。JBPM(JBoss流程管理)作为一款开源的工作流引擎,因其灵活性、可...
jbpm-3_2_2-Api jbpm 著名工作流引擎
jbpm-2.0-beta1是该系统的早期版本,其核心功能包括工作流引擎、流程建模工具以及一系列示例项目,如jbpm-demo,用于帮助用户更好地理解和应用jbpm。 工作流引擎是jbpm的核心组件,它负责解析和执行工作流定义...
jbpm-jpdl-designer-nodeps-3.0.13.zip是一款专为流程设计和管理而生的工具,主要用于JBPM(Java Business Process Management)系统。JBPM是一个开源的工作流和业务流程管理系统,它提供了对业务流程的建模、部署、...
总的来说,jBPM-7.3.0.Final-bin这个压缩包为开发人员提供了完整的jBPM框架,能够帮助企业实现流程自动化,提升工作效率,同时提供了强大的监控和管理工具,便于企业对流程进行持续优化。其组件涵盖了流程设计、执行...
### JBPM实战讲解知识点概述 #### 一、JBPM概览与重要性 JBPM,全称为Java Business Process Management,是JBoss旗下的一款强大的工作流和业务流程管理框架。它旨在帮助企业通过自动化业务流程,提高效率和灵活性...
### jBPM4工作流开发实战 #### 一、工作流基础 在开始jBPM4的工作流开发之前,我们首先需要了解什么是工作流以及它的一些基本概念。 **1. 工作流简介:** 工作流(Workflow)是指业务过程中的一系列任务按一定...