完整工作流JBPM项目实战全过程教程3

  完整工作流JBPM项目实战全过程教程3----项目后续DIY

   接着上一篇。

从数据库中表的定义不难看出,每篇文章的审批将新建一个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!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2017年jBPM 正式发布了全新的 7版本。jBPM 是一个完全开源的业务程管理(BPM)和案例管理解决方案。它支持程和案例完整生命周期,从编写工具到执行一直到监控和管理。 在核心引擎之上,提供了许多功能和工具来支持整个生命周期中的业务程: 基于Eclipse和基于Web的编辑器,用于支持业务程的图形化创建(拖放)。 基于JPA / JTA的可插拔持久性和事务。 基于WS-HumanTask的可插拔人工任务服务,用于包含需要由人类执行者执行的任务。 管理控制台支持程实例管理,任务列表和任务表单管理以及报告。 部署程的可选程仓库(和其他相关知识)。 历史记录(用于查询/监视/分析)。 与Seam,Spring,OSGi等集成 BPM通过以业务用户和开发人员喜欢的方式提供程管理功能和工具,从而实现业务分析师,开发人员和最终用户之间的桥梁。域特定的节点可以插入调色板,使业务用户更容易理解这些过程。 jBPM支持自适应和动态过程,需要灵活性来模拟复杂的现实生活中的情况,这些情况不能用刚性过程轻松描述。我们通过允许他们控制进程的哪些部分来执行,动态地偏离进程等,使控制回到终端用户。 jBPM也不仅仅是一个独立的程引擎。复杂的业务逻辑可以被建模为业务程与业务规则和复杂事件处理的组合。jBPM可以与Drools项目相结合,以支持将这些范例集成到一起的统一环境,您可以将业务逻辑作为过程,规则和事件的组合进行建模。 工作是MAVEN+eclipse jBPM jars也可以在中央maven仓库中使用 (也可以在JBoss maven仓库中)。 如果您使用Maven,只需添加一个依赖关系pom.xml: org.jbpm jbpm-test 7.3.0.Final 这与Gradle,Ivy和Buildr类似。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值