2016-08-10 2 views
1

ATG 9.4를 사용 중이며 Google의 프로모션 엔진을 수정하여 글로벌 QualifierService 대신 직접 프로모션별로 필터 속성을 설정할 수 있습니다.ATG 구성 요소를 만들고 동적으로 로깅을 설정하십시오.

기본적으로 내가 한 것은 QualifierService에서 사용할 수있는 각 필터 플래그에 대해 Item Discount 저장소 항목에 속성을 추가 한 것입니다. 그럼 ItemDiscountCalculator 및 priceItems() 재정의했습니다. pPricingModel에서 플래그를 읽고, 새로운 Qualifier 오브젝트를 생성하고, ItemDiscountCalculator.EXTRA_PARAM_QUALIFIERSERVICE 키를 사용하여 pExtraParameters 맵에 넣습니다. 그런 다음 super.priceItems()를 호출합니다.

이 작업은 100 % 완벽하게 작동합니다. 그러나 새 한정자를 구성하면 setLoggingXXX 메서드를 사용하여 전역 QualifierService에있는 수준을 반영합니다. ,하지만 이러한 새로운 개체에서 로깅이 없습니다.

핵과 개체를 등록하는 것과 관련이 있다고 가정합니다. 그러나 어떤 로깅 구성 요소를 사용 하든지 등록을하기 위해해야 ​​할 일을 찾지 못했거나 최소한 한정자가 할 수있는 것을 찾을 수 없었습니다 그것의 자연 로깅. 다음은

코드의 관련 라인은 다음과 같습니다

@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; 
} 

답변

1
LogListener[] logListeners = defaultQualifierService.getLogListeners(); 
for (LogListener[] logListener : logListeners) { 
    qualifierService.addLogListener(logListener); 
} 
+0

감사 매트, 완벽하게 작동 –

관련 문제