按照标题排序mysql_Oracle EBS Form中实现点击列标题进行排序
在做EBS表單開發時,雖然使用folder功能提供了排序功能,對多行數據塊可以對前三列進行指定排序,也可以單擊前三列的列標題進行排
27.1 問題描述
在做EBS表單開發時,雖然使用folder功能提供了排序功能,對多行數據塊可以對前三列進行指定排序,也可以單擊前三列的列標題進行排序,但是不能對更多的列進行排序,如果要對更多的列進行排序,需要將要排序的列拖動到前三列才可以進行,限制較大。我們在MRPII系統中一般可以對任何列進行點擊列標題進行排序,如何在保證文件夾功能的前提下實現點擊列標題自動排序呢?
27.2解決方案
經過測試,我認為文件夾功能進行排序是通過更改對應的數據塊的ORDER BY屬性,然后執行查詢而實現的,并非在客戶端進行排序,而是通過數據庫服務器實現排序的,明白這個原理以后就好操作了。我這個點擊列標題進行排序功能需要大家使用文件夾功能,具體是指對應數據塊需要有個這個數據塊名加上_PROMPT的數據塊對應,且這個塊的項目的Name屬性要為對應的列的數據源字段名,如果大家按照規范使用文件夾功能,這個前提已經滿足了。情景:有個多行數據塊名為BILL_LINES,實現了文件夾功能,其對應的列標題數據塊是BILL_LINES_PROMPT,以下是實現部分:
步驟1:新建參數,Name屬性為SORT_RULE,Parameter Data Type屬性為Char,Maximum Length屬性為150,Parameter Initial Value為NO_RULE,也就是做如下圖所示設置:
步驟2:創建包BLOCK_SORT,包說明使用的代碼如下:
PACKAGE BLOCK_SORT IS
PROCEDURE GET_SORT(block_item IN VARCHAR2);
PROCEDURE CALL_SORT(sort_rule IN VARCHAR2);
END;
包主體使用的代碼如下:
PACKAGE BODY BLOCK_SORT IS
procedure GET_SORT(block_item IN VARCHAR2) IS
block_name varchar2(80);
item_name varchar2(80);
order_by1 varchar2(80);
i number;
BEGIN
i := INSTR(block_item,'_PROMPT');
IF i>1 THEN
item_name := SUBSTR(block_item,i+8);
block_name := SUBSTR(block_item,1,i-1);
order_by1 :=GET_BLOCK_PROPERTY(block_name,ORDER_BY);
IF INSTR(order_by1,item_name)>=1 THEN
IF INSTR(UPPER(order_by1),'DESC')>=1 then
:PARAMETER.SORT_RULE :='Y' || block_name || '|' || item_name;
ELSE
:PARAMETER.SORT_RULE :='Y' || block_name || '|' || item_name || ' DESC';
END IF;
ELSE
:PARAMETER.SORT_RULE :='Y' || block_name || '|' || item_name;
END IF;
Do_Key('Execute_Query');
:PARAMETER.SORT_RULE :='N' || SUBSTR(:PARAMETER.SORT_RULE,2);
END IF;
END GET_SORT;
PROCEDURE CALL_SORT(sort_rule IN VARCHAR2) IS
block_name varchar2(80);
sort_rule_new varchar2(80);
i number;
BEGIN
i := INSTR(sort_rule,'|');
IF i>1 THEN
block_name := SUBSTR(sort_rule,2,i-2);
sort_rule_new := SUBSTR(sort_rule,i+1);
SET_BLOCK_PROPERTY(block_name,ORDER_BY,sort_rule_new);
END IF;
END CALL_SORT;
END;
步驟三:在要執行點擊列標題進行排序的列標題,比如在BILL_LINES_PROMPT數據塊的OSALE_PRICE項目的WHEN-MOUSE-UP觸發器中的代碼app_folder.event('WHEN-MOUSE-UP'); 后面增加如下代碼
BLOCK_SORT.GET_SORT(:SYSTEM.TRIGGER_ITEM);
如果要對多列進行點擊列標題進行排序,多次重復此步驟增加一行代碼。
步驟四:在要執行查詢的數據塊,這里是BILL_LINES的PRE-QUERY事件的app_folder.event('PRE-QUERY'); 代碼后增加如下代碼即可。:
IF SUBSTR(:PARAMETER.SORT_RULE,1,1) = 'Y' THEN
BLOCK_SORT.CALL_SORT(:PARAMETER.SORT_RULE);
END IF;
本例說到的功能完成以上幾個步驟后已經實現了,當然可以再擴展,,更加方便使用的。
本文原創發布php中文網,轉載請注明出處,感謝您的尊重!
總結
以上是生活随笔為你收集整理的按照标题排序mysql_Oracle EBS Form中实现点击列标题进行排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二维码图像去噪文献调研(1)--Real
- 下一篇: discuz和php的关系,UCente