设为首页 收藏本站
查看: 1403|回复: 0

[经验分享] EBS 开发基础知识

[复制链接]

尚未签到

发表于 2015-9-23 09:58:49 | 显示全部楼层 |阅读模式
一、例外处理问题
有很多人喜欢在处理exception 时,置为'null',应该说这是一个很不好的习惯,如果没有定义
特定的exception,最起码应该把数据库的错误信息完整的报出来。
错误的写法:
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
正确的写法:
EXCEPTION
WHEN OTHERS THEN
FND_FILE.PUT_LINE(FND_FILE.OUTPUT, SQLCODE);
FND_FILE.PUT_LINE(FND_FILE.OUTPUT, SQLERRM);
END;
二、并发请求的OUTPUT 和LOG 不分
有的同学在并发请求输出的时候,不知道如何把日志输出出来,其实很简单:
输出到请求的输出:FND_FILE.PUT_LINE(FND_FILE.OUTPUT, 'XXXXXXX');
输出到请求的日志:FND_FILE.PUT_LINE(FND_FILE.LOG, 'XXXXXX');
一般情况是把报表的内容输出到OUTPUT,把报表中间的debug 逻辑输出到log 中。
三、在EBS 环境之外运行EBS 程序的初始化问题
我们经常会遇到在pl/sql 中运行某个视图,不能显示出数据,但是在界面上确有数据,这主要
是因为视图是OU 屏蔽的,因此需要你在pl/sql 中初始化你的身份,初始化的程序如下,这样
你就可以在任何pl/sql 环境中运行EBS 的视图了,例如PO_HEADERS,PO_LINES 等
BEGIN
FND_GLOBAL.APPS_INITIALIZE(USER_ID => ,RESP_ID => ,RESP_APPL_ID => );
END;
四、消息的使用,我经常看到有的同学喜欢在FORM 中直接使用
FND_MESSAGE.DEBUG('xxxxx');来显示错误或提示信息,实际上这是非常不正确的做法。
顾名思及DEBUG 是用来调试的,并不是用来进行人机交互的友好的方式,也不符合Oracle 的
标准用法。
Oracle 的标准用法是使用
FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
一般情况下在FORM 中显示出错信息使用以下代码:
FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
FND_MESSAGE.ERROR ;
在PACKAGE 中显示出错信息一般使用以下代码:
FND_MESSAGE.SET_NAME( APPL_SHORT_NAME,MESSAGE_NAME) ;
APP_EXCEPTION.RAISE_EXCEPTION ;
然后在EBS 的应用开发者下定义中文和英文消息,然后提交请求"生成信息"来生成消息,使用
这种方式可以适用于多语言和修改人机界面的提示信息,而不用去修改源程序。
五、EBS 中客户化表结构的设计原则:
1)必须包括一个主键,并建立相应的序列;
2)建立5 个WHO 字段,也就是
CREATED_BY NUMBER
CREATION_DATE DATE
LAST_UPDATED_BY NUMBER
LAST_UPDATE_DATE DATE
LAST_UPDATE_LOGIN NUMBER
在FORM 中使用属性类:CREATION_OR_LAST_UPDATE_DATE,WHO 字段并不会
自动地被赋值,必须自己在FORM 中编写代码来完成这项工作。
EBS 中提供了一个函数FND_STANDARD.SET_WHO,大家只要在FORM 的BLOCK
级触发器PRE-INSERT/PRE-UPDATE 中进行调用即可。
3)对于业务数据表,要考虑建立15 个弹性域字段;
4)如果对于需要并发请求处理过的数据表,则需要增加跟踪请求的4 个字段
REQUEST_ID NUMBER
PROGRAM_APPLICATION_ID NUMBER
PROGRAM_ID NUMBER
PROGRAM_UPDATE_DATE DATE
5)要考虑这个表是否区分OU 和库存组织;
六、在FORM 开发中不管是FORM 级还是BLOCK 级或者ITEM 级的TRIGGER,不要把代码
直接写到TRIGGER 中,要使用PROGRAM UNIT 来创建相应的TRIGGER,举例如下:
FORM 级和BLOCK 级可以按照下面格式在PROGRAM UNIT 中创建PACKAGE:
PACKAGE BODY FORM_NAME/BLOCK_NAME IS
PROCEDURE EVENT_HANDLER( EVENT IN VARCHAR2)
IS
BEGIN
IF EVENT = 'WHEN-NEW-FORM-INSTANCE' THEN
XXXXXXXX;
ELSIF EVENT = 'PRE-FORM' THEN
XXXXXXXX;
ELSE
APP_EXCEPTION.INVALID_ARGUMENT('EVENT_HANDLER', 'EVENT',
EVENT);
END IF;
END EVENT_HANDLER;
END FORM_NAME/BLOCK_NAME;
ITEM 级的可以按照下面的格式:
PACKAGE BODY BLOCK_NAME IS
PROCEDURE ITEM_NAME( EVENT IN VARCHAR2)
IS
BEGIN
IF EVENT = 'WHEN-NEW-ITEM-INSTANCE' THEN
XXXXXXXX;
ELSE
APP_EXCEPTION.INVALID_ARGUMENT('ITEM_NAME', 'EVENT', EVENT);
END IF;
END ITEM_NAME;
END BLOCK_NAME;
七、在EBS 如果要使用弹性域或预警等,则必须在EBS 注册TABLE 及COLUMN。
此注册功能是通过调用AD_DD 函数包来实现的:
AD_DD.REGISTER_TABLE 注册TABLE
AD_DD.REGISTER_COLUMN 注册COLUMN
AD_DD.DELETE_TABLE 取消注册TABLE
AD_DD.DELETE_COLUMN 取消注册COLUMN
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-117547-1-1.html 上篇帖子: EBS相关日志和参数 下篇帖子: EBS默认的登录账户和密码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表