博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle EBS开发基础知识
阅读量:6857 次
发布时间:2019-06-26

本文共 2658 字,大约阅读时间需要 8 分钟。

网上看到这样一篇EBS开发的好文,但基本都是转贴,想找原创者的地址,可惜没能找到,那只是将此记录下,对初学者可以共同参与学习!

一、例外处理问题
有很多人喜欢在处理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

转载地址:http://npjyl.baihongyu.com/

你可能感兴趣的文章
Android SurfaceView入门学习
查看>>
Linux 性能工具集
查看>>
UML中类图的一些基本知识
查看>>
多线程与资源
查看>>
IT 人士如何避免中年危机?
查看>>
python性能优化、内存优化、内存泄露;与其他语音比较效率如何?
查看>>
微信 直接关闭窗口
查看>>
EasyUI combotree的使用
查看>>
C#网络编程二:SOCKET编程
查看>>
【多媒体封装格式详解】--- AAC ADTS格式分析
查看>>
联想IDEAPAD 320C-15笔记本显卡驱动问题
查看>>
ES6简介
查看>>
全国实时天气预警查询
查看>>
Notepad++的列编辑功能
查看>>
c# WebApi之解决跨域问题:Cors
查看>>
UWP FillRowViewPanel
查看>>
目前的.NET(C#)世界里,主流的ORM框架
查看>>
Java 基础知识点
查看>>
Linux--忘记MySQL密码的解决方法和输入mysqld_safe --skip-grant-tables &后无法进入MySQL的解决方法...
查看>>
vimperator
查看>>