Transmission de paramètres supplémentaires au moteur de règle de tarification

Des paramètres personnalisés peuvent être transmis à l'élément de règle de tarification, à l'aide des propriétés de demande du contexte de la commande et à la mappe de données étendue dans les paramètres d'exécution des règles de tarification.

Vous pouvez facilement personnaliser des paramètres pour les transmettre via un élément de règle de tarification, tel que valuePoints.

Comment transmettre un nouveau paramètre à un élément de règle de tarification

Voici un exemple illustrant la manière de transmettre un nouveau paramètre, valuePoints, dans un élément de règle de tarification.

  1. Placez le paramètre dans la mappe des propriétés de demande du contexte de commande d'une commande controller/task. Le paramètre doit se trouver dans la mappe des propriétés de demande pour pouvoir appeler le moteur de règle de tarification. Voici un exemple de code personnalisé :
    Dans /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. Dans la commande d'élément de règle de tarification, utilisez un code similaire pour extraire le paramètre :
    Dans /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();