Below code snippet updates an item's storage and tracking dimensions.
InventTableInventoryDimensionGroups::updateDimensionGroupsForItem(curext(), inventTable.ItemId,
5637144577,
5637144577);
All you need is itemId and recIds of the storage and tracking dimensions to update, which can be found in EcoResStorageDimensionGroup and EcoResTrackingDimensionGroup tables holding the recIds of Storage and Tracking dimensions.
I had a recent requirement to make sure there are no itemIds in the system which dont have storage or tracking dimensions not set as I had to create and post some counting journals that require these dimensions. Luckily all the items required the same storage and tracking dimensions so my job became easier.
I used the below job to run a while loop with notexists join finding out items that don't have these dimensions set and update the same.
static void ScriptToUpdateStorageTrackingDimensions(Args _args)
{
InventTable inventTable;
EcoResStorageDimensionGroupItem EcoResStorageDimensionGroupItem;
EcoResTrackingDimensionGroupItem EcoResTrackingDimensionGroupItem;
int storageCount, trackingCount;
while select inventTable
notexists join EcoResStorageDimensionGroupItem
where EcoResStorageDimensionGroupItem.itemId == inventTable.itemId &&
EcoResStorageDimensionGroupItem.ItemDataAreaId == 'abc'
{
storageCount++;
InventTableInventoryDimensionGroups::updateDimensionGroupsForItem(
curext(), inventTable.ItemId,
5637144577,
0);
}
while select inventTable
notexists join EcoResTrackingDimensionGroupItem
where EcoResTrackingDimensionGroupItem.itemId == inventTable.itemId &&
EcoResTrackingDimensionGroupItem.ItemDataAreaId == 'abc'
{
trackingCount++;
InventTableInventoryDimensionGroups::updateDimensionGroupsForItem(
curext(), inventTable.ItemId,
5637144577,
5637144577);
}
//sw - storage - 5637144577
//none - tracking - 5637144577
info(int2str(storageCount));
info(int2str(trackingCount));
info('Done');
}