FULFILLMENT

Sections:
Automated Fulfillment Overview
Setup for shippable product fulfillment
Designating Items for fulfillment
Web-based Fulfillment
Fulfillment DB Table - OrderPostProc Table
Shippable Products B2B Configuration of Robot
Order Cancellation
FORMAT1900 Shippable Products - transmission of ship instructions
FORMAT1900 Shippable Products - ship instructions executed message
FORMAT1800 Shippable Products - transmission of ship instructions
FORMAT1800 Shippable Products - ship instructions executed message
Offsite Digital Products B2B Payload Fulfillment
Offiste Digital Products B2B E-Mail Relay Acknowledgement
Offsite Digital Products B2B Plugin Configuration
Offsite Digital Products B2B Plugin Module Input
Offsite Digital Products B2B Plugin Module Output

Where Do The Customer Orders Come Out?

Orders can be viewed or printed from Database Records or cc: copies of e-mail. The SendSafe system can be setup to automatically perform B2B order fulfillment with any offsite fulfillment center you may use. SendSafe also offers fully integrated RMA product return systems.

Some e-stores of almost any sales volume level opt to use the optional integrated fulfillment system to manage the flow of orders to their business (even when they do not use outside fulfillment centers). This setup provides both web-based and email-based fufillment options. For web-based operations the system shows lists of orders to be fufilled and provides the tools to fufillment them. In email-based the system will e-mail the e-store or fulfillment center a consolidated list of all orders which need to be processed today. This e-mail list will include all information needed for fulfillment. The e-store or fulfillment center then sends back to SendSafe a list of tracking numbers and ship dates which have been assigned to each lineitem in the order. SendSafe will automatically import this list and update ship status.

SendSafe also includes integrated support for performing immediate fulfillment of orders of digital products. Music, software, images, and more can be immediately provided for download to a customer after their charge has been approved.

In addition to what is described below, the bidding admin page should be used for viewing and working with custom products which use FFPs to describe the lineitem or for jobs which you are bidding using the integrated bidding system. See also: Bidding System for additional information.

Regardless the process used for handling orders, it is always a good idea to retain a copy of all cc: emailed receipts as a backup record of every order.

Low Volume E-Stores
Some low volume e-stores chose to keep it simple and drive their order processing directly from the cc: copy of the e-receipt which they receive. This e-receipt is a complete copy of what the customer received and includes all product pick, billing, and shipping information that would be needed by accounting and warehouse personnel. A slightly more automated solution is to use SendSafe's Web-based Fulfillment system (some customization by CPrompt my be required).

Medium Volume E-Stores
Medium volume e-stores often use one of the following:

The easiest to use and most effective solution is Web-based Fulfillment (some customization by CPrompt my be required). Any automated SendSafe fulfillment option can be customized by CPrompt to print shipping labels, barcoded travelers, bills of lading, or even thank you letters.

An alternative is the optional accounting report which allows you to create a report which list all orders which came in on a specific day or for a specific customer on a specific day. You can click on an order to get a printable copy which includes all billing, shipping, and product pick information that would be needed by accounting and warehouse personnel. This printed copy can be used as a product traveler. The report can be customized by CPrompt to print shipping labels, barcoded travelers, bills of lading, or even thank you letters.

This report can also be exported in a comma delimited format which can be imported by accounting programs, shipping programs, or other software like spreadsheets. The report flags all exported orders, so that you will not end up with duplicates.

The contents of the customer and sales reports are configurable (to some extent) in the information printed for each order or customer.

CPrompt can create for your business "simple to use" reports and data entry screens designed for warehouse employees. These reports and data entry screens can contain consolidated inventory pick lists, order assembly instructions, forms, etc. These screens can work with barcode scanners and can track which employee handled which order. There is no limit to what can be done with custom reports and data entry screens.

High Volume E-Stores
High volume e-stores often have their accounting, call-center, inventory, and shipping systems integrated directly with SendSafe(1).

All orders as they are receive by the e-commerce system will be automatically inserted into your existing accounting, call-center, inventory, and shipping control systems. You will not need to change a single internal business procedure while introducing e-commerce into your business.

SendSafe can also be customized to print inventory pick lists, barcoded travelers, or any other type of custom paperwork your business may need (which cannot be produced by your accounting or inventory control systems).

(1)Customization of SendSafe by CPrompt is often required for full automated solutions; semi-automated solutions may not require customization when 3rd part import tools are used. VPN network connections are also sometimes required.


Automated Fulfillment Overview

This FulFillment functionality is an optional add-on to the basic SendSafe system and may require some customization. The system fufills order and tracks the delivery of the products via outside fulfilment centers or Web-based.

The Fulfillment subsystem can be used in two ways:

There are four different fulfillment methods in SendSafe:


Shippable Products
Setup For Fulfillment of Shippable Products

Here are the basic steps for Mode A:

  1. Designate all products in the DB which will be fulfilled by SendSafe
  2. Setup an E-Mail Account for use by the robot to receive response back from the fulfillment house.
  3. Setup the Initiation Job for shippable products. This is the job which transmits fulfillment instructions.
  4. Setup the Status Update Job. This is the job which receives fulfillment updates from the fulfillment center.
  5. Configure the Robot to perform B2B Fulfillment.

Here are the basic steps for Mode B:

  1. Designate all products in the DB which will be fulfilled by SendSafe
  2. Setup the Initiation Job for shippable products. This is the job which completes fulfillment.
  3. Configure the Robot to perform Web-based Fulfillment.

An SQL Script is included with SendSafe which can be used to setup the jobs used to run B2B E-Mail based or Web-based Fulfillment. The name of this script is: Add B2B Fulfillment jobs.sql and Add e-mail or Web-based Fulfillment jobs.sql

Incoming E-Mail Account
This account is used by the robot to receive e-mail from the Fullment house. This account must be reserved only for use by the robot.


Designating Items for fulfillment

Shippable Items in the database designated as "B2B fufilled" will be processed by the B2B fulfillment system. Items are designated B2B by prefacing the Payloadloc field with an '@' sign or a "#' sign. The value after the '@' or '#' sign can (optionally) be used to identify the item to the B2B fulfillment house. This value is typically the product SKU, but it can be any alphanumeric designation you need.

Mode A & B: Payloadloc fields prefaced with a '#' will be fulfilled using integrated B2B for shippable product fulfillment. Typically an entry will be #<Optional Code> where the optional code can be used to further identify ITEMS for Mode A or Mode B (this optional field is reported while ignored by SendSafe logic and can be any code you want). The typical value is product SKU. ExamplePayLoadLoc = #HSJ-123 or ExamplePayLoadLoc = #MODEA or ExamplePayLoadLoc = #ANYTHING

Mode C: Payloadloc fields prefaced with a '@' will be fulfilled using plugin B2B fulfillment for offsite digital product fulfillment.

Mode D: Payloadloc fields prefaced with NEITHER an '@'or '#' will be fulfilled immediately in a locally assembled digital payload.

VERY IMPORTANT: Do not put only the prefix code into the Payloadloc DB column. This will result in orders for the product going unprocessed. YOu must have both the prefix (# or @) + some text string following it.

See for details


Order Cancellation

The system can cancel an order either via a customer command on the thankyou page or by voiding it on the order admin page.

The B2B cancellation request will only be sent to the fulfillment email addresses if a ship order has been transmitted.

Inventory on an items will only be decremented if a ship confirmation has not been received from fulfillment.

Setup:


Fulfillment DB Table - OrderPostProc Table

The OrderPostProc table contains information on state of fulfillment including B2B and Web-based. These are examples of what can be seen in this DB table AS orders move down the assembly line (a.k.a. as steps of fulfimment are completed).

Example of a non-fullment order:

transactionid ProcessStep AcklFulFillmentCompleted PostProcStatus
28897 NULL NULL {COMPLETED};E-RECEIPT PROC:SENT

Example of an order ready for fullment transmission or Web-based:

transactionid ProcessStep AcklFulFillmentCompleted PostProcStatus
28897 1 NULL {COMPLETED};E-RECEIPT PROC:SENT

Example of an order which has been transmitted to the fulfillment center or Web-based charge capture is in progess:

transactionid ProcessStep AcklFulFillmentCompleted PostProcStatus
28897 2 NULL {COMPLETED};E-RECEIPT PROC:SENT

Example of an order which has recieved from the fulfillment house that the order has shipped or Web-based charge capture is complete (order is okay to ship):

transactionid ProcessStep AcklFulFillmentCompleted PostProcStatus
28897 3 NULL {COMPLETED};E-RECEIPT PROC:SENT

Example of ship Acknowledgement e-mail has been sent and order fulfillment is complete:

transactionid ProcessStep AcklFulFillmentCompleted PostProcStatus
28897 4 Jul 13 2004 2:59PM {COMPLETED};E-RECEIPT PROC:SENT;FULFILLED

Example of a fullment order which has encountered an error:

transactionid ProcessStep AcklFulFillmentCompleted PostProcStatus
28897 0 NULL {COMPLETED};E-RECEIPT PROC:SENT




Shippable Products
Configuration of Robot for Modes A & B

The B2B function is configured the following robot settings:

FILE = "..\SendSafe\<your store name>.store.config"
Before modifying any configuration file always make a backup copy of the file.
To find a specific storefronts configuration file: see Location of Configuration files
KeywordDefault valueExplanation
B2B INTEGRATED YES This keyword enabled and disables B2B and Web-based Fulfillment operations

These three entries all set to YES will result in a serializer being assigned to the order ONCE the charge has been approved.
SERIALIZER YES This keyword enabled and disables serializing orders.
ONLYSERIALIZE B2B YES This keyword controls whether only B2B and Web-based fulfilled order recieve a serializer.
B2B POSTPROC YES This keyword enabled and disables Built B2B post processing Fulfillment operations (for shipable products). Post processing involves assigning a serilizer to the order.
B2B MODULE LOC <none> Set to "<none>" will disable - This entry is used for a B2B digitial fulfillment plug in module.
B2B MODULE NAME <none> Set to "<none>" will disable - This entry is used for a B2B digitial fulfillment plug in module.

 


Web-based Fulfillment Mode-B

Web-based fulfillment is controlled by using the Fulfillment admin page (located in the orders dropdown). This system is for 100% In-House fulfillment of orders OR for fulfillment houses which prefer to use a web based interface instead of email base data exchange.

This fulfillment function is fully integrated with SendSafe and does not require a B2B plugin module.

Web-based fulfillment works on orders as a whole, though you can designate different tracking # for different line items. Unlike B2B fulfillment, Web-based fulfillment will sweep all lineitems through the fulfillment process as long as one item or more in an order is flagged with the "#" in Payloadloc DB column and the ProcessStep=2.

Web-based fulfillment partially supports split shipments, but does not check for allocation of items to tracking numbers as format1900 does.

Basic steps of Web-based fulfillment:

  1. Order fulfillment admin page lists all orders which are pending fulfillment
  2. Tracking numbers are assigned individually to lineitems or globally to all items in an order. If you do not have a tracking number then enter the name of the carried (i.e. USPS, UPS, FedEx, etc). Failure to do this will result in the order NOT showing as shipped on the order status web page.
  3. Optionally the order can be modified using the order and lineitem admin pages.
  4. The order [Settlement] button is pressed on the order admin page
  5. If the order had "charge holds" i.e. "delayed capture" is needed, those holds are now automatically captured and then potentially settled through the payment gateway and the order is flagged orders.status = "{COMPLETED};{CAPTURED};..."
  6. Your order has shipped email is sent out
  7. Orders.ProcessStep is advanced to step 4 (complete)

Back-ordered items:
Any lineitem can be flagged as backordered. If an order contains backordered items and the settlement button is pressed then the credit card charge will be captured (if relavent), but no "Your order has been shipped" email will be sent to the customer.

An lineitem is set as backordered when when the orderlineitem.ShipMethod field has the string "(BACKORDERED)" in it.

An order is set as backordered when when the orders.status field has the string "BACKORDERED" in it.

The Admin sets the orderlineitem.ShipMethod "(BACKORDERED)" flag using the admin page. The Fulfillment Job (type 41) sets the orders.status field has to "BACKORDERED." This state change will not be made until the order has been released for processing and (optional capture) credit card processing has completed. So any order is not considered in backorder status until it had bee released.

General Notes:

This function is run by an Order FulFillent 41 job which looks like the example below:



Parameter value
param1

n/a

param2

n/a

param3 Relay msg. This can be any text message which will be appended to the beginning of the outgoing e-mail acknowledgement sent to the customer.


FORMAT1800 Shippable Products Mode-A
Transmission of ship instructions

This B2B function is fully integrated with SendSafe and does not require a B2B plugin module. This system will send ASCII TEXT e-mail to the fulfillment house and process a return ASCII TEXT e-mail from the fulfillment house containing order shippment status. This function can also be used in-house as a means of initiating the warehouse stage of product handling.

At a preset time each, a consolidated list of items which were ordered that day and require fulfillment is automatically e-mailed to the fulfillment house.

Very important: You must limit the size of your SQL queries to 250 records (i.e. TOP 250). Unlimited queries can result in very large e-mails which may clog up some systems. The system will reject SQL which does not include a TOP 250 limit. If you have more than 250 records the system will automatically spawn new jobs to handle each 250 records chunk until all orders have been processed.

Very important: You must order your queries by order by orders.transactionid. Failure to order your queries by transactionid will result in missing or duplciate entries if you have more than 250 items returned by your query.

This function is run by a JobQueue job which looks like the example below:



Parameter value
param1

Outgoing E-Mail subjectline and cutoff time for orders which will be processed (The cutoff time must be before the job runs). The cutoff time is NOT used if multiple SQL queries are used in param2. The cutoff time is 0:00 - 24:00
Syntax: [E-Mail Subject];[cutoff time];[nonulls]. See example above.

An optional flag can be appended to the end of this parameter which will prevent the word NULL from appearing in columns which contain empty data. See "nonulls" in the example above. If nonulls is present and empty cell will be created; if nonulls is not present then null be inserted into all null cells.

If using multiple queries make sure that this cutoff time is properly included in each query.

Make sure that the job is scheduled to run after the cut off time.

param2

This entry can either contain a list of DB columns for inclusion in the standard output OR mutliple queries delimited by semicolons. The system automatically detects FULL SQL statements vs. selection lists AND automatically detects lists of queries vs. single queries.

Multiple Queries: This is a list of multiple queries delimited by semicolons. The queries must be complete SQL commands including all formatting. The SQL Queries must include handling of cutoff times if needed (the cutoff time entered into param1 will be ignored when multiple queries are used). The processstep will not be set to 2 until after the last query is run. Each query will result in a seperate e-mail. The subject lines for each e-mail will contain the title specified above in param1 with the query number appeneded (i.e. first query in list will have a query number = 0, second query in list will have a query number = 1, etc. See example above of job indexkey=20 above and resultant e-mail.

List of DB columns: This is a list of the database columns which will be included in the report AND the order that the columns will be displayed. This list is used in the SQL select statement AND can include SQL Formatting command. See example above of job indexkey=19 above and resultant e-mail.

param3 This is a semicolon delimited list of e-mail addresses which will recieve the B2B transmittal.

Example of SQL which will generate a list of orders suitable for import into UPS Software:

select top 250 orders.transactionid, 
company, 
name, 
address, 
city, 
state, 
zip, 
country, 
phone, 
'Prepaid', 
'Package', 
shipmethod, 
STR( sum( ShipWt * quantity ),10,2), 
email, 
'Y', 
' ' 
From OrderLineItem, addresses, orders, Items, orderspostproc 
where OrderLineItem.ShiptoAddressID = addresses.addressCodeId AND 
OrderLineItem.transactionid = orders.transactionid AND 
OrderLineItem.transactionid = orderspostproc.transactionid AND 
OrderLineItem.ItemCodeId = Items.ItemCodeId AND 
Items.PayLoadloc like '#%' AND 
ProcessStep = 1 AND 

orders.date < CAST( CAST ( DATEPART(MONTH, getdate() ) AS char ) + '/' + 
CAST ( DATEPART(DAY, getdate() ) AS char ) + '/' +  
CAST ( DATEPART(YEAR, getdate() )  AS char ) + ' ' + ' 23:00' + ' ' AS datetime) 
group by orders.transactionid, 
company, 
name, 
address, 
city, 
state, 
zip, 
country, 
phone, 
shipmethod, 
email 
order by orders.transactionid

Example of SQL which will generate a list of order lineitems suitable for processing by a fulfillment center:

Select top 250 orders.transactionid, 
serializer, 
date, 
LineItemID, 
sku, 
fullname, 
itemparameter, 
quantity, 
STR( OrderLineItem.priceea, 10,2), 
shipmethod, 
STR( ShipWt * quantity, 10,2), 
requiredshipdate, 
name, 
company, 
address, 
city, 
state, 
zip, 
country, 
phone, 
email, 
fax, 
altphone, 
international, 
STR( subtotalitems, 10,2), 
STR( subtotalshipping, 10,2), 
STR( subtotalsalestax, 10,2), 
STR( totalamount, 10,2) 
From OrderLineItem, addresses, orders, Items, orderspostproc 
where OrderLineItem.ShiptoAddressID = addresses.addressCodeId AND 
OrderLineItem.transactionid = orders.transactionid AND 
OrderLineItem.transactionid = orderspostproc.transactionid AND 
OrderLineItem.ItemCodeId = Items.ItemCodeId AND 
Items.PayLoadloc like '#%' AND 
ProcessStep = 1 AND 

orders.date < CAST( CAST ( DATEPART(MONTH, getdate() ) AS char ) + '/' + 
CAST ( DATEPART(DAY, getdate() ) AS char ) + '/' +  
CAST ( DATEPART(YEAR, getdate() )  AS char ) + ' ' + ' 23:00' + ' ' AS datetime) 

order by orders.transactionid

Format of "Fulfillment Request" outgoing E-Mail

The e-mail which is sent to the fulfillment house is a comma delimited file containing all orders placed up to the cut off time each day. The specific fields and order of appearance is defined in param2 of the Job (see above). Any column from these tables can be included in the outgoring transmittal:

The example below contains the following fields in the specified order. Field selection and order is made by configuring the Post Processing Job.

orders.transactionid
serializer
date
LineItemID
sku
fullname
quantity
STR( OrderLineItem.priceea, 10,2)
shipmethod
name
company
address
city
state
zip
country
phone
email
altphone
STR( subtotalitems, 10,2)
STR( subtotalshipping, 10,2)
STR( subtotalsalestax, 10,2)
STR( totalamount, 10,2)




FORMAT1800 Shippable Products Mode-A
Ship instructions executed message

E-mail is sent from the fufillment house to the e-commerce system to update fulfillment status. This e-mail contains shipment tracking and other information which is automatically imported into the SendSafe database and presented to the customer on their order status pages. The receipt of this e-mail also results in a "shippment acknowledgment" e-mail automatically being sent to the customer.

The critical differences between 1800 format and 1900 are:

Each order can only be updated once by e-mail. Subsequent e-mailed data for a given order will be ignored. You can manually update the ship status for an order by using the lineitem admin page to modifying the ShipMethod field.

This function is run by a JobQueue job which looks like the example below:



Parameter value
param1 POP3 account spec used to retrieve the incoming e-mails, the incoming e-mail's subject line, and the from-address which will be used on the e-mails sent out to customers:
[e-mail server];[email userid];[email password];[subject line used as password];[from address]

EXAMPLE: mail2.c-prompt-dev.com;incoming@mybiz.com;password;subjectlinepassword;sales@mybiz.com
param2

defines the basic format of the e-mail.
Syntax: [key-ID columnName],[column position of key-ID],[column position of tracking information]

The key-ID name is set to either (the column used to lookup either the entire order OR the lineitem: TransactionId or LineItemId. At this time only TransactionId is supported.

param3 Relay msg. This can be any text message which will be appended to the beginning of the outgoing e-mail acknowledgement sent to the customer.

This job is the how the customer sees the results of B2B Post Processing. Make sure that the job is scheduled to run after the cut off time for the outgoing transmittal job.

Notes:

EXAMPLE OF INCOMING E-MAIL
From: jj@fulfillmenthouse.com
To: BB@yourbiz.com
Subject: MYPASSWORD
"168552232","UPS 1Z90E13W0343464757"
"284080958","UPS 1Z90E13W0344638933"
"357590726","UPS 1Z90E13W0243506712"
"48604208","UPS 1Z90E13W0343857145"
"62432534","UPS 1Z90E13W0344334127"



FORMAT1900 Shippable Products Mode-A
Transmission of ship instructions

This B2B function is fully integrated with SendSafe and does not require a B2B plugin module. This system will send FORMAT1900 e-mail to the fulfillment house and process a return FORMAT1900 e-mail from the fulfillment house containing order shippment status. This function can also be used in-house as a means of initiating the warehouse stage of product handling.

At a preset time(s) each day, a consolidated list of items which were ordered that day and require fulfillment are automatically e-mailed to the fulfillment house.

FORMAT1900 supports multi-address mode. Orders which have multiple shipto addresses will be result in separate ship instructions generated for each lineitem in the order.

Format1900 supports split shipments (i.e. multiple tracking numbers for orders shipped to the same address). Allocation of a shipping number for each item in an order is defined by the (tracking#)xN format in OrderLineItem.ShipMethod db column.

This function is run by a JobQueue job which looks like the example below:



Parameter value
param1

Outgoing E-Mail subjectline and cutoff time for orders which will be processed (The cutoff time must be before the job runs). The cutoff time is in minutes (prior to the time his job runs; typical values are 30 minutes to 1 hour.

Syntax: [E-Mail Subject];[cutoff time];[nonulls];[nocommas];[ShipppingTypeCodes];[columnsInHeader];[colPositionShipMethod]. See example above.

nonulls (Values are: nonulls and yesnulls; all lowercase) is a flag which will prevent the word NULL from appearing in columns which contain empty data. See "nonulls" in the example above. If nonulls is present and empty cell will be created; if nonulls is not present then null be inserted into all null cells.

nocommas (Values are: nocommas and nocommas; all lowercase) is a flag which will cause all commans to be stripped from all entry fields.

ShipppingTypeCodes is used for shipping code remappping. It is a list of 8 codes (semicolon delimited) 4 for the SendSafe labels: ground,second day,next day & Saturdays THEN 4 for the replacement codes for these values. These code are used are typically interal fulfillment house codes. The SendSafe codes are the values setup in Application("ShippingMethodNames") = "Ground,SecondDay,NextDay,Saturday"

columnsInHeader is the zero normalized index number (column position) of the last DB column returned by the param2 SQL which go into the header portion of the spreadsheet. The header is displayed once per order, and the remainder of the param2 SQL columns are displayed for each line item in the order.

This index number must include the automatically added transactionid which is the 1st column in all select statements for this fulfillment job. So count up the columns then add 1.

colPositionShipMethod is the zero normalized index number (column position) of the shipmethod column in the select statement.

This number must include the automatically added transactionid which is the 1st column in all select statements for this fulfillment job. So count up the columns then add 1. This value is used for ShipppingTypeCodes remapping.

Make sure that the job is scheduled to run after the cut off time.

param2

This entry contains a list of DB columns for inclusion in the standard output email. The following tables are available:

  • OrderLineItem
  • addresses (shipping)
  • orders
  • Items
  • orderspostproc

This list is the entire column list for the SQL SELECT statement used to query orders from the DB. This list can contain subqueries and SQL formatting commands. The list can also contain empty ' ' labels which can be used to insert emptry columns into the output to fill spread columns which are optional and not being provided; with the limitation that the last column in the header and last column in the lineitem are NOT empty labels.

param3 This is a semicolon delimited list of e-mail addresses which will recieve the B2B transmittal.

Format of "Fulfillment Request" outgoing E-Mail

The e-mail which is sent to the fulfillment house is an ASCII email with a comma delimited spreadsheet (*.CSV) attached containing all orders placed up to the cut off time each day. The format of the order header and line item entires depends soley on the configuration of the job.



FORMAT1900 Shippable Products Mode-A
Ship instructions executed message

E-mail is sent from the fufillment house to the e-commerce system to update fulfillment status. This e-mail contains shipment tracking and other information which is automatically imported into the SendSafe database and presented to the customer on their order status pages. The receipt of this e-mail also results in a "shippment acknowledgment" e-mail automatically being sent to the customer.

Each order can only be updated once by e-mail. Subsequent e-mailed data for a given order will be ignored. You can manually update the ship status for an order by using the lineitem admin page to modifying the ShipMethod field.

This function is run by a JobQueue job which looks like the example below:



Parameter value
param1

POP3 account spec used to retrieve the incoming e-mails, the incoming e-mail's subject line, and the from-address which will be used on the e-mails sent out to customers. A different POP3 account is needed for each storefront unless commingling of order is not an issue.
[pop3 email server];[email userid];[email password];[subject line used as password]

EXAMPLE: mail2.c-prompt-dev.com;incoming@mybiz.com;password;subjectlinepassword

For security reasons it is a good idea use a long complicated subjectline password.

param2

defines the basic format of the e-mail.
Syntax:
[column position of shipdate-pos]
[column position of transactionid-pos]
[column position of SKU-pos]
[column position of trackingNum-pos]
[column position of quantity-pos]

param3 Relay msg. This can be any text message which will be appended to the beginning of the outgoing e-mail acknowledgement sent to the customer.

This job is the how the customer sees the results of B2B Post Processing. Make sure that the job is scheduled to run after the cut off time for the outgoing transmittal job.

Notes:



Offsite Digital Products
B2B Payload Fulfillment

This subsystem supports sending an electronic order for product fulfilment and then processing a return e-mail which indicates that the order was fulfilled.

See digital payloads for information on setting up digitally fulfilled items in the database. Please note: that SendSafe can directly handle digital product fulfillment. The only reasons to use an outside company for FulFillment is if you cannot assembled the digital product yourself.

This B2B method uses a plugin module to connect to the fulfillment company. This module can use any type of Internet connection from basic sockets to high level protocols lke http and XML SOAP

Example Record for non-B2B digital payload fullment order:

transactionid Fulfillment PostProcStatus
28897 ftp://p1.biz.com/abc/ORDER15647.zip {COMPLETED};E-RECEIPT PROC:SENT;PAYLOAD

Here the Fulfillment column contains the download link for the payload. The PostProcStatus contains the flag PAYLOAD which indicates that a digital payload was generated for this order.


Offiste Digital Products
B2B E-Mail Relay Acknowledgement

The system will receive e-mails from the fulfillment house. These e-mails will be parsed for an order ID-Key and an acknowledgment e-mail will be sent to the customer who placed the order. These incoming e-mails from the fulfillment house will be processed by a Job in the SendSafe JobQueue as defined below.

Note: all incoming e-mails must be ASCII text only (HTML E-Mails will fail).

Example of incoming e-mail:

Subject: FULFILLMENT RESPONSEMAIL
ThisId: xxxxx
This is your order. It contains:
WXYZ1000
WXYZ2000
Thanks

Example of JobeQueue Entry:

Parameter value
param1 POP3 account spec used to retrieve the incoming e-mails and the incoming e-mail's subject line:
[e-mail server];[email userid];[email password];[subject line]

EXAMPLE: mail2.c-prompt-dev.com;incoming@mybiz.com;password;EXPLORATION FULFILLMENT
param2

SQL used to retrieve relay e-mail address from customer DB table.
Syntax: [E-Mail tagstring],[SQL select statement]

The E-Mail tagstring is a label which appears in the incoming e-mail WHICH LABELS the ID-Key. This same tagstring also appears in the SQL Select statement. Before running the SQL statement, the system will replace the tagstring in the SQL select statement WITH the value the tagstring was assigned in the incoming e-mail. In the above example of incoming e-mail that tagstring is "ThisId:" and the value would be "xxxxx" (i.e. ThisId: xxxxx). WARNING! the tagstring must never match (or be an embedeed substring) matching a column name OR SQL operator for in your SQL Select statement.

Example of Parameter2 that would work with the incoming e-mail:
ThisId:;select top 1 email from orders, orderlineitem, customers, addresses where orders.transactionid = ThisId: and orders.transactionid = orderlineitem.transactionid and customers.customerid = orders.customerid and addresses.addressCodeId = customers.addressid order by requiredshipdate desc

Note the used of the string "This Id:" in the above example. If the e-mail a colon ":" along with the label THEN a colon must be used for the tagstring. There is no sub-parsing. The tagstrings must match exactly. The only processing is the removal or space-character padding. Also note, in the above example "ThisId:" would be replaced with the VALUE it was assigned in the incoming e-mail (i.e. ThisId: xxxxx).

param3 Relay msg. This can be any text message which will be appended to the beginning of the outgoing e-mail acknowledgement sent to the customer.

The data that is ID-key in the e-mail is the unique identification code; a transactionId would be fine, but other ID-key codes will work just as well. The ID-key code provided in the e-mail must work with the SQL Select phrase specified in the Job and the E-Mail tagstring (embedded in the SQL statement).

All text on the line following the ID-Key tagstring down through the end of the eimail will be copied into the outgoing e-mail AFTER the Relay Msg (param3).


Offsite Digital Products
B2B Plugin Configuration

FILE = "..\SendSafe\<your store name>.store.config"
Before modifying any configuration file always make a backup copy of the file.
To find a specific storefronts configuration file: see Location of Configuration files
KeywordDefault valueExplanation
B2B INTEGRATED NO This keyword enabled and disables B2B Fulfillment operations
B2B POSTPROC NO This keyword enabled and disables Built B2B post processing Fulfillment operations (for shipable products).
B2B MODULE LOC C:\SendSafe\B2B This is the directory for the B2B Plugin module can be found.
B2B MODULE NAME B2BFulFillment.exe This is the filename of the B2B Plugin module.
B2B USERID Userid This is the userid which will be used to login to the remote fulfillment company's web service.
B2B PASSWORD Password This is the password which will be used to login to the remote fulfillment company's web service.
B2B HOST 127.0.0.0 This is the IP address or domain name of the service.
B2B PORT 80 This is the port of the service.
B2B TIMEOUT 30 This is the connection timeout in seconds.
B2B PREPROC COMMAND ValidatePurchase This is the command string that is passed to the B2B plug in module when running a pre-proc command to check that the order can in fact be fulfilled. Enter for no preprocess command. This command is run before a credit is charged
B2B FULFILLMENT COMMAND PurchaseProducts This is the command string that is passed to the B2B plug in module when running a fulfillment command. This command is run after the credit card is charged.
B2B FULFILLMENT EMSG Congratulations on your new purchase(s) This is a text message which is included in the e-receipt



Offsite Digital Products
B2B Plugin Module Input

The B2B Plugin is invoked as a dependant process with the following command line parameters:

PreProc:

/HOST="203.110.131.25" 
/PORT="80" 
/TIMEOUT=30 
/OPERATIONCODE="PurchaseExtrasWebService/PurchaseExtras.asmx/ValidateExtrasForPurchase" 
/USERID="oesdvalid@oesd.com" 
/PASSWORD="oesd" 
/PARAMLIST="1001-HFBZNNFTVNVH" 
/PAYLOADLIST="W00004" 
/AUDIT="C:\PROJECT\JSOF SSL\jsof\Audit" /FILEOUT="CPROMPT00000004.txt"

PostProc:

/HOST="203.110.131.25" 
/PORT="80" 
/TIMEOUT=30 
/OPERATIONCODE="PurchaseExtrasWebService/PurchaseExtras.asmx/PurchaseExtras" 
/USERID="oesdvalid@oesd.com" 
/PASSWORD="oesd" 
/PARAMLIST="1001-HFBZNNFTVNVH" 
/PAYLOADLIST="W00004" 
/AUDIT="C:\PROJECT\JSOF SSL\jsof\Audit" /FILEOUT="CPROMPT00000004.txt"

HOSTThe IP ADDRESS (or domain name) to be used
PORTThe Port to be used
TIMEOUTConnection Timeout in seconds
OPERATIONCODEThe command code string (will select which command to use)
USERIDA valid userid provided by Fulfillment house to access the B2B Web Service.
PASSWORDA valid username provided by Fulfillment house to access the B2B Web Service.
PARAMLISTA concatonate (comma delimited) Attribute string (concatonation of all ItemParameter fields for all B2B fulfillable products).
PAYLOADLISTA concatonate (comma delimited) Payload string (concatonation of all payload fields for all B2B fulfillable products minus the @ designator and any payload field operators).
AUDITPath that will be used to output audit trail.
(OPTIONAL)
TESTIf present this flag causes test values to be used instead of passed in parameters
FILEOUTIf present this is file will be used to output the results.



Offsite Digital Products
B2B Plugin Module Output

Contents of the results from the file is listed below. This results file is parsed by the e-commerce system and acted on.

[[RUNNING TRANSACTION]]=
Host =>> 203.110.131.25
Port =>> 80
OperationCode =>> PurchaseExtrasWebService/PurchaseExtras.asmx/ValidateExtrasForPurchase
Timeout =>> 30
userId =>> oesdvalid@oesd.com
Password =>> oesd
SerialNum =>> 1001
IdCode =>> HFBZNNFTVNVH
payloadList =>> &productList=W00004
commandURL =>> /PurchaseExtrasWebService/PurchaseExtras.asmx/ValidateExtrasForPurchase?username=oesdvalid@oesd.com&password=oesd&serialnum=1001&identitycode=HFBZNNFTVNVH&major=10200&minor=0&version=1&productList=W00004
[[END TRANSACTION]]

[[RESULTS]]=

0 MStatus => failure-hard
1 MErrMsg => (Details: Invalid product for device.)
2 MErrCode => 5210
3 Raw-Results => CGIGET SUCCESSFUL: 200 code returned by server<Return number="5210"><Product code="W00004" error="5202" /></Return>

[[END RESULTS]] // // SAMPLE FAILED TX FILE CONENT
[[RESULTS]]=

0 MStatus => failure-hard
1 MErrMsg => (Details: Invalid product for device.)
2 MErrCode => 5210
3 Raw-Results => CGIGET SUCCESSFUL: 200 code returned by server<Return number="5210"><Product code="W00004" error="5202" /></Return>

[[END RESULTS]]


  MStatus   - Always present
         "success"      Transaction processed successfully; check auth-code for approval status
         "partial"      Transaction processed successfully; check auth-code for approval status
         "failure-hard"     Authorization Failed OR System error which cannot be retried
         "failure-q-or-cancel"  Retryable error condition
         "failure-q-or-discard"  Retryable error condition