通过传XML格式导入到ORACLE的销售订单
procedure IMPORT_OM(p_unid varchar2, --流程ID
p_CUSTOMER_PO varchar2, --合同编号
p_xmlstr varchar2, --clob,XML格式
v_out_message out varchar2,
v_err_code out number) is
v_xml xmltype;
x number := 0;
L_IFACE_REC ONT.OE_HEADERS_IFACE_ALL%ROWTYPE;
L_IFACE_LINES_REC ONT.OE_LINES_IFACE_ALL%ROWTYPE;
V_LINE_NUMBER NUMBER := 1;
V_PRIMARY_UOM_CODE VARCHAR2(10);
V_ORDER_CATEGORY_CODE VARCHAR2(30);
L_SYSTIMESTAMP VARCHAR2(50);
o_err_message varchar2(20000);
v_phase varchar2(30);
v_dev_phase varchar2(30);
v_dev_status varchar2(30);
v_status varchar2(30);
v_request_flag boolean;
v_req_id number;
v_message varchar2(20000);
v_new_order_number varchar2(30);
-- CUX_EIP_TO_ORACLE_ORDER
cursor c_parse(p_xml xmltype) is
select trim(extractValue(value(a), 'BOM/CUSTOMER_NAME')) CUSTOMER_NAME, --客户名称
trim(extractValue(value(a), 'BOM/ORDERED_ITEM')) ORDERED_ITEM, --料号
to_number(trim(extractValue(value(a), 'BOM/ORDERED_QUANTITY'))) ORDERED_QUANTITY, --订购数量
trim(extractValue(value(a), 'BOM/ORDER_QUANTITY_UOM')) ORDER_QUANTITY_UOM, --单位
to_number(trim(extractValue(value(a), 'BOM/UNIT_SELLING_PRICE'))) UNIT_SELLING_PRICE --分摊价格
from table(xmlsequence(extract(p_xml, 'Root/BOM'))) a;
begin
--delete from CUX_EIP_TO_ORACLE_ORDER xt where xt.unid = p_unid;
SELECT TO_CHAR(SYSTIMESTAMP, 'YYYYMMDDHH24MISSFF')
INTO L_SYSTIMESTAMP
FROM DUAL;
if p_xmlstr is null then
v_err_code := 1;
v_out_message := '1.导入的记录不能为空!';
--raise_application_error(-20104, err_Message);
return;
raise_application_error(-20104, v_out_message || sqlerrm);
end if;
begin
select sys.xmltype(p_xmlstr) into v_xml from dual;
exception
when others then
v_err_code := 2;
v_out_message := '2.导入的记录不能为空!' || sqlerrm;
return;
raise_application_error(-20104, v_out_message || sqlerrm);
end;
for l_cur in c_parse(v_xml) loop
--验证客户名称
BEGIN
SELECT CUST_ACCOUNT_ID,
SUM(DECODE(SITE_USE_CODE, 'BILL_TO', SITE_USE_ID)),
SUM(DECODE(SITE_USE_CODE, 'SHIP_TO', SITE_USE_ID))
INTO L_IFACE_REC.SOLD_TO_ORG_ID,
L_IFACE_REC.INVOICE_TO_ORG_ID,
L_IFACE_REC.SHIP_TO_ORG_ID
FROM (SELECT HCA.CUST_ACCOUNT_ID,
HCSU.SITE_USE_CODE,
HCSU.SITE_USE_ID
FROM HZ_PARTIES HP,
HZ_CUST_ACCOUNTS HCA,
HZ_PARTY_SITES HPS,
HZ_CUST_ACCT_SITES_ALL HCAS,
HZ_CUST_SITE_USES_ALL HCSU
WHERE HP.PARTY_ID = HCA.PARTY_ID
AND HP.PARTY_ID = HPS.PARTY_ID
AND HCA.CUST_ACCOUNT_ID = HCAS.CUST_ACCOUNT_ID
AND HPS.PARTY_SITE_ID = HCAS.PARTY_SITE_ID
AND HP.PARTY_NAME = l_cur.CUSTOMER_NAME
AND HCAS.ORG_ID = 239 --焊机 L_IFACE_REC.ORG_ID
AND HCAS.CUST_ACCT_SITE_ID = HCSU.CUST_ACCT_SITE_ID)
GROUP BY CUST_ACCOUNT_ID;
IF L_IFACE_REC.INVOICE_TO_ORG_ID IS NULL THEN
v_err_code := 4;
v_out_message := '-客户【' || l_cur.CUSTOMER_NAME ||
'】收单方不存在,请维护好后重新导入-';
return;
raise_application_error(-20104, v_out_message || sqlerrm);
END IF;
IF L_IFACE_REC.SHIP_TO_ORG_ID IS NULL THEN
v_err_code := 5;
v_out_message := '-客户【' || l_cur.CUSTOMER_NAME ||
'】收货方不存在,请维护好后重新导入-';
return;
raise_application_error(-20104, v_out_message || sqlerrm);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_err_code := 6;
v_out_message := '-客户名称【' || l_cur.CUSTOMER_NAME || '】不存在-';
return;
raise_application_error(-20104, v_out_message || sqlerrm);
END;
--验证业务实体
SELECT ORG.ORGANIZATION_ID
INTO L_IFACE_REC.SHIP_FROM_ORG_ID
FROM ORG_ORGANIZATION_DEFINITIONS ORG
WHERE NVL(ORG.INVENTORY_ENABLED_FLAG, 'Y') = 'Y'
AND ORG.ORGANIZATION_CODE = 'H71'
AND ORG.OPERATING_UNIT = 239; --焊机
SELECT HAO.ORGANIZATION_ID
INTO L_IFACE_REC.ORG_ID
FROM HR_ALL_ORGANIZATION_UNITS HAO
WHERE HAO.NAME = '深圳麦格米特焊机_OU'
AND HAO.TYPE = 'OPERATION UNIT'
AND ROWNUM = 1;
--验证料号
BEGIN
SELECT MSI.INVENTORY_ITEM_ID, MSI.PRIMARY_UOM_CODE
INTO L_IFACE_LINES_REC.INVENTORY_ITEM_ID, V_PRIMARY_UOM_CODE
FROM MTL_SYSTEM_ITEMS_B MSI, MTL_CUSTOMER_ITEM_XREFS_V MCI
WHERE (MSI.SEGMENT1 = l_cur.ORDERED_ITEM OR
MCI.CUSTOMER_ITEM_NUMBER = l_cur.ORDERED_ITEM)
AND MSI.INVENTORY_ITEM_ID = MCI.INVENTORY_ITEM_ID(+)
AND MSI.ORGANIZATION_ID = MCI.MASTER_ORGANIZATION_ID(+)
AND MCI.CUSTOMER_ID(+) = L_IFACE_REC.SOLD_TO_ORG_ID
AND MCI.INACTIVE_FLAG(+) = 'N'
AND MSI.ENABLED_FLAG = 'Y'
AND MSI.ORGANIZATION_ID = L_IFACE_REC.SHIP_FROM_ORG_ID;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_err_code := 7;
v_out_message := '-订购项目【' || l_cur.ORDERED_ITEM || '】不存在或已失效-';
return;
raise_application_error(-20104, v_out_message || sqlerrm);
END;
--验证订购数量
IF l_cur.ORDERED_QUANTITY <= 0 THEN
v_err_code := 8;
v_out_message := '-订购数量【' || l_cur.ORDERED_QUANTITY || '】必须大于或等于0-';
return;
raise_application_error(-20104, v_out_message || sqlerrm);
ELSE
L_IFACE_LINES_REC.ORDERED_QUANTITY := l_cur.ORDERED_QUANTITY;
END IF;
--验证单位
IF l_cur.ORDER_QUANTITY_UOM IS NOT NULL THEN
BEGIN
SELECT T.UOM_CODE
INTO L_IFACE_LINES_REC.ORDER_QUANTITY_UOM
FROM INV.MTL_UNITS_OF_MEASURE_TL T
WHERE T.UOM_CODE = l_cur.ORDER_QUANTITY_UOM
AND T.LANGUAGE = 'ZHS';
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_err_code := 9;
v_out_message := '-单位【' || l_cur.ORDER_QUANTITY_UOM || '】不存在';
return;
raise_application_error(-20104, v_out_message || sqlerrm);
END;
ELSE
L_IFACE_LINES_REC.ORDER_QUANTITY_UOM := V_PRIMARY_UOM_CODE;
END IF;
--验证单价
IF l_cur.UNIT_SELLING_PRICE < 0 THEN
v_err_code := 10;
v_out_message := '-单价【' || l_cur.UNIT_SELLING_PRICE || '】必须大于或等于0-';
return;
raise_application_error(-20104, v_out_message || sqlerrm);
ELSE
L_IFACE_LINES_REC.UNIT_SELLING_PRICE := l_cur.UNIT_SELLING_PRICE;
END IF;
L_IFACE_LINES_REC.TAX_CODE := '13%(含)'; --税分类代码
--插入订单行
L_IFACE_LINES_REC.LAST_UPDATE_DATE := SYSDATE;
L_IFACE_LINES_REC.LAST_UPDATED_BY := 4467; --FND_GLOBAL.USER_ID;
L_IFACE_LINES_REC.CREATION_DATE := SYSDATE;
L_IFACE_LINES_REC.CREATED_BY := 4467; --FND_GLOBAL.USER_ID;
L_IFACE_LINES_REC.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
L_IFACE_LINES_REC.ORG_ID := 239; -- L_IFACE_REC.ORG_ID;
L_IFACE_LINES_REC.ORDER_SOURCE_ID := 0; --L_IFACE_REC.ORDER_SOURCE_ID;
L_IFACE_LINES_REC.ORIG_SYS_DOCUMENT_REF := L_SYSTIMESTAMP;
L_IFACE_LINES_REC.ORIG_SYS_LINE_REF := L_SYSTIMESTAMP ||
V_LINE_NUMBER;
L_IFACE_LINES_REC.OPERATION_CODE := 'INSERT';
L_IFACE_LINES_REC.LINE_NUMBER := V_LINE_NUMBER;
L_IFACE_LINES_REC.SHIPMENT_NUMBER := 1;
L_IFACE_LINES_REC.SOURCE_TYPE_CODE := 'INTERNAL';
L_IFACE_LINES_REC.PRICING_QUANTITY := l_cur.ORDERED_QUANTITY;
L_IFACE_LINES_REC.PRICING_QUANTITY_UOM := l_cur.ORDER_QUANTITY_UOM;
L_IFACE_LINES_REC.UNIT_LIST_PRICE := 0;
L_IFACE_LINES_REC.CALCULATE_PRICE_FLAG := 'N';
L_IFACE_LINES_REC.SCHEDULE_SHIP_DATE := SYSDATE;
INSERT INTO OE_LINES_IFACE_ALL VALUES L_IFACE_LINES_REC;
V_LINE_NUMBER := V_LINE_NUMBER + 1;
end loop;
SELECT ORG.ORGANIZATION_ID
INTO L_IFACE_REC.SHIP_FROM_ORG_ID
FROM ORG_ORGANIZATION_DEFINITIONS ORG
WHERE NVL(ORG.INVENTORY_ENABLED_FLAG, 'Y') = 'Y'
AND ORG.ORGANIZATION_CODE = 'H71'
AND ORG.OPERATING_UNIT = 239; --焊机
SELECT HAO.ORGANIZATION_ID
INTO L_IFACE_REC.ORG_ID
FROM HR_ALL_ORGANIZATION_UNITS HAO
WHERE HAO.NAME = '深圳麦格米特焊机_OU'
AND HAO.TYPE = 'OPERATION UNIT'
AND ROWNUM = 1;
--价目表
SELECT QSL.LIST_HEADER_ID, QSL.CURRENCY_CODE
INTO L_IFACE_REC.PRICE_LIST_ID, L_IFACE_REC.TRANSACTIONAL_CURR_CODE
FROM QP_SECU_LIST_HEADERS_V QSL
WHERE QSL.NAME = 'CNY_Megmeet Price List';
--订单类型
SELECT OTT.TRANSACTION_TYPE_ID,
OTTA.DEFAULT_OUTBOUND_LINE_TYPE_ID,
OTTA.ORDER_CATEGORY_CODE
INTO L_IFACE_REC.ORDER_TYPE_ID,
L_IFACE_LINES_REC.LINE_TYPE_ID,
V_ORDER_CATEGORY_CODE
FROM OE_TRANSACTION_TYPES_TL OTT, OE_TRANSACTION_TYPES_ALL OTTA
WHERE OTT.NAME = '7011_内销-出货订单'
AND OTT.TRANSACTION_TYPE_ID = OTTA.TRANSACTION_TYPE_ID
AND OTTA.ORG_ID = 239
AND LANGUAGE = 'ZHS'
AND ROWNUM = 1;
--业务员
SELECT SR.SALESREP_ID
INTO L_IFACE_REC.SALESREP_ID
FROM JTF_RS_SALESREPS SR, JTF_RS_RESOURCE_EXTNS_VL RES
WHERE SR.RESOURCE_ID = RES.RESOURCE_ID
AND SYSDATE BETWEEN SR.START_DATE_ACTIVE AND
NVL(SR.END_DATE_ACTIVE, SYSDATE)
AND RES.RESOURCE_NAME = '刘杰,'
AND SR.ORG_ID = 239;
--付款条件
SELECT TERM.TERM_ID
INTO L_IFACE_REC.PAYMENT_TERM_ID
FROM RA_TERMS TERM
WHERE SYSDATE BETWEEN TERM.START_DATE_ACTIVE AND
NVL(TERM.END_DATE_ACTIVE, SYSDATE)
AND TERM.NAME = '月结90天';
--CNY_Megmeet Price List
L_IFACE_REC.LAST_UPDATE_DATE := SYSDATE;
L_IFACE_REC.LAST_UPDATED_BY := 4467; --FND_GLOBAL.USER_ID;
L_IFACE_REC.CREATION_DATE := SYSDATE;
L_IFACE_REC.CREATED_BY := 4467; --FND_GLOBAL.USER_ID;
L_IFACE_REC.LAST_UPDATE_LOGIN := FND_GLOBAL.LOGIN_ID;
L_IFACE_REC.ORDER_SOURCE_ID := 0; --ONLINE, SEE ONT.OE_ORDER_SOURCES
L_IFACE_REC.ORIG_SYS_DOCUMENT_REF := L_SYSTIMESTAMP;
L_IFACE_REC.OPERATION_CODE := 'INSERT';
L_IFACE_REC.READY_FLAG := 'Y';
L_IFACE_REC.ORDERED_DATE := SYSDATE;
L_IFACE_REC.TAX_EXEMPT_FLAG := 'S';
L_IFACE_REC.BOOKED_FLAG := 'N';
L_IFACE_REC.CLOSED_FLAG := 'N';
L_IFACE_REC.SOLD_FROM_ORG_ID := L_IFACE_REC.ORG_ID;
L_IFACE_REC.ATTRIBUTE15 := p_CUSTOMER_PO; --l_cur.CUSTOMER_PO;合同编号
INSERT INTO OE_HEADERS_IFACE_ALL VALUES L_IFACE_REC;
commit; /*
v_err_code := 9;
v_out_message := '导入成功';*/
begin
fnd_global.apps_initialize(4467, --fnd_global.user_id,
52268, --职责id-通过诊断$PROFILES$的resp_id
20003 --通过诊断$PROFILES$的RESP_APPL_ID
);
fnd_request.set_org_id(239);
v_req_id := fnd_request.submit_request('ONT',
'OEOIMP',
'',
sysdate,
false,
l_iface_rec.org_id,
0,
l_iface_rec.orig_sys_document_ref,
'',
'N',
1,
4,
l_iface_rec.sold_to_org_id,
'',
'',
'Y',
'Y',
'Y',
l_iface_rec.org_id,
'Y');
commit;
v_request_flag := fnd_concurrent.wait_for_request(request_id => v_req_id, --返回的请求ID
INTERVAL => 5, --重复检测时间差
max_wait => 0, --最长等待时间,0为一直等待
phase => v_phase,
status => v_status,
dev_phase => v_dev_phase,
dev_status => v_dev_status,
message => v_message);
if v_request_flag then
if v_dev_status = 'NORMAL' then
begin
select ooh.order_number
into v_new_order_number
from oe_order_headers_all ooh
where ooh.ORIG_SYS_DOCUMENT_REF =
l_iface_rec.orig_sys_document_ref;
v_out_message := '订单生成成功,新订单编号为:' || v_new_order_number;
return;
exception
when no_data_found then
v_out_message := '请求运行成功,订单未成功创建,请求ID=' || v_req_id ||
sqlerrm;
return;
raise_application_error(-20104, v_out_message || sqlerrm);
end;
else
v_out_message := '请求运行失败,请求ID=' || v_req_id || sqlerrm;
return;
raise_application_error(-20104, v_out_message || sqlerrm);
end if;
end if;
exception
WHEN OTHERS THEN
v_out_message := '订单复制失败,请联系系统管理员处理,错误信息:' || o_err_message;
return;
end;
end;
end PKG_OM_IMPORT_FROM_EIP;
通过传XML格式导入到ORACLE的销售订单的更多相关文章
- 工作小结:xml文件导入到oracle
上周遇到xml文件导入到oracle数据库中,发现正常的xml转成excle格式导入,只针对于1m以下的xml文件.当xml文件太大的时候,就没有作用了. 这时候,我找到了两种办法,一个是java,一 ...
- R语言XML格式数据导入与处理
数据解析 XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用的工具.它与Access,Oracle和SQL Server等数据库不同,数据库提供了更强 ...
- FusionCharts-堆栈图、xml格式、刷新数据、添加事件link、传参
*起因* 本来想用Chart.js来搞图表的, 但是来了个新需求,想搞的华丽点,毕竟对Chart.js来说,实现有点难度, *做出的改变* 最终选择了FusionCharts, *难点* 网上关于Fu ...
- Servlet 实现上传文件以及同时,写入xml格式文件和上传
package com.isoftstone.eply.servlet; import java.io.BufferedReader; import java.io.BufferedWriter; i ...
- tool - 支持TestLink 1.93,将excel格式用例转化成可以导入的xml格式
tool - 支持TestLink 1.93,将excel格式用例转化成可以导入的xml格式 https://github.com/zhangzheyuk/CaseConvert
- .net数据库连接防注入参数查询 命令执行 读取 备份 导出导入转化XML格式
ADO.NET是一组类库,让我们通过程序的方式访问数据库.SYSTEM.DATA这个类提供了统一的接口访问Oracle MSSQL Access.像SYSTEM.IO类操作文件一样. **connec ...
- oracle 10g 用dbms_xmlgen将数据表转成xml格式
oracle 10g 用dbms_xmlgen将数据表转成xml格式 oracle 10g 用dbms_xmlgen将数据表转成xml格式 oracle用plsql将sql查询的所有数据导出为xml
- Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值
参照: Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串 背景:在写存储过程时,需要获取表单提交的信息.表单信息是以xml格式的字符串存储在colb类型的字段dataxml中,如 ...
- 数据导入导出Oracle数据库
临近春节,接到了一个导入数据的任务,在Linux客户端中的数据有50G,大约3亿3千万行: 刚开始很天真,把原始的txt/csv文件用sh脚本转化成了oralce 的insert into 语句,然后 ...
随机推荐
- where 和having 的区别
where : 约束声明,在查询结果返回之前对数据库中的查询条件进行约束 其后不能写聚合函数 having 过滤声明,在查询结果返回之后进行过滤,
- iOS开发之UIWebView
转自:http://www.cnblogs.com/zhuqil/archive/2011/07/28/2119923.html UIWebView是iOS sdk中一个最常用的控件.是内置的浏览器控 ...
- openstack网络(三)
openstack网络架构 Neutron中的基本网络元素 插件扩展功能 ML2Modular Layer 2 plugin Neutron架构图 参考资料 openstack网络架构 Neutron ...
- linux终端界面的字颜色设置
目录 目录 说明 PS1 颜色语法 保存设置 说明 在网上找了好多资料都不是很详细,要不就是语法有错误. 所以弄了好久才整明白了,写下来方便后面的人学习. 本人linux虚拟机版本为CentOs 6. ...
- Java修炼——递归算法的俩个实例
1.是输出指定文件目录下的所以子目录以及文件 2.使用递归算算法:1!+2!+3!+4!+5!+-+n!(计算阶乘累加) package com.bjsxt.recurison; import jav ...
- Vue - 组件通信之$attrs、$listeners
前言 vue通信手段有很多种,props/emit.vuex.event bus.provide/inject 等.还有一种通信方式,那就是 $attrs 和 $listeners,之前早就听说这两个 ...
- jqurey(尺寸,css操作,效果,遍历)
尺寸: height():设置或返回元素的高度(不包括内边距.边框或外边距). width():设置或返回元素的宽度(不包括内边距.边框或外边距). 例如: $("#box").h ...
- rails 创建项目、创建controller、model等
rails2之前创建新项目: rails3以及更高版本创建新项目:rails new webname 创建数据表model:rails g model user name:string sex:str ...
- 【JPA】映射
[JPA]映射 转载:https://www.cnblogs.com/yangchongxing/p/10120447.html 1.@Entity注解指定实体类 2.@Id注解指定实体主键 3.@T ...
- Winform 中DataGridView、dev Gridview控件添加行标题
有很多种方法. 1.可以在DataGridView控件中的RowStateChanged事件改变行标题单元格的值(Row.HeaderCell.Value) /// <summary> / ...