Pasar parámetros adicionales al motor de reglas de precios

Los parámetros personalizados pueden pasar 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, en 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 que invoque 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 precio, utilice un código parecido 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(PriceRuleConstants.RETURNED_OBJECT_OFFERS);
    						BigDecimal priceInOffer = baseOffer.getValue();