ORACLE ERP开发基础之EBS开发基础_oracleebs基础设置
ORACLE ERP开发基础之EBS开发基础由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“oracleebs基础设置”。
ORACLE ERP开发基础之EBS开发基础
Oracle ERP
ORACLEERP开发基础之前言
http://tech.it168.com/a2009/0427/274/000000274048.shtml
ORACLE ERP开发之OracleForms基础(一)Forms设置部分
http://tech.it168.com/a2009/0428/274/000000274178.shtml
ORACLEERP开发基础之OracleForms基础(二)FORMS代码部份
http://tech.it168.com/a2009/0428/274/000000274236.shtml
ORACLE ERP开发基础之Oracle Report基础
http://tech.it168.com/a2009/0429/274/000000274343.shtml
ORACLEERP开发基础之Oracle数据库基础
http://tech.it168.com/a2009/0504/274/000000274773.shtml
开发工具安装
Oracle EBS11i 开发工具是developer6i的东西,非常古老。因为是转手过来的机器,开发工具都是安装好了,所以也没去在意这工具的安装。今天系统重装了,才知道这工具安装起来也是特烦人的。
先安装FORMS6i与REPORT6i,安装完后一定要打补丁。否则会出现一大堆莫名的错误。接着安装discoverer。
安装discoverer时先将注册表备份出来,因为discoverer不能和Forms安装在同一目录。然后再安装 discoverer的补
丁,接着再将注册表恢复回来。
大致这样可以了。注意顺序一定要不能错了,否则又会出现一堆无聊的错误。唉!developer6i是98年的工
具。盼着EBS R12应该是用DEVELOPER10g吧。
EBS二次开发包注册
2.1 从 Server 中下载 ERP Library(.pll), 存放于本机Server Path : /u01/au/11.5.0/resource
Form文件与Library文件要存放在固定目录
例如: Form存放在 d:ErpFormForm
Library 存放在d:ErpFormLibrary;
2.2 在 Regedit > HKEY_LOCAL_MACHINE > SOFTWARE > ORACLE > FORMS60_PATH
加入client 端存放 Form 及 Library的路径(如图)
例如:d:ErpFormLibrary;d:ErpFormForm(建议要加在最前面)
利用TEMPLATE.fmb 模板来开发Form
Oracle 已经为我们提供了一个Form 的开发模板,(/data/deve/devappl/au/11.5.0/forms/ZHS/TEMPLATE.fmb)
我们的开发实际要基于这个模板,这个模板里面已经存在了我们将会用到的Oracle 标准的对象,我们需要做的,就是这这个模板的基础上面,添加我们自己的对象。这也是人家说二次开发没啥技术含量的重大原因。但如果
真让你出写那么PL 包,估计也没几人能写好。人有时就是这样,让你站在巨人的肩膀,还在抱怨这抱怨那的。
我也是这类人啦。出出气呀。^_^!
1、更改template.fmb 文件名,同时删除一些无用的样本对象。
Oracle ERP2、增加数据块
一路照做就可以了,步骤太简单就不用讲了吧。完成后,选择“仅创建数据块”。
3、增加一个画布
选择工具菜单上面的布局向导来做。
注意:选择画布时,选择新画布。如上图。
显示记录数一般为10就可以了。如上图。
注:将画布名称改成与数据块的名称一致
4、增加一个窗口
注:窗口尽量保持与画面一致,同时选择相应的主画布。对应的画布那边也要选择主窗口
5、选择对象的子类信息
所有的对象都应选择相对的子类信息,这边仅以BLOCK为例。
6、调整布局 不需要显示到画布的ITEM,可以将ITEM的画布属性设成空
7、修改触发器(这一步很关键!)
8、选择第一导航块
9、上传及编译FORMS
9.1先将FORMS上传至/data/deve/devappl/au/11.5.0/forms/ZHS/
9.2telnet至server,进入/data/deve/devappl/au/11.5.0/forms/ZHS/目录
目录:cd /data/deve/devappl/au/11.5.0/forms/ZHS/ 编译:f60gen FRMSTONE.fmb apps/apps 复制:cp FRMSTONE.fmx /data/deve/deveappl/hek/11.5.0/forms/ZHS/ 注:一定要进入FORM的目录,再进行编译。否则编译也可以通过,但会出现奇怪的问题。这个问题折腾了我二天时间,才发现是ORACLE的BUG。好了,一个最基本的EBS FORM就开发完成了。
Oracle ERP
注册表单FORM
1.定义表单
操作路径:应用开发员=>应用产品=>表单
填写说明如下:
表单:FORMS文件名
应用:HEK 惠尔康客户化应用
用户表单名:这个参数与“功能”中的表单名是相关联的。
2.定义功能 操作路径:应用开发员=>应用产品=>功能
2.1
2.2
2.3
3.定义菜单
操作路径:应用开发员=>应用产品=>菜单
注:“子菜单”是指菜单可以将另一个菜单的功能全部包含进来。也就是父菜单的关系。
5.完成设置,效果如下:
Oracle ERP
注册请求
1.定义可执行
路径:系统管理员->并发->方案->可执行
注意:定义成请求的过程或函数,必须加入(Errbuf Out Varchar2,Retcode Out Number)两个形参。
2.定义并发程序
路径:系统管理员->并发->方案->可执行
注意:并发程序界面的可执行组中的“名称”,与上面的可执行并发程序界面的“简称”是一致的。
注意:如果要传入参数到PL/SQL包中,点击《参数》按钮进行设置。
也可以为参数赋给默认值,例:默认取得用户ID
如果要限定参数的取数范围,则要定义值集(如何定义?请参考后面的定义值集)。
3.定义请求组 路径:系统管理员->安全性->责任->请求
4.将请求组置于职责下
系统管理员->安全性->责任->定义
Oracle ERP
注册职责
1.新建菜单 操作路径:应用开发员=>应用产品=>应用菜单
2.新建一个职责
操作路径:系统管理员=>安全性=>责任=>定义
将职责分配给用户
操作路径:系统管理员=>安全性=>用户=>定义
3.转到EBS主页,多显示一个职责。
Oracle ERP
注册值集
1.定义集 操作路径:总帐=>设置=>财务系统=>验证=>集
1.1如果值的来源于数据表,则值的验证类型选择“表”,然后点击“编辑信息”。
注:如果要实现请求参数的值集来源,作前后过滤条件的话。其语法:
where head.customer_number = :$FLEX$.HEK_OM_KHJGB_ACCT_CUST
and head.created_by = :$FLEX$.HEK_OM_FHD_CREATE_BY
and TO_CHAR(head.ordered_date,'YYYYMMDD')= :$FLEX$.HEK_DAY_TIME_ID ORDER BY HEAD.ORDER_NUMBER
:$FLEX$.为参数界面的名称
HEK_OM_KHJGB_ACCT_CUST为某个参数的值集名称。
1.2实现的效果如下:
1.3定义多列值集
1.4实现效果
1.5从属
2.定义值
2.1如果值的来源固定的某些值,那么可以直接定义值。将值的验证类型选择=>独立
2.2定义集所对应的值
操作路径:操作路径:总帐=>设置=>财务系统=>验证=>值
Oracle ERP
通过应用开发员取得系统管理员责任
一般公司都有区分DBA与DEVELOPER的,业务机上一般是APPS用户由DBA掌握,诸如用户管理也是DBA来负责的。developer是不知道 没有APPS密码,也没有‖SYSTEM ADMINISTTRATOR―职责的。也就是说DEVELOPER只有‖Application Developer―这个职责。同理,应用开发员是没有权限给终端用户加权限的。但我今天测试了一下,developer虽然没直接加职责的权限,但developer有‖Application Developer―职责,这个职责下面有注册菜单的权限,完全可以通过注册菜单将SYSTEM ADMINISTROR加进来。如图:
查询视图时没有显示数据
在EBS以外的地方(含report),如果确认SQL语句没有问题,这主要是因为视图是OU屏蔽的,因此需要初始化身份。例如:PO_HEADERS。有两种方法,方法一适用于知道相应的组织代码,方法二就比较通用了。
方法一:
BEGIN
DBMS_APPLICATION_INFO.set_client_info(122);--122代表具体的组织代码,不同公司,代码是不同。
END;
方法二:
BEGIN
APPS.FND_GLOBAL.apps_initialize
(user_id =>APPS.FND_GLOBAL.user_id, resp_id =>APPS.FND_GLOBAL.resp_id, resp_appl_id =>APPS.FND_GLOBAL.resp_appl_id);
END;注册报表(report)
路径:系统管理员->并发->方案->可执行
注册报表与注册请求的步骤是差不多的。
定义并发
路径:系统管理员->并发->方案->定义
定义报表参数
点击上图的参数按钮。
注:这边与注册请求不一样的就是,要填写变量栏(变量名称就是REPORT中的变量名称)
定义请求组
操作路径:系统管理员->安全性->责任->请求
将请求组置于职责下
系统管理员->安全性->责任->定义
OK,完成了报表的注册。
Oracle ERP
请求的输出及日志
1、Effect:
Oracle EBS会在EBS的安装目录,保存查看输出及日志之文件。查看具体目录:
select t.logfile_name,t.outfile_name from fnd_concurrent_requests t
where t.request_id = _request_id2、当我们自行定义了一个并发请求时,也经常需要使用上面的方式进行一些调试。
请求的输出:apps.Fnd_File.Put_line(apps.FND_FILE.OUTPUT, '请求的输出');
请求的日志:apps.Fnd_File.Put_line(apps.FND_FILE.LOG, '请求的日志');
对于报表,一般情况是把报表的内容输出到OUTPUT,把报表中间的debug逻辑输出到日志中。
对于请求包,一般情况是输出到日志中。OUTPUT就不用管了。
实现手动提交请求
在Form里面,我们可以用
APPS.FND_REQUEST.SUBMIT_REQUEST
提交一个Request到Oracle Request Manager。如果提交成功,该函数返回Request ID,否则,返回0。
1、初始化
在提交一个Request之前,我们会调用Oracle Standard的Procedure对这个Request做一些基本的参数的初始化。
APPS.FND_GLOBAL.apps_initialize
(user_id =>APPS.FND_GLOBAL.user_id, resp_id =>APPS.FND_GLOBAL.resp_id, resp_appl_id =>APPS.FND_GLOBAL.resp_appl_id);
注:这个初始化不是必须的,之所以要初始化,是因为视图是OU屏蔽的。上述语句等同于dbms_application_info.set_client_info;
2、函数介绍
2.1 函数APPS.FND_REQUEST.SUBMIT_REQUEST有105个参数:
APPS.FND_REQUEST.SUBMIT_REQUEST
(APPLICATION IN VARCHAR2 DEFAULT NULL,PROGRAM IN VARCHAR2 DEFAULT NULL,DESCRIPTION IN VARCHAR2 DEFAULT NULL,START_TIME IN VARCHAR2 DEFAULT NULL,SUB_REQUEST IN BOOLEAN DEFAULT FALSE,chr(0),'','','','','','','','','','','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','', '','','','','','','','','','')
RETURN NUMBER;
2.2 参数详解
2.2.1 APPLICATION(必需参数)
应用程序的名称缩写。一般我们可能会用到下面的几个:
Oracle Aets „„> OFA
Oracle General Ledger „„> SQLGL
Oracle Inventory „„>INV
Oracle Order Management „„>ONT
Oracle Payables „„SQLAP
Oracle Pricing „„QP
Oracle Purchasing „„PO
Oracle Receivables „„AR
操作路径:系统管理员=>应用=>注册
2.2.2 PROGRAM(必需参数)
要提交到Oracle Request Manager的并发程序之简称
操作路径:应用开发员=>并发=>程序
2.2.3 第三、第四个参数
第三、第四个参数默认为空
2.2.4 第五个参数
第五个参数默认为false
2.2.5 第六至第十零五个参数
第六至第十零五个参数为要传入到请求中的自定义参数值。如果无须这么多参数时,以chr(0)作为参数结束的标记。Chr(0)后面剩余的参数为 „„。
Oracle ERP
手动提交请求示例
declare
v_order_number number;
v_req_id number;
begin
v_order_number := :HEK_ODS_TH_FEE_M_V.OE_HEAD_NUMBER;
if :HEK_ODS_TH_FEE_M_V.OE_HEAD_NUMBER is null then FND_MESSAGE.DEBUG('请选择配送单后再打印!');
RAISE FORM_TRIGGER_FAILURE;
end if;
v_req_id := fnd_request.submit_request('HEK','HEK_退货单','', '',FALSE, v_order_number,--v_batch_no, null,--v_batch_no, null,--v_cust_num, null,--v_driver_num, null,--v_trans_num, null,--v_vendor_num, null, null,null, chr(0), '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '','', '', '', '', '', '', '', '', '', '','', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '','');
if(v_req_id = 0)then FND_MESSAGE.RETRIEVE;
FND_MESSAGE.ERROR;
else
update HEK_ODS_TH_FEE_M set print_mark='Y' where OE_HEAD_NUMBER =(v_order_number);
commit_form;
fnd_meage.debug('您的请求已经提交,请求号为:' || to_char(v_req_id)|| ',请通过查看->请求来查看输出结果。');
end if;
end;
客制化菜单
Effect:
Usage:调用 app_special.instantiate包
Examples:
1、增加一个自定义Form Level的触发器(SPECIAL11)
2、增加测试代码如下:
――――――――――――――――――――――――――――――――――――――――――――――
declare
v_invoice_num varchar2(50);
begin
v_invoice_num := '菜单栏客制化100';
fnd_meage.debug(v_invoice_num);
end;
―――――――――――――――――――――――――――――――――――――――――――――――
3、在Form WHEN-NEW-FORM-INSTANCEFJ 进行调用:
APP_SPECIAL.INSTANTIATE('SPECIAL11','测试菜单2', '', TRUE, 'LINE');
―――――――――――――――――――――――――――――――――――――――――――――――
4、一些特殊说明:
上面自定义FORMS级触发器,名字必须定义为“SPECIAL+数字‖,否则会报错。并且数字的大小决定了菜单出现的先后顺序。数字还有更大作用就是决定了,自定义菜单选项放在哪个主菜单下。
SPECIAL1—SPECIAL15在“工具”主菜单下。
SPECIAL16—SPECIAL30在“报表”主菜单下。
SPECIAL31—SPECIAL45在“活动”主菜单下。
SPECIAL46以上就直接报错了。^_^
如下图
5、控制自定义菜单的是否激活可用。
使用app_special.enable函数可以控制菜单是否可以使用。
例如:基于不同的数据块,实现菜单的不可用。在block的‖when-new-block-instance‖中加入
效果:
app_special.enable('SPECIAL1',property_off);
效果
6、在自定义的菜单上使用checkbox按钮。
①增加一个自定义Form Level的触发器(SPECIAL1_CHECKBOX),代码如下:
if app_special.get_checkbox('SPECIAL1_CHECKBOX')='TRUE' then
fnd_meage.debug('Special 1 is True!');
else
fnd_meage.debug('Special 1 is False!');
end if;
注:使用app_special.get_checkbox来获取checkbox的状态值。
②在Form的WHEN-NEW-FORM-INSTANCE触发器中初始化菜单。
app_special.instantiate('SPECIAL1_CHECKBOX','Spe&cial 1 Box w Line', '',TRUE,'LINE');
app_special.set_checkbox('SPECIAL1_CHECKBOX','TRUE');
注:app_special.set_checkbox是对checkbox进行赋值操作。
③效果如下:
Oracle ERP
EBS配置文件(Profile)常用设置
IE打不开EBS
①症状:一直停留在EBS弹出式窗体,显示正在加载FORMS。
解决:安装SUN JDK1.4,并将JVM.DLL替换掉X:Program FilesOracleJInitiator 1.3.1.21binhotspot
②症状:无法查看工作流状态图(view datagram)
解决:安装微软的虚拟机msjavx86.exe。
获取EBS的查询语句
1.帮助=>诊断=>检查
2.在块中输入SYSTEM、在字段中输入LAST_QUERY,就可以得到查询的SQL语句。