c# wpf free pdf viewer : Add and delete pages from pdf control SDK system azure wpf .net console ATGCommProgGuide51-part2131

ATG  C om mer ce P ro g ramm in g   Gui d e 
49 3  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il l men t  F ramewo rk 
μ
Fulfillment Server Fault Tolerance 
Because the ATG Commerce fulfillment framework uses SQL JMS messages, you do not need a complex 
system of redundant fulfillment servers with automatic failover. SQL JMS messages are persistent and 
saved until successfully delivered. If the fulfillment server goes down, re-assemble and redeploy the 
application that includes it. 
Fulfillment work occurs within the context of a transaction (started by the SQL JMS system). If the 
fulfillment server goes down, all current transactions roll back. The message is resent after a transaction 
rolls back because message delivery and processing occur within the same transaction. Any messages 
that are sent to the fulfillment server while it is down, including those that are resent, are persistent in the 
database and will be delivered once the fulfillment server is back online. 
Fulfillment Message Redelivery 
The Fulfillment module of ATG Commerce uses Patch Bay to receive order messages. Patch Bay delivers 
messages from the fulfillment-related JMS destination to a fulfillment 
MessageSink
. Fulfillment uses the 
Pipeline Manager to allow the execution of transactional, multi-stage, fulfillment-related processes. 
ATG Commerce uses the message redelivery features in Patch Bay. The ATG Commerce Fulfillment Patch 
Bay configuration document contains configuration settings to enable the message redelivery. These 
configurations are set in 
/atg/dynamo/messaging/dynamoMessagingSystem.xml
in the Fulfillment 
Module. 
For more information on Patch Bay, see the Dynamo Message System chapter in the ATG Programming 
Guide
The following messaging components and destinations are configured for redelivery ports. 
Component: 
/atg/commerce/fulfillment/OrderChangeHandler
Destination: 
patchbay:/Fulfillment/ModifyOrderNotification
Component: 
/atg/commerce/fulfillment/OrderFulfiller
Destination: 
patchbay:/Fulfillment/ModifyOrderNotification
Component: 
/atg/commerce/fulfillment/OrderFulfiller
Destination: 
patchbay:/Fulfillment/SubmitOrder
Component: 
/atg/commerce/fulfillment/OrderFulfiller
Destination: 
patchbay:/Fulfillment/ModifyOrder
Component: 
/atg/commerce/fulfillment/HardgoodFulfiller
Destination: 
patchbay:/Fulfillment/HardGoods
Component: 
/atg/commerce/fulfillment/SoftgoodFulfiller
Destination: 
patchbay:/Fulfillment/SoftGoods
Each of these was given the following redelivery port configuration: 
Add and delete pages from pdf - control SDK system: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
Add and delete pages from pdf - control SDK system: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 
49 4  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il lm en t  Fram ewo rk 
max-attempts: 3 
delay: 60000 
failure-output-port: 
FulfillmentError
redelivery-port: 
FulfillmentError
output destination: 
patchbay:/Fulfillment/ErrorNotification
output destination: 
patchbay:/Fulfillment/DeadMessageQueue
In addition, 
/atg/commerce/fulfillment/HardgoodFulfiller
component with the 
patchbay:/Fulfillment/UpdateInventory
destination is configured to use redelivery. 
max-attempts: 3 
delay: 60000 
failure-output-port: 
UpdateInventoryError
redelivery-port: 
FulfillmentError
output destination: 
patchbay:/Fulfillment/
UpdateInventoryErrorNotification
output destination: 
patchbay:/Fulfillment/DeadMessageQueue
The general fulfillment and inventory-related error notification destinations are configured with 
respective sinks that display an error message in the ATG log file. 
Fulfillment-related error notification 
message sink: 
/atg/commerce/fulfillment/FulfillmentErrorSink
input-destination: 
patchbay:/Fulfillment/ErrorNotification
Inventory-related error notification 
message sink: 
/atg/commerce/fulfillment/UpdateInventoryErrorSink
input destination: 
/Fulfillment/UpdateInventoryErrorNotification
Replacing the Default Fulfillment System 
You can replace the fulfillment system that ships with ATG Commerce with another fulfillment system. For 
example, if you wanted to use a test fulfillment system with or in place of the existing fulfillment system. 
Follow these steps to replace the default ATG Commerce fulfillment system: 
1.
Configure your new fulfillment system within Patchbay 
(
/atg/dynamo/messaging/dynamoMessagingSystem.xml
) to subscribe to the 
sqldms://Fulfillment/SubmitOrder
topic. This is where the Purchase Process 
sends messages. For more information on Patch Bay, see the Dynamo Message System 
chapter of the ATG Programming Guide
control SDK system:VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
In order to run the sample code, the following steps would be necessary. Add necessary references: How to VB.NET: Delete Consecutive Pages from PDF.
www.rasteredge.com
control SDK system:C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
XDoc.PDF enables you to delete PDF page(s) with customized options, including a single page, a series of pages, and random pages to be Add necessary references
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
49 5  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il l men t  F ramewo rk 
2.
If your test fulfillment system is using a separate repository for orders, configure a new 
OrderManager
with a new 
OrderRepository
. Use this from your test fulfiller. For 
more information on 
OrderManager
, see the Configuring Purchase Process Services 
chapter. 
3.
If you want the Scenario Server to perform actions based on fulfillment events, 
configure Patchbay so that your fulfillment systems sends the events and the 
ScenarioManager
listens for them. For more information on scenarios, see the Using 
Scenarios in the Fulfillment Process section. 
Integrating the Order Fulfillment Framework with an 
External Shipping System 
The Order Fulfillment Framework can be integrated with an external shipping system that actually ships 
the order to the customer. 
In the ATG Commerce default configuration, the 
HardGoodShipper
simulates the shipping process. 
There is also a mechanism for notifying fulfillment of shipment by hand, using the Fulfillment 
Administration pages. See the ATG Commerce Fulfillment Administration chapter of the ATG Commerce 
Guide to Setting Up a Store for more information on the Fulfillment Administration pages. 
An external system can be integrated with a warehouse or with a shipment company such as Federal 
Express. These systems are responsible actually tracking the packing and shipping of the items. There are 
a two ways that an external system can be integrated with the existing Order Fulfillment Framework. 
Create a JMS Message Sink and Message Source that communicates with ATG 
Commerce Order Fulfillment Framework through JMS messages. This approach 
provides a simple integration point. The JMS Message Sink can be registered to 
receive 
ModifyOrderNotification
messages. When the shipping group state 
changes to 
PENDING_SHIPMENT
, a 
ModifyOrderNotification
message is sent. The 
new class can then communicate with the external shipping system through some 
other mechanism. The Order Fulfillment Framework can indicate that a shipping 
group has been shipped in either of the following three ways: 
Change the state of the shipping group to NO_PENDING_ACTION and send a 
ModifyOrderNotification
to notify the rest of Order Fulfillment Framework 
about the shipment. 
Call 
HardgoodFulfiller.shippingGroupHasShipped
Call the 
shippingGroupHasShipped
pipeline. For more information, see 
Appendix G: Commerce Pipeline Chains
Extend the 
HardgoodShipper
scheduled service. Extend 
HardgoodShipper.shipShippingGroup 
to communicate with the external system. 
When the external shipping system says that a shipping group has shipped, then call 
HardgoodFulfiller.shipShippingGroup
By default, there is no integration with an external shipping system. The 
HardgoodShipper
is designed to query the database for all “shippable” shipping 
control SDK system:C# PDF File & Page Process Library SDK for C#.net, ASP.NET, MVC
C# Page: Insert PDF pages; C# Page: Delete PDF pages; C# Read: PDF Text Extract; C# Read: PDF Image Extract; C# Write: Insert text into PDF; C# Write: Add Image
www.rasteredge.com
control SDK system:C# PDF Page Insert Library: insert pages into PDF file in C#.net
processing control SDK, you can create & add new PDF rotate PDF document page, how to delete PDF page using 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 
49 6  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il lm en t  Fram ewo rk 
groups (groups with a state of PENDING_SHIPMENT and with a 
shipOnDate
that is not 
in the future). It then calls 
HardgoodFulfiller.shippingGroupHasShipped
Changing Payment Behavior in Fulfillment Server 
Payment in the fulfillment framework can be handled in two ways. The value of 
OrderFulfiller.settleOnFirstShipment
determines how payment is handled: 
If 
settleOnFirstShipment
is true, all of the payment groups are settled after the 
first shipping group ships. 
If 
settleOnFirstShipment
is false, all of the payment groups are settled after the 
last shipping group ships. 
You can also configure the fulfillment framework to charge each shipping group to a different credit card 
at the time of shipment. There are two methods in the system that can be overwritten to facilitate this 
behavior: 
OrderFulfillmentTools.isOrderSettleable
This method is called each time the 
OrderFulfiller
is notified that a shipping group 
has been shipped. (This notification occurs through a 
ModifyOrderNotification
message that contains a 
GenericUpdate
on the state of the shipping group. The new 
value is 
PENDING_SHIPMENT
.) 
After the 
OrderFulfiller
receives the notification, it calls 
OrderFulfillmentTools.isOrderSettleable
. If this method returns true, then 
OrderFulfiller.settleOrder
is called. To configure the fulfillment framework to 
charge each shipping group to a different credit card at the time of shipment, have 
this method check if there is a 
PaymentGroup
specific to this shipping group. If there 
is, return true. It should also return true if all 
ShippingGroups
have shipped. 
OrderFulfiller.settleOrder
By default, this method settles all 
PaymentGroups
in the order. To pay for each 
shipping group as it ships, this method should settle each 
PaymentGroup
that is not 
SETTLED
and refers to a 
ShippingGroup
that has shipped. 
This method should also check if all shipping groups have shipped. If they have, than 
any other 
PaymentGroups
that have not settled, should be settled. Settling a 
PaymentGroup
most likely will involve using the 
PaymentManager
To facilitate payment by shipping group as each shipping group is shipped, your system must create the 
appropriate 
PaymentGroupRelationship
objects. To pay for each shipping group separately (and the 
items that appear in each shipping group), you will probably create each of these 
PaymentGroupRelationship
objects yourself. When a user creates an order, the default behavior is for 
the order to include one 
PaymentGroup
with one 
PaymentGroupOrderRelationship
that accounts for 
the cost of the entire order. You might want to create a 
PaymentGroupCommerceItemRelationship
for 
each item in the order, and a 
PaymentGroupShippingGroupRelationship
for each shipping group in 
the order. It depends on your business rules. 
control SDK system:C# PDF insert image Library: insert images into PDF in C#.net, ASP
C#.NET PDF SDK - Add Image to PDF Page in C#.NET. How to Insert & Add Image, Picture or Logo on PDF Page Using C#.NET. Add Image to PDF Page Using C#.NET.
www.rasteredge.com
control SDK system:VB.NET PDF Password Library: add, remove, edit PDF file password
passwordSetting.IsAssemble = True ' Add password to PDF file. These two demos will help you to delete password for an encrypted PDF file.
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
49 7  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il l men t  F ramewo rk 
For more information on payment groups, see the Creating Payment Groups section. For more 
information on the payment manager, see the Processing Payment of Orders section. 
Using Scenarios in the Fulfillment Process 
Scenarios allow business users to define the set of actions to be performed when certain events or 
conditions occur. A detailed discussion of how scenarios are created and used can be found in the ATG 
Personalization Guide for Business Users
The fulfillment process uses of the scenario engine to provide features including e-mail notifications to 
customers. These e-mails can indicate that a shipping group has shipped, an item was 
backordered/preordered or whether the order is complete. 
The scenario engine listens for the three different classes of messages described in the Order Fulfillment 
Events section. The default ATG Commerce implementation uses several of these messages as the events 
that trigger e-mail. 
The following list describes the 
Fulfillment
and 
ReceiveOrder
scenarios included with ATG 
Commerce. These scenarios are located in the Scenarios section of the ACC in the DCS folder. For a 
description of the events, see the previous section. By default, this scenario is disabled. Enable this 
scenario using the ATG Control Center. 
Fulfillment
scenario: 
OrderFinished
– When an 
OrderModified
event with a 
subType
of 
OrderFinished
is received, send an e-mail to the owner of the order (the Profile that 
is included in the message). The e-mail uses the e-mail template found at 
dynamo/commerce/en/email_templates/jsp/OrderFinished.jsp
. It notifies the 
customer that their order has shipped and payment has been made. 
ShippingGroupShipped
– When an 
ShippingGroupModified
event with a 
subType
of 
ShippingGroupShipped
is received, send an e-mail to the owner of the 
order. The e-mail uses the e-mail template found at 
dynamo/commerce/en/email_templates/jsp/ShippingGroupShipped.jsp
. It 
notifies the customer that a shipping group in their order has been shipped. 
UnavailableItems
: When an 
OrderModified
event with a 
subType
of 
OrderHasUnavailableItems
is received, send an e-mail to the owner of the order. 
The e-mail uses the e-mail template found at 
dynamo/commerce/en/email_templates/jsp/OrderHasUnavailableItems.jsp
. It notifies the customer that their order cannot be completed yet. 
OrderCancelled
: When an 
OrderModified
event with a subtype of 
OrderWasRemoved
is received, then send an e-mail to the owner of the order. The e-
mail uses the template found at 
dynamo/commerce/en/email_templates/jsp/OrderCancelled.jsp
. It notifies 
the customer that their order has been cancelled. 
ItemRemoved
: When an 
ItemRemovedFromOrder
message is received and the order’s 
state is 0, send and e-mail to the send an e-mail to the owner of the order. The e-mail 
control SDK system:VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
Able to add and insert one or multiple pages to existing adobe PDF document in VB.NET. Add and Insert Multiple PDF Pages to PDF Document Using VB.
www.rasteredge.com
control SDK system:C# PDF Sticky Note Library: add, delete, update PDF note in C#.net
C#.NET PDF SDK - Add Sticky Note to PDF Page in C#.NET. Able to add notes to PDF using C# source code in Visual Studio .NET framework.
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
49 8  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il lm en t  Fram ewo rk 
uses the e-mail template found at 
dynamo/commerce/en/email_templates/jsp/ItemRemovedFomOrder.jsp
. It 
notifies the customer that the item has been removed from the order. 
PaymentGroupChanged
: When a 
PaymentGroupModified
message is received, send 
and e-mail to the send an e-mail to the owner of the order. The e-mail uses the e-mail 
template found at 
dynamo/commerce/en/email_templates/jsp/PaymentGroupChanged.jsp
. It 
notifies the customer that their payment information has been updated. 
ReceiveOrder
scenario: 
SubmitOrder
– When a 
SubmitOrder
message is received, send an e-mail to the 
owner of the order. The e-mail uses the e-mail template found at 
dynamo/commerce/en/email_templates/jsp/SubmitOrderReceived.jsp
. It 
notifies the customer that their order has been received. 
Questions & Answers 
The following section answers some commonly asked questions about the fulfillment framework. 
Question: Why does ATG Commerce only use durable topics? Aren’t some messages 
sent to only one component that might be listening? 
Answer: Topics are used because various subsystems might be interested in the 
message being sent. Examples of this include the 
ModifyOrderNotification
message. It can be sent by any of the components in the system. The 
OrderFulfiller
and the 
OrderChangeHandler
components both listen for this 
message but each does something different with it. 
OrderFulfiller
might 
determine that it now has control of the shipping group whose modifications are 
included in the 
ModifyOrderNotification
message. The 
OrderChangeHandler
might choose to send some other message as an event into another subsystem. 
Question: Where do we deal with Payment groups? When do we charge? 
Answer: The 
OrderFulfiller
module handles payment groups. The default 
implementation charges the whole order either at the time of the order’s first 
shipment or at the time of the order’s last shipment. This is configurable by changing 
the state of the 
SettleOnFirstShipment
property in the 
OrderFulfiller
to true 
or false as is needed by the business rules. 
Question: Why does ATG Commerce use Java Messaging Service (JMS)? 
Answer: JMS allows you to build a distributed system that enables disparate 
subsystems to handle fulfillment for various parts of the fulfillment process. JMS and 
messaging allows you to abstract out all the connections and gives you the flexibility 
to adapt your existing systems to the ATG Commerce system. For example, the 
OrderFulfiller
system might be located on the same set of machines in the site 
hosting facility. The 
HardgoodFulfiller
might be based in some other set of 
headquarters. The actual warehouse that does the shipping might be in another 
location. If the warehouse receives an e-mail when a shipping group is submitted, 
control SDK system:VB.NET PDF insert image library: insert images into PDF in vb.net
with this sample VB.NET code to add an image to textMgr.SelectChar(page, cursor) ' Delete a selected As String = Program.RootPath + "\\" output.pdf" doc.Save
www.rasteredge.com
control SDK system:C# PDF Password Library: add, remove, edit PDF file password in C#
passwordSetting.IsAssemble = true; // Add password to PDF file. These C# demos will help you to delete password for an encrypted PDF file.
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
49 9  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il l men t  F ramewo rk 
then a service can listen on the JMS message indicating that the shipping group is to 
be shipped. An e-mail can be constructed from the contents of the message. 
Question: What are modification objects? What purpose do they serve? 
Answer: The Modification object is an abstraction that tries to capture the various ways 
in which changes can occur to the order. There are several types of modifications: add, 
remove, or update. Modifications can be targeted and therefore can modify shipping 
groups, payment groups, orders or relationships. Modifications contain a status field 
indicating whether the modification was successful or a failure. 
This abstraction allows the system the flexibility to interface with existing legacy or 
distributed systems. A disparate system can construct an array of Modifications that 
will capture the types of changes that it is requesting or the modifications it already 
performed. 
Refer to the sections on ModifyOrder Class and ModifyOrderNotification Class for more 
information. 
Question: How do scenarios find out about what is going on in the fulfillment system? 
The scenario engine receives messages that are sent during the fulfillment process. 
Those messages are documented in the Inventory JMS Messages  section. 
The events contain the profile and the information needed for performing an action 
on those events. For example, the 
ShippingGroupShipped
event contains the profile, 
the order and the shipping group that was shipped. This allows the scenario writer to 
create an action that sends an e-mail to the user (the profile) with the order 
information (from the order) and the details of the shipping group that was shipped 
(the shipping group). For more information, refer to the Order Fulfillment Events 
section. 
Question: How do I change the behavior of 
ModifyOrder
messages? 
The 
ModificationHandler
class deals with all the 
ModifyOrder
messages. Both the 
OrderFulfiller
and the 
HardgoodFulfiller
have their own versions of those 
handler classes called 
OrderFulfillerModificationHandler
and the 
HardgoodFulfillerModificationHandler
. The class contains two methods 
handleModifyOrder
and 
handleModifyOrderNotification
To change the behavior of one of those two handling methods, override the method if 
you extended the existing 
OrderFulfillerModificationHandler
or 
HardgoodFulfillerModificationHandler
classes. Otherwise, a new class 
implementing the 
ModificationHandler
interface should be written and configured 
for the 
OrderFulfiller
or 
HardgoodFulfiller
Question: How do I change the behavior of 
ModifyOrderNotification
messages? 
Answer: See the answer for changing the handling of the 
ModifyOrder
message in 
the previous question. 
Question: How do we deal with the Modification IDs? Who is generating them? How 
do we guarantee the uniqueness? 
Answer: Modification IDs are generated using the ID generator. The combination of 
the message source and message ID need to be unique to allow external systems to 
track the various messages in the system. 
ATG  C om merce  P ro gra mm in g  G ui d e 
50 0  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il lm en t  Fram ewo rk 
ATG  C om mer ce P ro g ramm in g   Gui d e 
50 1  
21  -  M an agi n g  t h e  Ord er  A ppro val  P ro ces s 
21
Managing the Order Approval 
Process 
B2B applications often require that customers’ orders be reviewed by authorized persons who can 
approve or reject them. ATG Business Commerce enables you to implement an order approval process for 
your application. The approval process can identify the customers for whom approvals of orders are and 
aren’t required, and, when an approval is required, check for the specific conditions that trigger an 
approval for an order, such as when an order limit is exceeded. 
This chapter describes the default implementation of the order approval process provided with ATG 
Business Commerce and highlights the areas you’re likely to customize to meet your application’s needs. 
It includes the following sections: 
Understanding the Order Approval Process 
Servlet Beans and Form Handlers for Approving Orders 
JMS Messages in the Order Approval Process 
Understanding the Order Approval Process 
At its most basic level, the order approval process consists of the following phases: 
1.
During checkout, the application determines if an order requires approval. 
2.
If the order requires approval, then an approver approves or rejects the order. 
3.
The application determines if the approval process for the order is complete. 
4.
If the approval process for the order is complete, then the order proceeds through 
checkout. 
The following properties of an Order object (class 
atg.b2bcommerce.order.B2BOrderImpl
) support 
the order approval process and maintain historical approval data for an order as it moves through these 
phases. 
ATG  C om merce  P ro gra mm in g  G ui d e 
50 2  
21  -  M anag i n g  t h e  Ord er  A pprov al  P ro ces s  
Property Name 
Property Type  Description 
authorizedApproverIds 
List 
The list of profile IDs of the users who 
are authorized to approve the given 
order. 
approvalSystemMessages 
List 
The list of system messages that the 
application attaches to the order. 
These messages indicate what 
conditions triggered an approval being 
required, such as “order limit 
exceeded.” They are defined by the 
processors in the 
checkRequiresApproval
pipeline 
chain.  
approverIds 
List 
The list of one or more profile IDs of 
the users who have approved or 
rejected the order. 
approverMessages 
List 
The list of messages the approvers 
attach to the order. 
The 
ApprovalFormHandler
form 
handler enables an approver to add 
comments when he or she approves or 
rejects an order. These comments are 
added to this property. 
The following diagram illustrates the business logic that drives the order approval process and briefly 
indicates which components move an order from one step in the process to the next. The complete order 
approval process is subsequently explained in detail. 
In this diagram, a customer has just submitted an order for checkout, and, consequently, the 
processOrder()
method has executed the 
processOrder
pipeline chain. 
processOrder
’s first 
processor, 
executeValidateForCheckoutChain
, has validated the order. 
processOrder
’s second 
processor, 
executeApproveOrderChain
, begins the order approval process by executing the 
approveOrder
chain. The first processor in the 
approveOrder
chain is 
verifyApproval
Documents you may be interested
Documents you may be interested