2016-08-10 11 views
1

Ich benutze ATG 9.4 und versuche, unsere Promotions-Engine zu modifizieren, so dass wir die Filtereigenschaften pro Aktion und nicht direkt auf den globalen QualifierService einstellen können.ATG Komponente erstellen und Protokollierung dynamisch setzen

Im Grunde genommen habe ich den Item Discount-Repository-Elementen Eigenschaften für jedes im QualifierService verfügbare Filter-Flag hinzugefügt. Dann habe ich ItemDiscountCalculator subklassifiziert und priceItems() überschrieben. Ich habe die Flags von pPricingModel gelesen, ein neues Qualifier-Objekt erstellt und es mit dem Schlüssel ItemDiscountCalculator.EXTRA_PARAM_QUALIFIERSERVICE in die pExtraParameters-Map eingefügt. Ich rufe dann super.priceItems()

Dies funktioniert 100% perfekt für das, was ich versuche zu tun - jedoch, wenn ich den neuen Qualifier konstruiere, verwende ich die setLoggingXXX-Methoden, um die Ebenen auf dem globalen QualifierService widerspiegeln , aber es gibt keine Protokollierung von diesen neuen Objekten.

Ich nehme an, das hat etwas damit zu tun, die Objekte mit Nukleus zu registrieren und daher alle Logging-Komponenten zu verwenden, aber ich konnte nicht finden, was ich tun muss, um sie zu registrieren oder zumindest Qualifier tun zu lassen seine natürliche Abholzung.

Nachfolgend finden Sie die entsprechenden Codezeilen sind:

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

Antwort

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

Dank Matt, funktionierte perfekt –