一、ISG设置-基础设置
- 激活ASADMIN用户:
a).以SYSADMIN用户登陆EBS, 进入用户管理职责。
b).进入用户菜单,搜索ASADMIN用户。
c).点击更新按钮,进入用户更新界面。
d).清空有效至字段的内容,点击保存。
e).点击重置口令按钮,输入新密码,并保存,用户状态会变成已激活状态。
以上步骤在系统管理员职责下的安全>用户FORM界面也能操作,操作方法类似。
注:完成ISG的配置之后,不要修改ASADMIN用户密码,否则还需要再重新配置。
2. 分配Integration Administrator角色:
a).点击分配职责按钮,在LOV搜索选择窗口,选择代码,并输入:UMX|FND_IREP_ADMIN
b).勾选复选框,并点击选择按钮。
c).在证明字段随意输入内容,点击应用。
二、ISG REST services 的配置
- 配置ISG_TEMP目录
在EBS应用服务器上创建一个文件夹并将其作为<ISG_TEMP>,例如:
mkdir $CUX_TOP/soa
注:如果是多节点的话,该文件夹需要是一个共享文件夹。
2. 修改$INST_TOP/soa/isgagent.properties文件
<SID>.ISG_TEMP_DIRECTORY_LOCATION=<ISG_TEMP>
修改$INST_TOP/soa/文件夹下isgagent.properties的ISG_TEMP_DIRECTORY_LOCATION属性
同时需要新增两个属性来开启ISG的log功能
<SID>.ISG_LOGGER=FILE <SID>.ISG_GLOBAL_LOG=true
修改以上配置之后,重启oafm和oacore server之后产生的log文件会产生在配置的<ISG_TEMP>文件夹中。
注:多节点情况下,需要更新每个节点上的该文件
3.执行 txkISGConfigurator.xml
3.1 加载环境变量
source <EBS_INSTALL_BASE>/EBSapps.env RUN
3.2 运行txkISGConfigurator.xml工具
ant -f $JAVA_TOP/oracle/apps/fnd/txk/util/txkISGConfigurator.xml ebsSetup -DforceStop=yes
该脚本的执行过程需要提供一下信息:
-
-
- Enter the password for user APPS:
-
输入用户APPS的密码.
-
-
- Enter the ASADMIN user name : [ASADMIN]
- Enter the password for user ASADMIN :
-
输入用户ASADMIN的密码
-
-
- The script will forcefully stop the Oracle WebLogic Server now. Do you want to proceed (yes/no)? (yes, no)
-
输入 yes 来重启服务。
结果显示
生成Authentication Provider
注意:
上述脚本会创建一个“OAEADatasource”的data source,并部署至EBS的WebLogic Admin Server和'oafm_cluster1' server。同时也会创建一个REST services使用的Authentication Provider “IsgAuthenticator”,最后重启weblogic admin server。
如果OAEADatasource已经创建过了,上述脚本增加参数“-DforceDataSourceExists=true”来替换已有的data source。使用“ -DforceAuthenticationProviderExists=true ”来重新创建Authentication Provider。
以上步骤只要在主节点执行即可
可能遇到的问题
- 问题描述:/u01/UAT/app/fs1/EBSapps/comn/java/classes/oracle/apps/fnd/txk/util/txkISGConfigurator.xml:1756: ${patchContextFile} doesn't exist
解决方案:
参考metalink文档Doc ID 2227168.1
原因:缺少patch context file,txkISGConfigurator.xml在执行以下查询时只返回了一行记录。
select * from fnd_oam_context_files where CTX_TYPE = 'A' and name not in ('TEMPLATE','METADATA') and (status is null or status !='H');
解决办法:
在patch文件系统中运行autoconfig重新生成
a.以system用户登录数据库,禁用triger :ebs_logon
alter trigger ebs_logon disable
b.切换patch文件系统
source <EBS_INSTALL_BASE>/EBSapps.env patch
c.
cd $ADMIN_SCRIPTS_HOME
d.
./adautocfg.sh
e.启用triger
alter trigger ebs_logon enable
f.执行查询会出现两行记录
三、验证配置-ISG REST Services
本部分主要介绍通过前台用户界面和后台脚本的方式发布REST Webservice来验证ISG的配置。
3.1 前台界面验证
- 以ASADMIN用户登陆EBS,其他包含集成管理员角色的用户也可以。
- 进入集成信息库职责的集成信息库功能,点击搜索按钮;
- 在内部名称字段输入’FND_USER_PKG’并点击开始按钮来执行搜索;
- 点击User链接,显示接口的详细信息;
5.点击REST Web Service 标签页并输入一下内容:
Service Alias:指明服务的别名【会显示在服务的URI里面,因此取个比较有内涵的,例如:FndUserPkgSrv】;
6.在Service Operations表格里面,选择至少一个method来以REST service operation的方式暴露出来。
7.点击部署按钮来部署该REST service,如果部署无误,REST Service Status字段会显示已部署。
7.点击取消部署按钮来取消已部署的service,Rest Service Status字段会显示Not Deployed。
3.2 后台脚本验证
例如,我们要将一个PL/SQL类型的接口 FND_USER_PKG(并暴露TESTUSERNAME这个method) 部署为REST Service,则我们可以再应用服务器上执行下述脚本:
ant -f $JAVA_TOP/oracle/apps/fnd/isg/ant/isgDesigner.xml -Dactions=deploy -DserviceType=REST -DirepNames=FND_USER_PKG[{TESTUSERNAME:SYNC:POST}] -Dverbose=ON -Dalias=FndUserPkgSvc |
如果上述部署操作成功,即代表我们的配置无误。
界面查看该方法是否配置成功
四、客户化接口—配置
4.1 概述
Oracle EBS ISG支持客户化接口开发并且可以发布到Oracle Integation Repository。支持客户化开发的接口类型有:XML Gateway Map,Business Event, PL/SQL, Concurrent Program, Business Service Object, Java APIs, Java Bean Services和BPEL Composite Service。
客户化开发ISG web service流程:
- 按照Integration Repository注释标准给客户化API添加注释;
- 执行IREP Parser工具来验证注释好的文件,生成Integration Repository loader文件(iLDT);
- 上传iLDT文件至Oracle Integration Repository;
- Integration Repository职责查看客户化接口详细信息;
- 为接口相关方法创建安全授权;
- 生成web services;
- 部署web services;
注意下图中SOAP与REST两种服务方式部署的不同。
4.2 配置Integration Repository Parser(IREP Parser)
IREP解析器是集成管理员用于按照注释标准对客户化接口添加的注释验证的独立设计时工具,验证完成之后生成iLDT文件,该文件被上传到集成信息库里,然后用于生成服务、发布服务。
1. 安装Perl模组
a).通过运行EBSapps.env脚本建立运行文件系统APPL_TOP环境。
b).定位Perl配置文件Config.pm并备份这个文件
cd $FMW_HOME/webtier/perl/lib/5.10.0/x86_64-linux-thread-multi cp Config.pm Config.pm_bak20200320
c).修改Config.pm文件
<FMW_HOME>是$ FMW_HOME的绝对路径。
archlibexp =>relocate_inc('<FMW_HOME>/webtier/perl/lib/5.10.0/sun4-solaris-thread-multi-64') privlibexp =>relocate_inc('<FMW_HOME>/webtier/perl/lib/5.10.0') sitearchexp =>relocate_inc('<FMW_HOME>/webtier/perl/lib/site_perl/5.10.0/sun4-solaris-thread-multi-64') sitelibexp =>relocate_inc('<FMW_HOME>/webtier/perl/lib/site_perl/5.10.0')
d). 创建Perl安装目录
mkdir $APPL_TOP_NE/perl chmod 755 $APPL_TOP_NE/perl
e).在APPL_TOP环境中设置以下环境变量
export PERL5LIB=$FND_TOP/perl:$APPL_TOP_NE/perl:$PERL5LIB export LIBPATH=$LIBPATH:$FMW_HOME/webtier/lib export ORACLE_HOME=$FMW_HOME/webtier LD_LIBRARY_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/lib:$LD_LIBRARY_PATH export JAVA_HOME=/prod/EBS122/fs1/FMW_Home/jdk
这里JAVA_HOME 可以通过运行 which java来获取
f).下载patch 13602850 (p13602850_R12_GENERIC.zip)并上传、解压
Patch 13602850 contains the following Perl modules:
Compress-Raw-Zlib-2.009
Compress-Zlib-2.009
Class-MethodMaker-1.12
按照上面的顺序安装Perl模组
安装命令:
cd $APPL_TOP_NE/perl cp -r /temp/Compress-Raw-Zlib-2.009 cd Compress-Raw-Zlib-2.009 perl Makefile.PL make make install
2. 验证
如果上述步骤无误的话,执行以下脚本:
$IAS_ORACLE_HOME/perl/bin/perl $FND_TOP/bin/irep_parser.pl
若结果是如下提示则说明我们的Integration Repository Parser配置成功:
4.3 注册客户化产品
- 创建客户化prodcut family
BEGIN
-- create the custom product family
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 => 'CUX Product Family'
,x_product_family_abbreviation => NULL
,x_product_family_name => NULL
,x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD')
,x_currdate => to_char(SYSDATE,'YYYY-MM-DD') ,x_last_updated_by => -1
,x_created_by => -1);
COMMIT;
END;
- 创建客户化product
BEGIN -- create the custom product 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 => 'CUX Product' ,x_product_family_abbreviation => NULL ,x_product_family_name => NULL ,x_aru_update_date => to_char(SYSDATE,'YYYY-MM-DD') ,x_currdate => to_char(SYSDATE,'YYYY-MM-DD') ,x_last_updated_by => -1 ,x_created_by => -1); COMMIT; END; |
- 创建family与product的联系
BEGIN
-- create the relationship between family and product
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')
,x_currdate => to_char(SYSDATE,'YYYY-MM-DD') ,x_last_updated_by => -1
,x_created_by => -1);
COMMIT;
END;
- 增加客户化BUSINESS_ENTITY:
在LOOKUP_TYPE=BUSINESS_ENTITY中增加一个CODE:CUX_SERVICE;
4.4 编写并注释PL/SQL接口代码(服务端代码)
CREATE OR REPLACE PACKAGE cux_fnd_ws_test_pkg AS /* $Header: cux_fnd_ws_test_pkg.pls 12.0.1 $ */ /*# * This package using provide import po receive service * @rep:scope public * @rep:product cux * @rep:lifecycle active * @rep:displayname cux_fnd_ws_test_pkg * @rep:compatibility S * @rep:category BUSINESS_ENTITY CUX_SERVICE */ /*=============================================================== Copyright (C) xxx Co., Ltd. All Rights Reserved ===============================================================*/ /*=================================================================== -- Program Name : cux_fnd_ws_test_pkg -- Purpose : webservice测试包 -- Reference : -- Scope : --******************************************************************* -- Date Version Author Description -- 2020-03-26 1.00 lingchao.sun Initial Version ===================================================================*/ --=================================================================== --Procedure Name : process --Description : 处理流程 --Note : --Parameters : p_id : id -- p_name : name -- p_age :age -- p_birth_date :birth_date -- esb_flag : ESB标识 -- esb_return_code : ESB返回代码 -- esb_return_message : 系统返回消息 --History : 1.00 2020-03-26 lingchao.sun Creation --==================================================================== /*# * process * @param p_id id * @param p_name name * @param p_age age * @param p_birth_date birth_date * @param esb_flag esb flag * @param esb_return_code esb return code * @param esb_return_message esb return message * @rep:scope public * @rep:lifecycle active * @rep:displayname process */ PROCEDURE process(p_id IN VARCHAR2, p_name IN VARCHAR2, p_age IN NUMBER, p_birth_date IN VARCHAR2, esb_flag OUT VARCHAR2, esb_return_code OUT VARCHAR2, esb_return_message OUT VARCHAR2); END cux_fnd_ws_test_pkg;
4.5 解析、上传
- 上传cux_fnd_ws_test_pkg.pls文件至’$CUX_TOP/soa/’目录下;
- 进入目录’ $CUX_TOP/ soa/’;
- 运行irep_parser.pl工具来解析并验证pls文件是否声明正确:
命令的格式如下:
$IAS_ORACLE_HOME/perl/bin/perl $FND_TOP/bin/irep_parser.pl -g -v -username=<a fnd username> <product>:<relative path from product top>:<fileName>:<version>=<Complete File Path, if not in currect directory>
本例中实际执行如下命令:
$IAS_ORACLE_HOME/perl/bin/perl $FND_TOP/bin/irep_parser.pl -g -v -username=sysadmin cux:patch/115/sql:cux_fnd_ws_test_pkg.pls:12.0.1=cux_fnd_ws_test_pkg.pls
结果如下(看到‘Done all files’表示验证成功):
成功后,会在当前目录下生成一个ildt文件:cux_fnd_ws_test_pkg_pls.ildt
- 上传cux_fnd_ws_test_pkg_pls.ildt至Integration Repository;
执行upload命令上传iLDT文件,命令格式如下
$FND_TOP/bin/FNDLOAD <APPS username>/<ORACLE Password> 0 Y UPLOAD $FND_TOP/patch/115/import/wfirep.lct <ildt file>
UPLOAD脚本执行完成后,检查当前目录下的log文件,看到“Concurrent request completed successfully”表示上传成功:
4.6 授权、部署
4.6.1 授权
创建授权即对接口中的methods的执行权限分配给某一个特定的用户/用户组/所有用户,以保证服务的访问安全性;在授权 TAB页,勾选要创建授权的method,点击创建授权;反之撤销授权则是回收权限。
4.6.2 部署
l 进入REST Web 服务 TAB页;
l 勾选需要部署的methods;
l 在服务别名处填写服务别名;
l 点击部署按钮;
部署成功之后,REST 服务状态变为已部署,同时出现查看WADL和取消部署按钮
同时服务器上<ISG_TEMP>目录中也会生成REST文件夹
4.7 版本升级
当我们更改了包头中的参数时,需要重新发布服务做版本升级。
需要注意的是:生成iLDT文件的IREP命令版本号要升版,同时需要清除高速缓存、重启OAFM
l $ADMIN_SCRIPTS_HOME/admanagedsrvctl.sh stop oafm_server1
l $ADMIN_SCRIPTS_HOME/admanagedsrvctl.sh start oafm_server1
五、 客户化接口服务-客户端调用
5.1 通过WADL获取请求报文的程序包
DECLARE x_request VARCHAR2(32767); l_url VARCHAR2(1000); l_method_code VARCHAR2(100); l_mode_type VARCHAR2(30); l_length NUMBER; BEGIN l_url := 'http://cheng.erptest.com:8000/webservices/rest/CuxWsTestSrv?WADL'; l_method_code := 'process';--method方法 l_mode_type := 'XML';--XML/JSON cux_fnd_isg122_utl.get_model(p_wadl_url => l_url, p_method_code => l_method_code, p_model_type => l_mode_type, x_req_model_data => x_request); SELECT lengthb(x_request) INTO l_length FROM dual; --dbms_output.put_line(l_length); --dbms_output.put_line(substr(x_request, 1, 500)); --dbms_output.put_line(substr(x_request, 501, 1000)); --dbms_output.put_line(substr(x_request, 1000, l_length)); END;
5.2 调用REST Service – Soap UI
5.2.1 方式1:XML
- 新建WADL项目
2.获取服务的WADL,并导入WADL
输入请求编码:UTF-8
输入方法授权的用户名和密码
指定报文的格式为XML或者JSON
输入请求报文
3.发送报文获取相应报文
XML类型报文
JSON类型报文
5.3 调用REST Service – PLSQL
5.3.1 方式1:XML
REQUEST:
DECLARE l_url VARCHAR2(100) := 'http://cheng.erptest.com:8000/webservices/rest/CuxWsTestSrv/process/'; l_request utl_http.req; l_response utl_http.resp; l_req_data VARCHAR2(32767) := '<?xml version="1.0" encoding="UTF-8" ?> <PROCESS_Input xmlns="http://xmlns.oracle.com/apps/cux/rest/CuxWsTestSrv/process/"> <RESTHeader xmlns="http://xmlns.oracle.com/apps/fnd/rest/header"> <Responsibility></Responsibility> <RespApplication></RespApplication> <SecurityGroup></SecurityGroup> <NLSLanguage>SIMPLIFIED CHINESE</NLSLanguage> <Org_Id>0</Org_Id> </RESTHeader> <InputParameters><P_ID>5</P_ID><P_NAME>plsql</P_NAME><P_AGE>33</P_AGE><P_BIRTH_DATE>2020-02-01</P_BIRTH_DATE></InputParameters> </PROCESS_Input> '; l_resp_data VARCHAR2(32767); l_http_auth_encoded VARCHAR2(100); BEGIN l_request := utl_http.begin_request(l_url, 'POST', utl_http.http_version_1_1); utl_http.set_header(l_request, 'Content-Type', 'application/xml; charset=utf-8'); l_http_auth_encoded := utl_raw.cast_to_varchar2(utl_encode.base64_encode(r => utl_raw.cast_to_raw('SYSADMIN:sysadmin'))); utl_http.set_header(l_request, 'Authorization', 'Basic ' || l_http_auth_encoded); utl_http.set_header(l_request, 'Content-Length', to_char(lengthb(l_req_data))); utl_http.write_text(l_request, l_req_data); l_response := utl_http.get_response(l_request); utl_http.read_text(l_response, l_resp_data); dbms_output.put_line(l_resp_data); utl_http.end_response(l_response); END;
5.3.2 方式2:JSON
REQUEST:
DECLARE l_url VARCHAR2(100) := 'http://cheng.erptest.com:8000/webservices/rest/CuxWsTestSrv/process/'; l_request utl_http.req; l_response utl_http.resp; l_req_data VARCHAR2(32767) := '{ "PROCESS_Input": { "@xmlns": "http://xmlns.oracle.com/apps/cux/rest/CuxWsTestSrv/process/", "RESTHeader": { "@xmlns": "http://xmlns.oracle.com/apps/fnd/rest/header", "Responsibility": "", "RespApplication": "", "SecurityGroup": "", "NLSLanguage": "SIMPLIFIED CHINESE", "Org_Id": "0" }, "InputParameters": {"P_ID":"5","P_NAME":"json","P_AGE":"22","P_BIRTH_DATE":"2020-01-02" } } }'; l_resp_data VARCHAR2(32767); l_http_auth_encoded VARCHAR2(100); BEGIN l_request := utl_http.begin_request(l_url, 'POST', utl_http.http_version_1_1); utl_http.set_header(l_request, 'Content-Type', 'application/json; charset=utf-8'); l_http_auth_encoded := utl_raw.cast_to_varchar2(utl_encode.base64_encode(r => utl_raw.cast_to_raw('SYSADMIN:sysadmin'))); utl_http.set_header(l_request, 'Authorization', 'Basic ' || l_http_auth_encoded); utl_http.set_header(l_request, 'Content-Length', to_char(lengthb(l_req_data))); utl_http.write_text(l_request, l_req_data); l_response := utl_http.get_response(l_request); utl_http.read_text(l_response, l_resp_data); dbms_output.put_line(l_resp_data); utl_http.end_response(l_response); END;
5.4 分析webservice调用报错的方法
cd $EBS_DOMAIN_HOME/servers/oafm_server1/logs
tail -f oafm_server1.out
然后调用服务,看日志的内容。