Thursday, 17 August 2017

Adding SKU Inventory level in BCC SKU properties general tab

Step :1:

We can achieve this functionality  in 2 ways
1. Extending RepositoryPropertyDescriptor -- It don't support logging functionality -In ATG mentioned use this one for transient property.
2. Extending GSAPropertyDescriptor It  supports logging functionality

Here I was used second approach (for transient property).
Create new class by extending GSAPropertyDescriptor class.Access inventory repository or inventorymanager to get inventory for given sku id:

Reference code:

package com.Nagesh.commerce.catalog;
import atg.adapter.gsa.GSAPropertyDescriptor;
import atg.nucleus.Nucleus;
import atg.repository.RepositoryItem;
import atg.repository.RepositoryItemImpl;

import com.Nagesh.commerce.inventory.InventoryManager;

/**
 * This class is responsible for to get inventoryLevel for the inventory repository for given SKU id
 * @author Nagesh
 */
public class SKUInventoryRepositoryPropertyDescriptor extends   GSAPropertyDescriptor {
    /**
*  Unique serialVersionUID added for serialization purpose
*/
private static final long serialVersionUID = -25670871313135177194L;
private static final String INV_MANAGER="/atg/commerce/inventory/InventoryManager";

@Override
public Object getPropertyValue(RepositoryItemImpl sku, Object pValue) {

long skuInventoryLevel = 0;
String skuId = null;
InventoryManager invManager = null;
RepositoryItem inventoryItem = null;
 try{
if (sku.getPropertyValue("id") != null) {
skuId= (String)sku.getPropertyValue("id");
logDebug("SKUInventoryRepositoryPropertyDescriptor Sku id for inventory visibility in BCC: "+skuId);

invManager = (InventoryManager) Nucleus.getGlobalNucleus().resolveName(INV_MANAGER);

if (invManager != null) {
logDebug("SKUInventoryRepositoryPropertyDescriptor InvManager component loaded ");
inventoryItem = invManager.getInvenItem(skuId);
if (null != inventoryItem) {
logDebug("SKUInventoryRepositoryPropertyDescriptor inventory Item loaded ");

if (inventoryItem.getPropertyValue("stockLevel") != null) {
skuInventoryLevel = (Long) inventoryItem.getPropertyValue("stockLevel");
logDebug("SKUInventoryRepositoryPropertyDescriptor skuid: "+skuId +" stockLevel: "+skuInventoryLevel);
}
  if(skuInventoryLevel==0 &&inventoryItem.getPropertyValue("euStockLevel") != null) {
skuInventoryLevel = (Long) inventoryItem.getPropertyValue("euStockLevel");
logDebug("SKUInventoryRepositoryPropertyDescriptor skuid: "+skuId +" euStockLevel: "+skuInventoryLevel);
}
}else{
logDebug("SKUInventoryRepositoryPropertyDescriptor inventory Item not found for skuid: "+skuId);
}
}
         }  
     }catch (Exception ex){
  logError("SKUInventoryRepositoryPropertyDescriptor Exception : "+ex.getMessage());
       }
return skuInventoryLevel;
}
}

Step :2
Add new transient  property (inventoryLevel) in BCC-Merchandising layer catalog repository definition file:

File: \config\atg\commerce\catalog\custom\customCatalog.xml
Reference code:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<gsa-template xml-combine="append">
<header>
<name>Catalog Extensions</name>
<author>Nagesh</author>
<description>
SQL Repository for inventory visibility at SKU level
</description>
</header>
 <item-descriptor name="sku"  xml-combine="append" >
     <attribute name="resourceBundle" value="atg.commerce.CustomCatalogTemplateResources" />
             
       <property name="skuInventory"  property-type="com.Nagesh.commerce.catalog.SKUInventoryRepositoryPropertyDescriptor" data-type="long" queryable="false" writable="true" readable="true" display-name-resource="skuInventory" category-resource="categoryBasics">
           <attribute name="propertySortPriority" value="-10"/>
        </property>
  </item-descriptor>
</gsa-template>

Step:3
Add message resource key/Value for the property "skuInventory" attribute "display-name-resource"

Reference code:
Store\Commerce\resources\atg\commerce\CustomCatalogTemplateResources.properties
skuInventory=Inventory Level

Step:4: Build and Deploy EAR file in server

Output BCC -UI screen with Inventory Level value


No comments:

Post a Comment