一、API字段列表(含义,是否必须,何种情况下必须)。
参数名称 |
参数类型 |
数据类型 |
是否必输 |
默认值 |
描述 |
p_bo_identifier |
IN |
VARCHAR2 |
N |
BOM |
Bo标识 |
p_api_version_number |
IN |
NUMBER |
N |
1.0 |
api版本号 |
p_init_msg_list |
IN |
BOOLEAN |
N |
FALSE |
是否初始化消息队列 |
p_bom_header_rec |
IN |
Bom_Bo_Pub.Bom_Head_Rec_Type |
N |
Bom头记录表 |
|
p_bom_revision_tbl |
IN |
Bom_Bo_Pub.Bom_Revision_Tbl_Type |
N |
Bom版本记录表 |
|
p_bom_component_tbl |
IN |
Bom_Bo_Pub.Bom_Comps_Tbl_Type |
Y |
Bom组件记录表 |
|
p_bom_ref_designator_tbl |
IN |
Bom_Bo_Pub.Bom_Ref_Designator_Tbl_Type |
Y |
Bom替代项记录表 |
|
p_bom_sub_component_tbl |
IN |
Bom_Bo_Pub.Bom_Sub_Component_Tbl_Type |
Y |
Bom子组件记录表 |
|
p_bom_comp_ops_tbl |
IN |
Bom_Bo_Pub.Bom_Comp_Ops_Tbl_Type |
Y |
Bom组件选项记录表 |
|
x_bom_header_rec |
OUT |
Bom_Bo_Pub.bom_Head_Rec_Type |
Y |
Bom头记录表 |
|
x_bom_revision_tbl |
OUT |
Bom_Bo_Pub.Bom_Revision_Tbl_Type |
Y |
Bom版本记录表 |
|
x_bom_component_tbl |
OUT |
Bom_Bo_pub.Bom_Comps_Tbl_Type |
Y |
Bom组件记录表 |
|
x_bom_ref_designator_tbl |
OUT |
Bom_Bo_Pub.Bom_Ref_Designator_Tbl_Type |
Y |
Bom替代项记录表 |
|
x_bom_sub_component_tbl |
OUT |
Bom_Bo_Pub.Bom_Sub_Component_Tbl_Type |
Y |
Bom子组件记录表 |
|
x_bom_comp_ops_tbl |
OUT |
Bom_Bo_Pub.Bom_Comp_Ops_Tbl_Type |
Y |
Bom组件选项记录表 |
|
x_return_status |
OUT |
VARCHAR2 |
N |
返回状态 |
|
x_msg_count |
OUT |
NUMBER |
N |
错误数量 |
|
p_debug |
IN |
VARCHAR2 |
N |
N |
是否打开debug |
p_output_dir |
IN |
VARCHAR2 |
N |
输出路径 |
|
p_debug_filename |
IN |
VARCHAR2 |
N |
BOM_BO_debug.log |
debug名字 |
p_write_err_to_inttable |
IN |
VARCHAR2 |
N |
N |
|
p_write_err_to_conclog |
IN |
VARCHAR2 |
N |
N |
是否将错误写入并发日志 |
p_write_err_to_debugfile |
IN |
VARCHAR2 |
N |
N |
是否将错误写入debug文件 |
bom_bo_pub.bom_head_rec_type
Parameter Name |
Data Type |
Reqd |
INSERT |
UPDATE |
Value |
Validation, Comments |
assembly_item_name |
VARCHAR2(240) |
Y |
Y |
N |
|
物料 |
organization_code |
VARCHAR2(3) |
Y |
Y |
N |
|
库存组织 |
alternate_bom_code |
VARCHAR2(10) |
N |
N |
N |
|
替代项 |
common_assembly_item_name |
VARCHAR2(240) |
N |
Y |
N |
|
|
common_organization_code |
VARCHAR2(3) |
N |
Y |
N |
|
|
assembly_comment |
VARCHAR2(240) |
N |
Y |
Y |
|
物料描述 |
assembly_type |
NUMBER |
N |
Y |
N |
|
物料类型 |
transaction_type |
VARCHAR2(30) |
N |
Y |
Y |
|
处理类型 |
return_status |
VARCHAR2(1) |
N |
Y |
Y |
|
返回状态 |
attribute_category |
VARCHAR2(30) |
N |
Y |
Y |
|
弹性域类别 |
attribute1 |
VARCHAR2(150) |
N |
Y |
Y |
|
键弹性域字段1~15 |
attribute2 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute3 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute4 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute5 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute6 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute7 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute8 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute9 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute10 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute11 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute12 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute13 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute14 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute15 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
original_system_reference |
VARCHAR2(50) |
N |
Y |
Y |
|
|
delete_group_name |
VARCHAR2(10) |
N |
Y |
Y |
|
删除组名称 |
dg_description |
VARCHAR2(240) |
N |
Y |
Y |
|
|
row_identifier |
NUMBER |
N |
Y |
Y |
|
|
bom_implementation_date |
DATE |
N |
Y |
N |
|
|
enable_attrs_update |
VARCHAR2(1) |
N |
Y |
Y |
|
是否更新弹性域字段 |
structure_type_name |
VARCHAR2(80) |
N |
Y |
Y |
|
|
bom_bo_pub.bom_revision_tbl_type
Parameter Name |
Data Type |
Reqd |
INSERT |
UPDATE |
Value |
Validation, Comments |
assembly_item_name |
VARCHAR2(240) |
Y |
Y |
N |
|
物料名称 |
organization_code |
VARCHAR2(3) |
Y |
Y |
N |
|
库存组织 |
revision |
VARCHAR2(3) |
Y |
Y |
N |
|
版本 |
revision_label |
VARCHAR2(80) |
Y |
Y |
Y |
|
版本标签 |
revision_reason |
VARCHAR2(30) |
N |
Y |
Y |
|
版本原因 |
alternate_bom_code |
VARCHAR2(10) |
N |
N |
N |
|
替代项 |
description |
VARCHAR2(240) |
N |
Y |
Y |
|
说明 |
start_effective_date |
DATE |
N |
N |
N |
|
起始有效时间 |
transaction_type |
VARCHAR2(30) |
N |
Y |
Y |
|
处理类型 |
return_status |
VARCHAR2(1) |
N |
Y |
Y |
|
返回状态 |
attribute_category |
VARCHAR2(30) |
N |
Y |
Y |
|
类别 |
attribute1 |
VARCHAR2(150) |
N |
Y |
Y |
|
键弹性域字段1~15 |
attribute2 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute3 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute4 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute5 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute6 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute7 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute8 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute9 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute10 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute11 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute12 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute13 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute14 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute15 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
original_system_reference |
VARCHAR2(50) |
N |
Y |
Y |
|
|
row_identifier |
NUMBER |
N |
N |
Y |
|
|
bom_bo_pub.bom_comps_tbl_type
Parameter Name |
Data Type |
Reqd |
INSERT |
UPDATE |
Value |
Validation, Comments |
organization_code |
VARCHAR2(3) |
Y |
Y |
N |
|
库存组织 |
assembly_item_name |
VARCHAR2(240) |
Y |
Y |
N |
|
装配件名 |
start_effective_date |
DATE |
Y |
Y |
N |
|
有效日期开始时间 |
disable_date |
DATE |
N |
Y |
N |
|
失效时间 |
operation_sequence_number |
NUMBER |
Y |
Y |
N |
|
工序号 |
component_item_name |
VARCHAR2(240) |
Y |
Y |
Y |
|
组件名 |
alternate_bom_code |
VARCHAR2(10) |
N |
N |
N |
|
替代项 |
new_effectivity_date |
DATE |
N |
N |
N |
|
新有效日期 |
new_operation_sequence_number |
NUMBER |
N |
Y |
Y |
|
新工序号 |
item_sequence_number |
NUMBER |
Y |
Y |
Y |
|
物料序号 |
basis_type |
NUMBER |
N |
Y |
Y |
|
基准 |
quantity_per_assembly |
NUMBER |
N |
Y |
Y |
|
数量 |
inverse_quantity |
NUMBER |
N |
Y |
Y |
|
用量倒数 |
planning_percent |
NUMBER |
N |
Y |
N |
|
计划% |
projected_yield |
NUMBER |
N |
Y |
Y |
|
产出率 |
include_in_cost_rollup |
NUMBER |
N |
Y |
Y |
|
包括在累计成本中 |
wip_supply_type |
NUMBER |
N |
Y |
Y |
|
供应类型 |
so_basis |
NUMBER |
N |
Y |
Y |
|
销售订单基准 |
optional |
NUMBER |
N |
N |
N |
|
可选 |
mutually_exclusive |
NUMBER |
N |
N |
N |
|
互不相容 |
check_atp |
NUMBER |
N |
Y |
Y |
|
检查ATP |
shipping_allowed |
NUMBER |
N |
Y |
Y |
|
允许装运 |
required_to_ship |
NUMBER |
N |
Y |
Y |
|
要求装运 |
required_for_revenue |
NUMBER |
N |
Y |
Y |
|
要求确认收入 |
include_on_ship_docs |
NUMBER |
N |
Y |
Y |
|
包括在装运单中 |
quantity_related |
NUMBER |
N |
Y |
Y |
|
|
supply_subinventory |
VARCHAR2(10) |
N |
Y |
Y |
|
供应库存 |
location_name |
VARCHAR2(81) |
N |
Y |
Y |
|
货位 |
minimum_allowed_quantity |
NUMBER |
N |
Y |
Y |
|
最小允许数量 |
maximum_allowed_quantity |
NUMBER |
N |
Y |
Y |
|
最大允许数量 |
comments |
VARCHAR2(240) |
N |
Y |
Y |
|
描述 |
attribute_category |
VARCHAR2(30) |
N |
Y |
Y |
|
弹性域类别 |
attribute1 |
VARCHAR2(150) |
N |
Y |
Y |
|
键弹性域字段1~15 |
attribute2 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute3 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute4 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute5 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute6 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute7 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute8 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute9 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute10 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute11 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute12 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute13 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute14 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
attribute15 |
VARCHAR2(150) |
N |
Y |
Y |
|
|
from_end_item_unit_number |
VARCHAR2(30) |
N |
Y |
Y |
|
|
new_from_end_item_unit_number |
VARCHAR2(30) |
N |
Y |
Y |
|
|
to_end_item_unit_number |
VARCHAR2(30) |
N |
Y |
Y |
|
|
return_status |
VARCHAR2(1) |
N |
Y |
Y |
|
返回状态 |
transaction_type |
VARCHAR2(30) |
Y |
Y |
Y |
|
处理类型 |
original_system_reference |
VARCHAR2(50) |
N |
Y |
Y |
|
|
delete_group_name |
VARCHAR2(10) |
N |
Y |
Y |
|
删除组名 |
dg_description |
VARCHAR2(240) |
N |
Y |
Y |
|
|
enforce_int_requirements |
VARCHAR2(80) |
N |
Y |
Y |
|
|
auto_request_material |
VARCHAR2(1) |
N |
Y |
Y |
|
自动请求物料 |
row_identifier |
NUMBER |
N |
Y |
Y |
|
行识别 |
suggested_vendor_name |
VARCHAR2(240) |
N |
Y |
Y |
|
建议供应商名 |
unit_price |
NUMBER |
N |
Y |
Y |
|
单价 |
以上是创建BOM所需数据类型中的字段说明
二、创建BOM的时候需要注意的是:
A.普通BOM:
1.头物料和组件是不是在同一个组织下存在。
2.头物料存在BOM结构:
1)当前期间下,是否存在同一组件,不存在则可创建;
2)物料序号不允许重复
获取当前最大的物料序号,MAX_ITEM_SEQUENCE_NUMBER=ITEM_SEQUENCE_NUMBER+10;
B.替代BOM:
1.需要在系统中创建替代项:
设置:物料清单管理=>设置=>替代项
2.在需要创建的组织中,头物料需要创建BOM结构(允许没有组件);
在文章的结尾会附上创建和更新的脚本
三、创建公用清单
一般我们都是在主BOM下创建BOM。然后创建公用清单,将BOM结构分配到对应的组织。
当然这里同创建BOM结构是相似的。要求在创建BOM结构时,头物料和组件要在对应的组织下存在。
创建共用清单:工具=>创建公用清单
以并发请求的形式创建共用清单:
fnd_request.submit_request('BOM',
'BOMPCMBM', --并发程序名称
'',
'',
FALSE,
3,--公用清单的范围:1.单个组织;2.层次结构;3.所有组织
NULL,--层次结构对应的值
to_number(l_organization_id),--当前组织ID
to_number(l_assembly_item_id),--物料ID
NULL,--替代BOM(替代BOM需要创建公清单才给)
to_number(l_organization_id),
--公用清单的范围是"所有组织"的时候就给当前组织的ID,要是"单个组织"就给要分配的组织ID
NULL,--单个组织需要给对应的物料ID
NULL--是否启用属性更新(Y/N)
);
四、以下是创建BOM的脚本
DECLARE
-- API input variables
l_bom_header_rec bom_bo_pub.bom_head_rec_type := bom_bo_pub.g_miss_bom_header_rec;
l_bom_revision_tbl bom_bo_pub.bom_revision_tbl_type := bom_bo_pub.g_miss_bom_revision_tbl;
l_bom_component_tbl bom_bo_pub.bom_comps_tbl_type := bom_bo_pub.g_miss_bom_component_tbl;
l_bom_ref_designator_tbl bom_bo_pub.bom_ref_designator_tbl_type := bom_bo_pub.g_miss_bom_ref_designator_tbl;
l_bom_sub_component_tbl bom_bo_pub.bom_sub_component_tbl_type := bom_bo_pub.g_miss_bom_sub_component_tbl;
-- API output variables
x_bom_header_rec bom_bo_pub.bom_head_rec_type := bom_bo_pub.g_miss_bom_header_rec;
x_bom_revision_tbl bom_bo_pub.bom_revision_tbl_type := bom_bo_pub.g_miss_bom_revision_tbl;
x_bom_component_tbl bom_bo_pub.bom_comps_tbl_type := bom_bo_pub.g_miss_bom_component_tbl;
x_bom_ref_designator_tbl bom_bo_pub.bom_ref_designator_tbl_type := bom_bo_pub.g_miss_bom_ref_designator_tbl;
x_bom_sub_component_tbl bom_bo_pub.bom_sub_component_tbl_type := bom_bo_pub.g_miss_bom_sub_component_tbl;
x_message_list error_handler.error_tbl_type;
l_error_table error_handler.error_tbl_type;
l_output_dir VARCHAR2(500) := '/usr/tmp/Test';
l_debug_filename VARCHAR2(60) := 'debug_07_16.dbg';
l_return_status VARCHAR2(1) := NULL;
l_msg_count NUMBER := 0;
l_cnt NUMBER := 1;
-- WHO columns
l_user_id NUMBER := -1;
l_resp_id NUMBER := -1;
l_application_id NUMBER := -1;
l_row_cnt NUMBER := 1;
l_user_name VARCHAR2(30) := '登录的用户名';
l_resp_name VARCHAR2(30) := '对应的职责关键字';
BEGIN
-- Get the user_id
SELECT user_id INTO l_user_id FROM fnd_user WHERE user_name = l_user_name;
-- Get the application_id and responsibility_id
SELECT application_id,
responsibility_id
INTO l_application_id,
l_resp_id
FROM fnd_responsibility
WHERE responsibility_key = l_resp_name;
-- intiialize applications information
fnd_global.apps_initialize(l_user_id, l_resp_id, l_application_id); -- Mfg / Mfg & Dist Mgr / INV
dbms_output.put_line('Initialized applications context: ' || l_user_id || ' ' || l_resp_id || ' ' ||
l_application_id);
l_bom_header_rec.assembly_item_name := 'XXXXYYY'; --头物料
l_bom_header_rec.organization_code := '组织编码'; --BOM创建的组织
l_bom_header_rec.assembly_type := 1;
l_bom_header_rec.transaction_type := 'CREATE';
/*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
l_bom_header_rec.return_status := null;
l_bom_header_rec.assembly_comment := '123465486486NIHAODDDDD'; --头物料说明
--l_bom_header_rec.alternate_bom_code := 'TD_CM94532'; --替代BOM
l_cnt := 1;
-- initialize BOM components
-- component 1
/*若BOM不受版本控制,则不需要 l_bom_revision_tbl*/
--------------------------BOM版本开始-------------------------------------
l_bom_revision_tbl(l_cnt).assembly_item_name := 'XXXXYYY'; --组件关联的头物料
l_bom_revision_tbl(l_cnt).organization_code := '组织编码'; --BOM创建的组织
l_bom_revision_tbl(l_cnt).attribute_category := '46548A9SFASDDDDAA';
l_bom_revision_tbl(l_cnt).revision := '1';
l_bom_revision_tbl(l_cnt).description := 'nihao';
l_bom_revision_tbl(l_cnt).transaction_type := 'CREATE'; /*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
--------------------------BOM版本结束-----------------------------------------
--------------------------组件信息--------------------------------------------
l_bom_component_tbl(l_cnt).start_effective_date := sysdate;
-- to_date('16-JUL-2010 19:30:39','DD-MON-YY HH24:MI:SS'); -- should match timestamp for UPDATE 生效时间
l_bom_component_tbl(l_cnt).organization_code := 组织编码';
l_bom_component_tbl(l_cnt).assembly_item_name := 'XXXXYYY';
l_bom_component_tbl(l_cnt).component_item_name := 'HSST01'; --组件
l_bom_component_tbl(l_cnt).alternate_bom_code := null; --替代项(需要和头物料保持一致)
l_bom_component_tbl(l_cnt).comments := 'Created from BOM APIXXXAAA'; --说明
l_bom_component_tbl(l_cnt).item_sequence_number := '40'; --物料序号
l_bom_component_tbl(l_cnt).operation_sequence_number := '1'; --工序
l_bom_component_tbl(l_cnt).transaction_type := 'CREATE';
/*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
l_bom_component_tbl(l_cnt).quantity_per_assembly := 10; --组件数量
l_bom_component_tbl(l_cnt).return_status := null;
--------------------------组件信息--------------------------------------------
-- initialize error stack for logging errors
error_handler.initialize;
-- call API to create / update bill
dbms_output.put_line('=======================================================');
dbms_output.put_line('Calling Bom_Bo_Pub.process_bom API');
--调用API
bom_bo_pub.process_bom(p_bo_identifier => 'BOM',
p_api_version_number => 1.0,
p_init_msg_list => TRUE,
p_bom_header_rec => l_bom_header_rec,
p_bom_revision_tbl => l_bom_revision_tbl,
p_bom_component_tbl => l_bom_component_tbl,
p_bom_ref_designator_tbl => l_bom_ref_designator_tbl,
p_bom_sub_component_tbl => l_bom_sub_component_tbl,
x_bom_header_rec => x_bom_header_rec,
x_bom_revision_tbl => x_bom_revision_tbl,
x_bom_component_tbl => x_bom_component_tbl,
x_bom_ref_designator_tbl => x_bom_ref_designator_tbl,
x_bom_sub_component_tbl => x_bom_sub_component_tbl,
x_return_status => l_return_status,
x_msg_count => l_msg_count,
p_debug => 'Y',
p_output_dir => l_output_dir,
p_debug_filename => l_debug_filename);
dbms_output.put_line('=======================================================');
dbms_output.put_line('Return Status: ' || l_return_status);
IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
dbms_output.put_line('x_msg_count:' || l_msg_count);
error_handler.get_message_list(x_message_list => l_error_table);
dbms_output.put_line('Error Message Count :' || l_error_table.count);
FOR i IN 1 .. l_error_table.count LOOP
dbms_output.put_line(to_char(i) || ':' || l_error_table(i).entity_index || ':' || l_error_table(i)
.table_name);
dbms_output.put_line(to_char(i) || ':' || l_error_table(i).message_text);
END LOOP;
END IF;
dbms_output.put_line('=======================================================');
END;
更新BOM:
DECLARE
-- API input variables
l_bom_header_rec bom_bo_pub.bom_head_rec_type := bom_bo_pub.g_miss_bom_header_rec;
l_bom_revision_tbl bom_bo_pub.bom_revision_tbl_type := bom_bo_pub.g_miss_bom_revision_tbl;
l_bom_component_tbl bom_bo_pub.bom_comps_tbl_type := bom_bo_pub.g_miss_bom_component_tbl;
l_bom_ref_designator_tbl bom_bo_pub.bom_ref_designator_tbl_type := bom_bo_pub.g_miss_bom_ref_designator_tbl;
l_bom_sub_component_tbl bom_bo_pub.bom_sub_component_tbl_type := bom_bo_pub.g_miss_bom_sub_component_tbl;
-- API output variables
x_bom_header_rec bom_bo_pub.bom_head_rec_type := bom_bo_pub.g_miss_bom_header_rec;
x_bom_revision_tbl bom_bo_pub.bom_revision_tbl_type := bom_bo_pub.g_miss_bom_revision_tbl;
x_bom_component_tbl bom_bo_pub.bom_comps_tbl_type := bom_bo_pub.g_miss_bom_component_tbl;
x_bom_ref_designator_tbl bom_bo_pub.bom_ref_designator_tbl_type := bom_bo_pub.g_miss_bom_ref_designator_tbl;
x_bom_sub_component_tbl bom_bo_pub.bom_sub_component_tbl_type := bom_bo_pub.g_miss_bom_sub_component_tbl;
x_message_list error_handler.error_tbl_type;
l_error_table error_handler.error_tbl_type;
l_output_dir VARCHAR2(500) := '/usr/tmp/hdsp0044';
l_debug_filename VARCHAR2(60) := 'su_debug_07_16.dbg';
l_return_status VARCHAR2(1) := NULL;
l_msg_count NUMBER := 0;
l_cnt NUMBER := 1;
-- WHO columns
l_user_id NUMBER := -1;
l_resp_id NUMBER := -1;
l_application_id NUMBER := -1;
l_row_cnt NUMBER := 1;
l_user_name VARCHAR2(30) := 'MFG';
l_resp_name VARCHAR2(30) := 'MFG_AND_DIST_SUPER_USER_APS';
BEGIN
-- Get the user_id
SELECT user_id INTO l_user_id FROM fnd_user WHERE user_name = l_user_name;
-- Get the application_id and responsibility_id
SELECT application_id,
responsibility_id
INTO l_application_id,
l_resp_id
FROM fnd_responsibility
WHERE responsibility_key = l_resp_name;
-- intiialize applications information
--模拟登陆
fnd_global.apps_initialize(l_user_id, l_resp_id, l_application_id); -- Mfg / Mfg & Dist Mgr / INV
dbms_output.put_line('Initialized applications context: ' || l_user_id || ' ' || l_resp_id || ' ' ||
l_application_id);
-- initialize BOM header
l_bom_header_rec.assembly_item_name := 'XXXXYYY'; --头物料
l_bom_header_rec.organization_code := '组织编码'; --创建BOM的组织
l_bom_header_rec.assembly_type := 1;
l_bom_header_rec.transaction_type := 'SYNC'; /*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
l_bom_header_rec.return_status := NULL;
l_bom_header_rec.assembly_comment := '123465486486NIHAODDDDD'; --头物料的说明
l_cnt := 1;
--If you want update the bom then you must select the three segments as the header ,so you can success update the bom
SELECT bic.item_num,
bic.operation_seq_num,
effectivity_date
INTO l_bom_component_tbl(l_cnt).item_sequence_number,
l_bom_component_tbl(l_cnt).operation_sequence_number,
l_bom_component_tbl(l_cnt).start_effective_date
FROM bom_inventory_components bic
WHERE component_sequence_id = 142091;
-- initialize BOM components
-- component 1
--Update bom revision
/*若BOM不受版本控制,则不需要 l_bom_revision_tbl*/
--------------------------BOM版本开始-------------------------------------
l_bom_revision_tbl(l_cnt).assembly_item_name := 'XXXXYYY'; --组件关联的头物料
l_bom_revision_tbl(l_cnt).organization_code := '组织编码'; --创建BOM的组织
l_bom_revision_tbl(l_cnt).attribute_category := '46548A9SFASDDDDAA';
l_bom_revision_tbl(l_cnt).revision := '1';
l_bom_revision_tbl(l_cnt).description := 'nihao';
l_bom_revision_tbl(l_cnt).transaction_type := 'UPDATE'; /*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
--------------------------BOM版本结束-----------------------------------------
--------------------------组件信息--------------------------------------------
--Update bom component
l_bom_component_tbl(l_cnt).organization_code := '组织编码'; --创建BOM的组织
l_bom_component_tbl(l_cnt).assembly_item_name := 'XXXXYYY'; --组件关联的头物料
l_bom_component_tbl(l_cnt).component_item_name := 'HSST01'; --组件
l_bom_component_tbl(l_cnt).alternate_bom_code := NULL;
l_bom_component_tbl(l_cnt).comments := 'Created from BOM APIXXXAAA'; --物料说明
l_bom_component_tbl(l_cnt).item_sequence_number := '40'; --物料序号
l_bom_component_tbl(l_cnt).transaction_type := 'UPDATE'; /*1、CREATE 2、UPDATE 3、DELETE 4、SYNC*/
l_bom_component_tbl(l_cnt).quantity_per_assembly := 10; --组件数量
l_bom_component_tbl(l_cnt).return_status := NULL;
--------------------------组件信息--------------------------------------------
-- initialize error stack for logging errors
error_handler.initialize;
-- call API to create / update bill
dbms_output.put_line('=======================================================');
dbms_output.put_line('Calling Bom_Bo_Pub.process_bom API');
--调用API
bom_bo_pub.process_bom(p_bo_identifier => 'BOM',
p_api_version_number => 1.0,
p_init_msg_list => TRUE,
p_bom_header_rec => l_bom_header_rec,
p_bom_revision_tbl => l_bom_revision_tbl,
p_bom_component_tbl => l_bom_component_tbl,
p_bom_ref_designator_tbl => l_bom_ref_designator_tbl,
p_bom_sub_component_tbl => l_bom_sub_component_tbl,
x_bom_header_rec => x_bom_header_rec,
x_bom_revision_tbl => x_bom_revision_tbl,
x_bom_component_tbl => x_bom_component_tbl,
x_bom_ref_designator_tbl => x_bom_ref_designator_tbl,
x_bom_sub_component_tbl => x_bom_sub_component_tbl,
x_return_status => l_return_status,
x_msg_count => l_msg_count,
p_debug => 'Y',
p_output_dir => l_output_dir,
p_debug_filename => l_debug_filename);
dbms_output.put_line('=======================================================');
dbms_output.put_line('Return Status: ' || l_return_status);
IF (l_return_status <> fnd_api.g_ret_sts_success) THEN
dbms_output.put_line('x_msg_count:' || l_msg_count);
error_handler.get_message_list(x_message_list => l_error_table);
dbms_output.put_line('Error Message Count :' || l_error_table.count);
FOR i IN 1 .. l_error_table.count LOOP
dbms_output.put_line(to_char(i) || ':' || l_error_table(i).entity_index || ':' || l_error_table(i)
.table_name);
dbms_output.put_line(to_char(i) || ':' || l_error_table(i).message_text);
END LOOP;
END IF;
dbms_output.put_line('=======================================================');
END;