系统版本:
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;