Category sets may be used as a means to develop custom lists of items on which to report and sort. You can also create other category sets such as John’s Priority or Jane’s Priority, with categories like high, medium, and low.
The category set Inventory is seeded when you install Oracle Inventory.
The category set Purchasing is seeded when you install Oracle Purchasing.
If you plan to use Order Management’s group pricing functionality with item categories, you must add the categories to the Order Entry category set.
Attention:
1. You must use this window to define valid categories for each purchasing category set before you can use Oracle Purchasing.
2. For the Controlled At level, if the item defining attribute of the functional area (e.g. Inventory’s is Inventory Item) is controlled at the Organization level, then the new default Category Set should also be controlled at the Organization level.

Enter a unique category set Name and Description.  In the Flex Structure section, enter which flexfield structure is to be used.  The categories assigned to the category set must have the same flexfield structure as the set itself.  Select a control level and a default category.
You will then need to select Enforce List of Valid Categories if you want validation of the categories at the time of input.  You will then enter in or select the valid categories for the category set.

Enter a flexfield Structure Name, a unique Category (value) for each structure segment, and a unique description for the new category.  If you want to make a category inactive, enter a date you want the category to be inactive on.  Save your work.
If you choose a multi–segment flexfield structure you can assign a specific meaning to each segment. For example in our case the category “Electronics.Mobile.Samsung” means an item assinged to this category is a samusng brand mobile device of elcetroincs product group.

You can define multiple segment structures for the Item Categories Flexfield. Each segment structure may have its own display prompts and fields.
When you install or upgrade Oracle Inventory or Oracle Purchasing, Oracle provides two category flexfield structures by default: Item Categories and PO Item Category.
Each segment structure can display prompts and fields that apply specifically to a particular naming convention. For example, you might want one of your category sets to use two segments for the names of categories. Another item grouping scheme might use just one segment for the names of categories. You choose a flexfield structure for every category set and category that you define.

1. Lets create an item category as Procut Information with three segment:  Product Line – Product Name – Brand Name
Product Line – Electronics, Machine, FMG
Product Name – Mobile, TV, Bus Engine, Soap, Biscuit
Brand Name – LG, Samsung, Cummins, Britania
 
2. Define all the value sets as shown below.

3. Define the item category flex field.

4. Filling up the value set of the stucture product information

 
Oracle Inventory provides the following flexfields:
  1. System Items
  2. Item Catalogs
  3. Item Categories
  4. Stock Locators
  5. Account Aliases
  6. Sales Orders
Depending on your system’s setup, Inventory may also use some or all of the following
flexfields provided by other Oracle products:
     
  • Accounting (Oracle General Ledger)
  • Sales Tax Location (Oracle Receivables)
  • Territory (Oracle Receivables)
1. System Items
You can use the System Items Flexfield (also called the Item Flexfield) for recording and reporting your item information. You must design and configure your Item Flexfield before you can start defining items.
All Oracle Applications products that reference items share the Item Flexfield and support multiple-segment implementations. However, this flexfield supports only one structure.
You must set up your OE: Item Flexfield profile option to specify the Item Flexfield structure that you will use for your Oracle applications.
Users can also set up the OE: Item Flexfield Entry Method profile option to specify your preferred method of entry for this flexfield.
You can optionally use the item flexfield to default item information for invoice, debit memo, and credit memo lines or you can enter your own line information.
2. Item Catalogs
This key flexfield supports only one structure.
3. Item Categories
You must design and configure your Item Categories Flexfield before you can start defining items since all items must be assigned to categories. You can define multiple structures for your Item Categories Flexfield, each structure corresponding to a different category grouping scheme. You can then associate these structures with the categories and category sets you define.
4. Stock Locators
You can use the Stock Locators Flexfield to capture more information about stock locators in inventory. If you do not have Oracle Inventory installed, or none of your items have locator control, it is not necessary to set up this flexfield.
If you keep track of specific locators such as aisle, row, bin indicators for your items, you need to configure your Stock Locators Flexfield and implement locator control in your organization.
This key flexfield supports only one structure.
 
5. Account Aliases
This key flexfield supports only one structure.
 
6. Sales Order
The Sales Order Flexfield is a key flexfield used by Oracle Inventory to uniquely identify sales order transactions Oracle Order Management interfaces to Oracle Inventory.
Your Sales Order Flexfield should be defined as Order Number, Order Type, and Order Source. This combination guarantees each transaction to Inventory is unique. You must define this flexfield before placing demand or making reservations in Oracle Order Management.
You must set up the OM: Source Code profile option to determine the source code you will use in for the third segment of this flexfield to guarantee that each transaction is unique. (Oracle Inventory defaults the value of the OM: Source Code profile option to ‘ORDER MANAGEMENT’.)
For your value sets, you must use Dynamic Inserts. The Validation Type should be None. Value Required should be Yes to improve performance of concurrent programs. The value set must be alphanumeric. The value set maximum size must be 40.
You should set the Required field to Yes in the Validation Information region when enabling the flexfield segments. Setting this field to Yes, improves performance when updating existing demand or reservations by guaranteeing that Oracle Order Management always supplies a value.
Set Right-justify Zero-fill Numbers to No so sales order numbers are not padded with zeros.

Oracle Inventory defines a unique ID for each order in MTL_SALES_ORDERS based on this flexfield. The Inventory unique ID, as opposed to the Order Management unique ID, is used throughout Oracle Manufacturing applications.

Sometime I’m quite annoyed by the typo mistake when creating a DFF context. The DFF segment screen doesn’t allow deletion of context. Fortunately, Oracle has internal API to do such thing. Following is a sample.
–*******************************************
–* Delete a descriptive flexfield
–*******************************************
SET ECHO OFF
SET FEEDBACK OFF
SET SERVEROUTPUT ON SIZE 1000000
DECLARE
l_application_id                NUMBER := 0;
l_descriptive_flexfield_name    VARCHAR2(100) :=  ‘FND_COMMON_LOOKUPS’ ;
l_descriptive_flex_context_cod  VARCHAR2(100) :=  ‘XFND_CLWW_PURGE_FOLDER’;
BEGIN
–FND_DESCRIPTIVE_FLEXS_PKG –this package is for DFF
–FND_DESCR_FLEX_CONTEXTS_PKG –this package is for DFF Context
–FND_DESCR_FLEX_COL_USAGE_PKG –this package is for DFF Column useage
–When creating a new DFF Context, it will check the DFF Column usage if the context is already used.
–so when deleting a DFF Context, both the context and column usage should be deleted.
FOR c IN (SELECT application_column_name
FROM fnd_descr_flex_column_usages
WHERE application_id = l_application_id
AND descriptive_flexfield_name = l_descriptive_flexfield_name
AND descriptive_flex_context_code = l_descriptive_flex_context_cod)
LOOP

fnd_descr_flex_col_usage_pkg.delete_row(
x_application_id                => l_application_id
,x_descriptive_flexfield_name    => l_descriptive_flexfield_name
,x_descriptive_flex_context_cod  => l_descriptive_flex_context_cod
,x_application_column_name       => c.application_column_name
);
END LOOP;
fnd_descr_flex_contexts_pkg.delete_row(
x_application_id                => l_application_id,
,x_descriptive_flexfield_name    => l_descriptive_flexfield_name
,x_descriptive_flex_context_cod  => l_descriptive_flex_context_cod
);

–commit;
end;