- 物料创建
DECLARE
l_user_name VARCHAR2(240) := 'SYSADMIN';
l_user_id NUMBER;
l_resp_name VARCHAR2(240) := 'CUX_客户化开发超级职责';
l_resp_id NUMBER;
l_resp_appl_id NUMBER;
l_master_organization_id NUMBER := 89;
l_template_id NUMBER;
l_item_rec inv_item_grp.item_rec_type;
x_item_rec inv_item_grp.item_rec_type;
l_error_tbl inv_item_grp.error_tbl_type;
l_assign_error_tbl error_handler.error_tbl_type;
l_return_status VARCHAR2(1);
l_category_set_id NUMBER;
l_old_category_id NUMBER;
l_new_category_id NUMBER;
l_errorcode NUMBER;
l_msg_count NUMBER;
l_msg_data VARCHAR2(2000);
CURSOR cur_assign IS
SELECT mp.organization_id
FROM mtl_parameters mp
WHERE mp.master_organization_id = l_master_organization_id
AND mp.organization_id <> mp.master_organization_id;
FUNCTION dump_error_stack RETURN VARCHAR2 IS
l_msg_count NUMBER;
l_msg_data VARCHAR2(2000);
l_msg_index_out NUMBER;
x_msg_data VARCHAR2(4000);
BEGIN
x_msg_data := NULL;
fnd_msg_pub.count_and_get(p_count => l_msg_count
,p_data => l_msg_data);
FOR l_ind IN 1 .. l_msg_count LOOP
fnd_msg_pub.get(p_msg_index => l_ind
,p_encoded => fnd_api.g_false
,p_data => l_msg_data
,p_msg_index_out => l_msg_index_out);
x_msg_data := ltrim(x_msg_data || ' ' || l_msg_data);
END LOOP;
RETURN x_msg_data;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END dump_error_stack;
BEGIN
SELECT fu.user_id
INTO l_user_id
FROM fnd_user fu
WHERE fu.user_name = l_user_name;
SELECT fr.responsibility_id
,fr.application_id
INTO l_resp_id
,l_resp_appl_id
FROM fnd_responsibility_vl fr
WHERE fr.responsibility_name = l_resp_name;
fnd_global.apps_initialize(user_id => l_user_id
,resp_id => l_resp_id
,resp_appl_id => l_resp_appl_id);
l_error_tbl.delete;
l_item_rec.organization_id := l_master_organization_id;
l_item_rec.segment1 := 'QYC2024022305';
l_item_rec.description := '测试物料';
l_item_rec.primary_uom_code := 'EA';
l_item_rec.inventory_item_status_code := 'Active';
l_item_rec.item_type := 'LOW';
l_item_rec.inventory_item_flag := 'Y';
l_item_rec.stock_enabled_flag := 'Y';
l_item_rec.mtl_transactions_enabled_flag := 'Y';
l_item_rec.lot_control_code := 2;
l_item_rec.lot_split_enabled := 'Y';
l_item_rec.lot_divisible_flag := 'Y';
l_item_rec.serial_number_control_code := 1;
l_item_rec.costing_enabled_flag := 'Y';
l_item_rec.inventory_asset_flag := 'Y';
l_item_rec.default_include_in_rollup_flag := 'Y';
l_item_rec.purchasing_item_flag := 'Y';
l_item_rec.purchasing_enabled_flag := 'Y';
l_item_rec.allow_item_desc_update_flag := 'Y';
inv_item_grp.create_item(p_commit => fnd_api.g_false
,p_item_rec => l_item_rec
,x_item_rec => x_item_rec
,x_return_status => l_return_status
,x_error_tbl => l_error_tbl
,p_template_id => l_template_id);
dbms_output.put_line('l_return_status:' || l_return_status);
IF l_return_status <> fnd_api.g_ret_sts_success THEN
FOR i IN 1 .. l_error_tbl.count LOOP
dbms_output.put_line('message_text:' || l_error_tbl(i).message_text);
dbms_output.put_line('table_name:' || l_error_tbl(i).table_name);
dbms_output.put_line('column_name:' || l_error_tbl(i).column_name);
dbms_output.put_line('organization_id:' || l_error_tbl(i).organization_id);
END LOOP;
IF (l_return_status = fnd_api.g_ret_sts_unexp_error) THEN
RAISE fnd_api.g_exc_unexpected_error;
ELSIF (l_return_status = fnd_api.g_ret_sts_error) THEN
RAISE fnd_api.g_exc_error;
END IF;
ELSE
dbms_output.put_line('创建成功:' || x_item_rec.item_number);
dbms_output.put_line('inventory_item_id:' ||
x_item_rec.inventory_item_id);
END IF;
IF l_return_status = fnd_api.g_ret_sts_success THEN
SELECT mic.category_id
,mic.category_set_id
INTO l_old_category_id
,l_category_set_id
FROM mtl_item_categories mic
WHERE 1 = 1
AND mic.inventory_item_id = x_item_rec.inventory_item_id
AND mic.organization_id = x_item_rec.organization_id;
SELECT mc.category_id
INTO l_new_category_id
FROM mtl_categories_b mc
WHERE mc.segment1 = '17'
AND mc.segment2 = '01'
AND mc.segment3 IS NULL;
inv_item_category_pub.update_category_assignment(p_api_version => '1.0'
,p_init_msg_list => fnd_api.g_true
,p_commit => fnd_api.g_false
,p_category_id => l_new_category_id
,p_old_category_id => l_old_category_id
,p_category_set_id => l_category_set_id
,p_inventory_item_id => x_item_rec.inventory_item_id
,p_organization_id => x_item_rec.organization_id
,x_return_status => l_return_status
,x_errorcode => l_errorcode
,x_msg_count => l_msg_count
,x_msg_data => l_msg_data);
IF l_return_status <> fnd_api.g_ret_sts_success THEN
dbms_output.put_line('更新物料类别失败:' || dump_error_stack);
IF (l_return_status = fnd_api.g_ret_sts_unexp_error) THEN
RAISE fnd_api.g_exc_unexpected_error;
ELSIF (l_return_status = fnd_api.g_ret_sts_error) THEN
RAISE fnd_api.g_exc_error;
END IF;
ELSE
dbms_output.put_line('更新物料类别成功');
END IF;
END IF;
IF l_return_status = fnd_api.g_ret_sts_success THEN
FOR rec_assign IN cur_assign LOOP
ego_item_pub.assign_item_to_org(p_api_version => 1.0
,p_init_msg_list => fnd_api.g_true
,p_commit => fnd_api.g_false
,p_inventory_item_id => x_item_rec.inventory_item_id
,p_item_number => x_item_rec.item_number
,p_organization_id => rec_assign.organization_id
,p_organization_code => NULL
,p_primary_uom_code => NULL
,x_return_status => l_return_status
,x_msg_count => l_msg_count);
IF l_return_status <> fnd_api.g_ret_sts_success THEN
l_assign_error_tbl.delete;
error_handler.get_message_list(l_assign_error_tbl);
dbms_output.put_line('分配 ' || rec_assign.organization_id || ' 失败:');
FOR i IN 1 .. l_assign_error_tbl.count LOOP
dbms_output.put_line('message_text:' || l_assign_error_tbl(i).message_text);
END LOOP;
IF (l_return_status = fnd_api.g_ret_sts_unexp_error) THEN
RAISE fnd_api.g_exc_unexpected_error;
ELSIF (l_return_status = fnd_api.g_ret_sts_error) THEN
RAISE fnd_api.g_exc_error;
END IF;
ELSE
dbms_output.put_line('分配 ' || rec_assign.organization_id || ' 成功');
END IF;
END LOOP;
END IF;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
END;
- 物料更新
DECLARE
l_user_name VARCHAR2(240) := 'SYSADMIN';
l_user_id NUMBER;
l_resp_name VARCHAR2(240) := 'CUX_客户化开发超级职责';
l_resp_id NUMBER;
l_resp_appl_id NUMBER;
l_item_rec inv_item_grp.item_rec_type;
x_item_rec inv_item_grp.item_rec_type;
l_error_tbl inv_item_grp.error_tbl_type;
l_return_status VARCHAR2(1);
BEGIN
SELECT fu.user_id
INTO l_user_id
FROM fnd_user fu
WHERE fu.user_name = l_user_name;
SELECT fr.responsibility_id
,fr.application_id
INTO l_resp_id
,l_resp_appl_id
FROM fnd_responsibility_vl fr
WHERE fr.responsibility_name = l_resp_name;
fnd_global.apps_initialize(user_id => l_user_id
,resp_id => l_resp_id
,resp_appl_id => l_resp_appl_id);
l_item_rec.organization_id := 90;
l_item_rec.segment1 := '测试物料';
SELECT msib.inventory_item_id
INTO l_item_rec.inventory_item_id
FROM mtl_system_items_b msib
WHERE msib.segment1 = l_item_rec.segment1
AND msib.organization_id = l_item_rec.organization_id;
l_item_rec.attribute1 := 'TEST';
inv_item_grp.update_item(p_commit => fnd_api.g_false
,p_item_rec => l_item_rec
,x_item_rec => x_item_rec
,x_return_status => l_return_status
,x_error_tbl => l_error_tbl);
dbms_output.put_line('l_return_status:' || l_return_status);
IF l_return_status <> fnd_api.g_ret_sts_success THEN
FOR i IN 1 .. l_error_tbl.count LOOP
dbms_output.put_line('message_text:' || l_error_tbl(i).message_text);
dbms_output.put_line('table_name:' || l_error_tbl(i).table_name);
dbms_output.put_line('column_name:' || l_error_tbl(i).column_name);
dbms_output.put_line('organization_id:' || l_error_tbl(i).organization_id);
END LOOP;
IF (l_return_status = fnd_api.g_ret_sts_unexp_error) THEN
RAISE fnd_api.g_exc_unexpected_error;
ELSIF (l_return_status = fnd_api.g_ret_sts_error) THEN
RAISE fnd_api.g_exc_error;
END IF;
ELSE
dbms_output.put_line('更新成功:' || x_item_rec.item_number);
END IF;
END;