一. 在Oracle EBS二次开发中,PL/SQL程序是开发人员使用频率最高的开发语言,同时也是大家最容易掌握的工具之一了,而我们也很希望将自己编写的PL/SQL程序发布为Web服务来提供给客户端程序使用,同时也可以实现和外围系统的集成,有了irep_parser这个工具,我们就可以将自己编写的PL/SQL程序发布到Oracle Integration Repositoy中。OracleIntegration Repositoy中集成接口的来源都是Oracle,客户化的程序发布上去的为Custom:

下面描述是发布的详细步骤描述:

二. 在Web服务调用的时候,需要有一个应用数据库用户来连接EBS数据库,因此需要创建一个具备一定权限的用户,而为了简化设置的麻烦,Oracle提供了一个内建的用户 ASADMIN ,只要启用它并重置密码就可以了。另外一种方法是新建一个用户后进行授权,这种方法需要的步骤稍微多一点,再次就不做描述。如果ISG的前提设置没有完成,在后面为集成接口Generate WSDL 的时候就会报出如下的错误:

1.       激活ASADMIN账户.

ASADMIN在系统中默认是失效的,以SYSADMIN账户登录,在用户管理职责下面查找出ASADMIN账户并重置ASADMIN的密码为welcome.如下图

2. 确认ASADMIN用户的角色

在上图中点更新确保已经分配Apps Schema ConnectRole(Apps 模式连接职责)职责,如果没有请点分配职责添加.

也可以通过SQL查看

select role_namefrom wf_user_roles where user_name='ASADMIN' ;

select role_namefrom wf_user_role_assignments where user_name='ASADMIN' ;

查询的结果应该是: ROLE_NAME

-----------------------------------

ASADMINUMX|APPS_SCHEMA_CONNECT

2.  重置中间服务器中ASADMIN的密码

由于asadmin的密码已经被重置,因此中间服务器的文件配置$INST_TOP/ora/10.1.3/j2ee/oafm/config/system-jazn-data.xml中对应的密码也需要修改,由于配置中的密码已被加密,我们无法提供加密后的密码,使用过OC4J的同事应该都知道,Oracle提供了一种重置这里密码的方便方法,就是采用明文密码,在密码前添加一个警号(!),然后重启应用服务器后自动会重新加密。打开system-jazn-data.xml文件后,找到ASADMIN用户如下:

<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>

上传到FTP服务器,TXT文件不要用二进制,要用ASII(text)模式上传,经测试二进制上传的文件会多很多空格,还有后面上传PLS文件的时候也一样,要不生成ILDE文件的时候会生成不了,错误代码没有截取了.

只要将credentials的值更改为自己的密码,如我的密码设置上面重置的密码welcome,就设置为<credentials>!welcome</credentials>。修改完成后重启.

如果系统不支持的话还要打很多补丁,我来这边系统补丁已经打好了.接下来

三.添加CUX客户化应用到Product Family

1.添加产品家族(AMWAYCUSTOMIZATION APPLICATION SUITE)

begin

ad_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=> 'AMWAY CUSTOMIZATION APPLICATION SUITE',

x_product_family_abbreviation => NULL ,

x_product_family_name => NULL,

x_aru_update_date => TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mm:ss' ),

x_currdate => to_char(SYSDATE,'yyyy-mm-dd hh24:mm:ss' ),

x_last_updated_by => -1,

x_created_by => -1);

COMMIT;

end;

2.注册(AMWAYCUSTOMIZATION APPLICATION(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               => 'AMWAY CUSTOMIZATION APPLICATION',

x_product_family_abbreviation => NULL,

x_product_family_name         => NULL,

x_aru_update_date            => to_char(SYSDATE,

'yyyy-mm-ddhh24:mm:ss'),

x_currdate                   => to_char(SYSDATE,

'yyyy-mm-dd hh24:mm:ss'),

x_last_updated_by            => -1,

x_created_by                 => -1);

COMMIT;

END;

3.关联(AMWAYCUSTOMIZATION APPLICATION)应用到产品家族(AMWAY CUSTOMIZATION APPLICATIONSUITE)下

BEGIN

ad_pa_insert_package.insert_ad_pm_prod_family_map(x_product_abbreviation=> 'cux',

x_product_family_abbreviation => 'cux_pf' ,

x_aru_update_date =>to_char(SYSDATE,

'yyyy-mm-dd hh24:mm:ss' ),

x_currdate => to_char(SYSDATE,

'yyyy-mm-ddhh24:mm:ss' ),

x_last_updated_by => -1,

x_created_by => -1);

COMMIT;

END;

四、按照集成接口标记规范编写PL/SQL程序

CREATE OR REPLACEPACKAGE cux_po_order_pkg AS

/* $Header: $ zao.lin*/

/*#

  * This Package Using Create the Po OrderInformation

  * @rep:scope public

  * @rep:product CUX

  * @rep:lifecycle active

  * @rep:displayname CUX Po Order

  * @rep:compatibility S

  * @rep:category BUSINESS_ENTITYCUX_PO_ORDERS2

  */

TYPE cux_po_headers_rec IS RECORD(

order_company    VARCHAR2(5),

po_number        VARCHAR2(8),

po_type          VARCHAR2(2),

order_date       NUMBER,

jde_blanch_plant VARCHAR2(12),

supplier_number  VARCHAR2(30),

ship_to          VARCHAR2(10),

reference1       VARCHAR2(25),

currency_code    VARCHAR2(3),

exchange_rate    NUMBER,

payment_term     VARCHAR2(3),

attribute1       VARCHAR2(240),

attribute2       VARCHAR2(240),

attribute3       VARCHAR2(240),

attribute4       VARCHAR2(240),

attribute5       VARCHAR2(240),

attribute6       VARCHAR2(240),

attribute7       VARCHAR2(240),

attribute8       VARCHAR2(240),

attribute9       VARCHAR2(240),

attribute10      VARCHAR2(240),

attribute11      VARCHAR2(240),

attribute12      VARCHAR2(240),

attribute13      VARCHAR2(240),

attribute14      VARCHAR2(240),

attribute15      VARCHAR2(240));

TYPE cux_po_lines_rec IS RECORD(

line_num            NUMBER,

item_number         VARCHAR2(30),

description1        VARCHAR2(240),

description2        VARCHAR2(240),

uom                 VARCHAR2(10),

order_quantity      NUMBER,

received_quantity   NUMBER,

unit_cost           NUMBER,

request_date        NUMBER,

promise_date        NUMBER,

cancel_date         NUMBER,

jde_planner         VARCHAR2(10),

jde_buyer           NUMBER,

reference1          VARCHAR2(25),

line_ship_to_number NUMBER,

location            VARCHAR2(20),

last_status         VARCHAR2(3),

next_status         VARCHAR2(3),

attribute1          VARCHAR2(240),

attribute2          VARCHAR2(240),

attribute3          VARCHAR2(240),

attribute4          VARCHAR2(240),

attribute5          VARCHAR2(240),

attribute6          VARCHAR2(240),

attribute7          VARCHAR2(240),

attribute8          VARCHAR2(240),

attribute9          VARCHAR2(240),

attribute10         VARCHAR2(240),

attribute11         VARCHAR2(240),

attribute12         VARCHAR2(240),

attribute13         VARCHAR2(240),

attribute14         VARCHAR2(240),

attribute15         VARCHAR2(240));

TYPE cux_po_headers_tbl IS TABLE OFcux_po_headers_rec;

TYPE cux_po_lines_tbl IS TABLE OFcux_po_lines_rec;

/*#

  * Create an PoOrder

  * @param x_return_status  return status

  * @param x_msg_data  message

  * @param p_po_header_tbl cux_po_headers_tbl,

  * @param p_po_line_tbl cux_po_lines_tbl

  * @rep:scope public

  * @rep:lifecycle active

  * @rep:displayname Create an CUX JDE Po Order

  */

PROCEDURE create_order(x_return_status IN OUTNOCOPY VARCHAR2,

x_msg_data      IN OUT NOCOPY VARCHAR2,

p_po_header_tbl INcux_po_headers_tbl,

p_po_line_tbl   IN cux_po_lines_tbl);

ENDcux_po_order_pkg;

程序包里面的注释一定要规范

关键几个标记描述:

@rep:product CUX 代表集成接口注册到CUX应用中,必须是系统中存在的应用简称 

@rep:displayname  Cux Po Order集成接口的名称 

@param 存储过程和方法的参数,都需要标注出来供调用服务的客户端查看 

@rep:category BUSINESS_ENTITY CUX_PO_ORDERS2 业务实体的类型,CUX_PO_ORDERS2必须在BUSINESS_ENTITY 值列表类型下定义存在,否则无法通过验证

注意:这里的输出参数(x_return_status, x_msg_data)一定要 IN OUT 参数,要不就不会显示出来.

五、验证集成接口标记并生成iLDT文件

$IAS_ORACLE_HOME/perl/bin/perl$FND_TOP/bin/irep_parser.pl -g -v -username=sysadmin cux:cux_jde_po_order_pkg.pls:12.0=cux_po_order_pkg.pls

将编写好的PLSQL声明定义保存为.pls文件(oracleseeker_emp_pkg.pls),并将其上传到服务器应用(xhu)的patch/115/sql目录下,通过Telnet使用命令来验证和生成集成接口标记文件,成功验证后会有如下的日志生成,同时会生成iLDT文件oracleseeker_emp_pkg_pls.ildt,如果标记存在问题会打印出对应的错误信息,需要注意查看错误消息并进行修正。

六. 将iLDT文件上传到OracleIntegration Repositoy中

FNDLOADapps/apps 0 Y UPLOAD $FND_TOP/patch/115/import/wfirep.lct cux_po_order_pkg_pls.ildt

成功上传之后通过Oracle Integration Repositoy可以查看如下的集成接口信息啦

下面就是授权这两个用户SYSADMIN,ASADMIN

然后身份验证:以用户变量

部署然后我们就可以查看WSDL

在链接中去掉 ?WSDL 直接回车 就可以访问刚刚发布的WEBSERVICES了

到这里还能确保你刚刚发布的WEBSERVICES没有问题了,还要测试

七.如果在发布过后想要更改参数的话,可以强制更新

$IAS_ORACLE_HOME/perl/bin/perl$FND_TOP/bin/irep_parser.pl -g -v -username=sysadmincux:patch/115/sql:cux_jde_po_order_pkg.pls:12.0=cux_jde_po_order_pkg.pls

版本号要加1 就是

…13.0=cux_jde_po_order_pkg.pls

FNDLOADapps/apps 0 Y UPLOAD $FND_TOP/patch/115/import/wfirep.lctcux_po_order_pkg_pls.ildt - WARNING=YES UPLOAD_MODE=REPLACE CUSTOM_MODE=FORCE

注意:在更新的时候一定要换一个业务实体的类型,刚刚的CUX_PO_ORDERS2必须在BUSINESS_ENTITY 值列表类型下重新定义一个新的.

以上是对WEBSERVICES一点总结,不好还请包含.

 

PLSQL WEBSERVICES 发布的更多相关文章

  1. cxf3.x +spring 3.x(4.x)+ maven 发布webservice 服务

    cxf 在做企业级webservices 服务的时候确实非常好用,个人觉得比axis1, 2都好用. 虽然spring自身也提供了webservices发布方法,这里使用cxf跟spring结合,使用 ...

  2. DELPHI XE5开发WEB服务器及安卓手机客户端

    Xe5开发web服务端和手机客户端 ------------------------------------- Delphi xe5作为最新开发利器,就类似如当年的DELPHI,功能强大,快发速度快, ...

  3. delphi xe5 android 开发数据访问server端(二)

    上一篇我们创建了一个拟给手机端访问的webservices服务 接下来创建一个返回数据集的过程,用webservices发布,供手机端调用.这里我使用firedac 1.打开上一篇自动创建的WebMo ...

  4. XE5 Android 开发数据访问server端[转]

    建立一个webservices  stand-alone vcl application 作为手机访问的服务端 1.new->other->webservices 2.选择 stand-a ...

  5. 基于Zookeeper的分步式队列系统集成案例

    基于Zookeeper的分步式队列系统集成案例 Hadoop家族系列文章,主要介绍Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, ...

  6. Delphi XE5通过WebService开发Web服务端和手机客户端

    Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices  stand-alone vcl applicati ...

  7. Tomcat上发布webservices的war工程,访问异常404

    Tomcat上发布webservices的war工程,访问异常404 Tomcat部署正常.war导出工程正常.Tomcat自带的工程可以正常访问: 问题: webservices工程访问异常404 ...

  8. WebServices生成发布过程及常见问题的解决方法

    春夏秋冬走健康之路看四季养生网 健康饮食 养生问题 母婴保健 养生小常识 3.下一步,我们需要将Myservice文件夹拷贝到C:\Inetpub\wwwroot目录下(重要).如下图所示  然后依次 ...

  9. javaweb项目中发布webservices服务

    1.新建一个项目动态web项目Axis2Server. 2.解压缩下载的axis2-1.7.4-war.zip文件--〉axis2-1.7.4-war--〉axis2.war--〉axis2,找到WE ...

随机推荐

  1. Activtiy完全解析(一、Activity的创建过程)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/52452218 本文出自:[openXu的博客]   在Android开发过程中,我们几乎每天 ...

  2. FORM内置系统变量

    常用 和输入焦点有关: SYSTEM.CURSOR_ITEM:返回系统当前正在操作的项名. SYSTEM.CURSOR_RECORD:返回系统当前正在操作的记录行号. SYSTEM.CURSOR_BL ...

  3. SceneKit做一个旋转的地球效果

    SceneKit可以用寥寥几行帮你完成很多OpenGL复杂的3D设置代码,下面本猫就带大家完成一个旋转的3D地球的场景. 首先需要地球表面图片,将其导入到Xcode中: 我们用SceneKit内置的几 ...

  4. xlsx批量转为utf8的csv

    xlsx批量转为utf8的csv(金庆的专栏)策划的配置表为 xlsx 表格,可以有注释,公式.服务器和客户端使用的配置文件需要转成 csv 文件.使用 WPS 另存无法批量转换,并且结果不是utf8 ...

  5. Dynamics CRM2015 on-premises直接升级Dynamics CRM2016 on-premises

    Dynamics crm2016 on-premises版本已与12月14日开放下载,下载地址:https://www.microsoft.com/zh-cn/download/details.asp ...

  6. Linux下如何阅读开源项目

    标签(空格分隔): code SLAM是一个大型的项目,而且通常都是基于linux平台的.对于大部分没有linux经验的人来说,如何在linux下拥有vs代码阅读体验就非常重要了.这篇博客就简答的介绍 ...

  7. ROS_Kinetic_x 基於ROS和Gazebo的RoboCup中型組仿真系統(多機器人協作)

    國防科學技術大學發布了RoboCup中型組仿真平臺,基於ROS和Gazebo設計. 該平臺可以用於多機器人協作研究.參考資料如下: ROS新聞:1    http://www.ros.org/news ...

  8. 高通msm8994手动提升性能脚本

    点击打开链接 [plain] view plain copy stop thermald stop mpdecision stop thermal-engine # online A57 echo 1 ...

  9. iOS的settings bundle中开关按钮(Toggle Switch)取不到值的问题

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 在Xcode7.2中设置App的settings bundle ...

  10. java基础---Java---面试题---银行业务调度系统(线程同步锁、枚举、线程池)

    银行业务调度系统的项目需求:   模拟实现银行业务调度系统逻辑,具体需求如下:   Ø 银行内有6个业务窗口,1- 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口.   Ø 有三种对应类 ...