c# wpf document viewer pdf : Delete pages from pdf online software SDK project winforms windows web page UWP ATGCommProgGuide16-part1752

ATG  C om mer ce P ro g ramm in g   Gui d e 
14 3  
9  -  C o mm erce P ri ci ng   Servi ces   Overvi ew 
μ
9
Commerce Pricing Services Overview 
The next several chapters discuss the ATG Commerce pricing services. This chapter provides an 
introduction to concepts and terms, while those that follow provide details on the default services and 
the ways you can extend them. 
Pricing services in ATG Commerce provide a flexible system for personalizing the prices of items in your 
product catalog. Just as you can personalize content for every shopper who visits your sites, you can tailor 
prices and generate them dynamically on demand. You can also set up coupons, sales, and other 
promotions, target them for appropriate visitors, associate them with sites in a multisite environment, and 
use them in dynamic pricing situations. 
ATG Commerce pricing services include a set of standard features that are designed to handle the pricing 
demands of most Web sites. If your sites require additional functionality, you can write a new 
implementation of the many public pricing APIs that the product supplies. 
This chapter provides an overview of the provided classes and components that make up the pricing 
system. It includes the following sections: 
Common Terms in Pricing Services 
Using Dynamic vs Static Product Pricing 
How Pricing Services Generate Prices 
PricingTools Class 
FilteredCommerceItem 
PricingModelHolder 
PricingAdjustment 
PricingCommerceItem 
PricingModelProperties 
Common Terms in Pricing Services 
The following table describes common terms used in pricing. Each of these terms is described in detail in 
the chapters that follow. 
Delete pages from pdf online - software SDK project:C# PDF Page Extract Library: copy, paste, cut PDF pages in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Easy to Use C# Code to Extract PDF Pages, Copy Pages from One PDF File and Paste into Others
www.rasteredge.com
Delete pages from pdf online - software SDK project:VB.NET PDF Page Extract Library: copy, paste, cut PDF pages in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Detailed VB.NET Guide for Extracting Pages from Microsoft PDF Doc
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
14 4  
9  -  C o mm erce P ri ci ng   Servi ces   Overvi ew 
Pricing Term 
Definition 
Calculator 
An object that looks at all or part of an 
Order
and returns a price. 
See the Commerce Pricing Calculators chapter for information. 
Pricing Model 
Definition Language 
(PMDL) 
Describes promotions. This includes the discount rules for when a 
promotion may apply (the condition), the rules for what may be 
discounted (the offer), and how to apply the discount (for 
example, 10% off). 
The ACC includes an interface for creating rules, as does ATG 
Merchandising; see the ATG Commerce Guide to Setting Up a Store 
and the ATG Merchandising Guide for Business Users  
PriceInfo
An object that contains the price of part of an order. There are 
four main kinds of 
priceInfo
objects: 
OrderPriceInfo
ItemPriceInfo
ShippingPriceInfo
, and 
TaxPriceInfo
There is also a 
DetailedItemPriceInfo
, which is described 
with the 
ItemPriceInfo
object. See the Price Holding Classes 
section of the Base Commerce Pricing Engines chapter. 
PricingAdjustment
Describes why and how a particular price was changed. It 
includes a description of the change and the amount. It also 
contains the promotion (if any) that triggered the change. See 
the DetailedItemPriceInfo object for information. 
PricingContext 
Provides the items being priced, the order, the site, the 
promotion, the locale, and the profile used when a price was 
calculated. It can also include secondary information not 
applicable in all cases, such as the shipping group. 
PricingModel
A repository item that describes a discount. It includes a PMDL 
rule and the discount type and amount. It also contains 
information about when the pricing model may be used, 
including upsell information if applicable. 
Promotion 
Allows you to offer periodic discounts on specific products or 
groups of products. See PMDL and 
PricingModel
in this table, 
and the Understanding Promotions chapter. 
Qualifier 
A service that interprets a PMDL rule and decides what, if 
anything, may be discounted. 
Condition 
The first part of a PMDL rule, which defines when something can 
receive a discount. 
Offer 
The second part of a PMDL rule, which defines which part of an 
order receives a discount. 
software SDK project:VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
Easy to delete PDF page in .NET WinForms application and ASPX webpage. Enable specified pages deleting from PDF in Visual Basic .NET class.
www.rasteredge.com
software SDK project:C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
able to delete PDF page in both Visual C# .NET WinForms and ASP.NET WebForms project. Free online C# class source code for deleting specified PDF pages in .NET
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
14 5  
9  -  C o mm erce P ri ci ng   Servi ces   Overvi ew 
Using Dynamic vs Static Product Pricing 
ATG Commerce supports two pricing methods for use on product pages: 
Static pricing—Each item in the catalog has a list price stored in the 
listPrice
property of the catalog repository (optionally, each item can also have a 
salePrice
). 
You display the price on the appropriate site pages, and the ATG Commerce pricing 
services use that price as a base for calculating order totals, shipping costs, and sales 
tax. 
Dynamic pricing—Programmatically determines the price. Dynamic pricing is always 
used on the shopping cart and purchase process pages, but can also be used on 
product pages if necessary. 
These are both forms of SKU-based pricing, as opposed to pricing based on price lists. See the Using Price 
Lists chapter for information on price lists. 
Using dynamic pricing on a product page can cause a significant decrease in performance compared to 
using static pricing. Many sites do not need to show dynamic pricing on product pages; it may be 
sufficient to show dynamic prices only when a customer places items in the shopping cart. For example, 
suppose you send a specific group of customers a coupon for 20% off all blue items. On the product 
pages of the site, blue items appear with their static list or sale price, which is the same for all customers. 
However, when a customer with the “20% off” coupon adds a blue item to his or her shopping cart, 
dynamic pricing takes effect, and the item price appears on the Shopping Cart or Checkout page (for 
example) with a discount of 20%. 
If you do decide to use dynamic pricing on product pages, you can still ensure a high level of performance 
by using the pricing features selectively. You can use dynamic pricing on certain product templates and 
static pricing on others. You can also choose to restrict dynamic pricing to certain types of customers (for 
example, registered visitors only). 
How Static Pricing Works 
With static pricing, each item in the catalog has a list price stored in the 
listPrice
property of the 
catalog repository. You display the price on the appropriate site pages, and the ATG Commerce Pricing 
Services can then use that price as a base for calculating order totals, shipping costs, and sales tax. 
Optionally, you can maintain more than one price per item – for example, you can give each item a fixed 
sale price in addition to its list price by specifying a value for the 
salePrice
property in the catalog 
repository. When you want the alternate price to take effect, use the 
Switch
servlet bean with the 
onSale
property from the Catalog repository. The following example uses the default ATG Commerce 
product catalog: 
<dsp:droplet name="/atg/dynamo/droplet/Switch"> 
<dsp:param param="sku.onSale" name="value"/> 
<dsp:oparam name="false"> 
List price of <dsp:valueof param="sku.listPrice" converter="currency"/> 
</dsp:oparam> 
<dsp:oparam name="true"> 
software SDK project:C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
C# view PDF online, C# convert PDF to tiff, C# read PDF, C# convert PDF to text, C# extract PDF pages, C# comment annotate PDF, C# delete PDF pages, C# convert
www.rasteredge.com
software SDK project:C# PDF Page Insert Library: insert pages into PDF file in C#.net
document files by C# code, how to rotate PDF document page, how to delete PDF page using C# .NET, how to reorganize PDF document pages and how
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
14 6  
9  -  C o mm erce P ri ci ng   Servi ces   Overvi ew 
List price of <dsp:valueof param="sku.listPrice" converter="currency"/> 
on sale for <dsp:valueof param="sku.salePrice" converter="currency"/>! 
</dsp:oparam> 
</dsp:droplet> 
For information about the 
Switch
servlet bean, see Appendix B: ATG Servlet Beans in the ATG Page 
Developer’s Guide
How Dynamic Pricing Works 
You can use dynamic pricing for the following types of pricing object: 
Items. Each item has a list price that can be specified in the 
listPrice
property of 
the Product Catalog repository. ATG Commerce pricing services adapt the list price by 
applying any discounts or other promotions that you have set up. For example, you 
might set up a “2-for-1” sale for a limited period on a specific type of item. (Note that 
an “item” is a 
CommerceItem
, which represents a quantity of a SKU or a product). 
Orders. ATG Commerce pricing services calculate the total cost of an order and can 
apply any discounts that are applicable (for example, a customer might have a coupon 
offering a 10% discount on a total order). 
Shipping price. ATG Commerce pricing services can calculate the price of shipping for 
an order and apply discounts if applicable. 
Tax. ATG Commerce pricing services can calculate the sales tax for an order. 
ATG Commerce uses the same basic structure for pricing each type of object. The structure includes the 
following: 
A pricing engine 
One or more calculators 
A helper method in the qualifier service 
An item-descriptor in the Promotions repository 
For example, the structure for pricing and discounting catalog items includes the following: 
An Item Pricing Engine 
An Item List Price Calculator, an Item Sale Price Calculator, and an Item Discount 
Calculator 
The 
findQualifyingItems
call in 
atg.commerce.pricing.Qualifier
The 
Item Discount
item-descriptor in the repository 
/atg/commerce/pricing/Promotions
Note: The structure for determining sales tax is slightly different because ATG Commerce does not 
support offering discounts on tax. For this reason, there is no item-descriptor for tax discounts in the 
default Promotions repository. You could add such an item-descriptor if necessary. 
software SDK project:VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
add and insert one or multiple pages to existing adobe PDF document in VB.NET. Ability to create a blank PDF page with related by using following online VB.NET
www.rasteredge.com
software SDK project:C# HTML5 PDF Viewer SDK to view PDF document online in C#.NET
C# view PDF online, C# convert PDF to tiff, C# read PDF, C# convert PDF to text, C# extract PDF pages, C# comment annotate PDF, C# delete PDF pages, C# convert
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
14 7  
9  -  C o mm erce P ri ci ng   Servi ces   Overvi ew 
The ATG Business Commerce Reference Application Guide contains extensive descriptions of how ATG 
implemented dynamic pricing in the Motorprise reference application. Also see the sections on the 
PriceItem and the PriceEachItem servlet beans in the ATG Commerce Guide to Setting Up a Store
How Pricing Services Generate Prices 
ATG Commerce pricing services are based on two complementary elements: pricing engines and pricing 
calculators. These components work together to determine prices for orders, sales tax, and shipping. 
Pricing engines are responsible for these tasks: 
Retrieving any promotions that are available to site visitors 
Determining which pricing calculators generate prices 
Invoking the calculators in the correct order 
Pricing calculators are responsible for the following: 
Looking up the price. 
Using information they receive from the pricing engines, promotions, and the qualifier 
service to determine prices. 
The following overview describes the way ATG Commerce calculates prices. 
Note: If your promotions were generated using ATG 9.1 or earlier versions, see the documentation for 
that version; the pricing process treats promotions differently depending on the version of ATG 
Commerce used to create them.  
Before pricing happens, the following steps take place: 
1.
On a scheduled basis, the pricing engines load global promotions (those defined as 
applying automatically to all customers). An engine builds its list by using its 
globalPromotionsQuery
property to query the Promotions repository, searching for 
any promotion where the Automatically Give to All Customers (
global
) property is set 
to 
true
. Each engine loads the global promotions that are specific to that pricing 
engine; for example, the 
ItemPricingEngine
loads the global Item Discount 
promotions. 
2.
At the start of the customer session, a 
PricingModelHolder
instance is created. 
PricingModelHolder
calls each pricing engine’s 
getPricingModels()
method. 
3.
The pricing engine 
getPricingModels()
method gets any promotions listed in the 
activePromotions
property of the current customer’s profile and merges them with 
the global promotions list it previously created. The pricing engine can also veto 
promotions from being returned to the 
PricingModelHolder
at this point. 
4.
PricingModelHolder
periodically updates both the global and active promotions. 
software SDK project:VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
RasterEdge. PRODUCTS: ONLINE DEMOS: Online HTML5 Document Viewer; Online XDoc.PDF C# File: Split PDF; C# Page: Insert PDF pages; C# Page: Delete PDF pages;
www.rasteredge.com
software SDK project:VB.NET PDF - Convert PDF Online with VB.NET HTML5 PDF Viewer
C# view PDF online, C# convert PDF to tiff, C# read PDF, C# convert PDF to text, C# extract PDF pages, C# comment annotate PDF, C# delete PDF pages, C# convert
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
14 8  
9  -  C o mm erce P ri ci ng   Servi ces   Overvi ew 
The result is that 
PricingModelHolder
has a merged list of global and active promotions for each 
pricing engine. When the customer performs an action that prompts a pricing operation, such as adding 
an item to their cart, the following steps are performed: 
1.
The business layer logic (such as a 
PriceItem
servlet bean in a page) invokes a pricing 
engine (see The Base Pricing Engine). 
2.
The pricing operation invokes 
PricingTools
which then gets the 
PricingModelHolder
for that customer. 
3.
PricingTools
gets the promotions from the 
PricingModelHolder
and calls the 
pricing engine’s 
priceItems
method, passing in the promotions as a list. 
4.
The pricing engine applies its configured precalculators in the order in which they 
appear in its 
preCalculators
property. A precalculator modifies a price without 
using any associated promotions. For example, a site could use a list price 
precalculator or an order subtotal precalculator to establish a base price to which 
subsequent calculators then apply a discount. 
Each type of engine calls its corresponding type of precalculator – for example, the 
OrderPricingEngineImpl
calls 
OrderPricingCalculators
and the 
TaxPricingEngineImpl
calls 
TaxPricingCalculators
5.
The pricing engine then takes the promotions list that was passed in and can again 
veto promotions from that list. The remaining promotions are sorted by priority and 
then evaluated. 
Each promotion contains a PMDL rule that describes the discount. For example, a rule 
might define a discount in which a customer buys one item and receives a second for 
free. The PMDL specifies the calculator type to use to determine the amount of the 
discount in the 
calculator-type
attribute of the 
discount-structure
element. 
The calculator type maps to a calculator component in the 
calculatorTypeCalculators
map. 
For each available promotion, ATG Commerce does the following: 
The pricing engine calls the appropriate helper method 
(
findQualifyingItems
findQualifyingOrder
, or 
findQualifyingShipping)
in the 
Qualifier
class to determine which items 
should be discounted. The pricing engine passes the current pricing context 
into the helper method’s input parameters. 
The 
findQualifyingItems()
method calls 
evaluateTarget()
, which 
returns a Collection of 
QualfiedItem
objects, representing 
CommerceItem
objects. The 
findQualifyingOrder()
and 
findQualifyingShipping()
methods return a single 
MatchingObject
The 
QualifiedItem
and 
MatchingObject
include discount information such 
as the PMDL discount structure. See the QualifiedItem Class for more 
information. 
The 
QualifiedItem
or 
MatchingObject
information is returned to the 
pricing engine, which uses the discount information to determine which 
calculator to use. 
software SDK project:VB.NET PDF - Annotate PDF Online with VB.NET HTML5 PDF Viewer
VB.NET PDF - Annotate PDF Online with VB.NET HTML5 PDF Viewer. Explanation about transparency. VB.NET HTML5 PDF Viewer: Annotate PDF Online. This
www.rasteredge.com
software SDK project:C# HTML5 PDF Viewer SDK to convert and export PDF document to
C# view PDF online, C# convert PDF to tiff, C# read PDF, C# convert PDF to text, C# extract PDF pages, C# comment annotate PDF, C# delete PDF pages, C# convert
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
14 9  
9  -  C o mm erce P ri ci ng   Servi ces   Overvi ew 
The pricing engine calls the calculator and passes in the items to be discounted 
and the discount information. 
The calculator marks items that have received a discount, which might not be 
eligible for further promotions. 
The qualifier marks items that have already been used as qualifiers for the 
promotion. This prevents the qualifier items from being used again during the 
same price calculation. 
The calculator applies the discount to the list of objects. 
6.
The pricing engine applies its configured 
PostCalculators
, which make any 
necessary modifications to the price after discounts have been applied. Each pricing 
engine calls postcalculators of its own type. 
7.
The pricing engine returns an updated 
PriceInfo
object. 
This process is repeated every time a price is requested. Price requests are resource-intensive, and should 
be performed only when necessary. 
PricingTools Class 
The 
atg.commerce.pricing.PricingTools
class is the main way in which business-layer logic 
interacts with the pricing engines and the other classes in the 
atg.commerce.pricing
package. In ATG 
Commerce, the classes that extend the 
ItemPricingDroplet
class (
PriceItemDroplet
and 
PriceEachItemDroplet
) use 
PricingTools
to interface with all the ATG Commerce pricing engines. 
When a store using ATG Commerce needs a price for items, orders, shipping, or tax, 
PricingTools
can 
be consulted to return the price. In addition, 
PricingTools
contains translation functions that identify 
which 
currencyCode
goes with which locale. 
PricingTools
includes methods that can be called to produce prices. These methods consult the 
configured pricing engines, which are described in detail in the Commerce Pricing Engines chapter. 
PricingTools
also determines the pricing locale. If you are using SKU-based pricing (instead of price 
lists; see Using Price Lists for information), 
PricingTools
returns the configured 
defaultLocale
property. The pricing engines use this to determine the currency code. If you are using ATG’s multisite 
feature and want to use different currency codes for different sites, you can take the following steps: 
1.
Add a pricing locale to the Site repository items. 
2.
Override the 
PricingTools.getDefaultLocale
method to retrieve the currency 
code for the site. 
See the ATG API Reference for detailed information on the properties and methods of this class. 
ATG  C om merce  P ro gra mm in g  G ui d e 
15 0  
9  -  C o mm erce P ri ci ng   Servi ces   Overvi ew 
PricingModelHolder 
The 
atg.commerce.pricing.PricingModelHolder
class is a session-scoped component that holds 
the merged list of a customer’s active and global promotions while he or she is using the Web application. 
The pricing engine APIs define a method for collecting a customer’s pricing models. Because it can be 
resource intensive to perform this operation, the 
PricingModelHolder
is essentially a session cache of 
promotions. 
If a new promotion becomes available during a user’s session, the user’s promotions must be reloaded for 
the user to see this new discount. The 
reinitializeTime
property in the 
pricingModelHolder
is set 
to reload a user’s promotions every 10 minutes by default. You can change this time if desired. Setting the 
reinitializeTime
property to a smaller value (two minutes) will affect performance, but will minimize 
the risk of a user missing a promotion that is added during his or her session. You should consider 
changing the 
reinitializeTime
value if new promotions are added frequently. You should also 
decrease this value if promotions are being delivered by scenarios with short delays in them, for example, 
giving a promotion two minutes after a user logs in. 
Before adding a promotion to the list, the 
PricingModelHolder
runs a series of checks to eliminate as 
many promotions as possible from consideration (for example, a “buy one rain hat, get a free umbrella” 
promotion where the customer’s cart does not contain a rain hat). This saves considerable processing 
effort, as fewer promotions have to be evaluated at pricing time. 
The 
PricingTools
class uses 
PricingModelHolder
to perform order pricing. Each pricing engine takes 
only the collection of pricing models related to its own type as a parameter. For example, order pricing 
engines take only the pricing models related to order pricing. The 
PricingTools
method, which accepts 
PricingModelHolder
, extracts individual collections and passes the collections into the appropriate 
pricing engines. 
Developers should not create an instance of this class and call into the 
PricingTools
class. Instantiate an 
instance of this class only as a session-scoped component that can be resolved through the request. This 
is the pattern that the item pricing servlet beans use. If no pricing models are supplied as explicit 
parameters, the 
PricingModelHolder
is resolved from the request, and the collection is retrieved. 
PricingAdjustment 
The 
atg.commerce.pricing.PricingAdjustment
class represents an element of a price’s audit trail. A 
chain of these objects represents all changes made to the price. These objects appear in the 
adjustments
list of 
AmountInfo
. A 
PricingAdjustment
is created by a pricing calculator when it 
modifies an 
AmountInfo
object. 
The 
PricingAdjustment
class contains the following properties: 
adjustmentDescription
: A short description of the adjustment that this object 
records. 
pricingModel
: The ID of the pricing model, if any, that adjusted the price. 
ATG  C om mer ce P ro g ramm in g   Gui d e 
15 1  
9  -  C o mm erce P ri ci ng   Servi ces   Overvi ew 
manualPricingAdjustment:
ID of the manual adjustment that was applied to the 
order, if any. Manual adjustments are applied by agents using CSC; see the ATG 
Commerce Service Center User Guide
totalAdjustment:
The total adjustment amount is calculated by multiplying the 
adjustment
property by the 
quantityAdjusted
quantityAdjusted
: The quantity of the object whose price was adjusted. 
adjustment
: The price adjustment per quantity of one object. This value is calculated 
by dividing the value of the 
totalAdjustment
property by the value of the 
quantityAdjusted
property. 
PricingCommerceItem 
The 
atg.commerce.pricing.PricingCommerceItem
is a simple 
CommerceItem
used as a placeholder 
while pricing items. This 
CommerceItem
cannot be added to an order. 
The pricing engines can compute prices only within the context of a 
CommerceItem
. There may be times, 
however, when you want to price an entity for a customer and no 
CommerceItem 
is available. This 
problem is most evident when prices are shown for products in the catalog. Products and SKUs are usually 
represented by 
RepositoryItems
, which the pricing engines do not handle. 
PricingCommerceItem
is a 
CommerceItem
class into which you can plug the product and SKU objects. The item pricing servlet beans 
deal with input, which are plain 
RepositoryItems
, and “convert” them to 
CommerceItems
These 
CommerceItems
cannot be used in the default order management system. Use the 
OrderManager
APIs to add a 
CommerceItem
to an order. 
PricingModelProperties 
The 
atg.commerce.pricing.PricingModelProperties
class contains the names of properties of the 
ItemDescriptor
in the Promotions repository that represents pricing models. 
The 
PricingModelProperties
class stores these names so that they may be internationalized or 
otherwise changed to suit a particular installation. For more information, refer to the ATG API Reference. If 
the name of a property descriptor is changed in the 
ItemDescriptor
that defines the pricing models in 
the Promotions repository, you must change the corresponding value here as well. For example, the 
PricingModelRepository
holds all pricing models. It contains an item descriptor called 
pricingModel
The properties of this item descriptor need to appear in the 
PricingModelProperties
class. 
ATG  C om merce  P ro gra mm in g  G ui d e 
15 2  
9  -  C o mm erce P ri ci ng   Servi ces   Overvi ew 
Documents you may be interested
Documents you may be interested