JBPM4關於Assignee動態獲取------OA系統工作流環節問題

今天在完善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的序列,由“-”隔開,然後通過對序列的處理,可以找出本部門對應的上級領導。從而確定審批人。這個思路是剛相出的,還不完善,大家有什麼好的方法,萬望不吝賜教。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章