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
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