首先,先按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中。
②重命名第一個數據塊、畫布、窗口(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函數,只能如此曲折實現。