1 根据值来查询
具体流程步骤看第2节,这里提供核心的增加查询条件的触发器代码:
1.1 可完全匹配的值
比如“是”,“否”,“物料”,“”汽车 等等这些可以直接通过对应的值匹配,特点就是词语,短小。
-- 将查询条件中的type_code字段值复制到headers记录的type_code字段,用于后续处理或查询过滤
copy(:query.type_code, 'headers.type_code');-- 将查询条件中的orig_system字段值复制到headers记录的orig_system字段,用于后续处理或查询过滤
copy(:query.orig_system, 'headers.orig_system');-- 将查询条件中的status_name字段值复制到headers记录的status_name字段,用于后续处理或查询过滤
copy(:query.status_name, 'headers.status_name');-- 将查询条件中的batch_id字段值复制到headers记录的batch_id字段,用于后续处理或查询过滤
copy(:query.batch_id, 'headers.batch_id');-- 将查询条件中的status字段值复制到headers记录的status字段,用于后续处理或查询过滤
copy(:query.status, 'headers.status');
1.2 需模糊查询的值
比如:
[{"origlineid":"b78c1780fda649d1a0f59ba4a869f22a@LL25072225119&CSG030100002","status":"200","errmsg":""}",{"origlineid":"aa0d7b5bff3c43af80d48a070c75ab08@LL25072225119&D029900001","status":"200","errmsg":""}"]
这个的特点就是长,比如一个json字典,里面有几十种,几百种的类别值,我们只需要根据其中关键的信息进行搜索即可,这种情况怎么办呢,如下:
-- 判断查询条件中的data字段是否不为空
if :query.data is not null then-- 如果data不为空,则将其值前后加上通配符%,形成模糊查询字符串,再复制到headers.DATA字段-- 这样可以实现类似SQL中的LIKE '%data%'查询copy('%' || :query.data || '%', 'headers.DATA');
else-- 如果data为空,则直接将空值复制到headers.DATA字段,避免影响查询逻辑copy(:query.data, 'headers.DATA');
end if;
2 根据时间范围来查询
2.1 新增查询数据块的项:START_DATE和END_DATE
设置起始时间(START_DATE)和截至时间(END_DATE)字段,
2.2 查询按钮触发器和属性模板
查询按钮的属性,就是很普通的属性。
查询按钮下的触发器WHEN-BUTTON-PRESSED代码可以看出,他是直接跳转到了需要查询的数据块,然后执行查询。这是一套EBS内置的函数,一个大致的模板如下所示。
-- 跳转到需要查询的数据块
go_block('select_block');
-- 执行查询
execute_query;
2.3 被查询的数据块触发器PRE-QUERY修改
我们最终需要实现的效果应当如下表所示:
起始时间(Start Date) | 截止时间(End Date) | 查询时间范围说明 |
---|---|---|
为空 | 不为空 | 查询截止时间之前的记录,起始时间为“当前日期往前” |
不为空 | 为空 | 查询起始时间之后的记录,截止时间为“当前日期往后” |
不为空 | 不为空 | 查询起始时间和截止时间之间的记录 |
为空 | 为空 | 默认查询全部或根据业务需求处理 |
一定要在查询前的触发器PRE-QUERY上修改,一个大致的模板如下所示:
赋值即绑定:
当你使用copy给headers.XXX
赋值后,Forms自动将这个值绑定到查询语句中,执行查询时就会用这个值作为过滤条件。动态过滤实现:
这样就实现了根据用户输入动态过滤数据的功能,赋值就是告诉查询引擎“我要用这个条件来筛选数据”。
-- 调用自定义过程app_find.query_range,传入查询条件中的起始时间和截止时间,以及headers表中的creation_date字段名
-- 该过程会根据起止时间设置查询条件,实现按时间范围过滤数据
app_find.query_range(:query.start_date,:query.end_date,'headers.creation_date');
2.4 时间范围文本框的界面设计
start_date直接提示设计为“创建时间”,end_date直接设计为“~”,而不是“截止时间”。