您好,欢迎来到中国企业库   [请登陆]  [免费注册]
小程序  
APP  
微信公众号  
手机版  
 [ 免责声明 ]     [ 举报 ]
企业库免费B2B网站
搜产品 搜企业
客服电话:400-000-8722
企业库首页>资讯
行业

使用Custom.pll修改标准Form的LOV(转)_一个人的精彩_百度空间

作者:企业资讯策划团队 来源:rwfb 发布时间:2010-01-31 浏览:244

在开发过程中,经常碰到需要修改标准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如下:

procedure set_po_vendor_lov
is
l_query_string
l_customer_group_id recordgroup;
l_temp_id
l_customer_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

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

  --新建lov record group
l_customer_group_id := create_group_from_query(’CUX_SUPPLIER_NAME’, l_query_string);

  --置换lov
set_lov_property(’SUPPLIER_NAME’, GROUP_NAME, ‘CUX_SUPPLIER_NAME’);


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过程修改为如下:

procedure event(event_name varchar2) is


block_name
–item_name

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中。

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

f60gen module_type=LIBRARY module=CUSTOM userid=apps/apps



郑重声明:资讯 【使用Custom.pll修改标准Form的LOV(转)_一个人的精彩_百度空间】由 企业资讯策划团队 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库www.qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
会员咨询QQ群:902340051 入群验证:企业库会员咨询.
免费注册只需30秒,立刻尊享
免费开通旗舰型网络商铺
免费发布无限量供求信息
每天查看30万求购信息