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)
我们这几天做的功能,可以这样总结一下就是说,客户可以根据自己的业务需求设计流程,表单,只不过目前还没有为客户提供一个傻瓜式的界面来帮助客户完成这 两项功能
执行审批流转
请假单.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)
我们这几天做的功能,可以这样总结一下就是说,客户可以根据自己的业务需求设计流程,表单,只不过目前还没有为客户提供一个傻瓜式的界面来帮助客户完成这 两项功能