PLSQL WEBSERVICES 发布
? ? 一. 在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> 上传到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, ????????????????????????????? ???????????????????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_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应用中,必须是系统中存在的应用简称? ? 注意:这里的输出参数(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一点总结,不好还请包含. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |