随笔-54  评论-0  文章-2  trackbacks-0

    

                                      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中用到了sessionjbpmContext,必须用一个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当然不能用,按照上面的业务需求实现编码。


明天继续!


posted on 2010-02-07 23:46 d66380022 阅读(133) 评论(0)  编辑  收藏