壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12943|回复: 30

EBS开发基础知识

    [复制链接]
发表于 2006/7/29 08:49:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
转贴

近几年有幸参与了一些大开发项目的项目管理和监督工作,发现很多开发人员对一些概念或者程序的写法不是很清楚,这也包括一些高级的开发人员也会犯一些基本的错误,因此我就整理一下大家容易犯的错误,希望大家能够在写程序的时候养成良好习惯。

一、例外处理问题

有很多人喜欢在处理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
 楼主| 发表于 2013/1/1 10:30:35 | 显示全部楼层
EBS中表后缀总结
all,基表,保存多组织数据,里面有一个Org_Id字段,一般不直接出现在我们的DML中
去掉_all的视图,根据用户环境过滤掉组织,相当于普通的基表,我们直接使用它,就当它是基表
_v,视图,给Form用
_kfv,启用关键性弹性域的时候动态生成的视图,包含Concact过的字段组合
_dfv,启用描述性弹性域的时候动态生成的视图,我们取弹性域子段的描述的时候,需要用用户出口函数。。。。。。。。。。。
_tl,基表,有language字段,us肯定有,其他的看安装
_vl,视图,根据环境设置过滤语种,所以做报表用_vl
_s,序列号
_API,Package,保证向后兼容
_PKG,Package,Program
_SV,Package,供Form调用

一个用户对应一个或多个responsibility,一个responsibility对应一个或多个menu,一个底层menu对应一个function,一个function对应一个form或者一个报表或者一个程序;一个responsibility对应一个请求组,一个请求组对应一个或多个报表和程序,这个应该放过来说,在定义报表的时候可以选择哪个请求组;一个responsibility对应一个Application,这个不要和该responsibility拥有的菜单混淆,菜单没有限制;

发表于 2006/9/6 15:54:55 | 显示全部楼层
什么叫视图是OU屏蔽的??不太懂OU
怎么来设置是OU屏蔽的呢?
发表于 2008/3/25 23:02:05 | 显示全部楼层
学习中,多谢分享。
发表于 2008/3/27 12:42:42 | 显示全部楼层
拜读
发表于 2008/5/22 18:56:17 | 显示全部楼层
ou就是在系统中存在不止一个运营组织,在a组织中看不到b组织中的资料
oracle中的po ap  ar  om均有类似的例子
发表于 2008/5/23 22:31:15 | 显示全部楼层
谢谢非常有用
发表于 2008/5/30 15:38:11 | 显示全部楼层
楼主很有才啊
发表于 2008/6/2 12:00:33 | 显示全部楼层
哎呀 不是很明白 学习中 支持楼主
发表于 2008/6/10 14:46:34 | 显示全部楼层
挺有用的
发表于 2009/11/9 15:56:09 | 显示全部楼层
总结的非常棒!
发表于 2009/11/26 13:44:49 | 显示全部楼层
学习中,多谢分享。
发表于 2009/11/27 23:01:07 | 显示全部楼层
多谢分享。谢谢
发表于 2010/1/5 21:53:48 | 显示全部楼层
楼主总结的很好,我又重新学习一遍,向楼主的拼搏精神致敬!
发表于 2010/1/6 09:50:32 | 显示全部楼层
向楼主学习!
发表于 2010/1/18 16:18:36 | 显示全部楼层
回复 1# 纵横四海


    thanks~~
发表于 2010/1/23 21:55:43 | 显示全部楼层
ou就是在系统中存在不止一个运营组织,在a组织中看不到b组织中的资料
oracle中的po ap  ar  om均有类似的例 ...
cnana 发表于 2008/5/22 18:56


学习了。
发表于 2010/1/25 00:00:41 | 显示全部楼层
看懂一部分!~
发表于 2010/4/5 16:38:59 | 显示全部楼层
学习了!!!!!!!!!!!!!!!!!!
发表于 2010/7/24 00:26:38 | 显示全部楼层
让新手清晰很多,谢谢~~
发表于 2011/11/17 09:12:34 | 显示全部楼层
好贴,标记一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 04:09 , Processed in 0.030155 second(s), 18 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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