首先,先按TEMPLATE将其他功能先实现,然后再来实现查找的功能。手电筒查找的Effect有两二种,①LOV形式,②window形式。
1、LOV查找模式:一般适用于查询结果只返回单条条件的查询(如主从数据块的界面)。
①创建一个parameter参数:TEST_P
②创建一个基于主键查询LOV-TEST_L,并将主键字段映射给Parameter参数TEST_P。
③在数据块中创建PRE-QUERY触发器。
IF :parameter.G_query_find = 'TRUE' THEN :BLOCKNAME.HEADER_ID := :parameter.TEST_P; :parameter.G_query_find := 'FALSE';
end if;
④在数据块中再创建QUERY_FIND触发器。
begin
app_find.query_find('TEST_L'); --调用LOV
end;
⑤完成效果如下:
2、WINDOW查找模式:一般适用多条件查询,可以返回多条查询记录。
①打开在标准FORM---APPSTAND.fmb。将对象组中的QUERY_FIND拖至待开发的FORM中。这个地方要选择COPY
②重命名第一个数据块、画布、窗口(QUERY_***都是刚才自动创建的)。USER GUID说可以重命名,但我没有重命名成功。也懒得去折腾一个命名的问题。^_^ ③打开QUERY_FIND画布,改写“新建”、“查找”两个按钮WHEN-BUTTON-PRESS之中的代码。
NEW按钮代码:
--app_find.new('Your blockname here'); app_find.new('HEK_SALE_CUST_MANUAL');
FIND按钮代码:
:parameter.G_query_find := 'TRUE'; --app_find.find('your blockname here'); app_find.find('HEK_SALE_CUST_MANUAL'); :parameter.G_query_find := 'FALSE';
④设置QUERY_FIND数据块的“前一导航数据块”,也就是要实现询查功能的数据块。
⑤修改QUERY_FIND数据块KEY-NXTBLK触发器代码
:parameter.G_query_find := 'TRUE'; --app_find.find('your blockname here'); app_find.find('HEK_SALE_CUST_MANUAL'); :parameter.G_query_find := 'FALSE';
⑦修改QUERY_FIND窗口的标题及尺寸,并在QUERY_FIND画布上创建要查找的条件ITEM。 ⑧在要实现查询的数据块(如:HEK_SALE_CUST_MANUAL),创建PRE-QUERY触发器。
if :parameter.g_query_find = 'TRUE' then
app_find.query_range(name_in('query_find.CUSTOMER_NUMBER'),name_in('query_find.CUSTOMER_NUMBER'),'HEK_SALE_CUST_MANUAL.CUST_CODE');
app_find.query_range(:query_find.CUST_DATE,:query_find.CUST_DATE,'HEK_SALE_CUST_MANUAL.TIME_ID'); :parameter.G_query_find := 'FALSE';
end if;
注:app_find.query_range参数前两个是QUERY_FIND中的ITEM,后一个是查询块中的ITEM。
⑨在要实现查询的数据块(如:HEK_SALE_CUST_MANUAL),再创建QUERY_FIND触发器。
--APP_FIND.QUERY_FIND('','',''); app_find.query_find('HEK_SALE_DEPT_MANUAL','QUERY_FIND','QUERY_FIND');
⑩完成效果如下:
记录指示器切换标签页
Effect:
1、 在该数据块中手工增加一个ITEM
设置ITEM的属性:子类信息:设成DRILLDOWN_RECORD_INDICATOR,数据库项:否.
2.在新增的ITEM的WHEN-MOUSE-CLICK触发器加入
declare
v_order number;
begin
v_order := : block_name1.item; --block_name表示要切换tab的数据块
if v_order is not null then
go_block(' block_name1');
set_block_property('block_name1 ',DEFAULT_WHERE,'ORDER_NUMBER='||v_order);
execute_query;
end if;
end;
3.这样就可以实现类似VB中的TAB切换了。由于ORACLE FORM没有专门的TAB函数,只能如此曲折实现。
PS:有的时候我们查找一次之后,发现手电筒灰掉。
将QUERY ALLOWED 设置为YES
另外一种解决办法是:
将要查找数据块的 WHEN-NEW-RECORD-INSTANCE 的执行等级改为AFTER