`
从此醉
  • 浏览: 1046588 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

63. XPages自定义控件(三)高级搜索之一

 
阅读更多
59. XPages自定义控件(二)搜索视图里,笔者演示了如何用一个自定义控件给一个XPage页面添加全文搜索的功能,这在以文档为主要数据的系统里很好用,也足够了。不过,如在62. 全文搜索与条件查询一文里提到的,对于包含了结构化数据的系统,用户经常希望按字段做更精确的条件查询,利用Lotus Notes全文搜索支持的查询语法,也可以实现这一点。下面笔者就同样用一个控件来演示简单的多条件查询。

与全文搜索不同,多条件查询在界面上要显示查询的数据包含的字段,不能简单使用一个通用的界面。即使用参数控制,也很难做到像依具体字段和查询特点专门设计的界面那样让用户方便,这一点,在62. 全文搜索与条件查询通用的多条件查询一节里已经论述过了。那么还有什么必要创建一个本来是为了多次使用的自定义控件呢?因为在某些情况下,多个XPage上展现的视图虽然源于不同的Notes视图,但是外观相同;甚至可以只源于一个Notes视图,籍由视图控件的分类和搜索等过滤属性显示同一Notes视图的不同文档子集,比如本文用到的这个场景:

一个记录员工考勤信息的应用程序,需要实现的功能包括从门禁系统每日导入打卡数据,向用户分别显示打卡记录、考勤(上班下班)记录、异常(迟到早退)记录和补卡记录,普通用户只能看到自己的记录,管理员可以查看所有人的记录并按条件查询。

为了实现这些功能,最简洁的设计只需一个表单,Record;两个Notes视图,Record和Exception。每条Record文档记录员工的一次打卡,包括卡号、员工号、姓名、打卡时间、部门等字段。因为门禁系统提供的数据没有标记哪些是上下班记录,所以须由一个代理选择每人每天的第一次打卡作为上班记录,最后一次打卡作为下班记录,并记录在案文档的Type字段里。补卡记录通过另外一个字段MakeUp标记。展现给用户的四个视图页面,打卡记录、考勤记录、异常记录和补卡记录,第一个有日期、时间、姓名、部门和办公室五列,后面三个增加一列类型(上班或下班),除此之外,视图上的各种用户操作都相同。因此我们只需单独设计打卡记录的页面,对考勤记录、异常记录和补卡记录三个页面可以共用一个自定义控件RecordView。这个自定义控件包含一个视图控件并实现查询、创建、删除等功能。通过自定义参数将不同种类的记录对应的全文搜索的查询条件传递给视图控件。这个初步思路的唯一问题是系统须根据预设的上下班时间判定哪些记录属于迟到早退。这个判断可以在上面提到的标记上下班记录的代理里完成,但这样做如果需要调整上下班时间标准(在考勤系统试运行时期或者公司对迟到早退的规定有弹性调整时都可能发生),就必须重新修改所有的考勤记录。一个明显更灵活也更简单的方法是把这个判断放在显示时完成,也就是在传给考勤记录视图页面的查询条件里加上对打卡时间的限制。因为在我们极简的表单设计里,打卡的日期和时间是保存在同一个AccessTime字段里,要筛选出异常记录,必须获得这个字段的时间部分的值,Lotus Notes全文搜索的语法是没有这样的功能的,所以我们只得为异常记录建一个专门的Notes视图,这也就是下面笔者提到需要Record视图之外的Exception视图的原因。

设计方面的分析结束了,我们来看看最终的结果。


考勤记录(Attendance Records)视图页面

异常记录(Exception Records)视图页面


打卡记录(Access Records)视图页面


补卡记录(Manual Records)视图页面


输入员工姓名查询,有辅助输入(type ahead)功能


输入打卡起始日期查询


查询结果

在下一篇文章里,笔者会详细分析实现这些功能的代码。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics