在开发过程中,经常碰到需要修改标准Form中LOV的需求,一般来说都是做一些条件限制。在不修改标准Form的fmb文件的前提下,可以通过Custom.pll来实现。

一、Custom.pll的工作机制

在EBS中大部分Form都是在TEMPLATE.fmb的基础上创建的,另外还有一些HR模块的Form是在HRTEMPLT.fmb的基础上创建的,这些模板Form在form级的触发器中会去调用custom.pll

这些Form级的触发器为:

  1. ZOOM
  2. WHEN-NEW-FORM-INSTANCE
  3. WHEN-NEW-BLOCK-INSTANCE
  4. WHEN-NEW-RECORD-INSTANCE
  5. WHEN-NEW-ITEM-INSTANCE
  6. WHEN-VALIDATE-RECORD

在HRMS模块,还有以下触发器也调用了custom.pll

  1. PRE-DELETE
  2. POST-DELETE
  3. PRE-UPDATE
  4. POST-UPDATE
  5. PRE-INSERT
  6. POST-INSERT
  7. POST-FORMS-COMMIT
  8. WHEN-CREATE-RECORD
  9. KEY-DELREC

在这些触发器中,会调用APP_STANDARD.EVENT过程中的call_all_libraries(event_name),call_all_libraries过程会调用custom.event(event_name)。

二、使用custom.pll修改标准form的LOV

从服务器下载custom.pll文件,使用form builder打开。点击PL/SQL Libraries,点击新建按钮,另存为pll文件,例如XXPOXPOEPO.pll,新建Package XXPOXPOEPO

新建procedure set_po_vendor_lov:

代码为:

[c-sharp] view plaincopyprint?
  1. PROCEDURE set_po_vendor_lov IS
  2. l_query_string      VARCHAR2(2000);
  3. l_customer_group_id recordgroup;
  4. l_temp_id           NUMBER;
  5. l_customer_lov      lov;
  6. BEGIN
  7. IF name_in('system.cursor_item') = 'PO_HEADERS.VENDOR_NAME' THEN
  8. l_query_string := 'SELECT DISTINCT pov.vendor_name, pov.segment1 FROM
  9. po_vendors pov WHERE pov.enabled_flag = "Y"';
  10. IF not id_null(find_group('CUX_SUPPLIER_NAME')) THEN
  11. delete_group(‘CUX_SUPPLIER_NAME’);
  12. END IF;
  13. l_customer_group_id := create_group_from_query('CUX_SUPPLIER_NAME',
  14. l_query_string);
  15. set_lov_property('SUPPLIER_NAME', GROUP_NAME, 'CUX_SUPPLIER_NAME');
  16. END IF;
  17. END set_po_vendor_lov;

PROCEDURE set_po_vendor_lov IS l_query_string VARCHAR2(2000); l_customer_group_id recordgroup; l_temp_id NUMBER; l_customer_lov lov; BEGIN IF name_in('system.cursor_item') = 'PO_HEADERS.VENDOR_NAME' THEN l_query_string := 'SELECT DISTINCT pov.vendor_name, pov.segment1 FROM po_vendors pov WHERE pov.enabled_flag = "Y"'; IF not id_null(find_group('CUX_SUPPLIER_NAME')) THEN delete_group(‘CUX_SUPPLIER_NAME’); END IF; l_customer_group_id := create_group_from_query('CUX_SUPPLIER_NAME', l_query_string); set_lov_property('SUPPLIER_NAME', GROUP_NAME, 'CUX_SUPPLIER_NAME'); END IF; END set_po_vendor_lov;

首先,使用create_group_from_query来创建一个lov record group,

然后, 将我们需要修改的LOV的group置换为我们创建的group。由于这个过程是在when-new-item-instance中调用的,为了防止其他非使用该Lov的Item也执行改过程,所以在程序的开始进行了name_in(‘system.cursor_item’) = ‘PO_HEADERS.VENDOR_NAME’条件的判断,

另外,由于record group创建一次在第二次如果再次创建就会报错,所以使用了

if not id_null(find_group(‘CUX_SUPPLIER_NAME’)) then
          delete_group(‘CUX_SUPPLIER_NAME’);

end if;

删除group再创建(delete_group只能删除由程序创建的record group)。之所以用这种逻辑而不在创建的时候判断是否已经存在该group是因为这个query_string是动态的,所以在每次都创建才能保证每次LOV的结果是正确的。

接下来,就要把我们的pll添加到custom里面去,点击custom的Attached Libraries,点击添加按钮,选择XXPOXPOEPO。双击打开custom.pll中的custom package,

将procedure event过程修改为如下:

[c-sharp] view plaincopyprint?
  1. PROCEDURE event(event_name VARCHAR2) IS
  2. form_name  VARCHAR2(30) := name_in('system.current_form');
  3. block_name VARCHAR2(30) := name_in('system.cursor_block');
  4. item_name  VARCHAR2(30) := name_in('system.cursor_item');
  5. BEGIN
  6. IF event_name = 'WHEN-NEW-ITEM-INSTANCE' THEN
  7. IF form_name = 'POXPOEPO' AND block_name = 'PO_HEADERS' AND
  8. item_name = 'PO_HEADERS.VENDOR_NAME' THEN
  9. XXPOXPOEPO.set_po_vendor_lov;
  10. END IF;
  11. END IF;
  12. END event;

PROCEDURE event(event_name VARCHAR2) IS form_name VARCHAR2(30) := name_in('system.current_form'); block_name VARCHAR2(30) := name_in('system.cursor_block'); item_name VARCHAR2(30) := name_in('system.cursor_item'); BEGIN IF event_name = 'WHEN-NEW-ITEM-INSTANCE' THEN IF form_name = 'POXPOEPO' AND block_name = 'PO_HEADERS' AND item_name = 'PO_HEADERS.VENDOR_NAME' THEN XXPOXPOEPO.set_po_vendor_lov; END IF; END IF; END event;

在开始的时候,我是在custom过程中去判断当前Item是否等于VENDOR_NAME(红颜色的代码),结果发现添加了改条件之后,某一些Form会出现no data found的错误(例如应用开发员的功能form),这是因为该Form在打开的时候system.cursor_item为空,所以要把item的判断写进了自己客户化的pll中。

最后,把custom.pll和xxpoxpoepo.pll上传到服务器$AU_TOP/resource目录下,使用下面的命令编译pll,退出EBS再重新登陆,LOV就生效了

转载于:https://www.cnblogs.com/liuweicong39/archive/2012/11/15/2771165.html

使用Custom.pll修改标准Form的LOV相关推荐

  1. EBS 个性化示例1:修改标准FORM的LOV

    例子:客户维护界面,点击客户编号栏位,标准FORM的LOV是弹出所有的客户,个性化设置只弹出客户编号前缀为TEST的客户.(这个例子只是演示下个性化如何修改LOV,并不是实际客制需求) 前提:知道打开 ...

  2. 使用Form个性化修改标准Form的LOV

    需求:LOV不要所有人员,只要创建过单据的人员. 选择触发器事件以及触发器对象 在打开的个性化窗口中,如下图,其中触发器选择WHEN-NEW-ITEM-INSTANCE,触发器对象选择QUERY_FI ...

  3. unity动态修改标准材质自发光(Emission)

    目录 一.目的 1.想知道:unity动态修改标准材质自发光(Emission) 二.参考 1Unity利用材质自发光实现物体闪烁 三.操作:一:完成:变换材质自发光的数值 1.运行效果:材质变换了 ...

  4. STM32F410xx与STM32F411xE时钟修改(标准库)

    在使用标准库V1.8.0版本调试STM32F411xE时,时钟按照Cube提供的配置配好后(如图①) // system_stm32f4xx.c /************************* ...

  5. SAP CK11N如何修改标准价格

    MR21是直接更改单价, CK24是在CK11N或CK40N价格评估的基础上的价格核发, 两者相同点都是更改物料价格, 不同在CK24记录价格评估, 价格评估在做CO-PA时需要用到.因此,CK24一 ...

  6. oracle form动态lov,[转]查看FORM LOV的记录组

    1.打开个性化定义界面(如果没有权限,到系统配置文件设置中,查看是否是"隐藏诊断菜单"被设置成了是),所以定义一个个性化,action如下图所示: 消息文本中的SQL语句是:&qu ...

  7. Custom.pll : ZOOM小测试

    目标:输入供应商id后,点击zoom按钮,弹出此供应商历史信息. 前期准备:一个forms    name:HEK_PO_SPLHIS_TEST 1.启用ZOOM按钮 Code  1  functio ...

  8. oracle ebs form 计算 汇总公式,Oracle+EBS+Form开发小技巧汇总

    oracle form开发的技巧 content Oracle EBS Form开发小技巧汇总 ..................................... 2 Form中Block的重 ...

  9. ebs oracle pl sql开发_Oracle EBS Form个性化开发

    Oracle EBS Form个性化开发 时间: 2017-03-30 00:55:04 阅读: 728 评论: 收藏: Form个性化开发内容不是很多,在国内的项目上客户化界面上基本用不上,相关开发 ...

最新文章

  1. 两台计算机通过传统电话网络,计算机网络的复习题.doc
  2. DevOps Troubleshooting(1)-运维思想
  3. 《我在51CTO微职位学软考——奋发之路》
  4. 重写系统自带tabbar出现的 代理错误
  5. 文档模型(JSON)使用介绍
  6. cpu频率_新版win10修复CPU频率显示不正确的bug
  7. 2019.7.25锻炼逻辑思维9道题。
  8. c语言排队系统,【分享】C语言 银行取票排队系统
  9. Redis——多数据库
  10. 极宝贵的BAT后端面经(含答案)
  11. ORACLE账号注册之后,要修改密码才能用
  12. 2009年02月《安全天下事》、2009年02月《安全天下事之12月,辩证法之月》、《2008信息安全技术与产业大盘点》...
  13. 说话干嘛要“之道”啦?(持续更新中)
  14. 公交线路查询接口使用说明
  15. 光流的基本概念和原理-Lucas–Kanade光流算法
  16. 细致的网站开发流程是怎样的?
  17. 数据分析软件Excel,Origin, Matlab,Mathmatica和Maple
  18. Paython基础讲解(1)
  19. 常用的十种数据分析方法
  20. P3387 【模板】缩点

热门文章

  1. 解决FusionCharts联动的中文乱码.
  2. 【Android游戏开发之八】游戏中添加音频-详解MediaPlayer与SoundPool的利弊以及各个在游戏中的用途!...
  3. STP 简介----PVST+ RSTP和快速PVST+ (1)
  4. 使用iframe模拟无刷新上传文件。
  5. dubbo每次都要连zookeeper?
  6. 阻塞队列的使用案例-注册成功后增加积分
  7. MyBatis 实际使用案例-objectFactory【重点】
  8. 类加载器-双亲委派-源码分析2
  9. 上传图片-服务端-Api接口定义
  10. ES6新特性之转码器(UmiJS入门)