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直接設計為“~”,而不是“截止時間”。?