c# wpf free pdf viewer : Delete pages of pdf reader Library application class asp.net windows azure ajax ATGCommProgGuide47-part2126

ATG  C om mer ce P ro g ramm in g   Gui d e 
45 3  
19  -  I n ven t o ry Fra mewo rk 
μ
status = inventory.increaseStockLevel(itemId, quantity); 
else if(itemState == BACK_ORDERED) 
status = inventory.increaseBackorderLevel(itemId,quantity); 
else if(itemState == PRE_ORDERED) 
status = inventory.increasePreorderLevel(itemId, quantity); 
Displaying an Item’s Availability to a Customer 
The inventory manager is also used when building site pages. Display an item’s availability status to a 
customer browsing the site with the following code: 
int availability = inventory.queryAvailabilityStatus(itemId); 
Filling Partial Orders 
You can configure the fulfillment system to fill a partial order and backorder the rest if there is not enough 
inventory to fulfill an entire order. For example, if a customer orders five towels, but there are only three 
towels available, you can configure the Fulfillment system to “purchase” as many items as possible and 
backorder any additional items. Follow these steps to make the configuration changes: 
1.
Determine how many items are available using 
InventoryManager.queryStockLevel()
2.
Purchase that amount remaining using 
InventoryManager.purchase()
Note: It is possible that another customer could purchase these items in the time 
between when you called 
queryStockLevel
and called purchase. If this is the case, 
you can either loop until the purchase is successful or there is no inventory left or you 
can extend the 
InventoryManager
to purchase all items available. 
3.
Create a new 
ShippingGroupCommerceItemRelationship
in the same shipping 
group as the item currently being processed and for the same 
CommerceItem
. Set the 
old relationship’s quantity to whatever was successfully purchased. Set the new 
relationship’s quantity to the remaining quantity. The state of the old relationship is 
PENDING_DELIVERY while the state of the new relationship will depend on 
InventoryManager.queryAvailabilityStatus()
Preventing Inventory Deadlocks 
InventoryManager
includes the 
acquireInventoryLocks
and 
releaseInventoryLocks
methods. 
These methods can be used to prevent deadlocks in the database, especially if there are multiple ATG 
Commerce instances concurrently updating inventory. 
acquireInventoryLocks
acquires locks for the inventory items that apply to the given IDs. 
releaseInventoryLocks
releases locks for the inventory items that apply to the given IDs. 
RepositoryInventoryManager
implements 
acquireInventoryLocks
by calling 
RepositoryInventoryManager.lock
for each id (plus each id within a bundle). It does not implement 
Delete pages of pdf reader - Library application class: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 of pdf reader - Library application class: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 
45 4  
19  -  I n ven t or y Fram ewo rk 
releaseInventoryLocks
since those locks will be released automatically with the end of the 
transaction. 
The following example demonstrates how to use these methods to prevent deadlocks: 
void myPurchase(List pCatalogRefIds, long pQuantity) 
InventoryManager im = getInventoryManager(); 
try { 
im.acquireInventoryLocks(pCatalogRefIds); 
Iterator idIterator = pCatalogRefIds.iterator(); 
int success; 
while(idIterator.hasNext()) { 
String id = (String) idIterator.next(); 
success = im.purchase(id, pQuantity); 
. . . 
finally { 
im.releaseInventoryLocks(pCatalogRefIds); 
Handling Bundled SKUs in the Inventory 
When a SKU is bundled into a collection of SKUs, the 
RepositoryInventoryManager
handles the 
bundle differently than an individual SKU. 
The default ATG Commerce implementation defines bundles as lists of SKUs in the Product Catalog. For 
more information, see the Using and Extending the Product Catalog chapter. SKUs that represent a 
bundle have a 
bundleLinks
property that is a list of each 
skuLink
in the bundle. Each 
skuLink
contains 
a quantity and a SKU (from the Product Catalog). 
SKUs that do not represent a bundle correspond to one item in the inventory repository and have an 
empty 
bundleLinks
list. In this way, new bundles can be defined in the product catalog, without 
referring to or updating the inventory repository. Alternatively, bundles can be defined within the 
inventory as a separate inventory item by extending the 
RepositoryInventoryManager
. Information 
on extending the 
RepositoryInventoryManager
is described in this section. 
The 
RepositoryInventoryManager
calculates the 
stocklevel
of a bundle based on the 
stockLevel
of each item in bundle. These values are kept up to date in real time in each query method. The 
stockLevel
is the largest number of bundles that could be purchased given the 
stocklevel
of the 
SKUs in the bundle. For example: 
The Bundle SKU D contains 
Library application class:VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
doc.Save(outPutFilePath). How to VB.NET: Delete Consecutive Pages from PDF. doc.Save(outPutFilePath). How to VB.NET: Delete Specified Pages from PDF.
www.rasteredge.com
Library application class:C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
doc.Save(outPutFilePath); Demo Code: How to Delete Consecutive Pages from PDF in C#.NET. Demo Code: How to Delete Specified Pages from PDF in C#.NET.
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
45 5  
19  -  I n ven t o ry Fra mewo rk 
1 of SKU A 
2 of SKU B 
10 of SKU C 
The 
stocklevel
values for the individual SKUs are: 
SKU A 
stocklevel
= 20 
SKU B 
stocklevel
= 20 
SKU C 
stocklevel
= 20 
Therefore, SKU D’s (the bundle’s) 
stocklevel=2
because that is how many bundles could successfully be 
purchased given the current inventory. 
A bundle’s 
backorderLevel
and 
preorderLevel
are calculated in a similar way. 
RepositoryInventoryManager
sets the threshold of bundles as 0 to prevent events from being 
triggered when purchasing a bundle. If one of the bundle’s SKUs falls below its threshold, an event is 
triggered. This is true for the 
stockThreshold
backorderThreshold
, and 
preorderThreshold
The 
availabilityDate
of a bundle is the latest 
availabilityDate
of the SKUs in the bundle. The 
availabilityStatus
of a bundle is calculated as follows: 
OUT_OF_STOCK – Indicates that at least one of the bundled items is OUT_OF_STOCK 
or that the 
stockLevel
backorderLevel
, and 
preorderLevel
are all below the 
quantity needed for one bundle. 
PREORDERABLE – Indicates that none of the items is OUT_OF_STOCK, but at least one 
of the bundled items is PREORDERABLE. 
BACKORDERABLE – Indicates that none of the items are OUT_OF_STOCK or 
PREORDERABLE, but at least one of the items is BACKORDERABLE. 
IN_STOCK – Indicates that all of the bundled items are IN_STOCK with a 
stockLevel
greater than the quantity of the item included in one bundle. 
When a bundle is purchased, the call is successful if all of the bundled SKUs are IN_STOCK. If it is 
successful, the 
stocklevel
of each SKU is decreased by the number of bundles purchased multiplied by 
the number of SKUs contained in the bundle. In the example above if someone successfully purchased 
the Bundle, the 
stocklevel
of SKU A would be decreased to 19, the 
stocklevel
of SKU B to 18, and the 
stocklevel
of SKU C to 10. 
Bundle processing makes it possible for a SKUs 
backorderLevel
to decrease even if there are enough 
items in stock. Consider the example above replacing SKU A’s 
stockLevel
with 0. The bundle is not 
IN_STOCK now. Assume that all the items have a 
backorderLevel
of 100. The fulfillment framework will 
try to backorder the bundle. The 
RepositoryInventoryManager
will set SKU A’s 
backorderLevel
to 
99, SKU B’s 
backorderLevel
to 98, and SKU C’s 
backorderLevel
to 90 even though there is stock 
available for SKU B and SKU C. When the fulfillment framework later calls 
purchaseOffBackorder
, each 
backorderLevel
will be increased back to 100 (assuming no one else backordered the items in the 
meantime) and each 
stockLevel
will be decreased as described above. 
Library application class:C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
VB.NET Page: Insert PDF pages; VB.NET Page: Delete PDF pages; VB.NET Annotate: PDF Markup & Drawing. XDoc.Word for XImage.OCR for C#; XImage.Barcode Reader for C#
www.rasteredge.com
Library application class:C# PDF Page Insert Library: insert pages into PDF file in C#.net
how to merge PDF 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 
45 6  
19  -  I n ven t or y Fram ewo rk 
When the 
HardgoodFulfiller
receives an 
UpdateInventory
message, it looks for orders that contain 
items with the 
catalogRefId
specified in the 
UpdateInventory
message. The items also must have a 
ShippingGroupCommerceItemRelationship
in BACK_ORDERED, PRE_ORDERED, or OUT_OF_STOCK 
state. Therefore, if an item is a bundle, the 
catalogRefId
of the bundle needs to be included in the 
message for orders waiting on that bundle to be updated. It is not sufficient to include only the 
component of the bundle that was updated. 
Building a Store without Bundles 
RepositoryInventoryManager
can be used as the inventory system for a store even if it does not have 
bundles. If your system does not include bundles, then none of the items will be treated as bundled. If you 
don’t want SKUs with a non-empty 
bundleLinks
property to be treated as bundles, extend the 
RepositoryInventoryManager
and override the 
isBundle()
method to always return false. This will 
force the inventory system to treat all items the same way. Perform the same extension to the 
RepositoryInventoryManager
if you want bundles to be processed in the same way as regular SKUs. 
Changing the Bundle Handling 
If you want to handle bundles in a different way than described above, but you want process SKUs that 
are not bundles in the same way, extend the 
RepositoryInventoryManager
and override the bundle-
specific methods. 
The methods listed below are called with the methods of the 
InventoryManager
API if the ID passed in 
is a bundle. For example, if 
purchase(someId)
is called and 
someId
refers to a bundle, purchase will call 
purchaseBundle(someId)
. These methods are implemented in 
RepositoryInventoryManager
, but 
not in any of the other classes. 
isBundle
purchaseBundle
purchaseBundleOffBackorder
purchaseBundleOffPreorder
preorderBundle
backorderBundle
queryBundleStocklevel
queryBundleBackorderLevel
queryBundlePreorderLevel
queryBundleStockThreshold
queryBundleBackorderThreshold
queryBundlePreorderThreshold
queryBundleAvailabilityDate
deriveBundleAvailabilityStatus
Library application class:VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
Page: Insert PDF Pages. |. Home ›› XDoc.PDF ›› VB.NET PDF: Insert PDF Page. Add and Insert Multiple PDF Pages to PDF Document Using VB.
www.rasteredge.com
Library application class:VB.NET PDF delete text library: delete, remove text from PDF file
Visual Studio .NET application. Delete text from PDF file in preview without adobe PDF reader component installed. Able to pull text
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
45 7  
19  -  I n ven t o ry Fra mewo rk 
Inventory Repository 
ATG Commerce comes with two repositories that are relevant to the inventory system: the Product 
Catalog and the Inventory Repository. The Product Catalog stores prices, descriptions, images, and fulfiller 
information. For more information, see the Using and Extending the Product Catalog chapter. The 
Inventory Repository stores the 
stockLevel
, availability information, and other inventory data. 
This section describes the inventory repository that is included with ATG Commerce out of the box. The 
inventory information is stored in a separate repository from the product catalog. Each inventory method 
takes an ID from the product catalog and uses that information to get the inventory ID. 
The inventory definition is stored in 
atg/commerce/inventory/inventory.xml
. Each item in the 
inventory has the following properties. 
Property 
Definition 
creationDate 
The date this inventory item was created. 
startDate 
The inventory item will not be available until this date. 
endDate 
The inventory item will not be available after this date. 
displayName 
The name that is displayed to the user to represent this 
inventory item. 
description 
A description of this inventory item. 
catalogRefId 
The SKU ID in the Product Catalog to which this inventory item 
refers. 
availabilityStatus 
The status of this inventory item. It is an enumerated type. The 
integer code for each possible value is shown. The following 
codes represent availability status: 
INSTOCK (1000) - This item is in stock. 
OUTOFSTOCK (1001) – This item is out of stock. 
PREORDERABLE (1002)- This item may be preordered. 
BACKORDERABLE (1003) - This item may be backordered. 
DERIVED (1004) - This item’s 
availabilityStatus
should be 
derived from the values of its 
stockLevel
backorderLevel
and 
preorderLevel
. DERIVED is the default value for 
availabilityStatus
DISCONTINUED (1005) – This item is discontinued. 
availabilityDate 
The date on which this item will be available if not currently 
available. 
stockLevel 
The amount of stock available for purchase. The value -1 
indicates that an infinite amount is available. 
Library application class:C# PDF Page Rotate Library: rotate PDF page permanently in C#.net
batch changing PDF page orientation without other PDF reader control. NET, add new PDF page, delete certain PDF page, reorder existing PDF pages and split
www.rasteredge.com
Library application class:C# PDF delete text Library: delete, remove text from PDF file in
Delete text from PDF file in preview without adobe PDF reader component installed in ASP.NET. C#.NET PDF: Delete Text from Consecutive PDF Pages.
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
45 8  
19  -  I n ven t or y Fram ewo rk 
backorderLevel 
The amount of this item that can be backordered. The value –1 
indicates that the inventory system accepts an infinite number 
of backorders for this item. 
preorderLevel 
The amount of this item that can be preordered. The value –1 
indicates the inventory system accepts an infinite number of 
preorders for this item. 
stockThreshold 
If the 
stockLevel
falls below this amount, a warning event is 
generated. 
backorderThreshold 
If the 
backorderLevel
falls below this amount, a warning 
event is generated. 
preorderThreshold 
If the 
preorderLevel
falls below this amount, a warning 
event is generated. 
Inventory JMS Messages 
The 
InventoryManager
creates Java Messaging Service (JMS) messages for the following events: 
JMS Message Name 
When message occurs 
Information included in 
message 
InventoryThresholdReached
When 
stocklevel
backorderLevel
, or 
preorderLevel
falls 
below its associated 
threshold. 
The ID number of the 
item. 
Name of property 
(
stocklevel
backorderLevel
, or 
preorderLevel
Value of property 
Value of threshold 
UpdateInventory 
When the stock level 
increases. (In the 
RepositoryInventoryM
anager
, it occurs when 
someone calls 
inventoryWasUpdated
The IDs of all items that 
have stock available and 
were previously 
BACKORDERABLE, 
PREORDERABLE, or 
OUT_OF_STOCK. 
ATG  C om mer ce P ro g ramm in g   Gui d e 
45 9  
19  -  I n ven t o ry Fra mewo rk 
Configuring the SQL Repository 
The 
InventoryManager
implementations that ATG Commerce provides out of the box require the 
atg.service.cache
package and an instance of the Generic SQL Adapter. For more information on SQL 
Repositories, see the ATG Repository Guide
The SQL Repository must be configured before the 
RepositoryInventoryManager
can use it. You must 
set values for the following properties: 
stocklevel
(optional) 
backorderLevel
(optional) 
preorderLevel
(optional) 
stockThreshold
(optional) 
backorderThreshold
(optional) 
preorderThreshold
(optional) 
availabilityStatus
(required) 
availabilityDate
(optional) 
If the properties above are not included, all items will be treated as having a 
stockLevel
of –1 (infinite 
supply). The 
backorderLevel
preorderLevel
stockThreshold
preorderThreshold
, and 
backorderThreshold
are set to zero. These default values are configurable in the 
RepositoryInventoryManager
The best way to insure that every item in the repository that represents an inventory item has the 
required properties is to have a view and/or 
ItemDescriptor
in the repository dedicated to the 
“inventory item” type. However, this is not specifically required. 
Caching the Inventory 
By default, caching is turned off for the inventory repository. This is to insure that inventory data is always 
up to date across server instances. The 
CachingInventoryManager
is provided as an effective inventory 
caching mechanism for displaying inventory information. 
The 
CachingInventoryManager
can be used to display information to customers as they browse the 
product catalog because, in most situations, inventory information displayed to customers during catalog 
browsing does not need to be updated in real time. Displaying inventory information using the 
CachingInventoryManager
improves the performance of the site. 
The 
CachingInventoryManager
should not be used when real time inventory data is needed. Real time 
inventory information is usually needed during the purchase process and fulfillment process. In those 
cases, the (uncached) 
InventoryManager
should be used during these processes. For more information 
on the 
CachingInventoryManager
, see the InventoryManager Implementations section. 
The 
InventoryDroplet
provides cached data to the user when appropriate and accesses real time 
inventory data from the repository when appropriate. The 
useCache
property allows you to indicate 
when to use cached inventory data: 
ATG  C om merce  P ro gra mm in g  G ui d e 
46 0  
19  -  I n ven t or y Fram ewo rk 
If the 
useCache
property is set to false, the inventory data in the repository is 
provided. 
If the 
useCache
property is set to true, the cached data is provided. 
The GSA can provide more complex types of caching. If appropriate, you can configure two instances of 
the 
InventoryRepository
GSA, one with no caching and one with distributed caching (set cache-
mode=distributed). You can configure one instance of the 
RepositoryInventoryManager
to use the 
uncached GSA, and another instance of the 
RepositoryInventoryManager
to use the cached GSA. For 
more information on distributed caching, see the SQL Repository Caching chapter in the ATG Repository 
Guide
Inventory Repository Administration 
You can use the repository editor to administer the inventory system. Because the 
RepositoryInventoryManager
is implemented as a front-end to a repository, you can use the 
repository editor to edit the 
RepositoryInventoryManager
backend. The disadvantage to using the 
repository editor is that the 
InventoryManager
does not know when the Repository has changed. 
Therefore, it cannot perform actions like sending notifications about a pending order upon receipt of 
additional inventory. 
ATG Commerce includes a very simple user interface for administration of the Inventory Manager. You 
can access the interface through the Dynamo Administration pages, as long as the Dynamo 
Administration UI is included in your application. Access the Inventory Manager UI using the URL 
appropriate for your application server. For example, the default URL on JBoss is: 
http://
hostname
:8080/dyn/admin/atg/commerce/admin/inventory/index.jhtml 
See the ATG Installation and Configuration Guide to find the default URL. 
This page allows an administrator to view the results of the inventory query operations, to manipulate the 
various properties of each item, and to notify the system of inventory updates. Out-of-the-box, the 
interface allows the administrator to set, increase, or decrease the 
stockLevel
backorderLevel
, and 
preorderLevel
of any item in the inventory. This page also allows the administrator to set the 
stockThreshold
backorderThreshold
preorderThreshold
availabilityStatus
, and 
availabilityDate
for each item. is configured through The properties files of the servlet beans 
described below configure the updated inventory. 
The following Dynamo Server Pages manage the inventory: 
Dynamo Server Page 
Description 
index.jhtml 
This page allows you to administer the 
InventoryManager
. Provides 
access to the functionality mentioned above. 
ATG  C om mer ce P ro g ramm in g   Gui d e 
46 1  
19  -  I n ven t o ry Fra mewo rk 
DisplayInventory.jhtml 
Displays inventory information. You can modify this page to display 
more or different information for each item in the inventory. It 
displays the repository ID of the catalog item, the display name, the 
name of the fulfiller, the 
stockLevel
, the 
stockThreshold
, the 
backorderLevel
the 
backorderThreshold
, the 
preorderLevel
the 
preorderThreshold
, the 
availabilityStatus
, and any 
bundled items. 
Both of these pages use the 
InventoryFormHandler
to display and manipulate inventory information. 
This form handler has two handle methods: 
Servlet Bean 
Description 
handleChangeInventory 
Accepts four properties of the 
InventoryFormHandler
SKU - the ID of the SKU to change 
value - the value to change the property by 
changedProperty
- the name of the property to change 
setType
- the direction to change it in 
For example, if SKU=“sku-0”, value=“5”, 
changedProperty
=“
backorderLevel
”, and 
setType
=“increase” 
then the servlet bean will call: 
InventoryManager.increaseBackorderLevel("sku-0", 5)
handleUpdateInventory 
Uses the IDs stored in property 
InventoryFormhandler.updatedItemIdList
to call 
InventoryManager.inventoryWasUpdated
You can also use the 
InventoryFormHandler
to display inventory information. It uses the properties 
lowerBound
upperBound
batchNumber
batchSize
, and 
propertyName
to determine which inventory 
items to display. The items that should be displayed are populated in the 
InventoryFormHandler.catalogRefIds
. For example, if 
lowerBound
is ‘Q’, 
upperBound
is ‘R’, 
batchSize
is 10, 
batchNumber
is 0, and 
propertyName
is “
displayName
” all the 
catalogRefIds
for 
the first 10 items in the product catalog with a display name greater than Q and less than R (sorted by 
displayName
) will be in the array 
InventoryFormHandler.catalogRefIds
The 
SKULookup
servlet bean is an instance of the 
ItemLookupRepository
that returns information for a 
given SKU in the repository. 
Using the InventoryLookup Servlet Bean 
The 
InventoryLookup
servlet bean returns inventory information based on the input parameters. The 
inventory information returned by this servlet bean includes: 
availabilityStatus
: the numerical availability status 
ATG  C om merce  P ro gra mm in g  G ui d e 
46 2  
19  -  I n ven t or y Fram ewo rk 
availabilityStatusMsg
: a string that maps to the numerical 
availabilityStatus
with the following: 
1000: INSTOCK 
1001: OUTOFSTOCK 
1002: PREORDERABLE 
1003: BACKORDERABLE 
1005: DISCONTINUED 
availabilityDate
: The date on which the item will become available. 
stockLevel
: The total number of units currently in stock. 
preoderLevel
: The total number of units that are available for preorder. 
backorderLevel
: The total number of units that are available for backorder. 
stockThreshold
: The threshold for the stock level. 
preorderThreshold
: The threshold for the preorder level. 
backorderThreshold
: The threshold for the backorder level. 
If there is an error retrieving this information, then the 
error oparam
will be rendered. All of this 
information is contained within a single 
inventoryInfo
object, which will be rendered within the 
output oparam
This servlet bean takes one required parameter and one optional parameter. 
The required parameter is 
itemId
. The 
itemId
is the 
catalogRefId
of the product 
catalog SKU whose inventory information will be retrieved. 
The optional parameter is 
useCache
. If set to true, cached data will be retrieved. This 
data may be out of date, depending on how the inventory is updated, so it should be 
used with caution. For general store browsing, where performance is critical, 
useCache
should be true. If it is essential that the information matches the latest 
information in the repository, then 
useCache
should be false. 
The following code sample is an example of using the 
InventoryLookup
servlet bean: 
<dsp:droplet name="/atg/commerce/inventory/InventoryLookup"> 
<dsp:param param="link.item.repositoryId" name="itemId"/> 
<dsp:param value="true" name="useCache"/> 
<dsp:oparam name="output"> 
This item is 
<dsp:valueof param="inventoryInfo.availabilityStatusMsg"/><br> 
There are 
<dsp:valueof param="inventoryInfo.stockLevel"/> 
left in the inventory.<br> 
</dsp:oparam> 
</dsp:droplet> 
Note: The Inventory Framework can also be configured to use the 
LocalizingInventoryDroplet
which is similar to 
InventoryLookup
, but can also include a 
localeKey
parameter. 
Documents you may be interested
Documents you may be interested