[首页]
[文章]
[教程]
首页
Web开发
Windows开发
编程语言
数据库技术
移动平台
系统服务
微信
设计
布布扣
其他
数据分析
首页
>
数据库技术
> 详细
ORACLE EBS WebService推送报文例子 XML格式
时间:
2020-11-02 11:50:16
阅读:
31
评论:
0
收藏:
0
[点我收藏+]
PROCEDURE call_web_service(x_return_status OUT NOCOPY VARCHAR2,
x_msg_count OUT NOCOPY NUMBER,
x_msg_data OUT NOCOPY VARCHAR2,
p_enent_rec IN cux_pub_push_iface_dtls%ROWTYPE,
x_request_xmltype OUT NOCOPY sys.xmltype,
x_response_xmltype OUT NOCOPY sys.xmltype) IS
l_api_name CONSTANT VARCHAR2(
30) :=
‘call_web_service‘;
l_savepoint_name CONSTANT VARCHAR2(
30) :=
‘SP01_call_ws‘;
l_soap_content CLOB :=
‘<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.common.qiku.kmss.landray.com/">
‘;
-- l_soap_content VARCHAR2(
32767);
l_soap_request CLOB;
l_http_req utl_http.req;
l_http_resp utl_http.resp;
l_soap_respond VARCHAR2(
32767);
l_resp_xml xmltype;
l_doc dbms_xmldom.domdocument;
l_docelem dbms_xmldom.domelement;
l_nodelist dbms_xmldom.domnodelist;
l_length NUMBER;
l_n dbms_xmldom.domnode;
l_case_num VARCHAR2(
30);
l_flag VARCHAR2(
30);
l_err_msg VARCHAR2(
3000);
l_webservice_url VARCHAR2(
3000);
CURSOR cs_info IS
SELECT pla.po_line_id, --行id
pha.org_id, --ou_id
hou.name, --ou名称
pv.vendor_name, --供应商名称--
pv.segment1 vendor_code, --供应商简码--
pha.agent_id, --采购员id
(SELECT ppf.employee_number
FROM per_people_f ppf
WHERE ppf.person_id = pha.agent_id
AND rownum =
1) agent_name, --采购员名称
pha.terms_id,
atv.name term_name, --付款条件--
pha.segment1 po_number, --po号--
pha.revision_num, --版本号--
pla.line_num, --行号--
pla.item_id, --物料id--
msib.segment1 item_code, --物料编码--
msib.description item_desc, --物料名称--
pla.quantity, --数量--
pla.unit_price no_tax_unit_price, --未含税单价--
NULL tax_unit_price, --含税单价--
nvl((SELECT MAX(a.tax_rate) /
100
FROM zx_lines a,
po_line_locations_all pll
WHERE a.application_id =
201
AND a.entity_code =
‘PURCHASE_ORDER‘
AND a.event_class_code =
‘PO_PA‘
AND a.trx_id = pll.po_header_id
AND a.trx_line_id = pll.line_location_id
AND pll.po_line_id = pla.po_line_id
AND a.tax_rate IS NOT
NULL
/* AND nvl(a.cancel_flag,
‘N‘) = ‘N‘ */
AND (nvl(pll.cancel_flag,
‘N‘) =
‘Y‘
OR nvl(a.cancel_flag,
‘N‘) =
‘N‘)
),
0) tax_rate, --税率--
pla.quantity * pla.unit_price no_tax_total_amount, --未含税总额--
NULL tax_total_amount, --含税总金额--
pha.currency_code, --币种--
nvl(pha.rate,
1) rate, --汇率--
to_char(pha.rate_date,
‘yyyy-mm-dd‘) rate_date, --汇率日期--
0 is_invoice, --是否已开票--
(SELECT nvl(ppf.FULL_NAME,fu.user_name)
FROM per_people_f ppf,
fnd_user fu
WHERE fu.employee_id = ppf.person_id(+)
AND fu.user_id = pha.created_by
AND rownum =
1) creator, --创建人--
to_char(SYSDATE,
‘yyyy-mm-dd‘) create_date, --创建时间--
decode(nvl(pla.cancel_flag,
‘N‘),
‘Y‘,
‘0‘,
decode(nvl(pha.cancel_flag,
‘N‘),
‘Y‘,
‘0‘,
decode(nvl(pha.authorization_status,
‘INCOMPLETE‘),
‘APPROVED‘,
‘1‘,
‘0‘))) syn_status, --状态--
pha.comments remark --备注--
FROM po_headers_all pha,
po_lines_all pla,
hr_operating_units hou,
po_vendors pv,
ap_terms_vl atv,
mtl_system_items_b msib,
financials_system_params_all fspa
WHERE pha.po_header_id = pla.po_header_id
AND pha.org_id = hou.organization_id
AND pha.vendor_id = pv.vendor_id
AND atv.term_id = pha.terms_id
AND fspa.org_id = pha.org_id
AND pla.item_id = msib.inventory_item_id
AND fspa.inventory_organization_id = msib.organization_id
AND pha.po_header_id = get_number_from_varchar2(p_enent_rec.key_value1);
--l_webservice_url VARCHAR2(
3000);
l_sec_content VARCHAR2(
20000);
l_param_content VARCHAR2(
20000);
l_warehouseid VARCHAR2(
2000);
l_returncode VARCHAR2(
2000);
l_returndesc VARCHAR2(
2000);
l_returnflag NUMBER;
l_resultinfo VARCHAR2(
2000);
l_put_flag VARCHAR2(
1) :=
‘N‘;
--
l_req_txt_tbl dbms_sql.varchar2_table;
l_lengthb NUMBER;
l_round_flag varchar2(
10);
BEGIN
-- start activity to create savepoint, check compatibility
--
and initialize message
list,
include debug message hint to enter api
x_return_status := hss_api.start_activity(p_pkg_name => g_pkg_name,
p_api_name => l_api_name,
p_savepoint_name => l_savepoint_name,
p_init_msg_list => fnd_api.g_false);
raise_exception(x_return_status);
-- API body
-- logging parameters
IF g_debug =
‘Y‘ THEN
NULL;
END
IF;
SELECT MAX(def.addition_info)
INTO l_webservice_url
FROM cux_00_imp_iface_system_def def
WHERE def.system_code = p_enent_rec.system_code;
-
-0.判断库存组织是否满足同步条件,不满足则退出执行
--自行补充逻辑
-
-1.根据iface_system_code获取web服务地址
--l_webservice_url:=;
-
-2.获取WMS参数
get_imis_sec_info(p_iface_system_code => p_enent_rec.system_code,
x_sec_content => l_sec_content);
/* cux_pub_iface_comm_api_utl.get_wms_sec_info(p_iface_system_code => p_enent_rec.system_code,
x_sec_content => l_sec_content,
x_param_content => l_param_content,
x_warehouseid => l_warehouseid);*/
-
-3.封装WMS安全性
l_soap_content := l_soap_content || l_sec_content;
l_soap_content := l_soap_content ||
‘ <soapenv:Body>
<ser:getOrderInfo> ‘;
select max(get_round_flag(pha.org_id)) into l_round_flag
from po_headers_all pha
where pha.po_header_id = get_number_from_varchar2(p_enent_rec.key_value1);
-
-4.按照业务需求获取单据信息并安装WS的要求封装报文
-- l_soap_content := l_soap_content || output_xml(
‘<poInfo>‘);
FOR rec_doc_info IN cs_info
LOOP
l_soap_content := l_soap_content ||
‘
<arg0>‘;
--业务实体--
l_soap_content := l_soap_content || output_xml(rec_doc_info.name,
‘businessEntity‘);
--创建时间--
l_soap_content := l_soap_content || output_xml(rec_doc_info.create_date,
‘createTime‘);
--币种--
l_soap_content := l_soap_content || output_xml(rec_doc_info.currency_code,
‘currency‘);
--创建人--
l_soap_content := l_soap_content || output_xml( rec_doc_info.creator ,
‘docCreator‘);
--汇率--
l_soap_content := l_soap_content || output_xml(rec_doc_info.rate,
‘exchangeRate‘);
--汇率日期--
l_soap_content := l_soap_content || output_xml(rec_doc_info.rate_date,
‘exchangeRateTime‘);
--行id--
l_soap_content := l_soap_content || output_xml(rec_doc_info.po_line_id,
‘fdId‘);
--是否开过票--
l_soap_content := l_soap_content || output_xml(rec_doc_info.is_invoice,
‘isGeneratePay‘);
--物料编码--
l_soap_content := l_soap_content || output_xml(rec_doc_info.item_code,
‘materialCode‘);
--物料名称--
l_soap_content := l_soap_content || output_xml(rec_doc_info.item_desc,
‘materialName‘);
--未含税单价--
l_soap_content := l_soap_content || output_xml(rec_doc_info.no_tax_unit_price,
‘noTaxPrice‘);
--数量--
l_soap_content := l_soap_content || output_xml(rec_doc_info.quantity,
‘orderCount‘);
--订单行号--
l_soap_content := l_soap_content || output_xml(rec_doc_info.line_num,
‘orderLine‘);
--订单行id--
l_soap_content := l_soap_content || output_xml(rec_doc_info.po_line_id,
‘orderLineid‘);
--订单号--
l_soap_content := l_soap_content || output_xml(rec_doc_info.po_number,
‘orderNumber‘);
--版本号--
l_soap_content := l_soap_content || output_xml(rec_doc_info.revision_num,
‘orderVersion‘);
--付款条件--
l_soap_content := l_soap_content || output_xml(rec_doc_info.term_name,
‘payConditions‘);
--采购员--
l_soap_content := l_soap_content || output_xml( rec_doc_info.agent_name ,
‘purchaser‘);
--备注--
l_soap_content := l_soap_content || output_xml(rec_doc_info.remark,
‘remark‘);
--供应商区域--
l_soap_content := l_soap_content || output_xml(
NULL,
‘supplierArea‘);
--供应商代码--
l_soap_content := l_soap_content || output_xml(rec_doc_info.vendor_code,
‘supplierCode‘);
--供应商名称--
l_soap_content := l_soap_content || output_xml(rec_doc_info.vendor_name,
‘supplierName‘);
--状态--
l_soap_content := l_soap_content || output_xml(rec_doc_info.syn_status,
‘synStatus‘);
--含税价格--
IF NVL(l_round_flag,
‘N‘)=
‘Y‘ THEN
l_soap_content := l_soap_content || output_xml(round(rec_doc_info.no_tax_unit_price * (
1 + nvl(rec_doc_info.tax_rate,
0)),
2),
‘taxPrice‘);
ELSE
l_soap_content := l_soap_content || output_xml(round(rec_doc_info.no_tax_unit_price * (
1 + nvl(rec_doc_info.tax_rate,
0)),
6),
‘taxPrice‘);
END
IF;
--税率--
l_soap_content := l_soap_content || output_xml(rec_doc_info.tax_rate,
‘taxRate‘);
--含税金额--
IF NVL(l_round_flag,
‘N‘)=
‘Y‘ THEN
l_soap_content := l_soap_content || output_xml(round(round(rec_doc_info.no_tax_unit_price * (
1 + nvl(rec_doc_info.tax_rate,
0)),
2) * rec_doc_info.quantity,
2),
‘taxTotalPrice‘);
ELSE
l_soap_content := l_soap_content || output_xml(round(round(rec_doc_info.no_tax_unit_price * (
1 + nvl(rec_doc_info.tax_rate,
0)),
6) * rec_doc_info.quantity,
2),
‘taxTotalPrice‘);
END
IF;
l_soap_content := l_soap_content ||
‘
</arg0>‘;
END LOOP;
/* l_soap_content := l_soap_content || output_xml(‘</poInfo>‘);
--5.封装WMS参数值
l_soap_content := l_soap_content || ‘
‘ || l_param_content;*/
-
-6.封装报文尾
l_soap_content := l_soap_content || output_xml(
‘ </ser:getOrderInfo>
</soapenv:Body>
</soapenv:Envelope>‘);
-- DBMS_OUTPUT.put_line(l_soap_content);
-
-7.发起服务请求
l_soap_request := l_soap_content;
x_request_xmltype := xmltype.createxml(l_soap_request);
/* IF l_put_flag = ‘N‘ THEN
GOTO end_call;
END IF;*/
--CLOB转varchar2数组
l_req_txt_tbl.delete;
l_lengthb :=
0;
cux_pub_common_utl.get_clob2varchartbl(p_clob => l_soap_request,
x_varchartbl => l_req_txt_tbl,
x_lengthb => l_lengthb);
l_http_req := utl_http.begin_request(l_webservice_url,
‘POST‘,
sys.utl_http.http_version_1_1);
utl_http.set_header(l_http_req,
‘Content-Type‘,
‘text/xml;charset=utf-8‘);
utl_http.set_header(l_http_req,
‘Content-Length‘,
l_lengthb);
utl_http.set_header(l_http_req,
‘SOAPAction‘,
‘‘);
/* utl_http.write_text(l_http_req,
l_soap_request);*/
--字符数组循环写入报文
IF l_req_txt_tbl.count >
0 THEN
FOR i IN l_req_txt_tbl.first .. l_req_txt_tbl.last
LOOP
utl_http.write_text(l_http_req,
l_req_txt_tbl(i));
END LOOP;
END
IF;
--End
20160509
-
-8.获取响应结果
l_http_resp := utl_http.get_response(l_http_req);
utl_http.read_text(l_http_resp,
l_soap_respond);
utl_http.end_response(l_http_resp);
-- utl_http.end_request(l_http_req);
l_resp_xml := xmltype.createxml(l_soap_respond);
x_response_xmltype := l_resp_xml;
/*l_doc := dbms_xmldom.newdomdocument(l_resp_xml);
l_docelem := dbms_xmldom.getdocumentelement(l_doc);
--9.解析响应报文
\* l_nodelist := dbms_xmldom.getelementsbytagname(l_docelem,
‘return‘);
l_length := dbms_xmldom.getlength(l_nodelist);*\
l_nodelist := dbms_xmldom.getelementsbytagname(l_docelem,
‘return‘);
l_length := dbms_xmldom.getlength(l_nodelist);
FOR i IN 0 .. (l_length - 1)
LOOP
l_n := dbms_xmldom.item(l_nodelist,i);
DBMS_OUTPUT.put_line(l_n.ID);
dbms_xslprocessor.valueof(l_n,
‘text()‘,
l_resultinfo);
\* dbms_xslprocessor.valueof(l_n,
‘returnCode/text()‘,
l_returncode);
dbms_xslprocessor.valueof(l_n,
‘returnDesc/text()‘,
l_returndesc);
dbms_xslprocessor.valueof(l_n,
‘returnFlag/text()‘,
l_returnflag);*\
END LOOP;
*/
BEGIN
SELECT xmltype(l_soap_respond).extract(
‘//return/child::text()‘).getstringval()
INTO l_resultinfo
FROM dual;
EXCEPTION
WHEN OTHERS THEN
l_resultinfo :=
NULL;
END;
-
-10.调用出错,报错抛出异常退出
IF nvl(l_resultinfo,
‘0‘) <>
‘success‘ THEN
hss_api.set_message(p_app_name =>
‘CUX‘,
p_msg_name =>
‘CUX_WIP_CALL_PATS_WS_FAIL‘,
p_token1 =>
‘ERROR‘,
p_token1_value => l_returncode ||
‘-‘ || l_returndesc ||
‘-‘ || l_resultinfo);
x_return_status := fnd_api.g_ret_sts_error;
raise_exception(x_return_status);
ELSE
update_po_hearder(get_number_from_varchar2(p_enent_rec.key_value1));
END
IF;
-
-11.调用成功则更新PO订单的attribute15为Y
--逻辑自行补充,注意同时更新last字段
-- <<end_call>>
-- API end body
-- end activity,
include debug message hint to
exit api
x_return_status := hss_api.end_activity(p_pkg_name => g_pkg_name,
p_api_name => l_api_name,
p_commit => fnd_api.g_false,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data);
EXCEPTION
WHEN fnd_api.g_exc_error THEN
BEGIN
utl_http.end_response(l_http_resp);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
x_return_status := hss_api.handle_exceptions(p_pkg_name => g_pkg_name,
p_api_name => l_api_name,
p_savepoint_name => l_savepoint_name,
p_exc_name => hss_api.g_exc_name_error,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data);
WHEN fnd_api.g_exc_unexpected_error THEN
BEGIN
utl_http.end_response(l_http_resp);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
x_return_status := hss_api.handle_exceptions(p_pkg_name => g_pkg_name,
p_api_name => l_api_name,
p_savepoint_name => l_savepoint_name,
p_exc_name => hss_api.g_exc_name_unexp,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data);
WHEN OTHERS THEN
BEGIN
utl_http.end_response(l_http_resp);
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
x_return_status := hss_api.handle_exceptions(p_pkg_name => g_pkg_name,
p_api_name => l_api_name,
p_savepoint_name => l_savepoint_name,
p_exc_name => hss_api.g_exc_name_others,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data);
ORACLE EBS WebService推送报文例子 XML格式
原文:https://www.cnblogs.com/shuihaya/p/13913017.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年09月23日 (328)
2021年09月24日 (313)
2021年09月17日 (191)
2021年09月15日 (369)
2021年09月16日 (411)
2021年09月13日 (439)
2021年09月11日 (398)
2021年09月12日 (393)
2021年09月10日 (160)
2021年09月08日 (222)
最新文章
更多>
2021/09/28 scripts
2022-05-27
vue自定义全局指令v-emoji限制input输入表情和特殊字符
2022-05-27
9.26学习总结
2022-05-27
vim操作
2022-05-27
深入理解计算机基础 第三章
2022-05-27
C++ string 作为形参与引用传递(转)
2022-05-27
python 加解密
2022-05-27
JavaScript-对象数组里根据id获取name,对象可能有children属性
2022-05-27
SQL语句——保持现有内容在后面增加内容
2022-05-27
virsh命令文档
2022-05-27
教程昨日排行
更多>
1.
list.reverse()
2.
Django Admin 管理工具
3.
AppML 案例模型
4.
HTML 标签列表(功能排序)
5.
HTML 颜色名
6.
HTML 语言代码
7.
jQuery 事件
8.
jEasyUI 创建分割按钮
9.
jEasyUI 创建复杂布局
10.
jEasyUI 创建简单窗口
友情链接
汇智网
PHP教程
插件网
关于我们
-
联系我们
-
留言反馈
- 联系我们:wmxa8@hotmail.com
© 2014
bubuko.com
版权所有
打开技术之扣,分享程序人生!