Auto Generate Item Number

5270 ワード

自動生成品目コードの顧客化コードは、コードがよく書けていると思って、予備を残しておきましょう.
source:https://forums.oracle.com/thread/411343
コードはCUSTOMに入れる必要がある.pll
------------------------------------------------------------------------------------------------------------------------------------
/*********************************************************************/
/* Begin Master Item Form */
/* 1. Make sure the Item Field on the Master Item Form */
/* is NOT editable by the END USER */
/* 2. Set the Item Field to be the next Item Number */
/* in a 7 digit sequence. */
/* HELPFUL INFO: */
/* MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR */
/* - Item Field on the main Master Item Form */
/* MTL_SYSTEM_ITEMS.INVENTORY_ITEM */
/* - Item Field on the folder tab of the Master Item Form */
BEGIN
  -- Item Master Form
  IF FORM_NAME = 'INVIDITM' THEN
    -- MTL_SYSTEM_ITEMS Block
    IF BLOCK_NAME = 'MTL_SYSTEM_ITEMS' THEN
      -- WHEN-NEW-ITEM-INSTANCE Event
      IF EVENT_NAME = 'WHEN-NEW-ITEM-INSTANCE' THEN
        -- We don't want to mess with the Item if we're in a Query Mode
        IF NAME_IN('SYSTEM.MODE') != 'ENTER-QUERY' THEN
          -- The value of the INVENTORY_ITEM_MIR will be blank when we're creating a new Item Master Record
          -- and therefore that is when we want to DISABLE that item. If it's filled in, then we're
          -- dealing with an existing Item Master Record, in which case we still want the END USER to be able to
          -- highlight or select the item number that was generated by the system.
          IF NAME_IN('SYSTEM.CURRENT_ITEM') = 'INVENTORY_ITEM_MIR' AND
             NAME_IN('MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR') IS NULL THEN
            NEXT_ITEM; -- Move to the next item so the SYSTEM.CURRENT_ITEM isn't the Item Field Anymore(t
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR',
                              REQUIRED,
                              PROPERTY_FALSE);
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR',
                              INSERT_ALLOWED,
                              PROPERTY_FALSE);
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR',
                              UPDATEABLE,
                              PROPERTY_FALSE);
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM',
                              REQUIRED,
                              PROPERTY_FALSE);
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM',
                              INSERT_ALLOWED,
                              PROPERTY_FALSE);
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM',
                              UPDATEABLE,
                              PROPERTY_FALSE);
          ELSIF NAME_IN('SYSTEM.CURRENT_ITEM') = 'INVENTORY_ITEM' AND
                NAME_IN('MTL_SYSTEM_ITEMS.INVENTORY_ITEM') IS NULL THEN
            NEXT_ITEM; -- Move to the next item so the SYSTEM.CURRENT_ITEM isn't the Item Field Anymore(t
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR',
                              REQUIRED,
                              PROPERTY_FALSE);
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR',
                              INSERT_ALLOWED,
                              PROPERTY_FALSE);
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR',
                              UPDATEABLE,
                              PROPERTY_FALSE);
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM',
                              REQUIRED,
                              PROPERTY_FALSE);
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM',
                              INSERT_ALLOWED,
                              PROPERTY_FALSE);
            SET_ITEM_PROPERTY('MTL_SYSTEM_ITEMS.INVENTORY_ITEM',
                              UPDATEABLE,
                              PROPERTY_FALSE);
          END IF; -- NAME_IN - INVENTORY_ITEM_MIR - INVENTORY_ITEM
        END IF; -- SYSTEM.MODE
      END IF; -- WHEN-NEW-ITEM-INSTANCE
      -- WHEN-VALIDATE-RECORD Event
      IF EVENT_NAME = 'WHEN-VALIDATE-RECORD' THEN
        IF NAME_IN('MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR') IS NULL THEN
          DECLARE
            NEXTITEMNUMBER VARCHAR2(10);
          BEGIN
            --FND_MESSAGE.SET_STRING('Setting the value of INVENTORY_ITEM to the next Item_Number');
            --FND_MESSAGE.SHOW;
            -- Call our custom plsql to get the next item number from a sequence
            NEXTITEMNUMBER := XXSSI.XXSSI_ITEM_MAST_NUM_GEN.GET_NEXT_ITEM_NUMBER;
            COPY(NEXTITEMNUMBER, 'MTL_SYSTEM_ITEMS.INVENTORY_ITEM_MIR');
            COPY(NEXTITEMNUMBER, 'MTL_SYSTEM_ITEMS.SEGMENT1');
          END;
        END IF; -- NAME_IN - INVENTORY_ITEM_MIR
      END IF; -- WHEN-VALIDATE-RECORD
    END IF; -- BLOCK 'MTL_SYSTEM_ITEMS'
  END IF; -- FORM 'Master Item'
END;
/* End Master Item Form */
/*********************************************************************/