c# wpf free pdf viewer : Delete blank page from pdf control SDK system web page .net wpf console ATGCommProgGuide50-part2130

ATG  C om mer ce P ro g ramm in g   Gui d e 
48 3  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il l men t  F ramewo rk 
μ
The scheduled service cannot actually communicate with the warehouse. This scheduled service is useful 
if you do not have an extensive backend system and need a way to automatically mark shipping groups 
as shipped. 
HardGoodFulfiller Examples 
The following examples demonstrate the behavior of the 
HardgoodFulfiller
in different situations. 
Example 1: An order is received with one item that is IN_STOCK: 
FulfillOrderFragment
received with one shipping group. 
The one item in the shipping group successfully allocates. The 
ShippingGroupCommerceItemRelationship's
state is set to PENDING_DELIVERY. 
The state of the 
ShippingGroup
is set to PENDING_SHIPMENT. 
The group ships. When the 
HardgoodFulfiller
is notified, the shipping group is set 
to NO_PENDING_ACTION and the item is set to DELIVERED. 
Example 2: 
HardgoodFulfiller.outOfStockIsError=false
and an order is received with one item 
that is OUT_OF_STOCK: 
FulfillOrderFragment
received with one shipping group. 
The 1 item in the shipping group fails to allocate but is successfully backordered. The 
state of 
ShippingGroupCommerceItemRelationship
is set to OUT_OF_STOCK. (This 
example also applies to BACK_ORDERED and PRE_ORDERED items.) 
Some time later, an 
UpdateInventory
message is received notifying the 
HardgoodFulfiller
that the item has new inventory available. The item is 
reallocated. 
The state of the 
ShippingGroup
is set to PENDING_SHIPMENT. 
The group ships. When the 
HardgoodFulfiller
is notified, the shipping group is set 
to NO_PENDING_ACTION and the item is set to DELIVERED. 
Example 3: 
HardgoodFulfiller.outOfStockIsError=true
and an order is received with one item 
that is OUT_OF_STOCK: 
FulfillOrderFragment
received with one shipping group. 
The one item in the shipping group fails to allocate but is successfully backordered. 
The state of 
ShippingGroupCommerceItemRelationship
is set to OUT_OF_STOCK. 
Since 
outOfStockIsError
is true, the shipping group’s state gets set to 
PENDING_MERCHANT_ACTION. 
At this point, it is the responsibility of the Customer Service Representative to correct 
the problem. 
Example 4: 
HardgoodFulfiller.allowPartialShipmentDefault=true
and 
HardgoodFulfiller.outOfStockIsError=false
and an order is received with one item that is out of 
stock and one item that is available. 
Delete blank page from pdf - SDK control API: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 blank page from pdf - SDK control API: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 
48 4  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il lm en t  Fram ewo rk 
FulfillOrderFragment
received with one shipping group containing two items. 
The first item in the shipping group fails is out of stock. The state of 
ShippingGroupCommerceItemRelationship
is set to OUT_OF_STOCK. 
The second item in the shipping group successfully allocates. Its state is set to 
PENDING_DELIVERY. 
Since 
allowPartialShipment
is true, the shipping group is split into two shipping 
groups. The first contains the PENDING_DELIVERY item and its state is set to 
PENDING_SHIPMENT. The second shipping group contains the out of stock item and 
its state remains PROCESSING. 
The first shipping group continues similarly to the fourth step in example 1. The 
second shipping group continues similarly to the third step in example 2. 
Example 5: An order is received with one item that has no information in the inventory system. 
FulfillOrderFragment
received with one shipping group. 
The one item in the shipping group is not found. The state of 
ShippingGroupCommerceItemRelationship
is set to ITEM_NOT_FOUND. 
The state of 
ShippingGroup
is set to PENDING_MERCHANT_ACTION. 
Example 6: An order contains a shipping group in a state of PENDING_MERCHANT_ACTION. 
HardgoodFulfiller.shippingGroupHasShipped
is called with this shipping group. 
An error is logged stating that a shipping group that was not in a PENDING_SHIPMENT 
state cannot be shipped. 
shippingGroupHasShipped
returns false. 
Example 7: An order contains a shipping group in a state of PENDING_SHIPMENT. A 
ModifyOrder
message with a 
GenericRemove
Modification on the order is received by the 
OrderFulfiller
The 
OrderFulfiller
sets the order to PENDING_REMOVE. 
The 
OrderFulfiller
sends a 
ModifyOrder
message with a 
GenericRemove
modification for each shipping group in the order to the fulfiller. 
The fulfiller receives the 
ModifyOrder
The state of the 
ShippingGroup
is set to PENDING_REMOVE. 
Each of the items in the shipping group has its state set to PENDING_REMOVE. 
If the item was PENDING_DELIVERY, the stock level in the inventory is increased. 
If the item was BACK_ORDERED, the backorder level in the inventory is increased. 
If the item was PRE_ORDERED, the preorder level in the inventory is increased. 
ModifyOrderNotification
is sent with each of the updates. 
This message is received by the 
HardgoodFulfiller
. The 
HardgoodFulfiller
sets 
the state of each object to REMOVED. 
HardgoodFulfiller
sends a 
ModifyOrderNotification
with these updates. 
SDK control API:C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
Description: Delete specified page from the input PDF file. Parameters: Name, Description, Valid Value. pageId, The page index of the deleted blank page.
www.rasteredge.com
SDK control API:VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
Easy to Use VB.NET APIs to Add a New Blank Page to PDF Document in VB.NET Program. doc2.Save(outPutFilePath). Add and Insert Blank Page to PDF File Using VB.
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
48 5  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il l men t  F ramewo rk 
OrderFulfiller
receives the 
ModifyOrderNotification
, when all shipping 
groups are REMOVED, 
OrderFulfiller
sets the order and each 
CommerceItem
to 
REMOVED. 
Example 8: An order contains a shipping group in a state of NO_PENDING_ACTION. A 
ModifyOrder
message with a 
GenericRemove
Modification on the order is received by the 
OrderFulfiller
The 
OrderFulfiller
sets the order to PENDING_REMOVE. 
The 
OrderFulfiller
sends a 
ModifyOrder
message with a 
GenericRemove
modification for each shipping group in the order to the fulfiller. 
The fulfiller receives the 
ModifyOrder
The shipping group cannot be removed since it has already shipped. 
ModifyOrderNotification
is sent with the original 
GenericRemove
message set 
to a status of STATUS_FAILED. 
This message is received by the 
OrderFulfiller
. The 
OrderFulfiller
sets the 
state of the order to PENDING_MERCHANT_ACTION. 
Creating a New Fulfiller 
You can create a new fulfiller if your sites require fulfillment functionality different from that of the 
HardgoodFulfiller
or 
ElectronicFulfiller
that ship with ATG Commerce. For example, you could 
create a new fulfiller if your customers can purchase a research report. Instead of allocating this report 
from inventory and shipping it to the customer via UPS or Federal Express, you send them the report as an 
attachment via e-mail. There is no need to check inventory since the report is automatically in stock. 
Shipment can be done immediately since your newly created fulfiller can interface directly with an e-mail 
system. This section will describe how to implement and configure this new simpler fulfiller. In this 
example, the new fulfiller is called 
MyOwnFulfiller.
JMS messages connect the new fulfiller and the rest of ATG Commerce. Specifically, fulfillment of a 
shipping group begins with a 
FulfillOrderFragment
message. To receive these messages, the new 
fulfiller must implement 
atg.dms.patchbay.MessageSink
In addition to receiving the 
FulfillOrderFragment
messages, 
MyOwnFulfiller
must send out 
messages to inform the rest of ATG Commerce about changes made to each order. To send these 
messages, 
MyOwnFulfiller
must implement 
atg.dms.patchbay.MessageSource
. There is a class in 
atg.commerce.messaging
that provides most of the functionality 
MyOwnFulfiller
will need to send 
and receive messages. This class is called 
SourceSinkTemplate
. It implements both 
MessageSource
and 
MessageSink
MyOwnFulfiller
will be defined as follow: 
package myPackage; 
import atg.commerce.fulfillment.*; 
import atg.commerce.messaging.*; 
public class MyOwnFulfiller extends SourceSinkTemplate 
SDK control API:C# PDF Page Insert Library: insert pages into PDF file in C#.net
as how to merge PDF document files by C# code, how to rotate PDF document page, how to delete PDF page using C# .NET Add and Insert Blank Page to PDF File in
www.rasteredge.com
SDK control API:C# Create PDF Library SDK to convert PDF from other file formats
Create and save editable PDF with a blank page, bookmarks, links, signatures, etc. Create a new PDF Document with one Blank Page in C# Project.
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
48 6  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il lm en t  Fram ewo rk 
The only method in 
SourceSinkTemplate
that 
MyOwnFulfiller
needs to overwrite is 
receiveMessage
public void receiveMessage (String pPortName, Message pMessage) 
throws JMSException 
The Patch Bay system calls this method when a message is sent to 
MyOwnFulfiller
. For more 
information, see the Dynamo Message System chapter in the ATG Programming Guide. At this time, the 
only message 
MyOwnFulfiller
listens for is 
FulfillOrderFragment
. The 
receiveMessage
method 
can check the type of the object in the message. Only the interested code will be listed here, error 
checking will be assumed. 
if(pMessage.getJMSType().equals(FulfillOrderFragment.TYPE)) 
handlFulfillOrderFragment(pMessage); 
} // end of receiveMessage 
The 
handleFulfillOrderFragment
method retrieves the order from the message and the list of 
shipping groups that need to be fulfilled. For this example, the necessary error checking will be listed 
here. 
1.
Retrieve the 
FulfillOrderFragment
CommerceMessage
from the incoming 
message: 
public void handleFulfillOrderFragment(ObjectMessage pMessage) 
FulfillOrderFragment fragment = 
(FulfillOrderFragment) pMessage.getObject(); 
2.
Retrieve the order and the shipping groups IDs: 
Order order = fragment.getOrder(); 
String[] shippingGroupIds = fragment.getShippingGroupIds(); 
3.
Call a new method called 
processShippingGroup
for each shipping group in the 
message. 
for(int i=0; i<shippingGroupIds.length; i++) { 
ShippingGroup sg = 
order.getShippingGroup(shippingGroupIds[i]); 
processShippingGroup(order, shippingGroup); 
4.
One of the responsibilities of 
MyOwnFulfiller
is to notify the rest of ATG Commerce 
what changes were made to the order included in this 
FulfillOrderFragment
. To 
do this, 
MyOwnFulfiller
needs to remember each modification made. Therefore, 
inside 
handleFulfillOrderFragment
, declare a new List that will contain 
Modification
objects. These objects are added to the list as changes are made. This 
list will need to be included in any method calls. The above code now looks like this: 
SDK control API:C# PDF Page Replace Library: replace PDF pages in C#.net, ASP.NET
pageIdx, The page index of the deleted blank page. 0
www.rasteredge.com
SDK control API:C# Word - Insert Blank Word Page in C#.NET
such as how to merge Word document files by C# code, how to rotate Word document page, how to delete Word page Add and Insert a blank Page to Word File in C#.
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
48 7  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il l men t  F ramewo rk 
List modifications = new ArrayList(); 
for(int i=0; i<shippingGroupIds.length; i++) { 
ShippingGroup sg = 
order.getShippingGroup(shippingGroupIds[i]); 
processShippingGroup(order, shippingGroup, 
modifications); 
After processing is complete, 
MyOwnFulfiller
saves the order and include the modifications in a 
message. This is handled by a method in the 
OrderFulfillmentTools
OrderManager orderManager = getOrderManager(); 
OrderFulfillmentTools tools = getOrderFulfillmentTools(); 
orderManager.updateOrder(order); 
tools.sendModifyOrderNotification(order.getId(), // order 
modificationList, // modifications 
null,             // ModifyOrder 
this,             // MessageSource 
getModifyOrderNotificationPort(),// port 
null);            // original message 
 // end of handleFulfillOrderFragment 
See the ATG API Reference for a detailed description of the 
OrderFulfillmentTools
sendModifyOrderNotification
method. 
MyOwnFulfiller
depends on a few properties being set to properly function. It will need an 
OrderManager
OrderFulfillmentTools
, and a 
ModifyNotificationPort
. This port is explained in 
the Configuring a New Fulfiller section. 
The only method that has not been discussed is 
processShippingGroup
. The following example is a 
simple example of the functions of 
processShippingGroup
in order processing. The most important 
function is the manipulation of the object states. There are two more properties necessary for the fulfiller: 
ShippingGroupStates
and 
ShipItemrRelationshipStates
public void processShippingGroup(Order pOrder, 
ShippingGroup pShippingGroup, 
List pModificationList) 
ShippingGroupStates sgStates = getShippingGroupStates(); 
ShipItemRelationshipStates sirStates = 
getShipItemRelationshipStates(); 
OrderFulfillmentTools tools = 
getOrderFulfillmentTools(); 
. . . get each item relationship in the shipping group 
SDK control API:C# PowerPoint - Insert Blank PowerPoint Page in C#.NET
document files by C# code, how to rotate PowerPoint document page, how to delete PowerPoint page using C# Add and Insert a blank Page to PowerPoint File in C#.
www.rasteredge.com
SDK control API:VB.NET PDF: Get Started with PDF Library
Field Data. Data: Auto Fill-in Field Data. Field: Insert, Delete, Update Field. of .NET PDF SDK with Simple Sample Code for Creating Blank Page to PDF in VB
www.rasteredge.com
ATG  C om merce  P ro gra mm in g  G ui d e 
48 8  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il lm en t  Fram ewo rk 
. . . for each item 
. . . send the report via e-mail using the orders 
profile 
// set the state to DELIVERED 
tools.setItemRelationshipState(shipItemRel, 
sirStates.getStateValue(sirStates.DELIVERED), 
"Report has been e-mailed to customer", 
pModificationList); 
. . . end for loop 
// the shipping groups is finished 
tools.setShippingGroupState(pShippingGroup, 
sgStates.getStateValue(sgStates.NO_PENDING_ACTION), 
"This shipping group has finished shipping", 
pModificationList); 
The methods in 
OrderFulfillmentTools
create the appropriate modifications, which are sent in a 
ModifyOrderNotification
message by 
handleFulfillOrderFragment
. The new fulfiller is now 
ready to be configured into ATG Commerce. 
It is possible that the e-mail cannot be sent because of some error. For example, if a message is sent out 
because the shipping group cannot be shipped and the message contains an invalid e-mail address. One 
possibility for dealing with this error is to set the 
ShippingGroup
to 
PENDING_MERCHANT_ACTION
. If you 
implement your fulfiller to do this, then the Customer Service Representative must correct the order and 
tell the fulfillment system to reprocess that shipping group with a 
ShippingGroupUpdate
Modification 
sent within a 
ModifyOrderNotification
message. 
To facilitate this, 
MyOwnFulfiller.receiveMessage
should be configured to listen for 
ModifyOrderNotification
messages and call 
handleModifyOrderNotification
if one of these 
messages is received. That method can then call 
processShippingGroup
for each shipping group and 
send a new 
ModifyOrderNotification
with all modifications that were made. 
A new fulfiller must be configured within Nucleus before it can be used by the fulfillment system. See the 
Configuring a New Fulfiller section for more information. 
Configuring a New Fulfiller 
A new fulfiller must be configured within Nucleus before it can be used by the fulfillment system. This 
section uses the example of configuring 
MyOwnFulfiller
, the fulfiller created in the Creating a New 
Fulfiller section. 
Use the ATG Control Center to edit the 
Configuration
component located in 
atg/commerce/fulfillment/
1.
Change the property 
fulfillerPortNameMap
to include the name of this new 
fulfiller. 
SDK control API:VB.NET Create PDF Library SDK to convert PDF from other file
Create and save editable PDF with a blank page, bookmarks, links, signatures, etc. VB.NET: Create a New PDF Document with One Blank Page.
www.rasteredge.com
SDK control API:C# PDF: PDF Document Viewer & Reader SDK for Windows Forms
page. AddPage: Prior to the currently displayed PDF page to add a blank page. DeletePage: Delete the currently displayed PDF page.
www.rasteredge.com
ATG  C om mer ce P ro g ramm in g   Gui d e 
48 9  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il l men t  F ramewo rk 
2.
Configure the port on which messages will be sent to this fulfiller. This is the port on 
which the 
OrderFulfiller
component will send JMS messages for this fulfiller. 
For example, add the following to 
Configuration.properties
fulfillerPortNameMap+=\ 
MyOwnFulfiller=MyOwnFulfillerPort 
You will also need to define which types of shipping groups can be handled by your 
fulfiller. 
OrderFulfiller
uses this information to verify that a shipping group can be 
fulfilled by its fulfiller. For example, add the following to 
Configuration.properties
fulfillerShippingGroupMap+=\ 
MyOwnFulfiller=mypackage.MyShippingGroup 
In this example, the fulfiller being added is called 
MyOwnFulfiller
. The component 
using an instance of 
HardgoodFulfiller
should make the name property of the 
HardgoodFulfiller
MyOwnFulfiller
” 
For example, add the following to 
MyOwnFulfiller.properties
fulfillerName=MyOwnFulfiller 
In addition, add the following properties to 
MyOwnFulfiller.properties
orderManager^=Configuration.orderManager 
orderFulfillmentTools^=Configuration.orderFulfillmentTools 
messageSourceName=MyOwnFulfiller 
modifyNotificationPort=ModifyNotificationPort 
shippingGroupStates=/atg/commerce/states/ShippingGroupStates 
shipItemRelationshipStates= 
/atg/commerce/states/ShipItemRelationshipStates 
3.
Configure the 
MyOwnFulfillerPort
in the 
dynamoMessagingSystem.xml
file so 
that the 
OrderFulfiller
component can send out the 
FulfillOrderFragment
messages on this port. 
For example, add the following 
dynamoMessagingSystem.xml
for 
OrderFulfiller
<message-filter> 
<nucleus-name> 
/atg/commerce/fulfillment/OrderFulfiller 
</nucleus-name> 
. . . 
<output-port> 
<port-name> 
MyOwnFulfillerPort 
</port-name> 
<output-destination> 
<provider-name> 
sqldms 
</provider-name> 
<destination-name> 
ATG  C om merce  P ro gra mm in g  G ui d e 
49 0  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il lm en t  Fram ewo rk 
sqldms:/Fulfillment/MyOwnGoods 
</destination-name> 
<destination-type> 
Topic 
</destination-type> 
</output-destination> 
</output-port> 
. . . 
</message-filter> 
4.
Configure the 
MyOwnFulfiller
component to send messages on the 
modifyNotificationPort
and listen for messages on the 
sqldms:/Fulfillment/MyOwnGoods
topic. These topics are described above. 
<message-filter> 
<nucleus-name> 
/myPackage/MyOwnFulfiller 
</nucleus-name> 
<output-port> 
<port-name> 
ModifyNotificationPort 
</port-name> 
<output-destination> 
<provider-name> 
sqldms 
</provider-name> 
<destination-name> 
sqldms:/Fulfillment/ModifyOrderNotification 
</destination-name> 
<destination-type> 
Topic 
</destination-type> 
</output-destination> 
</output-port> 
</message-filter> 
<message-sink> 
<nucleus-name> 
/myPackage/MyOwnFulfiller 
</nucleus-name> 
<input-port> 
<port-name> 
DEFAULT 
</port-name> 
<input-destination> 
<provider-name> 
sqldms 
</provider-name> 
<destination-name> 
sqldms:/Fulfillment/MyOwnGoods 
ATG  C om mer ce P ro g ramm in g   Gui d e 
49 1  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il l men t  F ramewo rk 
</destination-name> 
<destination-type> 
Topic 
</destination-type> 
</input-destination> 
</input-port> 
</message-sink> 
For more information, see the Dynamo Message System chapter of the ATG 
Programming Guide
5.
Set the 
MessageSourceName
property of the 
MyOwnFulfiller
to 
MyOrderFulfiller
” or another value that indicates who sent a message. This allows 
the component to ignore messages that it sent itself. 
6.
Add another value to the fulfiller property of the SKU in the product catalog. (Defined 
in 
/atg/commerce/catalog/productCatalog.xml
) This should match the name of 
the fulfiller used to map to a port in 
OrderFulfillmentTools.fulfillerPortNameMap
<item-descriptor name="sku" display-name="SKU" 
sub-type-property="type" 
display-property="displayName" 
. . . 
<property name="fulfiller" data-type="enumerated" 
column-name="fulfiller" queryable="false"> 
<attribute name="useCodeForValue" value="false"/> 
<option value="HardgoodFulfiller" code="0"/> 
<option value="SoftgoodFulfiller" code="1"/> 
<option value="MyOwnFulfiller" code="2"/> 
</property> 
. . . 
</item-descriptor> 
The 
modificationHandler
property can be modified to point to another component that extends 
atg.commerce.fulfillment.ModificationHandler
to handle with different forms of modifications 
received by the fulfiller. The 
ModificationHandler
class provides a simple framework for changing the 
handling of 
ModifyOrder
and 
ModifyOrderNotifications
. It is not necessary to use a separate 
ModificationHandler
. In the example above, 
handleModifyOrderNotification
was implemented 
directly within the fulfiller class 
MyOwnFulfiller
Order Fulfillment Events 
Order Fulfillment events are created and sent by the 
OrderChangeHandler
in the Order Fulfillment 
system. The 
OrderChangeHandler
listens to the various 
ModifyOrderNotifications
being delivered 
in the system and constructs one of three basic events: 
ATG  C om merce  P ro gra mm in g  G ui d e 
49 2  
20  -  C o n fi g u rin g   t he  O rd er  Ful f il lm en t  Fram ewo rk 
Events 
SubType 
OrderModified 
FINISHED 
HASUNAVAILABLEDITEMS 
PENDING_MERCHANT_ACTION 
REMOVED 
ShippingGroupModified 
SHIPPED 
SPLIT 
SPLITFORSHIPPING 
SPLITFORFULFILLER 
PENDING_MERCHANT_ACTION 
REMOVED (if subtype is removed, then) the 
shippingGroup
property will be null. 
PaymentGroupModified 
CREDITED 
DEBITED 
DEBIT_FAILED 
Note: The 
OrderChangeHandler
component includes a property called 
sendEventsWithNoProfile
. If 
this property is set to false, the 
sendScenarioEvent()
method does not send events if the profile is null. 
These three basic messages are sent with their subtypes set according to the reason it is being sent. 
Actions in ATG Commerce include the delivery of promotions when certain conditions are met. For 
example, give a promotion to the user if the 
OrderFinished
event contains an order whose total is 
greater than $50. 
Other actions include sending e-mails to a customer about progress of their order. For example, an e-mail 
sent indicating that a shipping group has been shipped. This e-mail might include information about 
when the shipping group will be received and the tracking information. 
The information necessary for the actions should be in the profile, order, payment group, or shipping 
group objects that are included in the event. See the list below for a list of the objects included in each of 
the messages. 
The following extend Scenario Event and include the profile and the JMS type. 
Message type 
Objects included 
OrderModified 
Includes profile, order and an array of 
ShippingGroupCommerceItemRelationships
ShippingGroupModified 
Includes the profile, order, shipping group, and new 
shipping group. 
PaymentGroupModified 
Includes the profile, order and an array of the payment 
groups. 
Documents you may be interested
Documents you may be interested