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.

  1. 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);
  2. 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();