OA項目之審批流轉
今天是OA項目的最后一個模塊,其業務流程是員工提交申請-à部門經理-à ,這期間要經過的人不一樣,有的要經過一個審批就OK了,而有的得經過3個以上的人審批才行。實現審批流轉有4個要求:
1.方便的定義/x修改 與 管理 流程定義
2. 方便的定義/x修改 與 管理 表單模版
3.執行審批流轉
4.方便的查詢所有的 表 單實例 (數據)記錄(查詢流轉過的表單)
業務流程如同前天已畫的圖:
員工提交申請,后面的環節就會按照我們定義 好的流程走了
所有的表單都要分頁
今天做審批管理,它包含審批流程管理和表單 模版管理
1.設計實體,
2.創建一個Action ,也和前面的一樣CRUD,只是在列表時加了個分頁,多添
加了個查看流程文件(processdefinition.xml) 中,查看流程圖片
3.分頁設計:因為所有頁面都要用,所以寫成公共的,但超鏈接不一樣
如圖:
分頁主要代碼:
// 用戶指定
private int pageSize;
private int currentPage;
// 查詢數據庫
private int recordCount;
private List recordList;//當前頁的所有pd
// 計算
private int totalPage;
private int startPageIndex;
private int endPageIndex;
/**
* 計算指定頁中第一條記錄的索引
*/
public static int clacFirstResult(int pageNum, int pageSize) {
return (pageNum - 1) * pageSize;
}
public PageView(int pageSize, int currentPage, int recordCount, List recordList) {
this.pageSize = pageSize;
this.currentPage = currentPage;
this.recordCount = recordCount;
this.recordList = recordList;
// 計算 totalPage, startPageIndex, endPageIndex;
totalPage = (recordCount + pageSize - 1) / pageSize;
startPageIndex = 1;
endPageIndex = totalPage;
if (totalPage > 10) {
// 正常顯示當前頁附近的共10個頁碼,當前頁屬于前半部分
startPageIndex = currentPage - 4;
endPageIndex = currentPage + 5;
// (前面不足4個)顯示前10個頁碼
if (startPageIndex < 1) {
startPageIndex = 1;
endPageIndex = 10;
}
// (后面不足5個)顯示后10個頁碼
else if (endPageIndex > totalPage) {
endPageIndex = totalPage;
startPageIndex = totalPage - 10 + 1; // 顯示時包含開始與結 束的邊界
}
}
}
之后測試分頁
4.解決session問題:
由于在action中用到了session和jbpmContext,必須用一個session,才能保證是同一事務,在這里用jbpmContext得到session
5.Hibernate關于set list map的映射文件
以為例
class Person{
private Set<String> addressSet; // 收貨地址
private List<String> addressList;
private Map<String, String> phoneNumberMap; // 電話號 集合,如:家庭 -- 010-12345678
}
<set name="addressSet" table="itcast_addressSet">
<key column="personId"/>
<element type="string" column="address"/>
</set>
<list name="addressList" table="itcast_addressList">
<key column="peronId"/>
<list-index column="idx">
<element type="string" column="address">
</list>
表單流轉
支持各種審批流程:JBPM
支持各種表單定義:表單中要填寫的字段的數 量不同,類型也不一樣,ActionForm當然不能用,按照上面的業務需求實現編碼。
明天繼續!