Oracle Form开发手电筒查找功能实现

实现手电筒查找的功能

  首先,先按TEMPLATE将其他功能先实现,然后再来实现查找的功能。手电筒查找的Effect有两二种,①LOV形式,②window形式。

  1、LOV查找模式:一般适用于查询结果只返回单条条件的查询(如主从数据块的界面)。

  ①创建一个parameter参数:TEST_P

  ②创建一个基于主键查询LOV-TEST_L,并将主键字段映射给Parameter参数TEST_P。

  

        Oracle Form开发手电筒查找功能实现_第1张图片

  ③在数据块中创建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;

  ⑤完成效果如下:

  

Oracle Form开发手电筒查找功能实现_第2张图片

  2、WINDOW查找模式:一般适用多条件查询,可以返回多条查询记录。

  ①打开在标准FORM---APPSTAND.fmb。将对象组中的QUERY_FIND拖至待开发的FORM中。这个地方要选择COPY

  

Oracle Form开发手电筒查找功能实现_第3张图片

  ②重命名第一个数据块、画布、窗口(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触发器。

  

Oracle Form开发手电筒查找功能实现_第4张图片

  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');

  ⑩完成效果如下:

  

Oracle Form开发手电筒查找功能实现_第5张图片

  记录指示器切换标签页

  Effect:

  

Oracle Form开发手电筒查找功能实现_第6张图片

  1、 在该数据块中手工增加一个ITEM

  

Oracle Form开发手电筒查找功能实现_第7张图片

  设置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:有的时候我们查找一次之后,发现手电筒灰掉。

需要做如下设置:Oracle Form开发手电筒查找功能实现_第8张图片


将QUERY ALLOWED 设置为YES

另外一种解决办法是:

将要查找数据块的 WHEN-NEW-RECORD-INSTANCE 的执行等级改为AFTER

Oracle Form开发手电筒查找功能实现_第9张图片


你可能感兴趣的:(Oracle Form开发手电筒查找功能实现)