摘自:https://blog.csdn.net/chenxianping/article/details/78935942
系统版本:
RDBMS : 9.2.0.6.0
Oracle 应用产品 : 11.5.10.2
研发用户找我反映公司软件基线版要批量升级了,比如某软件版4.4.12批量升级到4.5.0.0,涉及到软件物料编码数量多,即物料编码多。从某天开始,所有生产的成品必须使用升级以后的版本,用户要求我提供批量更新软件版本的程序。
参考INV Item物料API的文档基础,涉及接口表如下:
1.MTL_SYSTEM_ITEMS_INTERFACE:主组织物料接口表
2.MTL_ITEM_REVISIONS_INTERFACE: 物料版本;可选;不能单独使用,关联字段organization_code、item_number(或者organization_id、Inventory_Item_Id)
3.MTL_INTERFACE_ERRORS:错误信息表
参考代码:
DECLARE
l_Item_Rec inv_item_grp.item_rec_type;
X_Item_Rec inv_item_grp.item_rec_type;
x_Error_Tbl inv_item_grp.error_tbl_type;
l_Revision_rec inv_item_grp.Item_Revision_Rec_Type;
x_Return_Status Varchar2(1);
l_user_id Number := 0; --User ID, Sysadmin here
l_cur_mfg_org_id Number := 122; --Current Inv Organization
Cursor Cr Is
Select MSI.SEGMENT1,
MSI.DESCRIPTION,
MSI.ITEM_TYPE,
MSI.CREATION_DATE,
MSI.ORGANIZATION_ID,
MSI.INVENTORY_ITEM_STATUS_CODE,
MSI.INVENTORY_ITEM_ID,
MIR.REVISION_ID,
MIR.REVISION_LABEL,
MIR.IMPLEMENTATION_DATE,
MIR.EFFECTIVITY_DATE
From MTL_SYSTEM_ITEMS_B MSI, MTL_ITEM_REVISIONS_VL MIR
Where MSI.INVENTORY_ITEM_ID = MIR.INVENTORY_ITEM_ID
And MSI.ORGANIZATION_ID = MIR.ORGANIZATION_ID
And MSI.ORGANIZATION_ID = l_cur_mfg_org_id
And MSI.SEGMENT1 = '101014903352'
Order By MSI.SEGMENT1;
BEGIN
fnd_global.apps_initialize(user_id => l_user_id,
resp_id => 50237,
resp_appl_id => 401);
For Rs In Cr Loop
--物料编码
l_Item_Rec.item_number := Rs.Segment1;
--库存组织ID
l_Item_Rec.organization_id := l_cur_mfg_org_id;
--物料ID
l_Item_Rec.Inventory_Item_Id := Rs.INVENTORY_ITEM_ID;
--Reversion
/*
--新增版本
--Transaction_Type:CREATE新增;UPDATE更新
l_Revision_rec.Transaction_Type := 'CREATE';
--组织ID
l_Revision_rec.Organization_Id := l_Item_Rec.organization_id;
--物料ID
l_Revision_rec.Inventory_Item_Id := l_Item_Rec.Inventory_Item_Id;
--版本标签
l_Revision_rec.REVISION_LABEL := 'V4.5.01';
--版本
l_Revision_rec.Revision_Code := 1;
--有效日期
l_Revision_rec.EFFECTIVITY_DATE := Sysdate;
--实施日期
l_Revision_rec.IMPLEMENTATION_DATE := Sysdate;
*/
--更新版本
--Transaction_Type:CREATE新增;UPDATE更新
l_Revision_rec.Transaction_Type := 'UPDATE';
--组织ID
l_Revision_rec.Organization_Id := l_Item_Rec.organization_id;
--物料ID
l_Revision_rec.Inventory_Item_Id := l_Item_Rec.Inventory_Item_Id;
--版本ID
l_Revision_rec.Revision_Id := Rs.REVISION_ID;
--版本标签
l_Revision_rec.REVISION_LABEL := 'V4.5.01';
--版本
l_Revision_rec.Revision_Code := 0;
--有效日期
l_Revision_rec.EFFECTIVITY_DATE := Rs.EFFECTIVITY_DATE;
--实施日期
l_Revision_rec.IMPLEMENTATION_DATE := Rs.IMPLEMENTATION_DATE;
--调用API
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 => x_Return_Status,
x_Error_Tbl => x_Error_Tbl,
p_Revision_rec => l_Revision_rec);
--S表示成功,E表示失败
IF x_Return_Status <> fnd_api.g_ret_sts_success THEN
ROLLBACK;
FOR i IN 1 .. x_Error_Tbl.COUNT LOOP
dbms_output.put_line('Transaction ID :' || x_Error_Tbl(i)
.transaction_id);
dbms_output.put_line('Unique ID :' || x_Error_Tbl(i)
.unique_id);
dbms_output.put_line('Message Name :' || x_Error_Tbl(i)
.message_name);
dbms_output.put_line('Message Text: :' || x_Error_Tbl(i)
.message_text);
dbms_output.put_line('Table Name :' || x_Error_Tbl(i)
.table_name);
dbms_output.put_line('Column Name :' || x_Error_Tbl(i)
.column_name);
dbms_output.put_line('Organization ID :' || x_Error_Tbl(i)
.organization_id);
END LOOP;
IF (x_Return_Status = fnd_api.g_ret_sts_unexp_error) THEN
RAISE fnd_api.g_exc_unexpected_error;
ELSIF (x_Return_Status = fnd_api.g_ret_sts_error) THEN
Null;
END IF;
ELSE
COMMIT;
END IF;
End Loop;
END;