Passing additional parameters to price rule engine
Customized parameters can pass to the price rule element, by using the request properties in the command context, and the extended data map in the runtime parameters for price rules.
You can customize parameters easily to pass through a price rule element, such as valuePoints.
How to pass a new parameter to a price rule element
Here is an example to show how to pass a new parameter, valuePoints, into a price rule element.
- Put the parameter into the request properties map in the command
context in a controller/task command. The parameter
must be in the request properties map before it calls the price rule
engine. An example of customized code is as follows:In
/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);
- In the price rule element command, use similar code similar to
retrieve the parameter: In
/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(PriceRuleConstants.RETURNED_OBJECT_OFFERS); BigDecimal priceInOffer = baseOffer.getValue();