You can specify a price list that will be used to price items regardless of what price list is specified in a user’s profile.

ItemPriceCalculator, ConfigurableItemPriceListCalculator, and ConfigurableItemPriceListSaleCalculator all look in pExtraParameters for the price list before looking in the profile. You can set a specific price list by adding an entry to pExtraParameters with a key of profilePriceListPropertyName and a value of the priceList that you with to use (or the ID of the priceList). For example, if extraParameters maps the string priceList to a price list (or a price list ID) and profilePriceListPropertyName is set to priceList (default), then the price list in the map is used instead of the profile’s price list.

One way to implement this is to use the generic pipeline processor AddExtraParamsEntry. It adds pipeline support for specifying price lists. AddExtraParamsEntry adds a string key and string value to the extra parameters map.

To use this with pricing, create a properties file in /atg/commerce/pricing/processor/UseDifferentPriceList.properties with the following code:

$class=atg.service.pipeline.processor.AddExtraParamsEntry
     value=200005
     key=priceList

Then modify the repriceOrderChain in the commercepipeline.xml as follows:

<pipelinechain name="repriceOrder" transaction="TX_REQUIRED"
               headlink="useDifferentPriceList">
   <pipelinelink name="useDifferentPriceList" transaction="TX_MANDATORY">
      <processor jndi="/atg/commerce/pricing/processor/UseDifferentPriceList"/>
      <transition returnvalue="1" link="priceOrderTotal"/>
      <transition returnvalue="2" link="priceOrderTotal"/>
   </pipelinelink>
   <pipelinelink name="priceOrderTotal" transaction="TX_MANDATORY">
      <processor jndi="/atg/commerce/pricing/processor/PriceOrderTotal"/>
   </pipelinelink>
</pipelinechain>

This causes all orders (regardless of what is in the profile) to be priced with priceList 100012.