首页 > Linux操作系统 > Linux操作系统 > 关于 Find window
Find window
Find window在下列情况下适于使用:
(1) 一次返回多条记录,特别适合multi-row block;
(2) 需要多个查询条件关联进行复杂查询的;
(3) 数据量很多的情况。
创建Find window的步骤相对比较复杂::
(1) 从APPSTAND.fmb中拷贝QUERY_FIND Object Group到开发窗体的.fmb文件中,此时开发窗体中会自动多出生成新的Window、Canvas、Block。删除拷贝过来的QUERY_FIND Object Group,然而新生成的对象不会被删除,合理设置这些对象的property classes属性;
(2) 重命名这些新对象,比如:ORDERS_QF,ORDERS_QF_CANVAS,ORDERS_QF_WINDOW;
(3) 修改Find Windows的title名为 “Find
(4) 编辑NEW Button的WHEN-BUTTON-PRESSED Trigger;app_find.new('ORDERS'); results block name 这个函数使得Find Window关闭回到原来的Block,创建一条新记录。
(5) 编辑FIND Button的WHEN-BUTTON-PRESSED Trigger;
:parameter.G_query_find := 'TRUE';
app_find.find('ORDERS'); results block name
:parameter.G_query_find := 'FALSE';
如果查询到数据,则关闭Find Window关闭回到原来的Block,显示查询到的记录。
(6) 编辑Find block-level的KEY-NXTBLK Trigger
:parameter.G_query_find := 'TRUE';
app_find.find('ORDERS');
:parameter.G_query_find := 'FALSE';
作用与FIND Button相同。
(7) 正确导航 Find block的Previous Navigation Data Block应设为results block,应保证用户即使不作查询也能退出Find Window。而通过导航Block进入Find Window也是不推荐的。
(8) 开发Canvas在Find Canvas上创建所需的Item,所有的Item都可为空,default values均设置为 NULL;Check boxes和option groups都改为允许空值的poplists;唯一可以设置Item logic的字段类型是LOV,使用时注意Find Window不要和results Window共用LOV,因为Find Window的返回值会同时返回到results Window中,但是Find Window要和results Window共享Record Groups,保证数据一致性;创建那些在查询中要用到的隐藏字段;创建Item时,可从results block上拷贝,但要注意设置所有item为non-database items,正确的canvas、property class属性,删除所有item的trigger,保留或修改date fields的Calendar控制逻辑。
(9) 合理设置Find Window的大小
(10) 创建Results Block-Level PRE-QUERY Trigger (Execution hierarchy of Before),将Find Window中的值拷贝到results Window中。
IF :parameter.G_query_find = 'TRUE' THEN
:orders.order_id := :ORDERS_QF.ORDER_ID;
app_find.query_range(:orders_qf.date_ordered_from,
:orders_qf.date_ordered_to,
'ORDERS.DATE_ORDERED');
COPY (:orders_qf.order_status, 'ORDERS.ORDER_STATUS');
:orders.customer_id := :ORDERS_QF.CUSTOMER_ID;
COPY (:orders_qf.customer_name, 'ORDERS.CUSTOMER_NAME');
:orders.sales_rep_id := :ORDERS_QF.SALES_REP_ID;
COPY (:orders_qf.sales_rep_name, 'ORDERS.SALES_REP_NAME'); if :orders_qf.payment_type is not null then --判断poplist是否非空
COPY (:orders_qf.payment_type, 'ORDERS.PAYMENT_TYPE');
end if;
:parameter.G_query_find := 'FALSE';
end if;
(11) 创建Results Block-level QUERY_FIND trigger (Execution hierarchy of Override)
打开Find Window app_find.query_find('ORDERS_WINDOWS', 'ORDERS_QF_WINDOW', 'ORDERS_QF_BLOCK');
注意使用Find Window时不要设置Find Window和Results Window的Item同步,减少cross-field validation的使用,当Find Window没有查到数据时,焦点仍然停留在该窗体中。
解释一下:APP_FIND.QUERY_RANGE
procedure APP_FIND.QUERY_RANGE(
low_value varchar2/date/number,
high_value varchar2/date/number,
db_item_name varchar2);
APP_FIND.QUERY_FIND
procedure APP_FIND.QUERY_FIND(
block_window varchar2,
find_window varchar2,
find_block varchar2);
APP_FIND.FIND
procedure APP_FIND.FIND(
block_name varchar2);
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21704144/viewspace-1046662/ ,如需转载,请注明出处,否则将追究法律责任。