《ORACLE ERP开发基础之EBS开发基础.docx》由会员分享,可在线阅读,更多相关《ORACLE ERP开发基础之EBS开发基础.docx(30页珍藏版)》请在三一办公上搜索。
1、ORACLE ERP开发基础之EBS开发基础Oracle ERP ORACLEERP开发基础之前言ORACLE ERP开发之OracleForms基础(一)Forms设置部分ORACLEERP开发基础之OracleForms基础(二)FORMS代码部份ORACLE ERP开发基础之Oracle Report基础 ORACLEERP开发基础之Oracle数据库基础 开发工具安装Oracle EBS11i 开发工具是developer6i的东西,非常古老。因为是转手过来的机器,开发工具都是安装好了,所以也没去在意这工具的安装。今天系统重装了,才知道这工具安装起来也是特烦人的。先安装FORMS6i与
2、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/resou
3、rceForm文件与Library文件要存放在固定目录例如: Form存放在 d:ErpFormFormLibrary 存放在d:ErpFormLibrary;2.2 在 Regedit HKEY_LOCAL_MACHINE SOFTWARE ORACLE FORMS60_PATH加入client 端存放 Form 及 Library的路径(如图)例如:d:ErpFormLibrary;d:ErpFormForm(建议要加在最前面)利用TEMPLATE.fmb 模板来开发FormOracle 已经为我们提供了一个Form 的开发模板,(/data/deve/devappl/au/11.5.0/
4、forms/ZHS/TEMPLATE.fmb)我们的开发实际要基于这个模板,这个模板里面已经存在了我们将会用到的Oracle 标准的对象,我们需要做的,就是这这个模板的基础上面,添加我们自己的对象。这也是人家说二次开发没啥技术含量的重大原因。但如果真让你出写那么PL 包,估计也没几人能写好。人有时就是这样,让你站在巨人的肩膀,还在抱怨这抱怨那的。我也是这类人啦。出出气呀。_!1、更改template.fmb 文件名,同时删除一些无用的样本对象。Oracle ERP2、增加数据块一路照做就可以了,步骤太简单就不用讲了吧。完成后,选择“仅创建数据块”。3、增加一个画布选择工具菜单上面的布局向导来做
5、。注意:选择画布时,选择新画布。如上图。显示记录数一般为10就可以了。如上图。注:将画布名称改成与数据块的名称一致4、增加一个窗口注:窗口尽量保持与画面一致,同时选择相应的主画布。对应的画布那边也要选择主窗口5、选择对象的子类信息所有的对象都应选择相对的子类信息,这边仅以BLOCK为例。6、调整布局 不需要显示到画布的ITEM,可以将ITEM的画布属性设成空7、修改触发器(这一步很关键!)8、选择第一导航块9、上传及编译FORMS9.1先将FORMS上传至/data/deve/devappl/au/11.5.0/forms/ZHS/9.2telnet至server,进入/data/deve/d
6、evappl/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注册表单FORM1.定义表单操作路径:应用开发员=应用
7、产品=表单填写说明如下:表单:FORMS文件名应用:HEK 惠尔康客户化应用用户表单名:这个参数与“功能”中的表单名是相关联的。2.定义功能 操作路径:应用开发员=应用产品=功能2.12.22.33.定义菜单操作路径:应用开发员=应用产品=菜单注:“子菜单”是指菜单可以将另一个菜单的功能全部包含进来。也就是父菜单的关系。5. 完成设置,效果如下:Oracle ERP注册请求1.定义可执行路径:系统管理员-并发-方案-可执行注意:定义成请求的过程或函数,必须加入(Errbuf Out Varchar2,Retcode Out Number)两个形参。2.定义并发程序路径:系统管理员-并发-方案-
8、可执行注意:并发程序界面的可执行组中的“名称”,与上面的可执行并发程序界面的“简称”是一致的。注意:如果要传入参数到PL/SQL包中,点击参数按钮进行设置。也可以为参数赋给默认值,例:默认取得用户ID如果要限定参数的取数范围,则要定义值集(如何定义?请参考后面的定义值集)。3.定义请求组 路径:系统管理员-安全性-责任-请求4.将请求组置于职责下系统管理员-安全性-责任-定义Oracle ERP注册职责1.新建菜单 操作路径:应用开发员=应用产品=应用菜单2.新建一个职责操作路径:系统管理员=安全性=责任=定义将职责分配给用户操作路径:系统管理员=安全性=用户=定义3.转到EBS主页,多显示一
9、个职责。Oracle ERP注册值集1.定义集 操作路径:总帐=设置=财务系统=验证=集1.1如果值的来源于数据表,则值的验证类型选择“表”,然后点击“编辑信息”。注:如果要实现请求参数的值集来源,作前后过滤条件的话。其语法:where head.customer_number = :$FLEX$.HEK_OM_KHJGB_ACCT_CUSTand head.created_by = :$FLEX$.HEK_OM_FHD_CREATE_BYand TO_CHAR(head.ordered_date,YYYYMMDD) = :$FLEX$.HEK_DAY_TIME_ID ORDER BY HEA
10、D.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 ADMINIST
11、TRATOR职责的。也就是说DEVELOPER只有Application Developer这个职责。同理,应用开发员是没有权限给终端用户加权限的。 但我今天测试了一下,developer虽然没直接加职责的权限,但developer有Application Developer职责,这个职责下面有注册菜单的权限,完全可以通过注册菜单将SYSTEM ADMINISTROR加进来。如图:查询视图时没有显示数据在EBS以外的地方(含report),如果确认SQL语句没有问题,这主要是因为视图是OU屏蔽的,因此需要初始化身份。例如:PO_HEADERS。有两种方法,方法一适用于知道相应的组织代码,方法二
12、就比较通用了。方法一:BEGINDBMS_APPLICATION_INFO.set_client_info(122); -122代表具体的组织代码,不同公司,代码是不同。END;方法二:BEGINAPPS.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)路径:系统管理员-并发-方案-可执行注册报表与注册请求的步骤是差不多的。定义并发
13、路径:系统管理员-并发-方案-定义定义报表参数点击上图的参数按钮。注:这边与注册请求不一样的就是,要填写变量栏(变量名称就是REPORT中的变量名称)定义请求组操作路径:系统管理员-安全性-责任-请求将请求组置于职责下系统管理员-安全性-责任-定义OK,完成了报表的注册。Oracle ERP请求的输出及日志1、Effect:Oracle EBS会在EBS的安装目录,保存查看输出及日志之文件。查看具体目录:select t.logfile_name,t.outfile_name from fnd_concurrent_requests twhere t.request_id = _request
14、_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到Oracl
15、e 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屏蔽的。
16、 上述语句等同于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 DEFA
17、ULT FALSE,chr(0), , , , , , , , , )RETURN NUMBER;2.2 参数详解2.2.1 APPLICATION(必需参数)应用程序的名称缩写。一般我们可能会用到下面的几个:Oracle Assets OFAOracle General Ledger SQLGLOracle Inventory INVOracle Order Management ONTOracle Payables SQLAPOracle Pricing QPOracle Purchasing POOracle Receivables AR操作路径:系统管理员=应用=注册2.2.2 PRO
18、GRAM(必需参数)要提交到Oracle Request Manager的并发程序之简称操作路径:应用开发员=并发=程序2.2.3 第三、第四个参数第三、第四个参数默认为空2.2.4 第五个参数第五个参数默认为false2.2.5 第六至第十零五个参数第六至第十零五个参数为要传入到请求中的自定义参数值。如果无须这么多参数时,以chr(0)作为参数结束的标记。Chr(0)后面剩余的参数为 。Oracle ERP手动提交请求示例declarev_order_number number;v_req_id number;beginv_order_number := :HEK_ODS_TH_FEE_M_
19、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
20、,-v_vendor_num, null, null,null, chr(0), , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,);if (v_req_id = 0) then FND_MESSAGE.RETRIEVE;FND_MESSAGE.ERROR;elseupdate HEK_ODS_TH_
21、FEE_M set print_mark=Y where OE_HEAD_NUMBER = (v_order_number);commit_form;fnd_message.debug(您的请求已经提交,请求号为: | to_char(v_req_id) | ,请通过查看-请求来查看输出结果。);end if;end;客制化菜单Effect:Usage:调用 app_special.instantiate包Examples:1、增加一个自定义Form Level的触发器(SPECIAL11)2、增加测试代码如下:declarev_invoice_num varchar2(50);beginv_
22、invoice_num := 菜单栏客制化100;fnd_message.debug(v_invoice_num);end;3、在Form WHEN-NEW-FORM-INSTANCEFJ 进行调用:APP_SPECIAL.INSTANTIATE(SPECIAL11,测试菜单2, , TRUE, LINE);4、一些特殊说明:上面自定义FORMS级触发器,名字必须定义为“SPECIAL+数字,否则会报错。并且数字的大小决定了菜单出现的先后顺序。数字还有更大作用就是决定了,自定义菜单选项放在哪个主菜单下。SPECIAL1SPECIAL15在“工具”主菜单下。SPECIAL16SPECIAL30在
23、“报表”主菜单下。SPECIAL31SPECIAL45在“活动”主菜单下。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.ge
24、t_checkbox(SPECIAL1_CHECKBOX)=TRUE thenfnd_message.debug(Special 1 is True!);elsefnd_message.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.se
25、t_checkbox(SPECIAL1_CHECKBOX,TRUE);注:app_special.set_checkbox是对checkbox进行赋值操作。效果如下:Oracle ERPEBS配置文件(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语句。