JBPM4关于Assignee动态获取------OA系统工作流环节问题

来源:互联网 发布:mac 命令行 删除软件 编辑:程序博客网 时间:2024/05/29 04:17

今天在完善OA系统工作流的过程中,对于一直没有处理的动态指定assignee的问题进行了一个处理,因为去网上查了很多资料,但是都不太符合要求,或者感觉可能不太懂,于是自己想了一种方法,如果有什么更好的方法,请大家指导一下我,对于jbpm我也是初学。

首先说一下我的工程以及对于jbpm的需求。现在有一张表,Form,用来存储申请信息,这里可以是请假申请,可以是财务申请,对于这些具体分类,我用额外的表来存储相关的数据。

Form表主要存储的字段有

public class Form {/** 表单状态常量:审批中 **/public static final String STATUS_RUNNING = "审批中";/** 表单常量:已通过 **/public static final String STATUS_APPROVED = "已通过";/** 表单常量:未通过 **/public static final String STATUS_REJECTED = "未通过";private Long id;private ApplicationTemplate applicationTemplate; // 申请所用的文档模板private Set<ApproveInfo> approveInfos = new HashSet<ApproveInfo>();private User applicant; // 申请人private String title; // 标题private Date applyTime; // 申请时间private String path; // 文档的存储路径private LeaveFormInfo leaveFormInfo;  // 对应请假表信息序号<pre name="code" class="java">

这里我只做了请假表,具体的以后还需要完善。

jbpm的xml是这样的

<?xml version="1.0" encoding="UTF-8"?><process name="员工请假流程" xmlns="http://jbpm.org/4.4/jpdl">   <start g="264,32,48,48" name="start1">      <transition g="-69,-22" name="to 提交申请" to="提交申请"/>   </start>   <end g="264,364,48,48" name="end1"/>   <task g="242,112,92,52" name="提交申请" assignee="#{user.department.name}">      <transition g="-93,-22" name="to 部门经理审批" to="部门经理审批"/>   </task>   <task assignee="zs" g="242,196,92,52" name="部门经理审批">      <transition g="-81,-22" name="to 分公司总经理审批" to="分公司总经理审批"/>   </task>   <task assignee="ls" g="242,280,92,52" name="分公司经理审批">      <transition g="-50,-22" name="to end1" to="end1"/>   </task> </process>

这里指定的审批人是固定的,所以对于实际使用的OA系统来说,很不方便。

我采用的方法是,在form的表后面加几个字段。

private String bossMax; // 最高领导private String bossMin; // 第一审批private String bossSec; // 第二审批private String bossThi; // 第三审批private String bossFou; // 第四审批

那么这几个字段的用处就在于指定审批人,然后每次发起任务申请的时候,将审批人存入form表中,这样xml中就可以这样写

<?xml version="1.0" encoding="UTF-8"?><process name="员工请假流程" xmlns="http://jbpm.org/4.4/jpdl">   <start g="264,32,48,48" name="start1">      <transition g="-69,-22" name="to 提交申请" to="提交申请"/>   </start>   <end g="264,364,48,48" name="end1"/>   <task g="242,112,92,52" name="提交申请" assignee="#{user.department.name}">      <transition g="-93,-22" name="to 部门经理审批" to="部门经理审批"/>   </task>   <task assignee="#{form.bossMin}" g="242,196,92,52" name="部门经理审批">      <transition g="-81,-22" name="to 分公司总经理审批" to="分公司总经理审批"/>   </task>   <task assignee="#{form.bossSec}" g="242,280,92,52" name="分公司经理审批">      <transition g="-50,-22" name="to end1" to="end1"/>   </task> </process>

如果有更多的审批,可以继续添加,然后在java中动态指定对应的人即可。

这样做的好处是根据不同的部门对应的不同的领导,发起申请时,都可以确定对应的审批人。

java中的代码实现方法很多,我这里说下我的思路,涉及几个表不太好发出,

department表中,有一个部门序号路径,由当前最高级departmentId到当前departmentId的序列,由“-”隔开,然后通过对序列的处理,可以找出本部门对应的上级领导。从而确定审批人。这个思路是刚相出的,还不完善,大家有什么好的方法,万望不吝赐教。


1 0
原创粉丝点击