`
forward10
  • 浏览: 2053 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

ebs发布webservice详解

阅读更多
本文讲解一下如何把自定义的PLSQL的Package发布成Webservice,并在Oracle Integration Repositoy里注册


1.创建Product Family
Product Family用于管理几个功能相近的Product(也可以立即为模块),统一管理客户化的Webservice接口

begin
  -- Call the procedure
  ad_pa_insert_package.insert_ad_pm_product_info(x_product_abbreviation        => 'os_xxx',
                                                 x_pseudo_product_flag         => 'N',
                                                 x_product_family_flag         => 'Y',
                                                 x_application_short_name      => NULL,
                                                 x_product_name                => 'Oracle Xxx Suite',
                                                 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.注册Product,即注册Xxx University(cux)应用到产品家族中
begin
  ad_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 => 'Xxx University',
                         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;

3.关联Xxx University应用到产品家族Oracle Xxx Suite下
begin
  -- Call the procedure
  ad_pa_insert_package.insert_ad_pm_prod_family_map(x_product_abbreviation => 'cux',
                          x_product_family_abbreviation => 'os_xxx',
                          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;


4.增加一个BUSINESS_ENTITY的lookup code(应用开发员职责->应用产品 -> 代码->Oracle Application Object),这个Lookup会用在下一步的API中的@rep:category BUSINESS_ENTITY

这里增加的code为ORACLESEEKER


5.编写PL/SQL API Specification
CREATE OR REPLACE PACKAGE CUX_SUPPLIER_PKG AS
  /* $Header: $ */
  /*#
  * This package using maintain the supplier information
  * @rep:scope public
  * @rep:product CUX
  * @rep:lifecycle active
  * @rep:displayname Supplier Approve result
  * @rep:compatibility S
  * @rep:category BUSINESS_ENTITY ORACLESEEKER
  */
  /*#
  * insert approve result
  * @param apply_id apply id
  * @param node_id node id
  * @param node_name node name
  * @param approver_id approver id
  * @param approver_name approver name
  * @param approve_result approve result
  * @param approve_opinion approve opinion
  * @param approve_date approve date
  * @return a varchar
  * @rep:scope public
  * @rep:lifecycle active
  * @rep:displayname insert supplier approve result Webservice 
  */
  FUNCTION f_insert_approve_result(apply_id        IN NUMBER,
                                   node_id         IN NUMBER,
                                   node_name       IN VARCHAR2,
                                   approver_id     IN NUMBER,
                                   approver_name   IN VARCHAR2,
                                   approve_result  IN NUMBER,
                                   approve_opinion IN VARCHAR2,
                                   approve_date    IN DATE) RETURN VARCHAR2;
END CUX_SUPPLIER_PKG;

需要注意Package中的注释并不是随便填写的,每一个注释都会对应到Oracle Integration Repositoy接口的说明上去,对于要注册成Webservice的PL/SQL API必须按照要求来填写。
注释标签具体的含义需要参考《Oracle E-Business Suite Integrated SOA Gateway Developer's Guide》,链接地址为:
http://docs.oracle.com/cd/E18727_01/doc.121/e12065/T511473T545912.htm#5466320


6.验证PLSQL接口文件,并生成ildt文件
将编写好的PLSQL声明定义保存为.pls文件(PAUL_ITEM_PKG.pls),并将其上传到服务器应用$CUX_TOP/patch/115/sql目录下,然后执行下边的命令生成ildt文件
/usr/bin/perl $FND_TOP/bin/irep_parser.pl -g -v -username=sysadmin cux:patch/115/sql:CUX_SUPPLIER_PKG.pls:12.0=CUX_SUPPLIER_PKG.pls

7.将iLDT文件上传到Oracle Integration Repositoy
FNDLOAD apps/apps 0 Y UPLOAD $FND_TOP/patch/115/import/wfirep.lct CUX_SUPPLIER_PKG_pls.ildt

8.在对应的Product Family和Product下就能看到你的接口


9.在Web服务调用的时候,需要有一个应用数据库用户来连接EBS数据库,因此需要创建一个具备一定权限的用户,而为了简化设置的麻烦,Oracle提供了一个内建的用户 ASADMIN ,只要启用它并重置密码就可以了。
以sysadmin登录Oracle EBS,切换到 User Management 职责,进入Users页面,查找出asadmin用户,通过修改密码的方式激活asadmin,并确保此用户拥有Apps Schema Connect Role职责。

由于asadmin的密码已经被重置,因此中间服务器的文件配置$INST_TOP/ora/10.1.3/j2ee/oafm/config/system-jazn-data.xml 中对应的密码也需要修改,由于配置中的密码已被加密,我们无法提供加密后的密码,使用过OC4J的同事应该都知道,Oracle提供了一种重置这里密码的方便方法,就是采用明文密码,在密码前添加一个警号(!),然后重启应用服务器后自动会重新加密。打开system-jazn-data.xml文件后, 找到
<user>
<name>ASADMIN</name>
<display-name>Default Apps SOA User</display-name>
<description>Used by SOAProvider for DB connection</description>
<credentials>{903}qMgAeO1AjQjwOJ6rIB41Sx049uG0xzhs</credentials>
</user>
只要将credentials的值更改为自己的密码,如我的密码设置为11111,就设置为 <credentials>!11111</credentials>。修改完成后重启oamf,简单的方法就是重启Oracle EBS应用服务。

附重启命令:
cd $INST_TOP/admin/scripts
01、关闭应用  sh adstpall.sh apps/apps
02、重启应用  sh adstrtal.sh apps/apps
03、关闭DB
04、重启DB
05、启动并发管理器 adcmctl.sh start apps/apps

10.为集成接口创建授权
发布到Oracle Integration Repositoy中的Web服务能够被访问必须有相应的权限才可以,这也是受到AOL安全模型限制的一个体现。
登录EBS后切换到Integrated SOA Gateway职责,在 Integration Repositoy 中找出已经上传好的客户化集成接口,选择接口过程和方法后点击Create Grant 按钮
选择授权类型:All Users、Group of Users 和 Specific USer,下面设置为最后一种方式

11.完成以上工作后,点击Generate WSDL按钮来生成集成接口对应的Web服务WSDL信息
成功完成后可以看到如下Web服务的状态为:Generated
点击 Deploy 按钮来发布Web服务到中间服务器中,发布后Web服务的状态为: Deployed


-----------------------------------------------
12.如果在测试中报java.security.PrivilegedActionException: javax.xml.soap.SOAPException: Message send failed: For input string: ""
执行以下操作:
cd $ORA_CONFIG_HOME/10.1.3/j2ee/forms/config/oc4j.properties
注释代理服务
#http.proxyHost=
#http.proxyPort=
重启服务


13.如果填写信息提交后会报出 wsse:FailedAuthentication 这样的错误信息,这是由于提交的Soap消息中并没有包括Oracle Integration Repository要求的AOL安全认证,即没有Oracle EBS系统要求的用户、职责、安全组和语言信息,也就是没有进行Oracle EBS的环境初始化

wsdl文件路径/ebsr12/test/inst/apps/TEST_scmdev/soa/PLSQL/4343

此问题可以通过修改wsdl文件来解决
01删除CUX_SUPPLIER_PKG_soap.wsdl中
<element name="SOAHeader">
            <complexType>
               <sequence>
                  <element name="Responsibility" minOccurs="0" type="string"/>
                  <element name="RespApplication" minOccurs="0" type="string"/>
                  <element name="SecurityGroup" minOccurs="0" type="string"/>
                  <element name="NLSLanguage" minOccurs="0" type="string"/>
                  <element name="Org_Id" minOccurs="0" type="string"/>
               </sequence>
            </complexType>
         </element>

02删除CUX_SUPPLIER_PKG_soap_http.wsdl中
<element name="SOAHeader">
            <complexType>
               <sequence>
                  <element name="Responsibility" minOccurs="0" type="string"/>
                  <element name="RespApplication" minOccurs="0" type="string"/>
                  <element name="SecurityGroup" minOccurs="0" type="string"/>
                  <element name="NLSLanguage" minOccurs="0" type="string"/>
                  <element name="Org_Id" minOccurs="0" type="string"/>
               </sequence>
            </complexType>
         </element>

修改后点击invoke,如出现“处理服务时出错”,进行如下处理
/ebsr12/test/inst/apps/TEST_scmdev/soa/PLSQL/4343/F_INSERT_APPROVE_RESULT.wsdl

查看这个文件的内容
<jca:operation
    PackageName=”ORACLESEEKER_DEPT_PKG”
    ProcedureName=”ADD_DEPARTMENT”
    IRepInternalName=”PLSQL:ORACLESEEKER_DEPT_PKG:ADD_DEPARTMENT”
    IRepOverloadSeq=”1″
    InteractionSpec=”oracle.tip.adapter.apps.AppsStoredProcedureInteractionSpec” >
</jca:operation>
这个标签中包含了一个属性IRepOverloadSeq,看上面的错误应该是Oracle在Java中没有实现对这个属性的处理,看样子是一个bug,既然程序中没有处理它,那不管怎么说先备份这个文件后将这个属性删除测试看看。
分享到:
评论

相关推荐

    Oracle EBS 各模块详解

    Oracle EBS 各模块详解 01采购培训 02库存培训 03销售培训 04应付培训 05总帐培训 06应收培训

    EBS WEBSERVICE接口简单部署

    EBS WebService 是 Oracle EBS 中的一个重要组件,允许与其他系统进行集成,通过Web服务的方式交换数据。在本文中,我们将深入探讨如何简单部署EBS WebService接口。 步骤一:编写接口主程序入口 在开发EBS ...

    oracleEBS 值集详解

    此针对于oracle ebs的值集进行详细的讲解

    ORACLE EBS R12 安装步骤详解

    ORACLE EBS R12 安装步骤详解 ORACLE EBS R12 安装步骤详解是 Oracle E-Business Suite 的安装指南,涵盖了从系统环境准备到 ORACLE EBS 安装前的准备、系统配置、打印机安装、Cygwin 安装、VS2005 安装等多个方面...

    webservice接口demo.rar

    本文将深入探讨一个具体的案例,即“MES通过WebService调用EBS(Enterprise Business Suite,企业业务套件)的退料接口”,并关注其中涉及的技术点,如C#编程语言、SOAP协议以及接口报文的处理。 首先,MES...

    EBSForm个性化详解及开发实例word原版.doc

    EBS Form 个性化详解及开发实例 EBS Form 个性化是 Oracle E-Business Suite R12 中的一个功能强大且灵活的功能,它允许用户根据需要自定义 Form 的外观和行为。在本文档中,我们将详细介绍 EBS Form 个性化的基础...

    EBS工作原理及功能详解.pptx

    EBS工作原理及功能详解 EBS(Electronically Controlled Brake System)是电子控制制动系统的缩写,集成了ABS和常规制动系统于一体,通过电子控制来实施制动,提高了制动响应速度。EBS通过缩短制动距离,改善制动...

    AEBS工作原理及功能详解.pptx

    AEBS工作原理及功能详解

    深入浅出Oracle EBS之Workflow实例详解.pdf

    深入浅出Oracle EBS之Workflow实例详解.pdf 深入浅出Oracle EBS之Workflow实例详解.pdf 深入浅出Oracle EBS之Workflow实例详解.pdf

    深入浅出Oracle EBS之Workflow实例详解

    ### 深入浅出Oracle EBS之Workflow实例详解 #### 一、Oracle Workflow 基础 **1.1 工作流概述** Oracle E-Business Suite (EBS) 中的工作流(Workflow)是一项核心的技术组件,它主要用于管理EBS中的业务流程,...

    ORACLE EBS入门及供应链核心系统详解教程-上册-第一个压缩包

    Oracle EBS 功能顾问入门必备参考书目。共上下两册。每册分为两个压缩包,需要同时下载完后才能解压成功。本资源是上册第一个压缩包。其余压缩包请从本人其他上传资源中找。

Global site tag (gtag.js) - Google Analytics