(Oracle APEX在2019年3月份发布了全新19.1版本。开发功能增强,开发组件增多,同时开发界面和模版已有调整。了解更多19.1版本的变化,请访问apex.oracle.com。从本文开始,所述内容都是基于19.1版本的实践。)
交互式报表的使用
交互式报表是在APEX中最常用的报表展现形式。除了提供基本的记录查询和增删改的操作之外,还提供强大的过滤器、行列互换、表图互转、以及数据导出等功能。
首先,先介绍一下交互式报表中的Actions。
Columns:自定义表中各列的排列顺序。另外,如果是管理员自定义好了列顺序(自定义后要保存为primary report),其它用户可看到的就是管理员预先定义好的列顺序。
Filter:定义查询条件。即SQL语句里的where字句。
Data:对数据进行排序、聚合、计算、回闪(可定义回闪到几分钟前的数据)。
Format: 可以设置数据展现的格式。
Chart:把当前交互式报表转换成图表。
Group by:定义Group by条件并按此条件展现数据。
Pivot:行列互换设置。
Report:保存自定义的报表。可以是自定义过滤器的报表,或自定义列排序的报表。
Download:把当前报表(可以是带过滤器的)下载到本地。有多种格式可选。
Subscription:让系统定期把报表发送至指定的邮箱。
交互式报表的开发
创建一个带交互式报表的页面
可以在创建新的页面的时候选择创建一个带交互式报表的页面。但通常情况下,更灵活的方式是创建一个空页面。然后把需要创建的报表类型(如交互式报表)拖拉至空页面内。
把中部下方的“区域”中“交互式报表”拖拉至上方页面的空白处(你所希望放置报表的地方)。然后可以在右部的属性中定义数据源。数据源的类型可以是表/视图,SQL或PL/SQL返回的结果集。这里选最简单的表/视图。
在左部的“呈现”里可以删除掉不希望显示的列,或者在右部列的“标识”-》“类型“里选择”隐藏列“。除此之外,可以设置列的布局和外观。好了,一个简单的交互式报表就实现了。
对交互式报表中进行增删改的操作
除了用交互式报表展现数据外,我们还希望能进行增删改的操作。下面说一下如何添加按钮、表单、处理和验证来实现数据增删改的操作。
先来创建一个新的页面,做为添加或者修改数据的对话框。要做出来弹出式对话框的效果是如下的样子。
新建一个空白的页面。注意在创建的时候要选择“模式对话框”(具体的区别请点击右侧的小问号了解)。
把需要创建的“项”拖拉到新建的对话框页面中。然后设置“项”的布局和外观。
接下来我们对不同的“项”进行与之对应的数据类型的属性设置。下面是一些例子。
“选择列表”,可选项的值可在既有的数据表中提取。
例如,CSA Name这个选择列表的值,可以通过tb_ca_team这个表中提取。注意,select语句的表述方式,要选择两个字段,‘d'是显示值,’r‘是实际要传出(写入数据库)的值。比如说,’d‘可以是简称,写入数据库的值’r'是全称。
也可以通过预定义全局的共享组件做为列表值。
又或者可以直接手工设置静态值。
“带自动完成功能的文本字段”。输入关键字的时候,能够自动搜索相关数据自动完成数据值的填写。这对于约束数据录入和保证数据一致性非常有用。下面的例子是,当选择了“Region”值后,在“Customer Name”输入关键字的时候,系统会查询tb_em_cust中符合已选“Region“值的cust_name,并自动完成数据值填写。
效果如下:
其它“项”类型的设置和使用请参阅APEX相关文档。
接下来可以设置一些“验证”,在数据写入数据库之前,先验证数据的有效性。
在“处理”-》“验证”下可以创建新的“验证”
验证的属性举例如下:indate_valid对应的验证“项”是P3_IN_DATE,验证类型为“项不为空值或零”。如果验证失败,返回错误信息。
下面这个验证例子会更复杂一些,需要与数据库中指定表的数据/字段/项做交叉验证。
下面需要做“按钮”和“处理”。
在对话框页面要增加三个按钮,“增”、“删”,“改”。需要做到的效果是,当在主页面点击的“添加”按钮的时候,对话框只显示“增”的按钮。当点击“编辑”的按钮的时候对话框只显示“删”和“改”的按钮。
“增”按钮的属性设置。行为是“提交页”,进行“SQL INSERT操作”。当P31_KUDO_IN_DATE项为空值的时候显示(空值意味着是一条新记录)。
”改“按钮的属性设置。行为是“提交页”,进行“SQL UPDTE操作”。当P31_KUDO_IN_DATE项为非空值的时候显示(非空值意味着是一条已有记录)。“删”按钮同理。
好了,就差最后一步,要创建两个数据库“处理”,一个用于数据库DML的“处理”,另一个用于“删”、“改”操作前,把记录提取到对话框内进行修改或删除的“处理”。
新增一个“处理”。“处理”的属性设置如下图。在这里“类型”选的是“自动行处理(DML)[旧]。这是从18版继承过来的处理类型。19.1版新增了“表单-自动行处理(DML)”。本应选这个类型,但实际操作时返回出错信息,DML失败(这个有待研究)。所以暂时先用回18版的自动行处理类型。
另外,APEX对数据库的表进行DML操作的时候需要做表中主键(PK,primary key)的匹配(如果表中没有PK,可以用RowID做为PK)。这个例子里的PK是复合字段,所以设置两个主键字段和“项”的对应关系。
最下面就是这个“处理”可以执行的数据库的操作,“增”、“删”、“改”。
新增另一个处理,在“删”、“改”操作前提取对应记录到对话框中。要注意⚠️,这个“处理”的放置位置,必须是在对话框呈现前就要完成的操作,所以要放在“呈现前”的区域里。
“处理”的属性设置如下图。在这里“类型”选的是“自动行提取[旧]。这是从18版继承过来的处理类型。19.1版新增了“表单-初始化”。本应选这个类型,但实际操作时提取数据失败(这个有待研究)。所以暂时先用回18版的自动行提取类型。
类似的,设置PK字段和“项”的对应关系。最后要注意最下面“执行选项”的设置。执行“点”是在“页眉之后”,“每次访问页时一次“。
到此,用于记录“增删改”操作的对话框做完了。需要返回到互动式报表页面去增加按钮以及对应的流转操作。
在交互式报表中添加一个“增”的按钮。在“行为”中设置“操作”为“重定向到此应用程序中的页“,然后选择需要重定向的目标,即上面创建的对话框的页号。注意在下方,我为这个操作设置了安全属性,只有指定的人员才能进行“增删改”的操作,其他人只能查看。APEX中的权限和安全访问我会用专门一个篇幅介绍。
对于“删”、“改”的操作,用另外一种形式实现。点击记录前的“编辑”按钮📝,即可以调出对话框进行“删”、“改”的操作。
在右部选中交互式报表的“属性”,然后在左部的“链接”,“链接到定制目标“。点击“目标”按钮,在弹出的对话框里选择目标类型和页号。然后需要在“设置项”里添加传出的值(用于提取数据库表的主键对应设置)。同样,“删”、“改”操作也做了权限设置。
到此为止,可以进行“增删改”操作的交互式报表创建完成。
更多关于徐大爷的APEX及Oracle相关产品的学习心得,请扫以下二维码关注徐大爷的APEX学习笔记。