在Oracle EBS二次开发中,PL/SQL程序是开发人员使用频率最高的开发语言,同时也是大家最容易掌握的工具之一了,而我们也很希望将自己编写的PL/SQL 程序发布为Web服务来提供给客户端程序使用,同时也可以实现和外围系统的集成,有了irep_parser这个工具,我们就可以将自己编写的PL/SQL 程序发布到Oracle Integration Repositoy中。
Oracle Integration Repositoy中集成接口的来源都是Oracle,客户化的程序发布上去的为Custom:下面描述如何将PL/SQL程序接口发布到Oracle Integration Repositoy中作为集成接口供第三方程序集成调用一、给EBS系统打补丁参考如下安装文档:安装文档.docx二、添加客户化应用到Product Family客户化应用设置好之后,它没有归属于任何的产品家族,如我的客户化应用CUX,因此发布在客户化应用下的集成接口在Oracle Integration Repositoy中无法方便的查看,如下图:如果客户化集成接口是组织到自己的应用下就需要先注册一个产品家族,下面将CUX Developer(CUX) 应用注册到CUX Developer(cux_pf)这个产品家族下作为例子进行演示:1,添加产品家族 CUX Developer(cux_pf)--添加产品家族begin-- Call the proceduread_pa_insert_package.insert_ad_pm_product_info(x_product_abbreviation => 'cux_pf',x_pseudo_product_flag => 'N',x_product_family_flag => 'Y',x_application_short_name => NULL,x_product_name => 'CUX Developer',x_product_family_abbreviation => NULL,x_product_family_name => NULL,x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'), x_currdate => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;2,注册CUX Developer(CUX)应用到产品家族中--注册CUX应用到产品家族中begin-- Call the proceduread_pa_insert_package.insert_ad_pm_product_info(x_product_abbreviation => 'cux',x_pseudo_product_flag => 'N',x_product_family_flag => 'N',x_application_short_name => 'CUX',x_product_name => 'CUX Developer',x_product_family_abbreviation => NULL,x_product_family_name => NULL,x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_currdate => to_char(SYSDATE,'YYYY-MM-DDHH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;3,关联CUX Developer应用到产品家族CUX Developer下--关联CUX应用到产品家族CUX Developer下begin-- Call the proceduread_pa_insert_package.insert_ad_pm_prod_family_map(x_product_abbreviat ion => 'cux',x_product_family_abbreviation => 'cux_pf',x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD HH24:MI:SS'),x_currdate => to_char(SYSDATE,'YYYY-MM-DDHH24:MI:SS'),x_last_updated_by => -1,x_created_by => -1);COMMIT;end;执行完成后通过下面2条SQL验证是否添加成功,查出3条数据表示添加成功。
SELECT * FROM ad_pm_product_info x WHERE x.product_name LIKE 'CUX%'; SELECT * FROM ad_pm_prod_family_map m WHERE m.product_abbreviation LIKE 'cux%';完成后如果应用下有集成接口可以看到如下的产品家族信息:三、按照集成接口标记规范编写PL/SQL程序按照业务逻辑的要求编写PL/SQL程序,除了需要在PL/SQL程序的声明中按照集成接口标记的要求添加标记注释之外,其它和一般的程序没有任何区别,如下是一个用来实现查询PMP中WBS计划的程序:CREATE OR REPLACE PACKAGE CUX_PMP_PKG6 AS/* $Header: $ *//*#* This package using PMP application cux developer* @rep:scope public* @rep:product cux* @rep:lifecycle active* @rep:displayname cux pmp application6* @rep:compatibility S* @rep:category BUSINESS_ENTITY CUX_DEVELOPER*/TYPE t_cursor IS REF CURSOR;/*#* query_wbs_plans* @param plans_list out plans list* @param result_code out result flag* @param p_user_name login user name* @param p_project_name project name* @rep:scope public* @rep:lifecycle active* @rep:displayname query_wbs_plans*/PROCEDURE query_wbs_plans(plans_list OUT t_cursor,result_code OUT VARCHAR2,p_user_name IN VARCHAR2,p_project_name IN VARCHAR2);END CUX_PMP_PKG6;关键几个标记描述:@rep:product CUX 代表集成接口注册到CUX应用中,必须是系统中存在的应用简称@rep:displayname cux pmp application6 集成接口的名称@param存储过程和方法的参数,都需要标注出来供调用服务的客户端查看@rep:category BUSINESS_ENTITY CUX_DEVELOPER 业务实体的类型,CUX_DEVELOPER必须在BUSINESS_ENTITY 值列表类型下定义存在,否则无法通过验证四、验证集成接口标记并生成iLDT文件将编写好的PLSQL声明定义保存为.pls文件(CUX_PMP_PKG6.pls),并将其上传到服务器的$FND_TOP/bin目录下,通过Telnet使用命令来验证和生成集成接口标记文件,成功验证后会有如下的日志生成,同时会生成iLDT文件oracleseeker_emp_pkg_pls.ildt ,如果标记存在问题会打印出对应的错误信息,需要注意查看错误消息并进行修正。
命令如下:$IAS_ORACLE_HOME/perl/bin/perl $FND_TOP/bin/irep_parser.pl -g -v -username=sysadminar:patch/115/sql:CUX_PMP_PKG6.pls:12.0=CUX_PMP_PKG6.pls五、将iLDT文件上传到Oracle Integration Repositoy中将上面生成的iLDT文件通过FNDLOAD命令工具上传到Oracle Integration Repositoy中,命令如下:FNDLOAD apps/apps 0Y UPLOAD $FND_TOP/patch/115/import/wfirep.lct CUX_PMP_PKG6_pls.ildt成功上传之后通过Oracle Integration Repositoy可以查看如下的集成接口信息六、发布WEB SERVICE接口按照如下截图,首先产生WDSL文件,然后部署,最后创建授权.注意:创建授权时如果给新加的用户授权,需要给用户添加”集成SOA网关”和”应用开发员职责”,如果加完职责还不能调用接口,需要清理缓存或者重启环境.六、使用SOAPUI工具测试1.新建一个PROJECT.2.输入PROJECT NAME后点击OK3.选择新增的project,点击右键,增加WSDL地址4.查看接口的WSDL地址,然后把地址复制过来5.添加成功后,工具给每个接口生成一个测试方法.6.参考如下例子,输入相应的参数即可测试.<wsse:Username>为EBS中用户名,需要是接口中授权的用户<wsse:Password>为上面输入用户对应的密码.。