转载自:http://wfly2004.blog.163.com/blog/static/117642720081111112246364/
转载自:http://anwenforever.blog.163.com/blog/static/133483106201123112640885/?fromdm&isFromSearchEngine=yes
custom.pll是EBS标准的一个library,当系统启动的时候会加载这个library。
很多时候,我们会需要写一些pll文件,比如控制Form上某些item的属性,如果是控制标准Form的某些属性,那么我们就可以通过Library来实现,而不用去动标准的Form(一般我们建议不去修改标准的Form)。再比如在工具条上增加一些菜单,等等。
当然,所有这些我们都可以通过直接修改custom.pll来实现,但是,我们不建议这么做,我们可以copy custom.pll重命名为:xx_cn_custom.pll (名字自己取),然后把xx_cn_custom.pll加载到custom.pll下 (在custom.pll的event里,加上这段代码即可:xx_cn_custom.event;),这样,系统启动的时候就会通过 custom.pll也把xx_cn_custom.pll启动起来,那么,以后有什么客户化的library都可以在xx_cn_custom.pll 里面修改了。比如,我客户化了一个叫xx_wip_custom.pll的library,那么我只要在xx_cn_custom.pll的event的 procedure里加上:xx_wip_custom.event;就可以了。
这样做的好处就是降低了风险,因为custom.pll是标准的library,不管是调试还是其它的,都会影响到全局,当我们加载xx_cn_custom.pll之后,就会避免这些问题。
Custom.pll里面有两个函数和一个过程,我们要修改的是 event这个过程,通过测试发 现此过程会在WHEN-NEW-FORM-INSTANCE ; WHEN-NEW-BLOCK-INSTANCE ; WHEN-NEW-RECORD-INSTANCE ;WHEN-NEW-ITEM-INSTANCE ; WHEN-VALIDATE-RECORD这些触发器触发时候执行,了解的这个特性我们就可以在这个procedure中写入添加菜单的代码如下:
procedure event(event_name varchar2) is
Form_Name Varchar2(30) := Name_In('system.current_form');
Block_Name Varchar2(30) := Name_In('system.current_block');
Item_Name Varchar2(30) := Name_In('system.current_item');
Form_Status Varchar2(30) := Name_In('system.form_status');
Record_Status Varchar2(30) := Name_In('system.record_status');
v_Stage Varchar2(1000);
IfForm_Name = 'GLXJEENT' And Block_Name = 'LINES' and
Event_Name = 'WHEN-NEW-BLOCK-INSTANCE'Then
Declare
Special_Menu_Name Varchar2(2000);
Begin
Special_Menu_Name := 'Longqin Add Action Message Test';
App_Special2.Instantiate('SPECIAL42', Special_Menu_Name, Null, True);
Return;
End;
If ((Form_Name = 'GLXJEENT') and (Block_Name = 'LINES') And
(Event_Name = 'SPECIAL42')) Then
--当Form为GLXJEENT,BLOCK为LINES,点击菜单Longqin Add Action Message Test时候执行下列PL/SQL代码。
FND_MESSAGE.DEBUG('Longqin Add Action Message Test');
--execute PL/SQL BLOCK
else
return;
END IF;
end event;
修改完成后上传Custom.pll编译,就可以到相应的界面看看效果了.(特 别提示:Custom.pll是标准的库文件,如果我们每次添加修改菜单都修改此文件难免会出现问题,因此建议将Custom.pll复制一份改个名 称,Custom.pll调用我们复制的custom.pll文件,以后就只用修改我们复制的custom.pll文件,这样可以减少系统出现故障的机 率);
在CUSTOM.pll文件中获取某个项的值:
l_line_type_id := name_in('LINE.LINE_TYPE_ID');