几个关于Oracle EBS二次开发的问题
2013-03-14 11:37
555 查看
问:论坛里有人问如何给Form添加新的字段?
答:通过DFF,Descriptive Flexfield。Descriptive Flexfield会把新加的字段添加到基表中的预留字段。
不推荐通过直接修改Form的方式来添加字段,那样的话,如果打了patch后,新加的字段就会被覆盖。
关于Flexfield的更多信息,可以查阅Oracle Applications Flexfields Guide
问:Form Personalization和Custom.pll的关系,谁先被执行,谁后被执行?
答:基本上Personalization可以做到的,Custom.pll都能做到。
使用哪个来二次开发,取决于你客户化需求的复杂度。简单的客户化开发优先考虑Form Personalization,如果涉及到复杂的业务逻辑才考虑用Custom.pll。
因为Custom.pll可以完全使用PL/SQL编程,并且可以直接调用Program Units,或Form的Built-in。
Form Personalization和Custom.pll都是事件驱动,同一个Event,Form Personalization会先被触发,然后是Custom.pll
Custom.pll支持的Events:
ZOOM
WHEN-NEW-FORM-INSTANCE
WHEN-NEW-BLOCK-INSTANCE
WHEN-NEW-RECORD-INSTANCE
WHEN-NEW-ITEM-INSTANCE
WHEN-VALIDATE-RECORD
问:怎么创建一个只读的职责?
答:
Solution 1.创建QUERY_ONLY="YES"的Function,然后添加到只读职责中
Solution 2.创建只读的数据库用户
Solution 3.Custom.pll客户化,Sample Code:
BEGIN
IF event_name = 'WHEN-NEW-FORM-INSTANCE' THEN
IF FND_PROFILE.VALUE('USER_NAME')='<USER_NAME>' THEN
BEGIN
COPY('Entering app_form.query_only_mode.','global.frd_debug');
COPY('YES', 'PARAMETER.QUERY_ONLY');
APP_MENU2.SET_PROP('FILE.S***E', ENABLED,PROPERTY_OFF);
APP_MENU2.SET_PROP('FILE.ACCEPT', ENABLED,PROPERTY_OFF);
formname := NAME_IN('system.current_form');
blockname := GET_FORM_PROPERY(formname, FIRST_BLOCK);
WHILE (blockname is not null) LOOP
IF (GET_BLOCK_PROPERTY(blockname, BASE_TABLE) is not NULL) THEN
SET_BLOCK_PROPERTY(blockname, INSERT_ALLOWED, PROPERTY_FALSE);
SET_BLOCK_PROPERTY(blockname, UPDATE_ALLOWED, PROPERTY_FALSE);
SET_BLOCK_PROPERTY(blockname, DELETE_ALLOWED, PROPERTY_FALSE);
END IF;
blockname := GET_BLOCK_PROPERTY(blockname, NEXTBLOCK);
END LOOP;
END query_only_mode;
END;
Metalink Note:1290228.1 - R12: How To create read only responsibility
答:通过DFF,Descriptive Flexfield。Descriptive Flexfield会把新加的字段添加到基表中的预留字段。
不推荐通过直接修改Form的方式来添加字段,那样的话,如果打了patch后,新加的字段就会被覆盖。
关于Flexfield的更多信息,可以查阅Oracle Applications Flexfields Guide
问:Form Personalization和Custom.pll的关系,谁先被执行,谁后被执行?
答:基本上Personalization可以做到的,Custom.pll都能做到。
使用哪个来二次开发,取决于你客户化需求的复杂度。简单的客户化开发优先考虑Form Personalization,如果涉及到复杂的业务逻辑才考虑用Custom.pll。
因为Custom.pll可以完全使用PL/SQL编程,并且可以直接调用Program Units,或Form的Built-in。
Form Personalization和Custom.pll都是事件驱动,同一个Event,Form Personalization会先被触发,然后是Custom.pll
Custom.pll支持的Events:
ZOOM
WHEN-NEW-FORM-INSTANCE
WHEN-NEW-BLOCK-INSTANCE
WHEN-NEW-RECORD-INSTANCE
WHEN-NEW-ITEM-INSTANCE
WHEN-VALIDATE-RECORD
问:怎么创建一个只读的职责?
答:
Solution 1.创建QUERY_ONLY="YES"的Function,然后添加到只读职责中
Solution 2.创建只读的数据库用户
Solution 3.Custom.pll客户化,Sample Code:
BEGIN
IF event_name = 'WHEN-NEW-FORM-INSTANCE' THEN
IF FND_PROFILE.VALUE('USER_NAME')='<USER_NAME>' THEN
BEGIN
COPY('Entering app_form.query_only_mode.','global.frd_debug');
COPY('YES', 'PARAMETER.QUERY_ONLY');
APP_MENU2.SET_PROP('FILE.S***E', ENABLED,PROPERTY_OFF);
APP_MENU2.SET_PROP('FILE.ACCEPT', ENABLED,PROPERTY_OFF);
formname := NAME_IN('system.current_form');
blockname := GET_FORM_PROPERY(formname, FIRST_BLOCK);
WHILE (blockname is not null) LOOP
IF (GET_BLOCK_PROPERTY(blockname, BASE_TABLE) is not NULL) THEN
SET_BLOCK_PROPERTY(blockname, INSERT_ALLOWED, PROPERTY_FALSE);
SET_BLOCK_PROPERTY(blockname, UPDATE_ALLOWED, PROPERTY_FALSE);
SET_BLOCK_PROPERTY(blockname, DELETE_ALLOWED, PROPERTY_FALSE);
END IF;
blockname := GET_BLOCK_PROPERTY(blockname, NEXTBLOCK);
END LOOP;
END query_only_mode;
END;
Metalink Note:1290228.1 - R12: How To create read only responsibility
相关文章推荐
- 关于水晶报表二次开发的几个问题
- 关于html+ashx开发中几个问题的解决方法的感想和总结
- 关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单等相关问题
- 关于flex开发的几个问题
- 关于海康威视网络摄像机二次开发问题
- 关于html+ashx开发中几个问题的解决方法 (转)
- 关于DWG格式读写控件的二次开发问题
- [FPGA开发]关于FPGA学习的几个问题 (转载)
- 关于开发中html页面调整遇到的几个问题
- 论坛里关于ArcEngine二次开发的分类统计的问题
- 关于在ORACLE下开发JAVA的几个问题
- Lync二次开发关于Lync启动退出问题
- 论坛里关于ArcEngine二次开发的分类统计的问题
- 关于引用exchange webservice做二次开发的一些问题
- 【Qt开发】几个傻不拉几关于char*和const char*的不兼容问题
- 关于html+ashx开发中几个问题的解决方法
- 关于html+ashx开发中几个问题的解决方法
- 关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单等相关问题
- 关于FlexPaper 2.1.2版本 二次开发 Logo 、打印、搜索、缩略图、添加按钮、js交互、右键菜单等相关问题
- 关于html+ashx开发中几个问题的解决方法