Personalización de los cargos de envío
Es posible que en algunos casos necesite personalizar el cálculo de cargos de envío. Por ejemplo, si un artículo y el producto padre están bajo categorías diferentes y cada categoría tiene adjunto un código de cálculo de cargos de envío diferente, la ejecución elegirá ambos códigos de cálculo de cargos de envío y el resultado final será acumulativo. Para evitar esto, puede personalizar el código, alterando CalculationCodeCombineCmdImpl.getIndirectlyAttachedCodes().
Procedimiento
- Cree un mandato de tarea que amplíe CalculationCodeCombineCmd. Por ejemplo,
public interface EGShippingCalculationCodeCombineCmd extends CalculationCodeCombineCmd { public static final String defaultCommandClassName = "com.example.commerce.order.calculation.EGShippingCalculationCodeCombineCmd Impl"; }
- Cree una implementación del mandato de tarea que amplíe CalculationCodeCombineCmdImpl. Por ejemplo,
EGShippingCalculationCodeCombineCmdImpl extends CalculationCodeCombineCmdImpl implements EGShippingCalculationCodeCombineCmd { }
- Amplíe el comportamiento predeterminado de getIndirectlyAttachedCodes(Item) para filtrar los códigos de cálculo de cargos de envío externos. Por ejemplo,
protected CalculationCodeAccessBean[] getIndirectlyAttachedCodes(Item iItem) { CalculationCodeAccessBean[] abCodes = super.getIndirectlyAttachedCodes(iItem); //if the array contains both the product and item level shipping calculation codes, get rid of the product level one return abCodes; }
- Registre el mandato de tarea como método de cálculo en la tabla CALMETHOD. Por ejemplo,
INSERT INTO CALMETHOD VALUES (some unique ID, -1, -2, 'com.example.commerce.order.calculation.EGShippingCalculationCodeCombineCmd ', 'EG custom CalculationCodeCombine for shipping', 1, 'EGShippingCalculationCodeCombine')
- Establezca el método de cálculo como el método de cálculo CalculationCodeCombine para el envío:
UPDATE STENCALUSG SET ACTCC_CALMETHOD_ID=calculation methodID WHERE STOREENT_ID IN (store ID, -1) AND CALUSAGE_ID=-2
Nota: No personalice CalculationHelper.getProductAndItemIds(nCatalogEntryId).