传智播客--OA项目的表单管理模块


OA项目的倒数第二天了,完成了大部分的模块,但还有几个重要的部位没有完成.还要继续努力.这几天的编写,感觉有点吃力了.晚上总是完不成老师白天讲的 内容,我得更加努力才行.我的同学们,每天都到9点多才离开学校.
今天的任务是主要完成了表单模板管理.

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)

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本系统的研发具有重大的意义,在安全性方面,用户使用浏览器访问网站时,采用注册和密码等相关的保护措施,提高系统的可靠性,维护用户的个人信息和财产的安全。在方便性方面,促进了校园失物招领网站的信息化建设,极大的方便了相关的工作人员对校园失物招领网站信息进行管理。 本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,AJAX技术设计简洁的、友好的网址页面,然后在IDEA开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员具有修改用户信息,发布寻物启事等功能。 管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限。管理员可以通过选择失物招领管理管理相关的失物招领信息记录,比如进行查看失物招领信息标题,修改失物招领信息来源等操作。管理员可以通过选择公告管理管理相关的公告信息记录,比如进行查看公告详情,删除错误的公告信息,发布公告等操作。管理员可以通过选择公告类型管理管理相关的公告类型信息,比如查看所有公告类型,删除无用公告类型,修改公告类型,添加公告类型等操作。寻物启事管理页面,此页面提供给管理员的功能有:新增寻物启事,修改寻物启事,删除寻物启事。物品类型管理页面,此页面提供给管理员的功能有:新增物品类型,修改物品类型,删除物品类型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值