Form_通过Custom.pll新增菜单项(案例)

2014-05-31 BaoXinjian In
Capgemini

一、摘要

custom.pll
一个每次form启动时都会调用的pll包,因此有些对标准form的客制化可以在custom.pll中实现

个人感觉和form个性化有类似性,区别是form个性化通过设定去设定,而custom.pll通过代码中实现

而且对custom.pll的修改会影响所有的form调用,所以对代码的可控性和效率要求比较高

而Form的个性化,影响的定义有function level 和 form
level,所以只对所设定的function或form产生印象,修改存在问题,不会影响所有的form

其他引用了网络定义

  • 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之后,就会避免这些问题。

 

二、案例

需求:用户要求在EBS 日记账功能菜单项中添加一个按钮

1. 下载Custom.pll文件至本地

2. 新增bxjcustom.pll文件,并添加procedure<bxj_pll_event_event>

3. 将bxj_custom.pll添加至custom.pll

4. 编译custom.pll至server上

三、案列测试

Test1. 打开Form后触发Custom.pll

Test2.新增Special

Test3. 点击Button,触发Button下的tigger

四、其他

1. 编译错误,先编译sub pll,后编译parater pll

2. 其他修改pll的例子,去form中的值,调用fnd_request打印报表


 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 BEGIN
5 IF event_name = ‘CALL_CUSTOM_EVENT‘ THEN
6 IF (form_name = ‘APXINWKB‘ AND block_name = ‘INV_SUM_FOLDER‘) THEN
7 DECLARE
8 l_group_name VARCHAR2 (60) := block_name || ‘_MULTI‘;
9 l_rec_group_id recordgroup;
10 l_curr_rec_num NUMBER;
11 l_num_records NUMBER;
12 l_invoice_id_str VARCHAR2 (2000);
13 l_curr_record NUMBER;
14 l_success BOOLEAN;
15 l_request_number NUMBER;
16 e_check_error_exception exception;
17 BEGIN
18 -- 获取选中的invoice
19 l_rec_group_id := FIND_GROUP (block_name || ‘_MULTI‘);
20 IF NOT ID_NULL (l_rec_group_id) THEN
21 l_num_records := GET_GROUP_ROW_COUNT (FIND_GROUP (l_group_name));
22 IF l_num_records > 0 THEN
23 l_invoice_id_str := NULL;
24 -- 对选中的记录进行循环
25 FOR i IN 1 .. l_num_records LOOP
26 l_curr_rec_num := GET_GROUP_NUMBER_CELL (l_group_name || ‘.REC_NUM‘, i);
27 GO_RECORD (l_curr_rec_num);
28 -- 组合invoice id作为请求参数
29 IF l_invoice_id_str IS NULL THEN
30 l_invoice_id_str := NAME_IN (block_name || ‘.INVOICE_ID‘);
31 ELSE
32 l_invoice_id_str := l_invoice_id_str || ‘,‘ || NAME_IN (block_name || ‘.INVOICE_ID‘);
33 END IF;
34 END LOOP;
35 IF l_invoice_id_str IS NOT NULL THEN
36 l_invoice_id_str := ‘(‘ || l_invoice_id_str || ‘)‘;
37 -- 加载模板
38 l_success := fnd_request.add_layout (‘XXBG‘, ‘XXBGREQP‘,‘zh‘,‘CN‘,‘PDF‘);
39 IF l_success THEN
40 -- 设置请求的业务实体
41 fnd_request.set_org_id (l_org_id);
42 -- 提交打印付款申请请求
43 l_request_number := fnd_request.submit_request (‘XXBG‘, ‘XXBGREQP‘, ‘‘,‘‘,FALSE,l_invoice_id_str,CHR (0),‘‘,‘‘);
44 IF l_request_number = 0 THEN
45 fnd_message.retrieve;
46 fnd_message.error;
47 ELSE
48 IF app_form.quietcommit THEN
49 fnd_message.set_name (‘SQLGL‘,‘GL_REQUEST_SUBMITTED‘);
50 fnd_message.set_TOKEN (‘REQUEST_ID‘,TO_CHAR (l_request_number),FALSE);
51 fnd_message.show;
52 END IF;
53 -- 弹出请求窗口
54 fnd_function.execute (function_name => ‘FND_FNDRSRUN‘,open_flag => ‘Y‘,session_flag => ‘Y‘,other_params => ‘DODT_REQ_ID="‘|| TO_CHAR (l_request_number)|| ‘"‘);
55 END IF;
56 END IF;
57 END IF;
58 GO_RECORD (l_curr_record);
59 ELSE
60 fnd_message.set_name (‘‘, ‘Please select one record‘);
61 RAISE e_check_error_exception;
62 END IF;
63 END IF;
64 EXCEPTION WHEN e_check_error_exception THEN
65 fnd_message.error;
66 RAISE form_trigger_failure;
67 END;
68 END IF;
69 END IF;
70 END event;

Thanks and Regards

Form_通过Custom.pll新增菜单项(案例),布布扣,bubuko.com

时间: 2024-10-01 01:34:51

Form_通过Custom.pll新增菜单项(案例)的相关文章

SharePoint 2013:自定义ECB菜单项的添加

本文分别介绍了两种常用的添加ECB菜单项的方式. 声明式创建 这也是微软最佳实践推荐的方式.在VS中创建一个SharePoint空解决方案,并添加一个“空元素”类型的SPI. 在Elements.xml中,定义一个CustomAction,重点关注一下其中高亮部分的属性(本例在文档内容类型的项上添加了一个菜单项,点击导航到一个自定义应用程序页面,并传递项所在的列表的Id作为参数): 添加到Feature,并部署.效果如下: 服务器对象模型创建 这里会用到Feature的事件处理程序.本例同时还演

JavaScript网站设计实践(二)实现导航栏当前所选页面的菜单项高亮显示

一.(一)中的代码还可以修改的地方. 在(一)中,如果是运行在服务器下,如apache等,可以把head和navigation的div抽取出来,放置在另一个html文件里,然后在页面中,include进来.这样,当要对导航栏进行修改时,只需要修改一个文件,而不用修改所有相关的页面文件.不过,我这里没有这样做,没有抽取出来. 二.实现当前页面的标识+不同页面的head头部背景图片的改变 现在在(一)实现的基础之上,来实现导航栏当前所选页面的菜单项高亮显示,让访问者一路了然知道"我正在这里"

bootstrap-下拉菜单(菜单项状态)

1.运行效果如图所示 2.实现代码如下 <!DOCTYPE html> <html> <head>     <meta charset="utf-8">     <meta http-equiv="X-UA-Compatible" content="IE=edge">     <title>表单控件--下拉菜单(菜单项状态)</title>     <!--

qt之菜单项定制

qt实现菜单,简单的界面QMenu+QAction完全可以实现,在加上qss的支持,可以定制出比较美观的菜单,qt的菜单一般用在托盘.按钮和工具栏上. 当然啦,也有很多软件有比较美观的托盘菜单,比如360.电脑管家等软件,效果图如图1所示,其实qt在4.2之后也提供了定制菜单的功能,使用QWidgetAction可以定制出自己想要的菜单来,接下来是我定制菜单栏的步骤. 图1 360图盘菜单 实现效果如下图2所示,菜单是由单个条目组成的,每一个条目又由左右两部分组成,左边是一个图标,并伴有底色,右

添加系统右键菜单项 管理员取得所有权(W)(带盾牌)

@color 0A @title 添加系统右键菜单项 管理员取得所有权(^&W)(带盾牌) by wjshan0808 @echo off echo * >nul reg add HKCR\*\shell\runas /ve /d "管理员取得所有权(&W)" /f reg add HKCR\*\shell\runas /v Icon /t reg_expand_sz /d "%SystemRoot%\system32\user32.dll,6"

显示菜单项与按钮项的关联关系

菜单id = 7的菜单项所拥有的按钮项 SELECT T1.*, TT.BUTTONID, TT.NAME FROM TBBUTTON T1 LEFT JOIN (SELECT * FROM TBMENUBUTTON T2 LEFT JOIN TBMENU T3 ON T2.MENUID = T3.ID WHERE T3.ID = 7 ) TT ON T1.ID = TT.BUTTONID

TortoiseSVN菜单项功能说明

TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. TortoiseSVN不是一个独立的窗口程序,而是集成在windows右键菜单中,使用起来比较方便. TortoiseSVN每个菜单项都表示什么意思 01.SVN Checkout(SVN取出)点击SVN Checkout,弹出检出提示框,在URL of repository输入框中输入服务器仓库地址,在Checko

设置与菜单项关联的Activity

在有些时候,应用程序需要单击某个菜单项时启动其他Activity (包括其他Service).对 于这种需求,Android甚至不需要开发者编写任何事件处理代码,只要调用Memiltem的setlntent(lntent intent)方法即可 该方法把该菜单项与指定Intent关联到一起,当用户单击该菜单项时,该Intent所代表的组件将会被启动.        如下程序示范了如何通过菜单项来启动指定Activity.该程序几乎不包含任何界面组件, 因此不给出界面布局文件.该程序的Java文件

建立CMenu菜单项,实现选中菜单项点击左键响应事件

这里我只是根据自己的项目做了一些总结,实现点击右键弹出菜单项,点左键选择菜单项: CMenu menu; VERIFY(menu.CreatePopupMenu());//新建一个cmenu菜单项 menu.AppendMenuW(MF_STRING, 10001, _T("重定义")); menu.AppendMenuW(0, MF_SEPARATOR);//增加一条直线 menu.AppendMenuW(MF_STRING, 10002, _T("修改"));