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的销售订单的更多相关文章

  1. 工作小结:xml文件导入到oracle

    上周遇到xml文件导入到oracle数据库中,发现正常的xml转成excle格式导入,只针对于1m以下的xml文件.当xml文件太大的时候,就没有作用了. 这时候,我找到了两种办法,一个是java,一 ...

  2. R语言XML格式数据导入与处理

    数据解析 XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用的工具.它与Access,Oracle和SQL Server等数据库不同,数据库提供了更强 ...

  3. FusionCharts-堆栈图、xml格式、刷新数据、添加事件link、传参

    *起因* 本来想用Chart.js来搞图表的, 但是来了个新需求,想搞的华丽点,毕竟对Chart.js来说,实现有点难度, *做出的改变* 最终选择了FusionCharts, *难点* 网上关于Fu ...

  4. Servlet 实现上传文件以及同时,写入xml格式文件和上传

    package com.isoftstone.eply.servlet; import java.io.BufferedReader; import java.io.BufferedWriter; i ...

  5. tool - 支持TestLink 1.93,将excel格式用例转化成可以导入的xml格式

     tool - 支持TestLink 1.93,将excel格式用例转化成可以导入的xml格式  https://github.com/zhangzheyuk/CaseConvert

  6. .net数据库连接防注入参数查询 命令执行 读取 备份 导出导入转化XML格式

    ADO.NET是一组类库,让我们通过程序的方式访问数据库.SYSTEM.DATA这个类提供了统一的接口访问Oracle MSSQL Access.像SYSTEM.IO类操作文件一样. **connec ...

  7. oracle 10g 用dbms_xmlgen将数据表转成xml格式

    oracle 10g 用dbms_xmlgen将数据表转成xml格式 oracle 10g 用dbms_xmlgen将数据表转成xml格式 oracle用plsql将sql查询的所有数据导出为xml

  8. Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值

    参照: Oracle存储过程中使用游标来批量解析CLOB字段里面的xml字符串 背景:在写存储过程时,需要获取表单提交的信息.表单信息是以xml格式的字符串存储在colb类型的字段dataxml中,如 ...

  9. 数据导入导出Oracle数据库

    临近春节,接到了一个导入数据的任务,在Linux客户端中的数据有50G,大约3亿3千万行: 刚开始很天真,把原始的txt/csv文件用sh脚本转化成了oralce 的insert into 语句,然后 ...

随机推荐

  1. HIT2019视听觉信号处理视觉实验一

    写在前面 HIT大三上学期视听觉信号处理课程中视觉部分的实验一,经过和学长们实验的对比发现每一级实验要求都不一样,因此这里标明了是2019年秋季学期的视觉实验一. 由于时间紧张,代码没有进行任何优化, ...

  2. 关于TC297的Flash写入之前是否需要先擦除的问题

    通过实际测试,对TC297 Flash的一个地址空间可以重复执行写入操作(program),而不需要先对该区域所在扇区进行擦除. MPC5675K则需要在写入之前进行擦除.

  3. 灵魂拷问:Java 的 substring() 是如何工作的?

    在逛 programcreek 的时候,我发现了一些小而精悍的主题.比如说:Java 的 substring() 方法是如何工作的?像这类灵魂拷问的主题,非常值得深入地研究一下. 另外,我想要告诉大家 ...

  4. git 使用详解 (1)——历史

    版本控制系统(VCS) 有了它你就可以将某个文件回溯到之前的状态,甚至将整个项目都回退到过去某个时间点的状态.你可以比较文件的变化细节,查出最后是谁修改了哪个地方,从而导致出现怪异问题,又是谁在何时报 ...

  5. jQuery中的层级选择器

    话不多说,请看效果: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...

  6. Balls in the Boxes

    Description Mr. Mindless has many balls and many boxes,he wants to put all the balls into some of th ...

  7. 28. 实现strStr() (双指针)

    实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...

  8. 【Redis】270- 你需要知道的那些 redis 数据结构

    本文出自「掘金社区」,欢迎戳「阅读原文」链接和作者进行技术交流 ?? 作者简介 世宇,一个喜欢吉他.MDD 摄影.自走棋的工程师,属于饿了么上海物流研发部.目前负责的是网格商圈.代理商基础产线,平时喜 ...

  9. 利用 Redis 来优化功能部署和错误分类

    来源:Redislabs 作者:Shabih Syed 翻译:Kevin (公众号:中间件小哥) 为了让系统运行更流畅,又避免 Knights Capital 在 2012 年犯下的 4.6 亿美元的 ...

  10. 【GTK编程】安装与测试

    版权声明:本文为博主原创文章,转载请注明出处. https://www.cnblogs.com/YaoYing/ 前言 领导让做个类似平板触摸的GUI程序,通过触摸两块区域,实现背景图片的左右切换.本 ...