`
chengyue2007
  • 浏览: 1501265 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

使用Custom.pll修改标准Form

 
阅读更多

来自于:http://oracleseeker.com/2008/09/21/use-custompll-personalize-forms-lov/

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

 1.jpg



 

 

在这些触发器中,会调用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           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过程修改为如下:

 

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就生效了

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

  • 大小: 18.9 KB
  • 大小: 9.9 KB
分享到:
评论

相关推荐

    EBSForm个性化详解及开发实例word原版.doc

    最后,我们需要设置 Form 的行为和逻辑,使用 CUSTOM.PLL 来编写自定义代码。 EBS Form 个性化是一个功能强大且灵活的功能,提供了灵活的 Form 开发和自定义能力。通过 EBS Form 个性化,用户可以快速创建出满足...

    Oracle EBS Form开发小技巧汇总

    Oracle 提供的 `CUSTOM.PLL` 允许开发者扩展或修改标准 Form 的 LOV(列表选择项)。通过调用这个库中的函数,可以定制 LOV 行为,如添加新的值或过滤已有的选项。 4. **主从关系 Form 中的汇总行**: 对于有主从...

    Oracle EBS Form 开发帮助文档

    - 在`Program Units > APP_CUSTOM (Package Body)`中,需更改Window名称为大写,以匹配你的窗口逻辑。 7. **Data Block Property Palette**: - 在这里,每个Data Block、Item、Canvas等都需要指定一个Property ...

    Oracle Form 开发

    - 进入Form或PLL文件所在目录,使用相应命令进行编译操作。 #### 三、Form 开发功能介绍 Oracle EBS Form开发提供了丰富的功能支持,包括但不限于: - **用户界面设计**:通过拖拽控件的方式轻松创建复杂的用户...

    Form Builder基础开发文档【入门级】

    - 在系统环境变量中添加或修改`FORMS60_PATH`,指向`TEMPLATE/APSTAND.FMB`和`PLL`文件所在的路径(例如:F:\WORK\FORM 和 F:\WORK\PLL)。这一步骤对于Form Builder来说非常重要,因为它涉及到开发环境的配置问题...

    FormBuilder介绍培训资料.pptx

    PRE-FORM 一定要改为自己的BLOCK Name Form 上一定要修改的 Trigger Program Units > APP_CUSTOM (Package Body) 一定要改为自己的Window Name (大写) Data Block Property Palette 1 2 3 1 : property Subclass ...

Global site tag (gtag.js) - Google Analytics