ATG 创建组件并动态设置日志记录
ATG create component and set logging dynamically
我正在使用 ATG 9.4 并尝试修改我们的促销引擎,以便我们可以为每个促销设置过滤器属性,而不是直接在全局 QualifierService 上设置。
基本上,我所做的是为 QualifierService 上可用的每个过滤器标志向项目折扣存储库项目添加属性。然后我将 ItemDiscountCalculator 子类化并覆盖 priceItems()。我从 pPricingModel 中读取标志,构建一个新的 Qualifier 对象,并将其放入具有键 ItemDiscountCalculator.EXTRA_PARAM_QUALIFIERSERVICE 的 pExtraParameters 映射中。然后我调用 super.priceItems()
对于我正在尝试做的事情,这 100% 完美地工作 - 但是,当我构建新的限定符时,我使用 setLoggingXXX 方法来反映全局 QualifierService 上的任何级别,但是没有来自这些的日志记录新对象。
我认为这与向 nucleus 注册对象有关,因此与它使用的任何日志记录组件有关,但我一直无法找到我需要做什么来注册它们或至少允许 Qualifier进行自然记录。
下面是相关的代码行:
@Override
@SuppressWarnings("unchecked")
public void priceItems(List pPriceQuotes, List pItems, RepositoryItem pPricingModel, Locale pLocale, RepositoryItem pProfile, Order pOrder, Map pExtraParameters) throws PricingException {
if (isLoggingTrace())
logTrace("Entry - CustomItemDiscountCalculator.priceItems()");
Qualifier qualifierService = getQualifierService(pPricingModel);
if (pExtraParameters == null) {
pExtraParameters = new HashMap();
}
pExtraParameters.put(ItemDiscountCalculator.EXTRA_PARAM_QUALIFIERSERVICE, qualifierService);
super.priceItems(pPriceQuotes, pItems, pPricingModel, pLocale, pProfile, pOrder, pExtraParameters);
if (isLoggingTrace())
logTrace("Exit - CustomItemDiscountCalculator.priceItems()");
}
private Qualifier getQualifierService(RepositoryItem pPricingModel) {
if (isLoggingTrace())
logTrace("Entry - CustomItemDiscountCalculator.getQualifierService()");
Qualifier qualifierService = new Qualifier();
/* Get global component at /atg/commerce/pricing/QualifierService */
Qualifier defaultQualifierService = getQualifierService();
/* Shallow clone the global QualifierService component */
qualifierService.setPMDLCache(defaultQualifierService.getPMDLCache());
qualifierService.setClosenessQualifierItemDescriptorName(defaultQualifierService.getClosenessQualifierItemDescriptorName());
qualifierService.setExactlyPromotionLoopThrough(defaultQualifierService.isExactlyPromotionLoopThrough());
qualifierService.setLoggingDebug(defaultQualifierService.isLoggingDebug());
qualifierService.setLoggingError(defaultQualifierService.isLoggingError());
qualifierService.setLoggingInfo(defaultQualifierService.isLoggingInfo());
qualifierService.setLoggingTrace(defaultQualifierService.isLoggingTrace());
qualifierService.setLoggingWarning(defaultQualifierService.isLoggingWarning());
qualifierService.setNucleus(defaultQualifierService.getNucleus());
qualifierService.setPricingModelProperties(defaultQualifierService.getPricingModelProperties());
qualifierService.setPricingModelRepository(defaultQualifierService.getPricingModelRepository());
qualifierService.setServiceInfo(defaultQualifierService.getServiceInfo());
/* Set any promotion specific qualifier properties */
Boolean curFilterValue;
if (isLoggingDebug()) {
logDebug("Setting qualifier properties for promo: " + pPricingModel);
}
curFilterValue = (Boolean) pPricingModel.getPropertyValue("filterForQualifierDiscountedByAnyDiscountId");
qualifierService.setFilterForQualifierDiscountedByAnyDiscountId(curFilterValue);
// ... copy the rest of the QualifierService filters
if (isLoggingTrace())
logTrace("Exit - CustomItemDiscountCalculator.getQualifierService()");
return qualifierService;
}
LogListener[] logListeners = defaultQualifierService.getLogListeners();
for (LogListener[] logListener : logListeners) {
qualifierService.addLogListener(logListener);
}
我正在使用 ATG 9.4 并尝试修改我们的促销引擎,以便我们可以为每个促销设置过滤器属性,而不是直接在全局 QualifierService 上设置。
基本上,我所做的是为 QualifierService 上可用的每个过滤器标志向项目折扣存储库项目添加属性。然后我将 ItemDiscountCalculator 子类化并覆盖 priceItems()。我从 pPricingModel 中读取标志,构建一个新的 Qualifier 对象,并将其放入具有键 ItemDiscountCalculator.EXTRA_PARAM_QUALIFIERSERVICE 的 pExtraParameters 映射中。然后我调用 super.priceItems()
对于我正在尝试做的事情,这 100% 完美地工作 - 但是,当我构建新的限定符时,我使用 setLoggingXXX 方法来反映全局 QualifierService 上的任何级别,但是没有来自这些的日志记录新对象。
我认为这与向 nucleus 注册对象有关,因此与它使用的任何日志记录组件有关,但我一直无法找到我需要做什么来注册它们或至少允许 Qualifier进行自然记录。
下面是相关的代码行:
@Override
@SuppressWarnings("unchecked")
public void priceItems(List pPriceQuotes, List pItems, RepositoryItem pPricingModel, Locale pLocale, RepositoryItem pProfile, Order pOrder, Map pExtraParameters) throws PricingException {
if (isLoggingTrace())
logTrace("Entry - CustomItemDiscountCalculator.priceItems()");
Qualifier qualifierService = getQualifierService(pPricingModel);
if (pExtraParameters == null) {
pExtraParameters = new HashMap();
}
pExtraParameters.put(ItemDiscountCalculator.EXTRA_PARAM_QUALIFIERSERVICE, qualifierService);
super.priceItems(pPriceQuotes, pItems, pPricingModel, pLocale, pProfile, pOrder, pExtraParameters);
if (isLoggingTrace())
logTrace("Exit - CustomItemDiscountCalculator.priceItems()");
}
private Qualifier getQualifierService(RepositoryItem pPricingModel) {
if (isLoggingTrace())
logTrace("Entry - CustomItemDiscountCalculator.getQualifierService()");
Qualifier qualifierService = new Qualifier();
/* Get global component at /atg/commerce/pricing/QualifierService */
Qualifier defaultQualifierService = getQualifierService();
/* Shallow clone the global QualifierService component */
qualifierService.setPMDLCache(defaultQualifierService.getPMDLCache());
qualifierService.setClosenessQualifierItemDescriptorName(defaultQualifierService.getClosenessQualifierItemDescriptorName());
qualifierService.setExactlyPromotionLoopThrough(defaultQualifierService.isExactlyPromotionLoopThrough());
qualifierService.setLoggingDebug(defaultQualifierService.isLoggingDebug());
qualifierService.setLoggingError(defaultQualifierService.isLoggingError());
qualifierService.setLoggingInfo(defaultQualifierService.isLoggingInfo());
qualifierService.setLoggingTrace(defaultQualifierService.isLoggingTrace());
qualifierService.setLoggingWarning(defaultQualifierService.isLoggingWarning());
qualifierService.setNucleus(defaultQualifierService.getNucleus());
qualifierService.setPricingModelProperties(defaultQualifierService.getPricingModelProperties());
qualifierService.setPricingModelRepository(defaultQualifierService.getPricingModelRepository());
qualifierService.setServiceInfo(defaultQualifierService.getServiceInfo());
/* Set any promotion specific qualifier properties */
Boolean curFilterValue;
if (isLoggingDebug()) {
logDebug("Setting qualifier properties for promo: " + pPricingModel);
}
curFilterValue = (Boolean) pPricingModel.getPropertyValue("filterForQualifierDiscountedByAnyDiscountId");
qualifierService.setFilterForQualifierDiscountedByAnyDiscountId(curFilterValue);
// ... copy the rest of the QualifierService filters
if (isLoggingTrace())
logTrace("Exit - CustomItemDiscountCalculator.getQualifierService()");
return qualifierService;
}
LogListener[] logListeners = defaultQualifierService.getLogListeners();
for (LogListener[] logListener : logListeners) {
qualifierService.addLogListener(logListener);
}