Sandfield Orders Portal
Overview
Description
This transport should be used for all inserting / retrieval of items used by the Orders Portal website. It is highly configurable with transport parameters so each action will work for any business logic scenario.Â
All actions are backwards compatible with the OLEDB transports, but some of the parameters may have changed.
If you use this transport for an incoming action (from db), the outgoing (to db) MUST also use this transport or files will be sent while they are still being inserted.
The transport will fully integrate with the orders portal website for all error handling, and audit log events.
Please contact a Crossfire developer if you require additional logic. A list of known backwards compatible OLEDB stored procedures can be found under each action.
Message Formats: https://drive.google.com/drive/folders/162cBL0kzptDy8sEBdb5-YIqB7TA4wb1eÂ
Basic setup, error handling, and partner settings
The Incoming transport are for pulling data from the middleware database. The FULLXML default format should be used for all new integrations moving forward.
The Outgoing action is for creating objects in middleware - either automatically or from a file.
The Action transport setting should be the CAPITAL LETTER heading of the section eg ORDER, SHIPMENT etc.
The transport parameters are explained below each heading. Some are marked as required, while others have a default value. If using the default value, you do not need to specify it on the transport.Â
Some parameters require the value to be from a fixed list of options.Â
Boolean parameters can be specified as 1/true and 0/false - case insensitive.
Errors will generally be displayed in the orders portal rather than failing the EDI message. This means invalid files will be inserted into the database in an error status so the customer can fix them from the website. Ignoring errors from the orders portal will send the file once fixed, or they can be deleted.
Such errors include shipping additional products that are not on the order, or quantity validations.Â
Some errors will still cause a failure in Crossfire such as missing PartnerCodes, OrderNumbers, or other required fields.
It is essential to properly set up the Orders Portal partner settings before setting up the transports. All outbound actions will validate that the required feature is enabled before the message is inserted. EG partner X must have the "Shipments Enabled" feature turned on for an outgoing shipment transport to function. These features will also customize the sections that the orders portal displays in the UI.
There are also optional features such as Price Validation Type, and Product Components Enabled. These are further discussed below in the Notable Features section.
https://sites.google.com/a/sandfield.co.nz/crossfire/crossfire-order-portal/partner-settings
Migrating OLEDB transports
A list of known backwards compatible OLEDB stored procedures can be found under each action. If you do not see the stored proc you are trying to migrate from, contact a developer to review it.
The transport parameters are similar to the OLEDB stored procedures but the names may have changed slightly. Please double check all available parameters carefully.
When migrating incoming OLEDB transports, the Format transport parameter will need to be changed to match the stored procedure name e.g. "SANDFIELD_STANDARD_ORDER_V2". This guarentees that your output format will be identical.
It is essential to migrate outgoing (to db) actions first as the incoming transport is not compatible with an integration still using outgoing OLEDB.
Notable features
Standalone shipments / invoices
Requirements / setup
Shipments / invoices must be enabled for the partner in the Orders Portal.
Functionality
This allows for Shipments / Invoices to be inserted into middleware without a related order match.
Invoice automation
Requirements / setup
The "Automated Invoicing Enabled" Partner Setting must be enabled (under automation)
The partner must be using shipments
Functionality
Once a shipment has been sent for an order, this will auto create and send an invoice for the related order. The prices and quantities will come from the ack prices, and shipment quantities. The invoice number must be pre-populated against the order.
Error notifications / general notifications
Requirements / setup
The partner must have an error email, notification email, and Send Error Emails turned on in the Orders Portal.
The partner must have one or multiple notification types enabled under the partner Notifications section in the Orders Portal
Functionality
Error Emails: If enabled, every time an order enters the error status, a notification will be sent to the email along with a link to the order.
General notifications: If enabled, every time a new file is received, an email notification will be sent.
Price validation, price replacement, and Alternate product prices
Requirements / setup
Products and their prices must be maintained in the orders portal
The partner must be willing to fix errors within the orders portal
Price validation must be enabled in the Orders Portal for the partner
Alternate Product Prices must be enabled in the Orders Portal for the partner
Functionality
Price validation
The transport will validate prices against the official price for that product. If there is a mismatch, the order comments will have an error message added (warning), or the order will go into error status (error)
Price replacement
Similar to price validation, instead of erroring the order, the prices will be replaced with the official product price
Alternate product pricing
This is useful if one partner sells to different regions - each with a distinct price. A new section on the product page will be available where price-pricecode pairs can be configured. In the mapping, if the StoreOrder.AlternatePriceCode is populated, the matching alternate price code will be used.Â
This is to be used in conjunction with the above two pricing features
Alternate product codes
Requirements / setup
This requires the partner setting "Alternate Product Codes Enabled" to be enabled
Alternate product codes must be maintained manually in the Orders Portal
Functionality
This is especially useful if a customer uploads their master product data, but their retailers order based off of their "custom" product codes.
This could be as simple as "0012345" vs "012345", or entirely different such as "0012345" vs the retailer using both "012345" or "012345-1" for the same product.
Once setup, products on the incoming order xml will be matched to database products using the alternate product codes against each product. When sent on the incoming transport, the official SupplierProductCode will be used. You can then save the actual barcode that the customer used by mapping it to a different field at the StoreOrderProduct level.
Kitsets / Product components / Bundled products / Product packs
Requirements / setup
The partner setting "Product Components Enabled" must be enabled in the Orders Portal
Scenario 1:
For this scenario, the product components must be manually maintained in the Orders Portal
Scenario 2:
For this scenario, the product components are dynamic and come in on the order
Functionality
This allows order lines to have sub-lines (components). These are either pre-defined or defined on the to DB xml.
For pre-defined kitsets, the component lines will automatically be added.
A component quantity also exists, which determines how many of that component make up one unit of the parent product
When exported, all lines and sub lines will be mixed together, with <KitSet>true/false<Kitset> tags in the mapping to determine what is a kit. Kits will have their related StoreOrderProductID reference their parent order line in the xml.
Similar functionality exists when receiving shipments.
Pack type conversions
Requirements / setup
This requires duplicate SKUs to be set up, each with unique pack sizes and SupplierProductCodes
Functionality
If an order is received using the CARTON pack size, and an acknowledgement is received using the EACH pack size, the SupplierProductCodes will not match. The Transport will try to convert the quantities if the SKUs match but the SupplierProductCodes do not - automatically handling pack sizes without issue.
Order price calculations
Requirements / setup
Order tax rates must be a decimal e.g. 0.1, 0.15
Product tax rules must be pre set (or populated in the mapping) as "Tax Inclusive", "Tax Exclusive", or "Tax Exempt"
Partner Setting to specify which fields should be used to caluclate (Ordered, Acknowledged, Shipped)
Functionality
This will automatically calculate line totals, and taxes as well as Order totals, sub totals, and tax totals. The values from the mapping will be ignored and their values recalculated.
Message Standards and Fields
Legacy crossfire message standards used with the OLEDB stored procedures are supported however should not be used in new integrations.
Official annotated orders portal message formats can be found at the bottom of the page. Some fields are used for logical calculations so it is important to not map to the incorrect place.
New integrations that require new fields should first investigate using similarly named options, or generic REF1-REF2... options.
Outgoing Actions (To DB)
ORDERS
Known backwards compatibility
[ORD].[Order_InsertFromXML_V3]
Workflow:
The order is validated for required fields and duplicate Store Orders. The EDI message will error if found
Any existing orders for the same partner-orderNumber combination will be looked for. If found, validate
If the existing order is a sales order, delete it and reprocess it at the end of the workflow
Otherwise, handle according to the IgnoreDuplicateOrders transport param
Assign database stores to the request using the StoreCode. Update them depending on the UpdateStore  transport param
If alternate product codes are enabled for the partner, assign database products to the request using alternate product codes. A quantity conversion will be applied if the alternate product code has a different pack size. Update the product in the database depending on the UpdateProduct  transport param
Assign database products to the request using the SupplierProductCode. Update them depending on the UpdateProduct  transport param
Assign default values to the request
Calculate Line Total, Line Tax, and Order level pricing from the LineProductPrice Order.TaxRate, and Product.TaxRule. This requires the Product.Tax rule to be one of the following: Tax Exempt, Tax Inclusive, Tax Exclusive
Validate the request
If the Retailer external system feature is enabled, validate the partner has a retailer
If the GlobalStores external system feature is enabled, validate the stores have a global store
Validate LineProductPrice for all lines against the existing Product.Price if the partner has price validation turned on
This might use the AlternatePriceCode defined on the StoreOrder
If the ExternalProducts external system feature is enabled, validate all the products have an external product set
Insert the request
Resend Sales Order if one was found earlier
Transport Params:
UpdateProduct (Default "false") - ["true", "false"]
If 1, existing products will be updated with the new details form the message. New products will always be inserted. Check the message standard fields in the Google Sheet above to see which fields will be updated.
IgnoreDuplicateOrders (Default "null") - ["false", "true", "null"]
Null: This will error the message but only if the sum of all LineTotals or the sum of all OrderedQty has changed from the previous version. Otherwise the duplicate is ignored
True: If a duplicate order is received, it will be ignored.Â
False: If a duplicate order is received, it will error the message and the existing Order.
UpdateStore (Default "-1") - ["0", "1", "2", "-1"]
0: This will not update the store at all.
1: This updates the store when the new ORG_ID does not match the old, or the old is null.
2: Updates the store regardless of ORG_ID.
-1: This will update the DB stores ORG_ID only
SALESORDER (Mainfreight specific)
Workflow:
The order is validated for required fields, duplicate Store Orders, and other reasons why the message cant be processed. The EDI message will error if found
Attempt to find an existing order match for the same partner-orderNumber combination.
Validate this SO can be processedÂ
Sales Order Enabled check (if not enabled, fail EDI message)
If aggregate SO, and no existing order, delay EDI message
If an existing order match was found above
Validate external status of existing order
Validate if duplicate SO and handle according to settings
Split the StoreOrderProducts into StoreOrderProducts and StoreOrderProductComponents. This is done by using the KitCode on each StoreOrderProduct line.
All products with a KitCode set are StoreOrderProductComponents. They are assigned to the StoreOrderProduct line where the StoreOrderProduct.SupplierProductCode matches the StoreOrderProductComponent.KitCode.
Assign database stores to the request using the StoreCode. Update them depending on the UpdateStore  transport param (this does not apply for aggregate SOs)
Assign database products to the request using the SKU and optionally SupplierProductCode if set.Â
If only SKU supplied, it will match on the product for that SKU with the lowest pack size.
If both supplied, it will match on SKU, and then find the product where the PurchaserProductCode matches the SO SupplierProductCode
NOTE: Mapping to the PurchaserProductCode witht the same value as the SupplierProductCode is important because it will allow users to alter the order line if no matching product is found above.
Assign default values to the request.
There is a feature to auto-calculate the Orders customer reference from the individual store order references. The calculated customer reference will hyphenate consecutive references eg 1,2,3,4,5,6,10,11,12 from the store orders will become "1-6,10-12"
If the Order level CustomerReference in the RO is empty, the calculated reference will be used.
In the offsite SO, if the Order level CustomerReference is empty, the calculated reference will be used but only if either the RO or SO have Store Order level StoreOrderReference populated. If there are no StoreOrderReference for the order, the CustomerReference from the RO will be kept.
There is a feature to auto-calculate the StoreOrderReference if it is left blank in the mapping. The default for this value will be the {StoreOrderNumber}_{StoreCode}
Handle products not matched by the SKU - SupplierProudctCode combo. If this SupplierProuductCode exists, we need to update the SupplierProductCode to have the SKU in brackets.
When existing order is not found
Handle price replacement
Calculate Line Total, Line Tax, and Order level pricing from the LineProductPriceAcknowledged Order.TaxRate, and Product.TaxRule. This requires the Product.Tax rule to be one of the following: Tax Exempt, Tax Inclusive, Tax Exclusive
Validate the request
If the Retailer external system feature is enabled, validate the partner has a retailer
If the GlobalStores external system feature is enabled, validate the stores have a global store
Validate LineProductPriceAcknowledged for all lines against the existing Product.Price if the partner has price validation turned on
This might use the AlternatePriceCode defined on the StoreOrder
If the ExternalProducts external system feature is enabled, validate all the products have an external product set
Validate the QuantityAcknowledged in the external system if specified by the transport setting.
Insert the request
When existing order is found
Map the SO onto the order match
Handle duplicate SupplierProductCode conversions to all SKUs match the RO
Handle pack type conversions so all SupplierProductCodes match the RO
Reset the existing SO information on the order for all stores that are on this new SO
Assign all order level fields from SO to the existing order
For each store order in the SO
Find all matching store orders from the RO
Assign all store order level fields from the SO to the matches
Supply the matches (Normal scenario)
Assign the qty according to Quantity, QuantityAcknowledged, Batch, and LinePackSize
Note: StoreOrderProducts with StoreOrderProductComponents can only be used to supply a single RO line
If a product is batched on the SO, batch it on the RO
Assign all store order product level fields from the SO onto the matching line including StoreOrderProductComponents
Reverse supply the matches (Per store order warehouses)
Add the sales order store order as a new store order
Move products off of the RO match to supply it
Ignore the RO match regardless of remaining products
Handle over supply
Handle unmatched products on the SO
If no matching store orders, handle unmatched store on SO
Ignore all stores that are zero supplied
Handle price replacement
Calculate Line Total, Line Tax, and Order level pricing from the LineProductPriceAcknowledged Order.TaxRate, and Product.TaxRule. This requires the Product.Tax rule to be one of the following: Tax Exempt, Tax Inclusive, Tax Exclusive
Validate the request
If the Retailer external system feature is enabled, validate the partner has a retailer
If the GlobalStoresexternal system feature is enabled, validate the stores have a global store
Validate LineProductPriceAcknowledged for all lines against the existing Product.Price if the partner has price validation turned on
This might use the AlternatePriceCode defined on the StoreOrder
If the ExternalProducts external system feature is enabled, validate all the products have an external product set
Validate the QuantityAcknowledged in the external system if specified by the transport setting.
Validate no stores were on the SO that were not on the RO
Validate the SO did not over supply lines
Validate the SO did not contain products that were not on the RO
Validate ack quantities are a multiple of the LinePackSize
Validate SO prices matched the RO if price validation is Error
Validate that that all StoreOrderProductComponent quantities sum to their parent StoreOrderProduct quantity.
Insert the request
Transport Params:
ValidateQuantityInExternalSystem (Default "false") - ["true", "false"]
This will validate that the product quantity exists in the external system. This will require setup by a developer if used.
UpdateStore (Default "-1") - ["0", "1", "2", "-1"]
0: This will not update the store at all.
1: This updates the store when the new ORG_ID does not match the old, or the old is null.
2: Updates the store regardless of ORG_ID.
-1: This will update the DB stores ORG_ID only
PriceReplacement (Default "false") - ["true", "false"]
This will replace the ack prices with the official product price in the portal if true.
RetryDelayMinutes (Default 60)
If an aggregate SO is received before its RO, we cant process it in to the portal. It will try to send again in minute intervals specified by this setting.
NoMatchMaxMessageAge (Default 24)
If an aggregate SO is received first, and the number of hours specified by this setting passes before the RO is received, it will process into the portal regardless and use an autogenerated store code.
RequireDuplicateConfirmation (Default "false") - ["true", "false"]
When a duplicate SO is received, if this setting is true it will error the order, and the user must either clear errors (rejecting this duplicate), or delete the existing SO (accepting this order). The duplicate will try to send again in minute intervals defined by the RetryDelayMinutes setting.
DuplicateConfirmationWaitTime (Default 24)
When a duplicate SO is received, the RequireDuplicateConfirmation setting is true, and no action is taken for the number of hours defined by this setting, the EDI message will fail.
ORDERCHANGE
ChangeValidationType (Required)
This will require setting up on a per customer basis with customised logic. EG checking the status is ok for the order to be changed, and deleting / recreating the order
Currently supported workflows: MIMS, BRISCOES, DEFAULT
ACKNOWLEDGEMENTS
NO PARAMS
SHIPMENT
Known backwards compatibility
[ORD].[Shipment_InsertFromUnleashed_MultiCarton_V3]
Workflow:
The edi file is mapped to the database shipment format depending on the values of SSCCIsCartonNumber, CartonNoIsCartonNumber, and CartonNoAndSSCCAfterProduct (examples below).
Shipment carton product components require the KitCode populating with their parent lines product code. If the parent line does not exist in the message, it will be automatically created.
Store Order matches are searched for, using the order number and then StoreCode. If multiple matches are found, an error will be generated.
Cartons from the edi file are moved to existing shipments if the shipment number is the same and optionally if the dispatch date is the same depending on the transport parameter DispatchDateInUse.
The shipments in the request are validated. Errors will be generated when: they failed to match to a storeorder, or if the cartons already exist (depending on the IgnoreDuplicates transport param).
Duplicate cartons are removed from the request if the IgnoreDuplicates transport param is true.
Shipment lines are matched to order lines. When there are multiple matches for the same product, the following rules are applied:
If the UseSystemOrderLineItemID transport param is enabled, matching will use the SystemOrderLineItemID field.
Otherwise the matching will use line numbers, then quantity, then the intersection of line number and quantity matches.
Default values are assigned to the request.
The shipment is validated.
All shipment carton products must have an order product match.
All shipment carton product components must have a store order product component match.
If the SplitShipment field is false, store orders for the order will be ignored if a shipment was not included within the edi file.
Shipment lines that do not match to the order are removed.
The shipments are inserted.
Transport Params:
PartnerCode (Default "")
This PartnerCode will be used if one is not specified in the message.
DispatchDateInUse (Default "false") - ["true", "false"]
If true, we need to generate separate shipments if they use the same ordernumber / shipment number but have different dispatch dates.
ShipmentIsContainer (Default "true") - ["true", "false"]
If true, then use the ordernumber as the shipmentnumber.
ValidateProducts (Default "true") - ["true", "false"]
If false, do not validate that all products on the shipment are on the StoreOrder.
UpdateShipments (Default "false") - ["true", "false"]
This is used to resend the shipments if it has been received before but has now been updated with new cartons. If true, the Shipment's status will be updated and the ShipementSent flag will be set to 0.
SSCCIsCartonNumber (Default "false") - ["true", "false"] For examples, please see below
If true, the SSCC number on the product will be used as the cartonnumber.
CartonNoIsCartonNumber (Default "false") - ["true", "false"] For examples, please see below
If true, the cartonNo field will be used as the cartonnumber.
CartonNoAndSSCCAfterProduct (Default "false") - ["true", "false"] For examples, please see below
If true, the SSCC number and the carton number are after the product level in the shipment carton box.
IgnoreDuplicates (Default "false") - ["true", "false"]
If true, cartons in this shipment that already exist in the database will not cause errors.
AckStatusForShortShip (Default null) - ["Ack Entered", "Order Acknowledged Received"]
If the shipment quantity does not match the acknowledged quantity, the store orders ack status will be updated to this value. This is to retrigger the ack when short shipping an order.
UseSystemOrderLineItemID (Default "false") - ["true", "false"]
If true, shipment carton products will match to store order products using the SystemOrderLineItemID.
ValidateOrder (Default "true") - ["true", "false"]
This will cancel the insert if the shipment does not have a matching crossfire order.
INVOICES
Known backwards compatibility
[ORD].[Invoice_InsertFromXML]
Workflow:
The invoice is validated for required fields, and to make sure all invoices in the message have the same partner code. The EDI message will error if found
Attempt to find an existing order / store order match for the same partner-orderNumber combination.
AggregateInvoice / InvoiceWholeOrder will match on an order using Invoice.OrderNumber == Order.OrderNumber.
Otherwise, Invoice.OrderNumber == StoreOrder.StoreOrderNumber.
Validate this Invoice can be processedÂ
Invoices Enabled check (if not enabled, fail EDI message).
If ValidateOrder, and no existing order, fail EDI message.
If AggregateInvoice / InvoiceWholeOrder, fail the message if there is an existing invoice for this order.
If ValidateInvoice, ignore this invoice when there is an existing invoice for the same store order.
Assign database stores to the request using the UseStoreCode.
Assign database products to the request using UseSKU .Â
Assign default values to the request.
Match the inovice to the order match
AggregateInvoice:
Handle duplicate SupplierProductCode conversions to all SKUs match the Order
Handle pack type conversions so all SupplierProductCodes match the Order
Create one Invoice per StoreOrder
Create StoreOrder InvoiceProducts from the aggregate InvoiceProucts - matching on the quantity shipped for each order line
InvoiceWholeOrder:
Do not match anything.
Otherwise:
Handle duplicate SupplierProductCode conversions to all SKUs match the Order
Handle pack type conversions so all SupplierProductCodes match the Order
Match the InvoiceProducts to StoreOrderProducts using ProductIDs, LineNumber, quantity
Product ID takes priority. If there are multiple, also match on LineNumber. If there are still multiple, also match on quantity.
Handle price replacement if PriceReplacement
Validate the request
If the Retailer external system feature is enabled, validate the partner has a retailer
If the GlobalStores external system feature is enabled, validate the stores have a global store
Validate prices for all invoice lines against the existing Product.Price if the partner has price validation turned on
This might use the AlternatePriceCode defined on the StoreOrder
If the ExternalProducts external system feature is enabled, validate all the products have an external product set
If the ValidateQuantity transport param is true, validate the QuantityInvoiced to the quantity shipped for all lines.
If the ValidateLines transport param is true, validate all invoice products have an order line match
Insert the request
Insert the audit log
Transport Params:
UseStoreCode (Default "1") - ["0", "1", "2"]
0: This will always create a new store for both the BillTo and ShipTo address.
1: This will match the addresses in the message to existing stores using the StoreCode.
2: Â This will match the addresses in the message to existing stores using Message.StoreCode = DBStore.StoreCode2.
ValidateLines (Default "false") - ["true", "false"]
This will make sure that all products in the invoice have a matching store order product.
UseSKU (Default "false") - ["true", "false"]
If true, this will use the Product.SKU to match on DB Products instead of the SupplierProductCode.
ValidateInvoice (Default "true") - ["true", "false"]
This will cancel and error the insert if the order/storeorder already has an invoice with this invoice number.
ValidateOrder (Default "true") - ["true", "false"]
This will cancel the insert if the invoice does not have a matching crossfire order.
PriceReplacement (Default "false") - ["true", "false"]
This will replace the invoice prices with the official product price in the portal if true.
ValidateQuantity (Default "false") - ["true", "false"]
This will validate the quantity invoiced matches the quantity shipped for each product.
InvoiceWholeOrder (Default "false") - ["true", "false"]
This is to specify that the invoice is for all store orders and should be loaded in against the order its self (do not match to store order lines).
AggregateInvoice (Default "false") - ["true", "false"]
If true, the aggregate invoice will be split up into multiple store order invoices and the invoice lines will be created for each store order line matching on the quantity shipped.
AUTOCREATEINVOICES
NO MESSAGE IN QUEUE REQUIRED
NO PARAMS
This will automatically create invoices based on the shipment data. Only one transport per crossfire environment is required for this. If a transport with this action already exists, the partners that it will create invoices for is determined by the partner settings.
AUTOCREATESALESORDERS
NO MESSAGE IN QUEUE REQUIRED
This will automatically supply, reserve, and confirm orders if the partner setting is enabled, and according to the 'PartialSupply' or 'FullSupply' logic.
Only one transport per crossfire environment is required for this.
MatchStatus (Default "Order Received")
This is the status orders must be in for them to be automatically actioned.
RetryIntervalMinutes (Default "720" I.E 12 hours)
This setting only applies for FullSupply. When a full supply fails because of invalid SOH, the order will attempt to automate again after this cooldown in case the SOH in the external system has changed.
RetryAttempts (Default "3")
This setting only applies for FullSupply. When a full supply fails because of invalid SOH, the order will attempt to automate again this many times before being left for a user to action.
CONTROL
The message needs to be a single line csv in the format "PartnerCode,ObjectNumber" where the object number is the orderNumber, shipmentNumber or invoiceNumber the control message is for.
This will update the related store order status to "____ control received".
Type
This determines the type of object the control message is for and thus which status gets updated. The supported values are ACK, SHIPMENT, and INVOICE.
PRODUCTS
Workflow:
The products are validated
There must not be any duplicate SupplierProductCodes
There must not be any duplicate SKUs (only if UseSKU = true)
There must not be any duplicate AlternateProductCodes
There must not be any duplcicate AlternateProductPrices
There must not be any duplcicate ProductComponents
Products, AlternateProductCodes, AlternateProductPrices, and ProductComponents are matched to their existing versions
If no match is found, they are inserted
If a match is found, it is updated from all non-empty elements in the request
Transport Params:
UseSKU (Default "false") - ["true", "false"]
If true, this will use the Product.SKU to match on DB Products instead of the SupplierProductCode.
Incoming Actions (From DB)
ORDERS
Known backwards compatibility
[ORD].[Sandfield_Standard_Order_V2]
Transport Params:
PartnerCode (Required)
This is the partner for which to pull data for.Â
MatchStatus (Default "Order Received")
This is the order status that store orders must be in to be pulled out. Do not add non-standard statuses unnecessarily.
UpdateOrderStatus (Default "Order Sent")
After being pulled out, the order status will be updated to this value. Do not add non-standard statuses unnecessarily.
ActiveStoresOnly (Default "true") - ["true", "false"]
If a store is inactive (Ord.Store.Active column = 0), then the store orders for it will be ignored.
WaitForWholeOrder (Default false)
If true, orders will only be picked up when all related store orders are ready to send or have already been sent.
Grouping (Default "Order") - ["Orders", "Order", "StoreOrder"]
This determines how the orders that are ready get turned into crossfire messages.
Orders: This will take all orders in the batch, and put them all into the same message.
Order: This will take all orders in the batch, and split each one into a separate message.
StoreOrder: This will take all orders in the batch, and split each StoreOrder into a new message.
BatchSize (Default 10)
This determines how many orders will be turned into messages per transport execution. It is not directly related to the number of messages they turn into.Â
EG if your grouping is StoreOrder, 10 Orders will be selected to send, each of which may turn into numerous Messages when split by StoreOrder.
Format (Default "FULLXML") - ["FULLXML", "SHORTJSON", "OFPCSV", "SANDFIELD_STANDARD_ORDER_V2"]
This determines the format of the Crossfire messages that are created.Â
"FULLXML" should be used for all new integrations
"SHORTJSON" will return partial order level information only, when any related StoreOrder is ready to send
ACKNOWLEDGEMENTS
Known backwards compatibility
[ORD].[Sandfield_Standard_OrderACK_V4] * Logic but not CSV format
[ORD].[Sandfield_Standard_OrderACK_V3]
Transport Params:
PartnerCode (Required)
This is the partner for which to pull data for.Â
MatchStatus (Default "Order Acknowledged Received")
This is the acknowledgement status that store orders must be in to be pulled out. Do not add non-standard statuses unnecessarily.
UpdateStatus (Default "Order Acknowledged Sent")
After being pulled out, the acknowledgement status will be updated to this value. Do not add non-standard statuses unnecessarily.
WaitForWholeOrder (Default "false") - ["true", "false"]
If true, orders will only be picked up when all related store orders are ready to send or have already been sent.
Grouping (Default "Order") - ["Orders", "Order", "StoreOrder", "SANDFIELD_STANDARD_ORDERACK_V3"]
This determines how the orders that are ready get turned into crossfire messages.
Orders: This will take all orders in the batch, and put them all into the same message.
Order: This will take all orders in the batch, and split each one into a separate message.
StoreOrder: This will take all orders in the batch, and split each StoreOrder into a new message.
BatchSize (Default 10)
This determines how many orders will be turned into messages per transport execution. It is not directly related to the number of messages they turn into.Â
EG if your grouping is StoreOrder, 10 Orders will be selected to send, each of which may turn into numerous Messages when split by StoreOrder.
Format (Default "FULLXML") - ["FULLXML", "SHORTJSON", "OFPCSV", "SANDFIELD_STANDARD_ORDERACK_V3"]
This determines the format of the Crossfire messages that are created.Â
"FULLXML" should be used for all new integrations
"SHORTJSON" will return partial order level information only, when any related StoreOrder is ready to send
SALESORDERS (Mainfreight specific)
Transport Params:
PartnerCode (Required)
This is the partner for which to pull data for.Â
MatchStatus (Default "Order Received")
This is the order status that store orders must be in to be pulled out. Do not add non-standard statuses unnecessarily.
MatchSalesOrderStatus (Default "Sales Order Received")
This is the sales order status that store orders must be in to be pulled out. Do not add non-standard statuses unnecessarily.
UpdateSalesOrderStatus (Default "Sales Order Sent")
After being pulled out, the sales order status will be updated to this value. Do not add non-standard statuses unnecessarily.
ActiveStoresOnly (Default "true") - ["true", "false"]
If a store is inactive (Ord.Store.Active column = 0), then the store orders for it will be ignored.
WaitForWholeOrder (Default "false") - ["true", "false"]
If true, orders will only be picked up when all related store orders are ready to send or have already been sent.
Grouping (Default "Order") - ["Orders", "Order", "StoreOrder"]
This determines how the orders that are ready get turned into crossfire messages.
Orders: This will take all orders in the batch, and put them all into the same message.
Order: This will take all orders in the batch, and split each one into a separate message.
StoreOrder: This will take all orders in the batch, and split each StoreOrder into a new message.
BatchSize (Default 10)
This determines how many orders will be turned into messages per transport execution. It is not directly related to the number of messages they turn into.Â
EG if your grouping is StoreOrder, 10 Orders will be selected to send, each of which may turn into numerous when Messages split by StoreOrder.
Format (Default "FULLXML") - ["FULLXML", "OFPCSV"]
This determines the format of the Crossfire messages that are created.Â
"FULLXML" should be used for all new integrations
SHIPMENTS
Known backwards compatibility
[ORD].[Sandfield_Standard_ASN_MultiCartons_V2]
Transport Params:
PartnerCode (Required)
This is the partner for which to pull data for.Â
MatchStatusCSV (Default "Shipment Received")
This is a comma separated string that denotes the shipment status that store orders must be in to be pulled out. E.G: "Shipment Received,Shipment Backordered". Do not add non-standard statuses unnecessarily.
MatchAckStatusCSV (Default "Not Acknowledged")
This is a comma separated string that denotes the acknowledgement status that store orders must be in to be pulled out. E.G: "Order Acknowledgement Sent". Not Acknowledged indicates it can be in any acknowledgement status. Do not add non-standard statuses unnecessarily.
UpdateStatus (Default "Shipment Sent")
After being pulled out, the shipment status will be updated to this value. Do not add non-standard statuses unnecessarily.
LabelRequired (Default "true") - ["true", "false"]
If true, shipments will only be pulled if LabelCreated = 1.
TrackingNoRequired (Default "false") - ["true", "false"]
If true, shipments will only be pulled if TrackingNumber2 has a value.
ValidateShipmentCount (Default "false") - ["true", "false"]
If true, shipments will not be sent if their NumberOfShipments does not match the total number of shipments received for their store order.
WaitForWholeOrder (Default "false") - ["true", "false"]
If true, orders will only be picked up when all related store order shipments are ready to send or have already been sent.
QuantityValidationEnabled (Default "true") - ["true", "false"]
If true, shipments will be updated to the backordered status if the total quantity acknowledged nor total quantity ordered match the total quantity shipped for this store order.
UseShipmentQuantityToValidate (Default "true") - ["true", "false"]
If true, the total quanity shipped will be calculated from the shipments TotalQuantityShipped. Otherwise, the sum of storeorderproducts QuantityShipped will be used.
IncludeUnshippedLines (Default "false") - ["true", "false"]
If true, csv lines will be included relating to store order products that do not have a matching shipment carton product.
Grouping (Default "Order") - ["Orders", "Order", "StoreOrder", "Shipment"]
This determines how the orders that are ready get turned into crossfire messages.
Orders: This will take all orders in the batch, and put them all into the same message.
Order: This will take all orders in the batch, and split each one into a separate message.
StoreOrder: This will take all orders in the batch, and split each StoreOrder into a new message.
Shipment: This will take all orders in the batch, and split each Shipment into a new message.
GroupByTrackingNumber (Default "false") - ["true", "false"]
If true, all shipments will be pulled out and sent for this partner in one message - all for the same tracking number. These shipments could be for multiple different orders.
BatchSize (Default 10)
This determines how many orders will be turned into messages per transport execution. It is not directly related to the number of messages they turn into.Â
EG if your grouping is StoreOrder, 10 Orders will be selected to send, each of which may turn into numerous Messages when split by StoreOrder.
Format (Default "FULLXML") - ["FULLXML", "SHORTJSON", "OFPCSV", "SANDFIELD_STANDARD_ASN_MULTICARTONS_V2", "SANDFIELD_STANDARD_SHIPMENT_XML"]
This determines the format of the Crossfire messages that are created.Â
"FULLXML" should be used for all new integrations excluding standalone shipments
"SANDFIELD_STANDARD_SHIPMENT_XML" should be used for standalone shipments
"SHORTJSON" will return partial order level information only, when any related StoreOrder is ready to send
INVOICES
Known backwards compatibility
[ORD].[Sandfield_Standard_Invoice_V2] * logic but not csv format
[ORD].[Sandfield_Standard_Invoice_XML] * format but not all of the logic
Transport Params:
PartnerCode (Required)
This is the partner for which to pull invoice data for. Set to "*" if you wish to pull Invoices for all partners.
MatchShipmentStatusCSV (Default "Shipment sent")
This is the shipment status that store orders must be in to be selected. If "Not Shipped", then the shipment status can be anything. E.G: "Shipment Received,Shipment Backordered". Do not add non-standard statuses unnecessarily.
MatchInvoiceStatus (Default "Invoice Received")
This is the invoice status that store orders must be in to be pulled out. Do not add non-standard statuses unnecessarily.
UpdateStatus (Default "Invoice Sent")
After being pulled out, the invoice status will be updated to this value. Do not add non-standard statuses unnecessarily.
Grouping (Default "Order") - ["Orders", "Order", "StoreOrder", "Invoice"]
This determines how the orders that are ready get turned into crossfire messages.
Orders: This will take all orders in the batch, and put them all into the same message.
Order: This will take all orders in the batch, and split each one into a separate message.
StoreOrder: This will take all orders in the batch, and split each StoreOrder into a new message.
Invoice: This will take all orders in the batch, and split each Invoice into a new message.
BatchSize (Default 10)
This determines how many orders will be turned into messages per transport execution. It is not directly related to the number of messages they turn into.Â
EG if your grouping is StoreOrder, 10 Orders will be selected to send, each of which may turn into numerous Messages when split by StoreOrder.
Format (Default "FULLXML") - ["FULLXML", "SHORTJSON", "OFPCSV", "SANDFIELD_STANDARD_INVOICE_XML"]
This determines the format of the Crossfire messages that are created.Â
"FULLXML" should be used for all new integrations excluding standalone invoices
"SANDFIELD_STANDARD_INVOICE_XML" should be used for standalone invoices
"SHORTJSON" will return partial order level information only, when any related StoreOrder is ready to send
Incoming Batch Size and Grouping Examples
It is important to balance the batch size with the schedule frequency. These both depend on the number of files that the customer sends through middleware each unit time.
A batch size from 10-50 is standard depending on the size of each order. A schedule frequency of every 1-10 minutes is also advised. Do not make the frequency below 30 seconds unless the file volume is extremely high (100 orders per minute).
Increasing the batch size is preferred compared to lowering the schedule frequency.
All examples assume the above database format. This explanation applies to all actions but will be demonstrated using SHIPMENTS
Order 1 has a single store order, with a single shipment ready to send
Order two has two store orders, each with a single shipment ready to send
Order 3 has 3 store orders, each with multiple shipments ready to send
Further orders exist with shipments ready to send
The batch sizes below are for explanation only. Generally, do not reduce lower than 10.
Each example below is explained for a single execution of the transport schedule
Scenario 1: Batch Size "2", Grouping "ORDERS"
The transport gets the top {batch size} (2) orders that have any number of shipments ready to send. Order 1, Order 2
The transport will use the grouping "Orders" and put all each unique "Orders" in a new EDI message i.e, all orders go into one message attachment
Attachment 1:
Order 1, inc all storeOrders + shipments for this order
Order 2, inc all storeOrders + shipments for this order
Scenario 2 Batch Size "2", Grouping "ORDER"
The transport gets the top {batch size} (2) orders that have any number of shipments ready to send. Order 1, Order 2
The transport will use the grouping "Order" and put all each unique "Order" in a new EDI message i.e, one message per order
Attachment 1:
Order 1, inc all storeOrders + shipments for this order
Attachment 2:
Order 2, inc all storeOrders + shipments for this order
Scenario 3: Batch Size "2", Grouping "STOREORDER"
The transport gets the top {batch size} (2) orders that have any number of shipments ready to send. Order 1, Order 2
The transport will use the grouping "StoreOrder" and put all each unique "StoreOrder" in a new EDI message i.e, one message per storeorder. Note that the parent order information will be repeated across all messages
Attachment 1:
Order 1, StoreOrder 1-1, inc all shipments for this store order
Attachment 2:
Order 2, StoreOrder 2-1, inc all shipments for this store order
Attachment 3:
Order 2, StoreOrder 2-2, inc all shipments for this store order
Scenario 3: Batch Size "3", Grouping "SHIPMENT"
The transport gets the top {batch size} (3) orders that have any number of shipments ready to send. Order 1, Order 2, Order 3
The transport will use the grouping "Shipment" and put all each unique "Shipment" in a new EDI message i.e, one message per shipment. Note that the parent order information, and parent storeOrder information will be repeated across all messages
Attachment 1:
Order 1, StoreOrder 1-1, Shipment 1-1-1
Attachment 2:
Order 2, StoreOrder 2-1, Shipment 2-1-1
Attachment 3:
Order 2, StoreOrder 2-2, Shipment 2-2-1
Attachment 4:
Order 3, StoreOrder 3-1, Shipment 3-1-1
Attachment 5:
Order 3, StoreOrder 3-1, Shipment 3-1-2
Attachment 6:
Order 3, StoreOrder 3-2, Shipment 3-2-1
Attachments 7-10 follow the same pattern
Scenario 4: Batch Size "10", Grouping "INVOICE"
The INVOICE and SHIPMENT groupings function identically for their related actions. Both will pull the top {batch size}Â invoices/shipments, and then put each distinct invoice/shipment into one file.
Scenario 3 explains the full logic if we replace references to "Shipment" with "Invoice".
Incoming Acknowledgement - Action Code examples
Header and Line action codes explained:
Outgoing Shipment - Carton examples
CartonNoIsCartonNumber
CartonNoAndSSCCAfterProductÂ
SSCCIsCartonNumber
Custom reporting and label printing
There are multiple options for generating PDF summaries of orders when they are sent, or automatically printing labels before shipments are sent out. They are not included in the 'Out The Box' version of this transport so please contact the Crossfire team for further details if you are interested.
Order XML (Orders into Portal)
<Order>
<PartnerCode/>
<System/>
<OrderNumber/>
<ReferenceNumber/>
<CustomerReference/>
<InvoiceNumber/>
<OrderDate/>
<DespatchAdviceSent/>
<InvoiceSent/>
<SubTotal/>
<TaxTotal/>
<Total/>
<Currency/>
<TaxRate/>
<TaxCode/>
<DropShip/>
<ShippingMethod/>
<ETD/>
<ETA/>
<PaymentDueDate/>
<ShipmentDueDate/>
<OSRSent/>
<CustomerCode/>
<WarehouseCode/>
<RetailerSupplierNumber/>
<DepartmentNumber/>
<Comments/>
<ContractNumber/>
<OrderInterchangeReceiver/>
<OrderInterchangeReceiverQualifier/>
<OrderInterchangeSender/>
<OrderInterchangeSenderQualifier/>
<OrderInterchangeReference/>
<OrderMessageReference/>
<Versioning/>
<OrderType/>
<AcknowledgmentRequest/>
<AdvertDate/>
<BuyerGLNCode/>
<Split/>
<SupplierCode/>
<SupplierNameAndAddress/>
<TestPurposeCode/>
<Vendor/>
<ABNNumber/>
<Store>
<StoreCode/>
<Name/>
<Address1/>
<Address2/>
<Suburb/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<DCCode/>
<SalesRep/>
<ShopifyID/>
<StoreCode2/>
<SystemStoreCode/>
<Tag/>
<StoreOrder>
<StoreOrderNumber/>
<StoreOrderReference/>
<DCCode/>
<Error/>
<TotalWeight/>
<TotalVolume/>
<DispatchAdviceSent/>
<PackSlipSent/>
<BuyerNameAndAddress/>
<BuyerPartyCode/>
<Department/>
<DepartmentDescription/>
<DepartmentName/>
<DepartmentNumber/>
<EventType/>
<AlternatePriceCode/>
<StoreOrderStatus/>
<SystemStoreOrderID/>
<SystemStoreOrderNumber/>
<BillToID/>
<BillToPostalID/>
<ToAddressID/>
<FromAddressID/>
<CompanyID/>
<CompanyPostalID/>
<BillTo>
<StoreCode/>
<Name/>
<Address1/>
<Address2/>
<Suburb/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<DCCode/>
<SalesRep/>
<ShopifyID/>
<StoreCode2/>
<SystemStoreCode/>
<Tag/>
</BillTo>
<BillToPostal>
<StoreCode/>
<Name/>
<Address1/>
<Address2/>
<Suburb/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<DCCode/>
<SalesRep/>
<ShopifyID/>
<StoreCode2/>
<SystemStoreCode/>
<Tag/>
</BillToPostal>
<ToAddress>
<StoreCode/>
<Name/>
<Address1/>
<Address2/>
<Suburb/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<DCCode/>
<SalesRep/>
<ShopifyID/>
<StoreCode2/>
<SystemStoreCode/>
<Tag/>
</ToAddress>
<FromAddress>
<StoreCode/>
<Name/>
<Address1/>
<Address2/>
<Suburb/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<DCCode/>
<SalesRep/>
<ShopifyID/>
<StoreCode2/>
<SystemStoreCode/>
<Tag/>
</FromAddress>
<Company>
<StoreCode/>
<Name/>
<Address1/>
<Address2/>
<Suburb/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<DCCode/>
<SalesRep/>
<ShopifyID/>
<StoreCode2/>
<SystemStoreCode/>
<Tag/>
</Company>
<CompanyPostal>
<StoreCode/>
<Name/>
<Address1/>
<Address2/>
<Suburb/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<DCCode/>
<SalesRep/>
<ShopifyID/>
<StoreCode2/>
<SystemStoreCode/>
<Tag/>
</CompanyPostal>
<StoreOrderProduct>
<QuantityOrdered/>
<LineTax/>
<LineTotal/>
<LineDiscount/>
<OrderLineNumber/>
<Comments/>
<QuantityAcknowledged/>
<QuantityShipped/>
<LineProductPrice/>
<Batch/>
<ExpiryDate/>
<PromotionStartDate/>
<GiftWrap/>
<ReturnMethod/>
<SystemOrderLineItemID/>
<LineWeight/>
<LineVolume/>
<OrderLineUnit/>
<OrderLineUnitISOCode/>
<PartNumber/>
<ProductColor/>
<ProductSize/>
<ProductStyle/>
<SupplierItemNumber/>
<VendorPartNumber/>
<SupplierPackType/>
<LineProductRetailPrice/>
<LinePackSize/>
<BackorderedDate/>
<EDIWarnings/>
<Error/>
<QuantityBackordered/>
<Ref1/>
<Ref2/>
<Ref3/>
<Ref4/>
<Ref5/>
<Product>
<SupplierProductCode/>
<SKU/>
<Price/>
<Description/>
<SystemProductCode/>
<PurchaserProductCode/>
<RetailPrice/>
<WarehousePrice/>
<Weight/>
<Volume/>
<UnitOfMeasure/>
<TaxRule/>
<PackSize/>
<IndividualPackCode/>
<Cin7Option1/>
<Cin7Option2/>
<Cin7Name/>
<BuyersCatalogNumber/>
<LayersOnPallet/>
<UnitsOnPalletLayer/>
<SortCount/>
<PackType/>
<Ref1/>
<Ref10/>
<Ref11/>
<Ref12/>
<Ref13/>
<Ref2/>
<Ref3/>
<Ref4/>
<Ref5/>
<Ref6/>
<Ref7/>
<Ref8/>
<Ref9/>
<ShelfLife/>
</Product>
</StoreOrderProduct>
</StoreOrder>
</Store>
</Order>
Sales Order XML (MFT Sales Orders into Portal)
<Order>
<PartnerCode/>
<System/>
<SplitSalesOrder/>
<OrderNumber/>
<ReferenceNumber/>
<CustomerReference/>
<InvoiceNumber/>
<OrderDate/>
<DespatchAdviceSent/>
<InvoiceSent/>
<SubTotal/>
<TaxTotal/>
<Total/>
<Currency/>
<TaxRate/>
<TaxCode/>
<DropShip/>
<ShippingMethod/>
<ETD/>
<ETA/>
<PaymentDueDate/>
<ShipmentDueDate/>
<OSRSent/>
<CustomerCode/>
<WarehouseCode/>
<RetailerSupplierNumber/>
<DepartmentNumber/>
<Comments/>
<ContractNumber/>
<OrderInterchangeReceiver/>
<OrderInterchangeReceiverQualifier/>
<OrderInterchangeSender/>
<OrderInterchangeSenderQualifier/>
<OrderInterchangeReference/>
<OrderMessageReference/>
<Versioning/>
<OrderType/>
<AcknowledgmentRequest/>
<AdvertDate/>
<BuyerGLNCode/>
<Split/>
<SupplierCode/>
<SupplierNameAndAddress/>
<TestPurposeCode/>
<Vendor/>
<ABNNumber/>
<Store>
<StoreCode/>
<Name/>
<Address1/>
<Address2/>
<Suburb/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<DCCode/>
<SalesRep/>
<ShopifyID/>
<StoreCode2/>
<SystemStoreCode/>
<Tag/>
<StoreOrder>
<StoreOrderNumber/>
<StoreOrderReference/>
<DCCode/>
<Error/>
<TotalWeight/>
<TotalVolume/>
<DispatchAdviceSent/>
<PackSlipSent/>
<BuyerNameAndAddress/>
<BuyerPartyCode/>
<Department/>
<DepartmentDescription/>
<DepartmentName/>
<DepartmentNumber/>
<EventType/>
<SystemStoreOrderID/>
<SystemStoreOrderNumber/>
<WarehouseCode/>
<StoreOrderProduct>
<LineTax/>
<LineTotal/>
<LineProductPriceAcknowledged/>
<LineDiscount/>
<OrderLineNumber/>
<Comments/>
<QuantityAcknowledged/>
<QuantityShipped/>
<Batch/>
<ExpiryDate/>
<PromotionStartDate/>
<GiftWrap/>
<ReturnMethod/>
<SystemOrderLineItemID/>
<LineWeight/>
<LineVolume/>
<OrderLineUnit/>
<OrderLineUnitISOCode/>
<PartNumber/>
<ProductColor/>
<ProductSize/>
<ProductStyle/>
<SupplierItemNumber/>
<VendorPartNumber/>
<SupplierPackType/>
<LineProductRetailPrice/>
<BackorderedDate/>
<EDIWarnings/>
<Error/>
<QuantityBackordered/>
<Ref1/>
<Ref2/>
<Ref3/>
<Ref4/>
<Ref5/>
<KitCode/>
<Product>
<SupplierProductCode/>
<SKU/>
<Price/>
<Description/>
<SystemProductCode/>
<PurchaserProductCode/>
<RetailPrice/>
<WarehousePrice/>
<Weight/>
<Volume/>
<UnitOfMeasure/>
<TaxRule/>
<PackSize/>
<IndividualPackCode/>
<Cin7Option1/>
<Cin7Option2/>
<Cin7Name/>
<BuyersCatalogNumber/>
<LayersOnPallet/>
<UnitsOnPalletLayer/>
<SortCount/>
<PackType/>
<Ref1/>
<Ref10/>
<Ref11/>
<Ref12/>
<Ref13/>
<Ref2/>
<Ref3/>
<Ref4/>
<Ref5/>
<Ref6/>
<Ref7/>
<Ref8/>
<Ref9/>
<ShelfLife/>
</Product>
</StoreOrderProduct>
</StoreOrder>
</Store>
</Order>
Ack XML (Ack into Portal)
<OrderResponse>
<PartnerCode LOGICAL ALPHANUMERIC(50) The partner for the order ack/>
<DueDate INFORMATIONAL DATETIME The new ETD value/>
<Store REPEATS>
<StoreOrder>
<StoreOrderNumber LOGICAL ALPHANUMERIC(50) The store order this is acknowledging/>
<StoreOrderProduct REPEATS>
<QuantityOrdered LOGICAL INTEGER Used to match order->ack lines if products are duplicated/>
<QuantityConfirmed INFORMATIONAL INTEGERÂ The acknowledged quantity/>
<LineTax INFORMATIONAL DECIMAL(4dp) The new line tax (AckQty * UnitTax)/>
<LineTotal INFORMATIONAL DECIMAL(4dp) The new line total (AckQty * Price inc tax)/>
<LineDiscount INFORMATIONAL DECIMAL(4dp) The new line discount (Not included in totals)/>
<OrderLineNumber LOGICAL ALPHANUMERIC(50) Used to match order->ack lines  if products are duplicated (not saved)/>
<Comments LOGICAL ALPHANUMERIC(MAX) Used to match order->ack lines if products are duplicated (not saved)/>
<QuantityBackordered INFORMATIONAL INTEGER The new quantity backordered/>
<BackorderedDate INFORMATIONAL DATETIME The new backordered date/>
<Batch INFORMATIONAL ALPHANUMERIC(50) The new backordered date/>
<Product>
<SupplierProductCode LOGICAL ALPHANUMERIC(50) Used to match to the correct order line/>
<SKU LOGICAL ALPHANUMERIC(50) Used to match to the correct order line/>
<Price INFORMATIONAL INTEGER The acknowledged price for the order line/>
</Product>
</StoreOrderProduct>
</StoreOrder>
</Store>
</OrderResponse>
Shipment XML (Shipment into Portal)
<SalesShipments>
<SalesShipments>
<PartnerCode/>
<OrderNumber/>
<ShipmentNumber/>
<ShipmentStatus/>
<DispatchDate/>
<ShippingCompanyName/>
<TrackingNumber/>
<SSCCBarcode/>
<ShipTo/>
<ShipToBarcode/>
<StoreCode/>
<StoreCodeBarcode/>
<TrackingNumber2/>
<ASNReference/>
<NumberOfCartons/>
<CartonNos/>
<NumberOfShipments/>
<CartonCounter/>
<SplitShipment/>
<Split/>
<ShipmentSent/>
<ShippingCompany>
<Name/>
<ShipmentCharge/>
<ShipSpeed/>
<SCACCode/>
</ShippingCompany>
<SalesShipmentLines>
<SalesShipmentLine>
<LineNumber/>
<ShipmentQty/>
<Comments/>
<SystemOrderLineItemID/>
<Product>
<ProductCode/>
<ExpiryDate/>
<SSCCBarcode/>
<HireTypeCode/>
<Batch/>
<Location/>
<REF1/>
<REF2/>
<REF3/>
<REF4/>
<REF5/>
<SerialNumber/>
<ManufacturingDate/>
<Weight/>
<WeightUOM/>
<LotNumber/>
<KitCode/>
<SystemProductCode/>
<SupplierProductCode/>
<PurchaserProductCode/>
<SKU/>
<Price/>
<ProductDescription/>
</Product>
<ShipmentCartons>
<ShipmentCarton>
<SSCC/>
<ProductID/>
<CartonNumber/>
<ShippedQuantity/>
<Weight/>
<NetWeight/>
<WeightUOM/>
<HireTypeCode/>
</ShipmentCarton>
</ShipmentCartons>
<ShipmentProductDetail>
<SerialNumber/>
</ShipmentProductDetail>
</SalesShipmentLine>
</SalesShipmentLines>
</SalesShipments>
</SalesShipments>
Invoice XML (Invoice into Portal)
<SalesInvoices>
<SalesInvoice>
<InvoiceNumber/>
<OrderNumber/>
<CustomerReference/>
<PartnerCode/>
<InvoiceDate/>
<SystemStatus/>
<InvoiceType/>
<SubTotal/>
<TotalTax/>
<Total/>
<PaymentDueDate/>
<PaymentTerms/>
<Currency/>
<InvoiceComments/>
<System/>
<SystemInvoiceID/>
<TaxAccountNumber/>
<RetailSupplierNumber/>
<ShipToAddress>
<StoreCode/>
<SystemStoreCode/>
<Name/>
<Address1/>
<Address2/>
<Suburb/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<DCCode/>
<SalesRep/>
<ShopifyID/>
<StoreCode2/>
<Tag/>
</ShipToAddress>
<BillToAddress>
<StoreCode/>
<SystemStoreCode/>
<Name/>
<Address1/>
<Address2/>
<Suburb/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<DCCode/>
<SalesRep/>
<ShopifyID/>
<StoreCode2/>
<Tag/>
</BillToAddress>
<InvoiceProduct>
<LineNumber/>
<SystemLineNumber/>
<QuantityInvoiced/>
<UnitPrice/>
<UnitTax/>
<LinePrice>0</LinePrice>
<LineTax/>
<LineDiscount/>
<LineDiscountPercentage/>
<LineTotal/>
<InvoiceLineComment/>
<SystemInvoiceProductID/>
<Product>
<SupplierProductCode/>
<SKU/>
<Price/>
<Description/>
<SystemProductCode/>
<PurchaserProductCode/>
<RetailPrice/>
<WarehousePrice/>
<Weight/>
<Volume/>
<UnitOfMeasure/>
<TaxRule/>
<PackSize/>
<IndividualPackCode/>
<Cin7Option1/>
<Cin7Option2/>
<Cin7Name/>
<BuyersCatalogNumber/>
<LayersOnPallet/>
<UnitsOnPalletLayer/>
<SortCount/>
<PackType/>
<Ref1/>
<Ref10/>
<Ref11/>
<Ref12/>
<Ref13/>
<Ref2/>
<Ref3/>
<Ref4/>
<Ref5/>
<Ref6/>
<Ref7/>
<Ref8/>
<Ref9/>
<ShelfLife/>
</Product>
</InvoiceProduct>
</SalesInvoice>
</SalesInvoices>
Universal XML (All messages from Portal)
<Orders>
<Order>
<OrderID/>
<System/>
<OrderNumber/>
<ReferenceNumber/>
<CustomerReference/>
<InvoiceNumber/>
<OrderDate/>
<Status/>
<DespatchAdviceSent/>
<InvoiceSent/>
<SubTotal/>
<TaxTotal/>
<Total/>
<Currency/>
<TaxRate/>
<TaxCode/>
<DropShip/>
<ShippingMethod/>
<ETD/>
<ETA/>
<PaymentDueDate/>
<ShipmentDueDate/>
<OSRSent/>
<CustomerCode/>
<WarehouseCode/>
<RetailerSupplierNumber/>
<DepartmentNumber/>
<Comments/>
<ContractNumber/>
<OrderInterchangeReceiver/>
<OrderInterchangeReceiverQualifier/>
<OrderInterchangeSender/>
<OrderInterchangeSenderQualifier/>
<OrderInterchangeReference/>
<OrderMessageReference/>
<InvoicedDate/>
<OrderStatus/>
<ShipmentStatus/>
<InvoiceStatus/>
<AcknowledgedStatus/>
<Versioning/>
<ExternalStatus/>
<SalesOrderStatus/>
<AcknowledgmentRequest/>
<AdvertDate/>
<BuyerGLNCode/>
<Split/>
<SupplierCode/>
<SupplierNameAndAddress/>
<TestPurposeCode/>
<Vendor/>
<ABNNumber/>
<HeaderActionCode/>
<PartnerSetting>
<PartnerCode/>
<ExternalCustomerID/>
</PartnerSetting>
<Warehouse>
<WarehouseID/>
<WarehouseCode/>
<WarehouseName/>
<WarehouseDescription/>
<Ref1/>
<Ref2/>
<Ref3/>
<Ref4/>
<Ref5/>
<Default/>
<ExternalWarehouseID/>
<ExternalCustomerID/>
</Warehouse>
<StoreOrders>
<StoreOrder>
<StoreOrderID/>
<StoreOrderNumber/>
<Status/>
<DCOrder/>
<DispatchAdviceSent/>
<PackSlipSent/>
<InvoiceReceived/>
<OrderStatus/>
<AcknowledgmentStatus/>
<ShipmentStatus/>
<InvoiceStatus/>
<SystemStoreOrderNumber/>
<SystemStoreOrderID/>
<Error/>
<ErrorType/>
<InvoiceNumber/>
<DCCode/>
<TotalQuantityOrdered/>
<TotalQuantityAcknowledged/>
<TotalWeight/>
<TotalVolume/>
<PricesValidated/>
<TransitStatus/>
<SalesOrderStatus/>
<ExternalStatus/>
<QtyAckValidated/>
<StoreOrderReference/>
<BuyerNameAndAddress/>
<BuyerPartyCode/>
<Department/>
<DepartmentDescription/>
<DepartmentName/>
<DepartmentNumber/>
<EventType/>
<AlternatePriceCode/>
<WarehouseCode/>
<Store>
<StoreID/>
<StoreCode/>
<StoreCode2/>
<Name/>
<Address1/>
<Address2/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<SystemStoreCode/>
<Suburb/>
<ShopifyID/>
<Tag/>
<SalesRep/>
</Store>
<Company>
<StoreID/>
<StoreCode/>
<StoreCode2/>
<Name/>
<Address1/>
<Address2/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<SystemStoreCode/>
<Suburb/>
<ShopifyID/>
<Tag/>
<SalesRep/>
</Company>
<CompanyPostal>
<StoreID/>
<StoreCode/>
<StoreCode2/>
<Name/>
<Address1/>
<Address2/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<SystemStoreCode/>
<Suburb/>
<ShopifyID/>
<Tag/>
<SalesRep/>
</CompanyPostal>
<BillTo>
<StoreID/>
<StoreCode/>
<StoreCode2/>
<Name/>
<Address1/>
<Address2/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<SystemStoreCode/>
<Suburb/>
<ShopifyID/>
<Tag/>
<SalesRep/>
</BillTo>
<BillToPostal>
<StoreID/>
<StoreCode/>
<StoreCode2/>
<Name/>
<Address1/>
<Address2/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<SystemStoreCode/>
<Suburb/>
<ShopifyID/>
<Tag/>
<SalesRep/>
</BillToPostal>
<ToAddress>
<StoreID/>
<StoreCode/>
<StoreCode2/>
<Name/>
<Address1/>
<Address2/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<SystemStoreCode/>
<Suburb/>
<ShopifyID/>
<Tag/>
<SalesRep/>
</ToAddress>
<FromAddress>
<StoreID/>
<StoreCode/>
<StoreCode2/>
<Name/>
<Address1/>
<Address2/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<SystemStoreCode/>
<Suburb/>
<ShopifyID/>
<Tag/>
<SalesRep/>
</FromAddress>
<StoreOrderProducts>
<StoreOrderProduct>
<StoreOrderProductID/>
<StoreOrderProductComponentID/>
<KitStoreOrderProductID/>
<Quantity/>
<QuantityAcknowledged/>
<QuantityShipped/>
<LineTax/>
<LineTotal/>
<LineProductPrice/>
<LineProductPriceAcknowledged/>
<LineDiscount/>
<Batch/>
<ExpiryDate/>
<PromotionStartDate/>
<GiftWrap/>
<Comments/>
<ReturnMethod/>
<OrderLineNumber/>
<LinePackSize/>
<QuantityAccepted/>
<SystemOrderLineItemID/>
<QuantityInvoiced/>
<QuantityNotDelivered/>
<Error/>
<Ref1/>
<Ref2/>
<Ref3/>
<Ref4/>
<Ref5/>
<LineWeight/>
<LineVolume/>
<ExternalReservationID/>
<ReservedUnits/>
<OrderLineUnit/>
<OrderLineUnitISOCode/>
<PartNumber/>
<ProductColor/>
<ProductSize/>
<ProductStyle/>
<SupplierItemNumber/>
<VendorPartNumber/>
<LineProductRetailPrice/>
<QuantityBackordered/>
<BackorderedDate/>
<EDIWarnings/>
<LineActionCode/>
<Product>
<ProductID/>
<SystemProductCode/>
<SupplierProductCode/>
<PurchaserProductCode/>
<SKU/>
<Price/>
<RetailPrice/>
<WarehousePrice/>
<Description/>
<Weight/>
<Volume/>
<UnitOfMeasure/>
<TaxRule/>
<PackSize/>
<IndividualPackCode/>
<Cin7Option1/>
<Cin7Option2/>
<Cin7Name/>
<BuyersCatalogNumber/>
<ShelfLife/>
<Ref1/>
<Ref2/>
<Ref3/>
<Ref4/>
<Ref5/>
<Ref6/>
<Ref7/>
<Ref8/>
<Ref9/>
<Ref10/>
<Ref11/>
<Ref12/>
<Ref13/>
<LayersOnPallet/>
<UnitsOnPalletLayer/>
<SortCount/>
<PackType/>
<KitSet/>
</Product>
</StoreOrderProduct>
</StoreOrderProducts>
<Invoices>
<Invoice>
<InvoiceID/>
<InvoiceNumber/>
<OrderNumber/>
<CustomerReference/>
<InvoiceDate/>
<SystemStatus/>
<InvoiceStatus/>
<InvoiceType/>
<SubTotal/>
<TotalTax/>
<Total/>
<PaymentDueDate/>
<PaymentTerms/>
<Currency/>
<InvoiceComments/>
<System/>
<SystemInvoiceID/>
<TaxAccountNumber/>
<InvoiceProducts>
<InvoiceProduct>
<InvoiceProductID/>
<StoreOrderProductID/>
<LineNumber/>
<SystemLineNumber/>
<QuantityInvoiced/>
<UnitPrice/>
<UnitTax/>
<LinePrice/>
<LineTax/>
<LineDiscount/>
<LineDiscountPercentage/>
<LineTotal/>
<InvoiceLineComment/>
<SystemInvoiceProductID/>
<Product>
<ProductID/>
<SystemProductCode/>
<SupplierProductCode/>
<PurchaserProductCode/>
<SKU/>
<Price/>
<RetailPrice/>
<WarehousePrice/>
<Description/>
<Weight/>
<Volume/>
<UnitOfMeasure/>
<TaxRule/>
<PackSize/>
<IndividualPackCode/>
<Cin7Option1/>
<Cin7Option2/>
<Cin7Name/>
<BuyersCatalogNumber/>
<ShelfLife/>
<Ref1/>
<Ref2/>
<Ref3/>
<Ref4/>
<Ref5/>
<Ref6/>
<Ref7/>
<Ref8/>
<Ref9/>
<Ref10/>
<Ref11/>
<Ref12/>
<Ref13/>
<LayersOnPallet/>
<UnitsOnPalletLayer/>
<SortCount/>
<PackType/>
<KitSet/>
</Product>
</InvoiceProduct>
</InvoiceProducts>
<Store>
<StoreID/>
<StoreCode/>
<StoreCode2/>
<Name/>
<Address1/>
<Address2/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<SystemStoreCode/>
<Suburb/>
<ShopifyID/>
<Tag/>
<SalesRep/>
</Store>
<BillTo>
<StoreID/>
<StoreCode/>
<StoreCode2/>
<Name/>
<Address1/>
<Address2/>
<City/>
<PostalCode/>
<State/>
<Country/>
<Phone/>
<EmailAddress/>
<ORG_ID/>
<SystemStoreCode/>
<Suburb/>
<ShopifyID/>
<Tag/>
<SalesRep/>
</BillTo>
</Invoice>
</Invoices>
<Shipments>
<Shipment>
<ShipmentID/>
<ShipmentNumber/>
<Status/>
<Carrier/>
<ShipSpeed/>
<SSCC/>
<SSCCBarcode/>
<ShipTo/>
<ShipToBarcode/>
<StoreCode/>
<StoreCodeBarcode/>
<DispatchDate/>
<Backordered/>
<ASNReference/>
<TrackingNumber2/>
<NumberOfCartons/>
<ShipmentCharge/>
<SCACCode/>
<TotalQuantityShipped/>
<NumberOfShipments/>
<ShipmentCartons>
<ShipmentCarton>
<ShipmentCartonID/>
<CartonNumber/>
<SSCCNumber/>
<ProductCode/>
<ShippedQty/>
<OriginalLineNumber/>
<TrackingNumber/>
<Length/>
<Width/>
<Height/>
<Weight/>
<NetWeight/>
<WeightUOM/>
<HireTypeCode/>
<ShipmentCartonProducts>
<ShipmentCartonProduct>
<ShipmentCartonProductID/>
<ShipmentCartonProductComponentID/>
<StoreOrderProductID/>
<StoreOrderProductComponentID/>
<KitShipmentCartonProductID/>
<CartonQuantity/>
<ExpiryDate/>
<Batch/>
<SSCC/>
<Location/>
<REF1/>
<REF2/>
<REF3/>
<REF4/>
<REF5/>
<SerialNumber/>
<ManufacturingDate/>
<Weight/>
<WeightUOM/>
<LotNumber/>
<Product>
<ProductID/>
<SystemProductCode/>
<SupplierProductCode/>
<PurchaserProductCode/>
<SKU/>
<Price/>
<RetailPrice/>
<WarehousePrice/>
<Description/>
<Weight/>
<Volume/>
<UnitOfMeasure/>
<TaxRule/>
<PackSize/>
<IndividualPackCode/>
<Cin7Option1/>
<Cin7Option2/>
<Cin7Name/>
<BuyersCatalogNumber/>
<ShelfLife/>
<Ref1/>
<Ref2/>
<Ref3/>
<Ref4/>
<Ref5/>
<Ref6/>
<Ref7/>
<Ref8/>
<Ref9/>
<Ref10/>
<Ref11/>
<Ref12/>
<Ref13/>
<LayersOnPallet/>
<UnitsOnPalletLayer/>
<SortCount/>
<PackType/>
<KitSet/>
</Product>
<ShipmentCartonProductDetails>
<ShipmentCartonProductDetail>
<SerialNumber/>
</ShipmentCartonProductDetail>
</ShipmentCartonProductDetails>
</ShipmentCartonProduct>
</ShipmentCartonProducts>
</ShipmentCarton>
</ShipmentCartons>
</Shipment>
</Shipments>
<Warehouse>
<WarehouseID/>
<WarehouseCode/>
<WarehouseName/>
<WarehouseDescription/>
<Ref1/>
<Ref2/>
<Ref3/>
<Ref4/>
<Ref5/>
<Default/>
<ExternalWarehouseID/>
<ExternalCustomerID/>
</Warehouse>
</StoreOrder>
</StoreOrders>
</Order>
</Orders>