Oracle EBS Interface/API(9)-主组织物料版本

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

猜你喜欢

转载自blog.csdn.net/chenxianping/article/details/78935942