ITPub博客

首页 > 数字化转型 > ERP > EBS开发基础知识

EBS开发基础知识

原创 ERP 作者:liangzcl135 时间:2007-08-24 11:33:27 0 删除 编辑
一、例外处理问题 有很多人喜欢在处理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 以上为转载,个人觉得对新手来说很实用...[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7782906/viewspace-965532/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论
  • 博文量
    3
  • 访问量
    5783