功能背景描述:团队需要一个休假安排表,以确定具体日期中哪位团队成员休假,休假期间他/她的替班成员是谁。能够在一个当前月份的日历表视图中体现。
APX提供了功能强大的日历组件,能够轻松实现与日历相关的0代码开发(当然,基本的SQL知识还是要懂一些的)。另外,APEX还提供了功能丰富的日历开发模版。这对于日历应用的开发由非常好的指导意义。
一,休假数据表的创建。
日历应用是基于数据库开发的。所以首先要先创建一张数据表。至少要包括休假人,休假开始时间,休假结束时间。这里要主要的是APEX中对表中记录的修改(update)和删除(delete)的操作是需要基于主键(primary key)完成的。所以创建的表必须要包含主键(primary key)。下面是我在这个例子中创建的数据表。其中NAME和START_DATE是联合主键。
Column Name | Data Type | Nullable | PK | Comment |
NAME | VARCHAR2(50) | No | 1 | 休假人姓名 |
START_DATE | DATE | No | 2 | 开始日期 |
LEAVE_TYPE | VARCHAR2(50) | Yes | - | 休假类型 |
END_DATE | DATE | Yes | - | 结束日期 |
FULL_DAY | VARCHAR2(10) | Yes | - | 是否全天 |
BACKUP | VARCHAR2(50) | Yes | - | 替班人姓名 |
二,创建日历页面
可以直接创建一个空白页面,然后在“页设计器”界面中,
在开发页面的中部靠下方,把“区域”中的“日历”组件拖拉至“布局”里。
在开发页面右部的区域定义中,输入休假表查询的SQL语句。这里不对具体的SQL语句进行讲解。请查阅Oracle数据库相关手册。
点接开发页面左部的“呈现”,选中刚才创建的日历组件下面的“属性”。
然后回到开发页面右部的属性定义中设置“显示列”(参考上面的SQL语句,这里是多个字段的合并输出,“开始日期列”,“结束日期列”。
界面的显示效果如下图
好了,日历的页面设计暂告一段落。下面开始要做数据增(Insert)、删(Delete)、改(Update)的设置。
三,创建一个增删改的弹出式对话框
新建一个空白的页面。注意在创建的时候要选择“模式对话框”(具体的区别请点击右侧的小问号了解)。
在新建的页面里创建4个选择列表项,2个日期项,3个按钮(分别对应增、删、改)和1个处理(process)。
在开发页面右部的属性定义里,可以设置选项列表的可选值。可选值可以是预设的静态值。如休假类型:
也可以是存放在数据表里的记录。如人员姓名:
请注意:通过SQL获取数据表里的记录,SQL的写法必须如上图表达式。
对于日期项,需要与数据源的对应字段做匹配设置。
增、删、改的按钮设置。数据库操作分别选择“SQL INSERT”,“SQL DELETE”,“SQL UPDATE”。
另外要注意⚠️,增加记录和修改记录(删、改)虽然调用的是同一个页面,但是进入方式不一样,所以要设置在不同的进入方式的时候,出现的按钮不一样。“增加”按钮的“服务器端条件”中,设置类型,P29_START_DATE(休假开始时间)项为空值的时候,意味着是增加记录,所以只显示“增加”按钮。“删除”和“修改”的“服务器端条件”中,设置类型,P29_START_DATE(休假开始时间)项不为空值的时候,意味着是对一条已有的记录做修改或删除的操作,所以只显示“删除”和“修改”按钮。
最后说一下处理(process)的设置。处理(process)是真正地对数据库进行操作。在开发页面中部,“组件视图”-》“页处理”创建一个“处理”。然后在开发页面的右部设置“处理”的属性。类型选择“自动行处理(DML)”。选择要处理的表明。接下来关键的是要选择主键列/项和次级键列/项。由于休假表的主键是人员姓名和休假开始时间的复合主键,所以这里要设置两个主键(次级键)项/列。
另外,可以设置一下记录提交成功或失败返回的消息框。
到此,弹出式对话框的创建完成。
四, 通过点击按钮弹出对话框
首先我们要先添加一个按钮。在开发页面的“区域”的靠下方,点击“按钮”,选择适用的按钮(这里选择Text[热门])拖拉到刚才创建的日历下方。按钮的行为设置操作为“重定向到指定的页面”并把目标设置为在步骤三中创建好的弹出对话框(页号)。
接下来我们要再做一个设置,当点击已有的日历记录的时候,能够调用弹出对话框对记录进行修改或删除的操作。在开发页面的左部,选中刚才创建的日历组件的“属性”,然后在开发页面的右部做如下设置。在“查看/编辑链接”中把目标设置为在步骤三中创建好的弹出对话框(页号)。
所以,点击不同的进入方式,弹出的对话框是稍微有区别的。请对比下面两个弹出对话框,它们调用同一个页面,但由于经由不同的点击调用,稍微有点不一样。
增加记录的对话框
修改或删除记录的对话框
好了,到这里,这个日历休假安排的小应用可以上线使用了。
此外,Oracle APEX提供一套很完整的日历组件的应用程序库。大家可以安装并运行,参考一些更复杂的应用是如何开发和实现的。