实验室预约管理系统已经完成,通过此项目对ofbiz的使用做个总结。
从功能点方面总结:
1. 单个实体的增删改查功能。可以参考教师管理模块的实现。
2. lookup检索数据功能。可以参考课程管理模块的实现。在实验项目维护时会使用到。
3. 上传和下载功能。可以参考批量导入学生信息功能。
4. 批量操作功能。如批量审核,批量考勤功能。
5. 分页功能。
6. 触发器功能。如新增修改学生和教师记录时,自动触发操作ofbiz自带的表,创建对应的登录账号,和重置密码等功能。
从技术点方面总结:
1. 实现实体的增删改查功能,可以从service.xml文件中看到主要是使用了entity-auto引擎和groovy引擎。
2. lookup技术理解后实现起来就比较简单了,之前也有文章专门分析过,该技术很好用。
3. 下载功能主要是通过org.apache.ofbiz.booking.download.DownloadEvents类实现。
主要难点是对不同文件response.setContentType的设置不一样。具体可以参考http://tool.oschina.net/commons/
4. 批量导入功能其实技术点包含了上传功能和文件解析功能。
4.1 上传功能。主要通过ofbiz自带的HttpRequestFileUpload类实现,使用发现原来的HttpRequestFileUpload类有点小问题,所以自己修改了下。点击链接查看详情。
4.2 文件解析功能。这是自己写的一个工具类ExcelUtil。点击查看
4.3 具体例子可以查看 ofbiz实战10——学生管理实现代码
5. 批量操作。例子:ofbiz实战——学生预约申请管理界面以及代码 。里面的批量审核,和批量考勤功能。
6. 分页功能主要是使用了performFind服务实现。
使用performFind查询时如何设置查询条件值为null的情况
entity-view实体视图的定义,包括分组统计功能。参考entitymodel_view.xml
7. 触发器功能主要是通过配置eecas.xml和secas.xml文件。
OFBiz中有两种类型的ECA规则:Service Event Condition Actions(SECAs 服务事件条件动作)和Entity Event Condition Actions(EECAs 实体事件条件动作)。查看
8. xml配置文件中value值可以使用groovy脚本设置,类似StuBatchScreens.xml如下:
<screenlet title="${groovy: parameters.StuBatchId ? uiLabelMap.CommonEdit : uiLabelMap.CommonAdd}">
<include-form name="EditStuBatch" location="component://booking/widget/booking/StuBatchForms.xml"/>
</screenlet>
项目开发过程遇到的问题:
1. 分组统计视图定义。
一起习惯用sql语句分组统计查询,现在改为了定义一个实体视图,发现有很大的区别。
之前是想着根据sql写出等价的实体视图定义,后来发现这条路好像走不通。后来把一个视图分解为多个小视图,每个要统计的列专门定义一个实体视图实现这样,这样最后再把所有小的实体视图组装成一个最终的实体视图。这样实现起来条理就比较清晰了。
2. <form>里的控件在一行显示。比如多个field显示在一行,而不是每个field单独一行。
这个问题暂时没找到解决办法。或许有相关属性配置一下就可以了,但我不知道。
3. <link>标签无法实现点击弹出窗口的效果,只能使用<hyperlink>.l例如:
<form name="FindStuBatchBar" target="FindStuBatchBar" title="" type="single"
header-row-style="header-row" default-table-style="basic-table" >
<field name="test" title=" " widget-style="buttontext">
<hyperlink description="${uiLabelMap.AuditingStuBatchList}" target="EditAuditingResult" also-hidden="false" link-type="layered-modal"/>
</field>
</form>
但其实我只是想实现layer弹出一个小窗口的功能,希望直接在Screens.xml中配置,而不是必须写到from表单里面。
在本项目中批量审核功能的实现,我试了很多办法,最终还是选择了使用了上面的方法。但上面的方法有个缺点就是,当希望一行有多个按钮时,就无法实现了(见问题2)。
一行出现多个按钮的一个解决方案: 可以写一个ftl模板加载进去,具体的弹出窗口功能,则自己使用layer框架实现。
4. 批量操作问题。实现批量审核功能时,我研究了一天的时间,最后才自己写js脚本实现批量操作数据提交表单。应该有更简单的方法。
5. 批量操作的全选复选框。想再批量操作的表格表头加上全选复选框,但不知道怎么弄。
6. 分页查询。目前都是通过定义实体视图使用performFind服务实现分页查询。之后有时间要研究一下,使用groovy脚本或者java自定义服务实现。
7. 熟悉一些常见的内置对象。掌握ftl,xml,groovy,java文件里哪些内置对象可以直接使用。因为之前开发过程对这方面知识掌握不是很透彻,很多时候都靠不停的调试才获取到正确的参数。
8. eecas.xml和secas.xml传参问题,以及groovy获取参数问题。
经常获取不到期望的参数值,可能对这方面的传参不是很了解,有待深入研究。
9. 消息提示功能。使用eecas触发时,该如何修改提示信息?message消息提示功能有待深入研究。