OA项目的表单管理模块

1.这个模块的需求  
执行审批流转
请假单.html --> 起草申请(列表) --> 申请页面(显示表单) --> 提交申请(1.保存本次填写的表单数据2.启动流程实例,开始流转)

2.表单定义管理需要解决的几个问 题:  
表单定义(模板):模板文件路径/所有的流程名称/名称
问题1:保存本次填写的表单数据,保存那些数据,什么类型?
问题2:用哪个流程?

表单管理也没有更新,和流程定义一样.用版本来解决这个问题,为了就是防止原来已经使用的模板.

3.这个项目中用到实体之间的关系  
流程定义 -- 流程实例 (一对多)
表单定义 -- 表单实例 (一对多)
流程定义 -- 表单定义 (一对一)
流程实例 -- 表单实例 (一对一)

4.JavaBean:  
表单实体:
    private Long id;
    private String name;
    private String templatePath;
    private String processName;
    private Map<String, Class> fieldDefinitionList = new HashMap<String, Class>();
表单实例:
    private Long id;
    private FormDefinition formDefinition;
    private Map<String, Serializable> propertyMap = new HashMap<String, Serializable>();
    
5.Map在映射文件中的配置:  
    <map name="fieldDefinitionList" table="itcast_formDefinition_fieldDefinitionList">
            <key column="formDefinitionId"></key>
            <map-key type="string" column="propertyName"></map-key>
            <element type="class" column="propertyValueType"></element>
    </map>

6.在 Action中添加的处理:  
单独处理数组到fieldDefinitionList
Action中接收数据的处理:
for (int i = 0; i < actionForm.getPropertyNameList().length; i++) {
        String name = actionForm.getPropertyNameList()[i];
        Class valueType = actionForm.getPropertyValueTypeList()[i];
        if (name != null && name.trim().length() > 0) { // 非空白字符串的名称有效
            formDefinition.getFieldDefinitionList().put(name, valueType);
        }
    }
页面中传输数据的处理:
页面中动态的添加表格:
利用了jQuery,要注意Id的处理
添加:为了解决添加时区分不同的表格,这里使用了index.指定不同的id.
var index = 1;
    function addItem(){
        var template = '';
        template += '<div id="item_' + index + '">';
        template += '    字段名称:<input type="text" name="propertyNameList">  ';
        template += '    值类型:<select name="propertyValueTypeList">';
        template += '                <option value="java.lang.String">字符串</option>';
        template += '                <option value="java.lang.Integer">数字</option>';
        template += '                <option value="java.util.Date">日期</option>';
        template += '            </select>';
        template += '    <input type="button" οnclick=/'delItem("item_' + index + '")/' value="删除">';
        template += '</div>';

        $("#divFieldDefinitionList").append( template );
        index++;
    }
删除:这里按照指定的id,进行删除.
function delItem( id ){
            $("#" + id).remove();
}

7.审批流程: 第一个(节点中的)任务为提交申请.后面的节点中任务都是审批.  
流程图乱码的解决:
流程图:关了再开,各个节点的排序位置会乱.调整好后,关了再开就好了.
流程图对节点不支持中文,我们可以这样处理一下.定位文件:在Eclipse中先改成GBK编码的,再在文件中改成GBK编码,保存后就支持中文了.

指定办理者:使用了变量# {applicantActorId}

8.对审批流程的要求:  
1)使用Employee的id作为actorId
2)提交申请任务的执行都为变量 applicantActorId 的值 (每个审批流程都会有提交申请的任务)
3)表单数据在整个流程中都可以方便获得.( 设置变量: formInstance)

HQL语句对集合的查询:这里用到了一个Hibernate中HQL的一个内置方法.
FROM Employee e WHERE e.department=? AND ? in elements(e.roles)
elements取出这个集合中每一个元素.

9.通过对需求的进一步分析,我们 重新设计FormInstance实体,增加了对象属性.  
表单实例:  
    // 表单状态常量
    public static final String STATUS_PROCESSING = "正在审批中";
    public static final String STATUS_APPROVED = "已通过审批";
    public static final String STATUS_NOT_APPROVED = "未通过审批";

    private Long id;
    private FormDefinition formDefinition;
    private Map<String, Serializable> propertyMap = new HashMap<String, Serializable>();

    private Employee applicant; // 申请人
    private Date applyTime;
    private String title;
    private String status;
    private Set<ApproveInfo> approveInfos = new HashSet<ApproveInfo>();
    private Long processInstanceId;
审批信息:  
    private Long id;
    private Employee approver;
    private Date approveTime;
    private FormInstance formInstance;
    private boolean approval;
    private String comment;
    private Long taskInstanceId;
    
总结:  
审批流转(各种审批流程与相应表单)

1.管理:A,流程.B,表单
2.执行: 让表单数据在指定的流程中流转(在流程实例中流转表单实例)
3.查询: 查询所有表单记录(表单实例)

1.流程定义管理: ProcessDefinition
2.设计实体: FormDefinition与部分FormInstance
3.表单定义管理: FormDefinition

1.设计测试 执行审批流转的 请假流程
2.测试请假流程(保证流程正确)
3.分析请假流程在系统中的应用,对应哪些功能
4.设计实体,保存执行审批流转时产生的信息(FormInstance与ApproveInfo)

我们这几天做的功能,可以这样总结一下就是说,客户可以根据自己的业务需求设计流程,表单,只不过目前还没有为客户提供一个傻瓜式的界面来帮助客户完成这 两项功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值