You are on page 1of 17

How to Assign Categories

An Oracle Technical White Paper May 2007 Revision 1

How to Assign, Update, and Delete Item Categories, Purpose Categories are the method or controlling how an item logically and functionally separated for planning, purchasing and other functions. They aid in the control of all aspect of inventory management. We shall look at the various methods of assinging categories to items

Assumption This note will work with an organization control level category that is not assigned to a functional area. When a item is create and the functional catagories are assigned automaticly. A category assignment must exist for the functional area therefore the category can only be updated . The categories used here we created for note How to Create a Category Set.

Assigning Categories in the forms This way always works for a small number of items or categories it can be quick and easy.

Create your item.

After creating the item and saving In the pull down menu at the top of the screen. Select: Tools -> Categories

Assign the category

Save and exit the form

Cateries can also be assigned in the Category Sets form Setup: Items: Categories: Category Sets Click on assign item

In the assignment screen Item : select Category_Item Category : BLACK

Save and exit the form.

How used the Category interface to create, update and delete item category assignments
Finding the data
The following select provides you with the current assignment for all organizations (You will need to limit this by organization when importing items and APIs Select * From mtl_item_categories where inventory_item_id = ( select distinct (INVENTORY_ITEM_ID ) from MTL_SYSTEM_ITEMS_B where segment1 = '&item_name') and category_set_id = (select mcs_tl.CATEGORY_SET_ID from mtl_category_sets_tl mcs_tl where mcs_tl.CATEGORY_SET_NAME ='INV_COLORS_SET');

This sql provide the key columns in the table. select mic.ORGANIZATION_ID, mic.INVENTORY_ITEM_ID , mic.CATEGORY_SET_ID , mic.CATEGORY_ID from mtl_item_categories mic where inventory_item_id = ( select distinct (INVENTORY_ITEM_ID ) from MTL_SYSTEM_ITEMS_B where segment1 = '&item_name') and category_set_id = (select mcs_tl.CATEGORY_SET_ID from mtl_category_sets_tl mcs_tl where mcs_tl.CATEGORY_SET_NAME ='INV_COLORS_SET');

ORGANIZATION_ID INVENTORY_ITEM_ID CATEGORY_SET_ID CATEGORY_ID 204 519940 1100000423 28606 207 519940 1100000423 28606

The data is form a Vision install data Orgainization_id 204 is V1 Vision Operations Orgainization_id 207 is M1 Seatle Manufacuting

The example query show now to connect categories to a category set. When looking for the data , the name of the category set os stored in the mtl_category_sets_tl. MTL_CATEGORY_SETS_TL table does not contain the STRUCTURE_ID to link back to the categories in the mtl_categories_b table. When linking these tables it is also important to note, a category structure can be used by more than one category set.

select Segment1, mcb.CATEGORY_ID, mcb.STRUCTURE_ID, mcs_b.CATEGORY_SET_ID from mtl_categories_b mcb, mtl_category_sets_b mcs_b where mcb.STRUCTURE_ID = (select mcs_b.STRUCTURE_ID from mtl_category_sets_b mcs_b where mcs_b.CATEGORY_SET_ID = (select mcs_tl.CATEGORY_SET_ID from mtl_category_sets_tl mcs_tl where CATEGORY_SET_NAME ='INV_COLORS_SET')) and mcb.STRUCTURE_ID = mcs_b.STRUCTURE_ID;

SEGMENT1 GREEN BLUE ORANGE BLACK RED

CATEGORY_ID 30606 30607 30608 28606 31606

STRUCTURE_ID 52670 52670 52670 52670 52670

CATEGORY_SET_ID 1100000423 1100000423 1100000423 1100000423 1100000423

Example of the Category Import Process Since we create Item category records through the forms, we use the order DELETE,CREATE, and UPDATE for the example. For each of the following we will show two examples he first using the names orgs , items and categories. The second the ID internal to the system. You can mix and match as needed. The insert below represents the minimum number of columns that must be populated in order to be succeessful.

Examples using character data ( For my example I started with the 'Category_Item' assign to the value 'BLACK')

DELETE INSERT INTO MTL_ITEM_CATEGORIES_INTERFACE (ITEM_NUMBER,CATEGORY_SET_NAME,CATEGORY_NAME ,PROCESS_FLAG, ORGANIZATION_CODE , SET_PROCESS_ID, TRANSACTION_TYPE) VALUES ('Category_Item','INV_COLORS_SET','BLACK',1,'V1',1,'DELETE'); COMMIT;

CREATE INSERT INTO MTL_ITEM_CATEGORIES_INTERFACE (ITEM_NUMBER,CATEGORY_SET_NAME,CATEGORY_NAME ,PROCESS_FLAG, ORGANIZATION_CODE , SET_PROCESS_ID, TRANSACTION_TYPE) VALUES ('Category_Item','INV_COLORS_SET','BLACK',1,'V1',1,'CREATE'); COMMIT; (Note: the create transaction can be used in combination with the Item Open Interface to creates items with something other than the default category. The SET_PROCESS_ID in both the MTL_ITEM_CATEGORIES_INTERFACE and the MTL_SYSTEM_ITEMS_INTERFACE must be the same AND the when the Item Open interface is run the Process Set must equal the The SET_PROCESS_ID. If the Item Open interface is run with the Null the categies will not be imported at the same tiem ) FOR THE UPDATE TRANSATION WE NEED TO ADD THE FIELD OLD_CATEGORY_NAME FOR THE RECORD TO PROCESS CORRECTLY . INSERT INTO MTL_ITEM_CATEGORIES_INTERFACE (ITEM_NUMBER,CATEGORY_SET_NAME,CATEGORY_NAME,ORGANIZATION_CODE,PROCE SS_FLAG, TRANSACTION_TYPE,SET_PROCESS_ID,OLD_CATEGORY_NAME) VALUES('Category_Item','INV_COLORS_SET','RED','V1',1,'UPDATE',1,'BLACK');

Example of using the ID fields. ( For my example I started with the 'Category_Item' assign to the value 'BLACK')

INSERT INTO MTL_ITEM_CATEGORIES_INTERFACE (ORGANIZATION_ID,INVENTORY_ITEM_ID,CATEGORY_SET_ID,CATEGORY_ID,PROCESS_FL AG ,SET_PROCESS_ID, TRANSACTION_TYPE) VALUES (204,519940,1100000423,28606,1,1,'DELETE')

INSERT INTO MTL_ITEM_CATEGORIES_INTERFACE (ORGANIZATION_ID,INVENTORY_ITEM_ID,CATEGORY_SET_ID,CATEGORY_ID,PROCESS_FL AG ,SET_PROCESS_ID, TRANSACTION_TYPE) VALUES (204,519940,1100000423,28606,1,1,'CREATE')

INSERT INTO MTL_ITEM_CATEGORIES_INTERFACE (ORGANIZATION_ID,INVENTORY_ITEM_ID,CATEGORY_SET_ID,CATEGORY_ID,PROCESS_FL AG ,SET_PROCESS_ID, TRANSACTION_TYPE,OLD_CATEGORY_ID ) VALUES (204,519940,1100000423,31606,1,1,'UPDATE',28606 )

Using the Import Item Category Assignments The Menu navigation is Items : Import:Import Item Category Assignments

10

from Oracle Manufacturing APIs and Open Interfaces Manual Release 11i Part No. A95953-05 Item Category Assignment Interface Runtime Options To run the Item Interface, select Import Item Category Assignments from the Import submenu, accessed from the Inventory menu. When you run the Item Category Interface, you are prompted for report parameters. These are runtime options for the Item Category Interface: Record Set Id Enter a set id number for the set of records in the interface table that you want to process. The program picks up the records having that id in the SET_PROCESS_ ID column. This column value cannot be NULL. In order to avoid set id value conflicts between record sets imported by different users, you should use the sequence MTL_SYSTEM_ITEMS_INTF_SETS_S when populating the SET_ PROCESS_ID column. Upload Processed Records Yes All qualifying item category assignment records in the interface table are inserted into Oracle Inventory. No Do not insert item category assignments into Oracle Inventory. Use this option if you want to validate items without any processing. Delete Processed Records Yes

11

Delete successfully processed item category assignment records from the item categories interface table. No Leave all records in the item categories interface table.

Determining Batch Size Running the Item Interface in Create Mode The optimum batch size depends upon the amount of data being imported and the power of your system. If you are processing 10,000 items or less, break the 10,000 items into smaller groups. A batch size of 1,000 to 2,000 should be adequate to process these rows efficiently. Load the records for one group, process them, then delete the records from the interface table. If you wish to maintain history, create separate history tables and move processed rows there, instead of deleting them. Leaving large numbers of processed rows in the interface table will degrade performance of the Open Item Interface. For a greater number of records, you may also use a batch size of 2,000 but you may want to try larger batch sizes, up to 5,000 items. The best way to determine your batch size is by benchmarking. First, try loading 2,000 items into interface tables. Note the time the Item Interface takes to process these rows in one batch. If this time is more than 20 minutes, stick with the batch size of 2,000 or less. Otherwise, you may want to try larger batch sizes. If importing a large number of records, you should break down your records into batch size, determined above, and process them in parallel for optimum performance. See: Multi-Thread Capability (Parallel Runs of the Item Interface), for more information.

12

The are are three types of transaction supported for categories CREATE, UPDATE, and DELETE (Note the UPDATE transaction type was not originally supported For 11.5.9 Patch 4088037 Patch recommended for all users. On applying this patch Import Item Category Assignment program will support transaction type 'UPDATE' to update existing Item Category assignments Minimum file version Product inv inv inv inv inv inv Directory patch/115/odf patch/115/sql patch/115/sql patch/115/sql patch/115/sql patch/115/sql File invintf.odf INVCICIB.pls INVPCATB.pls INVPCATS.pls INVVCATB.pls INVVCATS.pls Version 115.59.11592.2 115.17.11592.4 115.24.11590.9 115.10.11590.5 115.11.11592.7 115.9.11592.2

For 11.5.10 Patch 4060373 FP:11I9-11.5.10 - 'UPDATE' FUNCTIONALITY FOR IMPORT ITEM CATEGORY ASSIGNMENT Minimum file version Product inv inv inv inv inv inv Directory patch/115/odf patch/115/sql patch/115/sql patch/115/sql patch/115/sql patch/115/sql File invintf.odf INVCICIB.pls INVPCATB.pls INVPCATS.pls INVVCATB.pls INVVCATS.pls Version 115.63.115100.3 115.28.115100.2 115.31.115100.3 115.13.115100.2 115.19.115100.2 115.9.11592.2

The file INVPCATS.pls contain the definition for all the APIs . The example below show how to select the data via sql . These are only exmaples you will need to verfy they work for you. The control stucture and error handling are not provide, you will need to generate these to meet your needs.

13

APIs declare l_return_status VARCHAR2(80); l_error_code NUMBER; l_msg_count NUMBER; l_msg_data VARCHAR2(80); l_category_id NUMBER; l_category_set_id NUMBER; l_Inventory_item_id NUMBER; l_organization_id NUMBER; begin select mcs_tl.CATEGORY_SET_ID into l_category_set_id from mtl_category_sets_tl mcs_tl where mcs_tl.CATEGORY_SET_NAME ='INV_COLORS_SET'; select mcb.CATEGORY_ID into l_category_id from mtl_categories_b mcb where mcb.SEGMENT1='RED' and mcb.STRUCTURE_ID = (select mcs_b.STRUCTURE_ID from mtl_category_sets_b mcs_b where mcs_b.CATEGORY_SET_ID = (select mcs_tl.CATEGORY_SET_ID from mtl_category_sets_tl mcs_tl where CATEGORY_SET_NAME ='INV_COLORS_SET')); select distinct (INVENTORY_ITEM_ID ) into l_Inventory_item_id from MTL_SYSTEM_ITEMS_KFV msik where msik.CONCATENATED_SEGMENTS = 'Category_Item'; select organization_id into l_organization_id from mtl_parameters where organization_code ='V1'; INV_ITEM_CATEGORY_PUB.Delete_Category_Assignment ( p_api_version => 1.0, p_init_msg_list => FND_API.G_FALSE, p_commit => FND_API.G_TRUE, x_return_status => l_return_status, x_errorcode => l_error_code, x_msg_count => l_msg_count, x_msg_data => l_msg_data, p_category_id => l_category_id, p_category_set_id => l_category_set_id, p_inventory_item_id => l_Inventory_item_id, p_organization_id =>l_organization_id ); end;

14

declare l_return_status VARCHAR2(80); l_error_code NUMBER; l_msg_count NUMBER; l_msg_data VARCHAR2(80); l_category_id NUMBER; l_category_set_id NUMBER; l_Inventory_item_id NUMBER; l_organization_id NUMBER; begin select mcs_tl.CATEGORY_SET_ID into l_category_set_id from mtl_category_sets_tl mcs_tl where mcs_tl.CATEGORY_SET_NAME ='INV_COLORS_SET'; select mcb.CATEGORY_ID into l_category_id from mtl_categories_b mcb where mcb.SEGMENT1='BLACK' and mcb.STRUCTURE_ID = (select mcs_b.STRUCTURE_ID from mtl_category_sets_b mcs_b where mcs_b.CATEGORY_SET_ID = (select mcs_tl.CATEGORY_SET_ID from mtl_category_sets_tl mcs_tl where CATEGORY_SET_NAME ='INV_COLORS_SET')); select distinct (INVENTORY_ITEM_ID ) into l_Inventory_item_id from MTL_SYSTEM_ITEMS_KFV msik where msik.CONCATENATED_SEGMENTS = 'Category_Item'; select organization_id into l_organization_id from mtl_parameters where organization_code ='V1'; INV_ITEM_CATEGORY_PUB.Create_Category_Assignment ( p_api_version => 1.0, p_init_msg_list => FND_API.G_FALSE, p_commit => FND_API.G_TRUE, x_return_status => l_return_status, x_errorcode => l_error_code, x_msg_count => l_msg_count, x_msg_data => l_msg_data, p_category_id => l_category_id, p_category_set_id => l_category_set_id, p_inventory_item_id => l_Inventory_item_id, p_organization_id =>l_organization_id ); end;

15

declare l_return_status VARCHAR2(80); l_error_code NUMBER; l_msg_count NUMBER; l_msg_data VARCHAR2(80); l_category_id NUMBER; l_category_set_id NUMBER; l_Inventory_item_id NUMBER; l_organization_id NUMBER; l_old_category_id NUMBER; begin select mcs_tl.CATEGORY_SET_ID into l_category_set_id from mtl_category_sets_tl mcs_tl where mcs_tl.CATEGORY_SET_NAME ='INV_COLORS_SET'; select mcb.CATEGORY_ID into l_category_id from mtl_categories_b mcb where mcb.SEGMENT1='RED' and mcb.STRUCTURE_ID = (select mcs_b.STRUCTURE_ID from mtl_category_sets_b mcs_b where mcs_b.CATEGORY_SET_ID = (select mcs_tl.CATEGORY_SET_ID from mtl_category_sets_tl mcs_tl where CATEGORY_SET_NAME ='INV_COLORS_SET')); select distinct (INVENTORY_ITEM_ID ) into l_Inventory_item_id from MTL_SYSTEM_ITEMS_KFV msik where msik.CONCATENATED_SEGMENTS = 'Category_Item'; select organization_id into l_organization_id from mtl_parameters where organization_code ='V1'; select mic.CATEGORY_ID into l_old_category_id from mtl_item_categories mic where inventory_item_id = ( select distinct (INVENTORY_ITEM_ID ) from MTL_SYSTEM_ITEMS_B where segment1 = 'Category_Item') and category_set_id = (select mcs_tl.CATEGORY_SET_ID from mtl_category_sets_tl mcs_tl where mcs_tl.CATEGORY_SET_NAME='INV_COLORS_SET') and organization_id = l_organization_id ; INV_ITEM_CATEGORY_PUB.Update_Category_Assignment ( p_api_version => 1.0, p_init_msg_list => FND_API.G_FALSE, p_commit => FND_API.G_TRUE, x_return_status => l_return_status, x_errorcode => l_error_code, x_msg_count => l_msg_count, x_msg_data => l_msg_data, p_category_id => l_category_id, p_category_set_id => l_category_set_id, p_inventory_item_id => l_Inventory_item_id, p_organization_id =>l_organization_id, p_old_category_id => l_old_category_id ); end;

16

You might also like