Pasar parámetros adicionales al motor de reglas de precios
Los parámetros personalizados pueden pasar sencillamente al elemento de regla de precios utilizando las propiedades de solicitud del contexto del mandato y la correlación de datos ampliados de los parámetros de tiempo de ejecución para reglas de precios.
Los parámetros pueden personalizarse fácilmente para pasarlos a través de un elemento de regla de precio, como valuePoints.
Cómo pasar un nuevo parámetro a un elemento de regla de precio
A continuación se muestra un ejemplo sobre cómo pasar un nuevo parámetro, valuePoints, a un elemento de regla de precios.
- Coloque el parámetro en la correlación de propiedades de solicitud del contexto de mandato en un mandato controller/task. El parámetro debe estar en la correlación de parámetros de solicitud antes de llamar al motor de reglas de precios. A continuación se muestra un ejemplo de código personalizado:En
/WebSphereCommerceServerExtensionsLogic/src/com/mycompany/commerce/price/facade/server/commands/ExtFetchEntitledPriceByCatentryIdCmdImpl.java
:// Put extra parameter into request properties in command context TypedProperty reqProps = getCommandContext().getRequestProperties(); if (reqProps == null) { reqProps = new TypedProperty(); getCommandContext().setRequestProperties(reqProps); } // get value points value from xpath expression int valuePoints = MyFetchEntitledPriceCmdHelper.getValuePointsFromXpathExpression (getSearchExpression()); reqProps.put(MyPriceFacadeServerConstants.XPATH_STRING_PRICING_VALUEPOINTS, valuePoints);
- En el mandato de elemento de regla de precios, utilice un código parecido a este para recuperar el parámetro: En
/WebSphereCommerceServerExtensionsLogic/src/com/mycompany/commerce/price/rule/commands/element/MyPriceListElementCmdImpl.java
:// Get extra parameter Map extDataMap = (Map)getRuntimeParametersMap().get(PriceRuleConstants.PARAMETER_ PRICERULE_EXTRA_DATA_MAP); if (extDataMap != null){ TypedProperty requestProps = (TypedProperty)extDataMap.get(PriceRuleConstants.PARAMETER_ PRICERULE_EXTRA_DATA_REQUEST_PROPERTIES_MAP); if (requestProps != null){ int valuePoints = ((Integer)requestProps.get(MyPriceFacadeServerConstants.XPATH_ STRING_PRICING_VALUEPOINTS, null)).intValue(); if (valuePoints != 0){ // Get the original base offer price MonetaryAmount baseOffer = (MonetaryAmount)super.getReturnedObject().get(PriceRule Constants.RETURNED_OBJECT_OFFERS); BigDecimal priceInOffer = baseOffer.getValue();