OracleEBSForm中实现点击列标题进行排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了OracleEBSForm中实现点击列标题进行排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2991字,纯文字阅读大概需要5分钟。
内容图文
![OracleEBSForm中实现点击列标题进行排序](/upload/InfoBanner/zyjiaocheng/552/5b38bf9dc5034d1aab2abb9ba7acb8f8.jpg)
在做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;
本例说到的功能完成以上几个步骤后已经实现了,当然可以再扩展,,更加方便使用的。
内容总结
以上是互联网集市为您收集整理的OracleEBSForm中实现点击列标题进行排序全部内容,希望文章能够帮你解决OracleEBSForm中实现点击列标题进行排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。