Originally written by John Hardwick, last updated Oct 24, 2023, on the Swan Retail knowledge base (FRS).
This document is based on SwanFRS release 1201
Overview
SwanFRS has an inbuilt product generation and maintenance routine however it is capable of import product data from third party applications. This document details how to import products generated in 3rd party applications and imported via an XML product structure.Configuration
This section details how to configure SwanFRS to import XML data structures.
Application Parameters
Menu Location: System Admin > Admin > Set Up Location
To import XML product catalogues into SwanFRS it is necessary to set the following application parameters.
-
CATALOGUE_ PATH
The path to a folder on the application server which will contain the XML data files prior to importing into SwanFRS
Suppliers
Menu Location: System Admin > Purchasing > Set Up Suppliers
See Set Up Suppliers
Once the supplier has been created within SwanFRS it is necessary to build the link between the supplier as known by SwanFRS and that as referenced by the XML catalogue.
To begin this process, click the CATALOGUE IDS button.
This control needs to be built for all suppliers using the XML catalogue load procedure.
To enable the XML import routine to link the data to the correct supplier a cross reference is required.
Clicking the CATALOGUE IDS button for the selected supplier produces the following screen.
To create new link, click the NEW button which opens an insert panel where it is possible to define new entries.
To amend an existing record, click the pencil icon shown at the beginning of each row. This opens the selected item for modification.
To confirm the change, click the tick icon to exit without saving the data select the cross icon.
|
Field |
Comments |
|
Catalogue ID |
Specify the reference number used to identify the supplier within the XML catalogue. Multiple references may be created where necessary. |
|
Name |
Specify the name of the supplier using this catalogue ID. |
|
Debrand |
Specify the de-branded name used when presenting the products at point of sale. |
|
Active |
Tick to indicate this relationship is currently active. |
|
Set the untitled column to XML or XML, Internal.
|
Catalogue Codes
The Supplier Catalogue Codes report may be used to list the Catalogue ID set against suppliers within the system listing data in either ID or Supplier Name sequence.
Promotions
To be able to sell from the catalogue and ensure the correct prices are charged it will be necessary to create at least one promotion.
A full explanation of how SwanFRS uses promotions is available in the Use of Promotions document.
To create a new or modify an existing promotion it is necessary to visit the ‘set up promotions’ option within the administration menu within SwanFRS.
The amendment screen is shown below –
Having made an alteration, to confirm the change, click the ACCEPT button to exit without saving the data select the CANCEL button.
If permission allows it is also possible to rebuild prices taking into consideration changes made to the promotion via the REFRESH PRICES button (this is only necessary when changes made are required immediately. Generally, SwanFRS automatically rebuilds prices overnight therefore if the changes apply to a future date the system will manage the modifications without user intervention)
|
Field |
Comments |
|
Promotion Id |
System generated. |
|
Promotion Name |
Specify the name given to this promotion. |
|
Location |
Not amendable |
|
Effective Date |
Specify the effective date for this promotion. I.e., the date from which the prices linked to this promotion will become / became active. |
|
Date End |
Specify the date the promotion will end. |
|
Base Line Promotion |
Specify if this promotion is a base line promotion (base line promotions do not have selling prices, they have cost and MRP only) |
XML Structures
Naming Convention
SwanFRS does not impose a file name however care needs to be taken to ensure files are correctly managed. A file naming convention should be adopted to assist with this. E.g., TITLE<date>.xml
Files pending processing need to have the .xml suffix
SwanFRS renames the file to .running whilst checking the data and then to .done once completed.
SwanFRS cannot change the suffix of a file if it already exists i.e., if the ABC.xml is processed and an ABC.done already exists then an error will be generated.
This is unlikely in that SwanFRS changes the filename to ACB<date>T<Time> when running – for example ABC.xml would become ABC2009_05_31T15_34_15.running when processing.
There are several XML import structures available.
SKU Numbering
There are two methods of creating products (SKUs) for use within SwanFRS.
-
Third party – imported via XML.
-
In-application – created within SwanFRS
It is important to ensure that SKUs created within these separate processes do not conflict.
The XML catalogue does not impose the A-B-C SKU structure and if using this method in partnership with the manual mode conflict should not occur.
If using a third-party and manual creation it is recommended that the catalogue ID for manual suppliers be set to at least 5000 to limit the potential for SKU conflict on the ‘A’ element of the code.
Products and Prices
This section details the loading of products (SKUs) and prices into SwanFRS from a third-party external source. XML schema for products and prices
When creating the XML catalogue, it is important that it adheres to a pre-specified schema.
The schema must reside within the directory specified in Application Parameters. (Swan will provide XSD files on your request)
A copy of a schema is shown below –,
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.torex.com/SwanFRS-POS/GenericProductCatalogue" xmlns="http://www.torex.com/SwanFRS-POS/GenericProductCatalogue" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="Catalogues"> <xs:complexType> <xs:sequence> <xs:element name="Catalogue" type="CatalogueType" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="specversion" type="xs:decimal" use="required"/> </xs:complexType> </xs:element> <xs:complexType name="CatalogueType"> <xs:sequence> <xs:element name="Range" type="RangeType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="Option" type="OptionType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="Item" type="ItemType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="supplier" type="xs:string" use="required"/> <xs:attribute name="retailercode" type="xs:string" use="optional"/> <xs:attribute name="catname" type="xs:string" use="required"/> <xs:attribute name="version" type="xs:decimal" use="required"/> <xs:attribute name="catdesc" type="xs:string" use="required"/> <xs:attribute name="currency" type="xs:string" use="optional" default="GBP"/> <xs:attribute name="language" type="xs:string" use="optional" default="EN"/> <xs:attribute name="validfrom" type="xs:date" use="optional"/> <xs:attribute name="validto" type="xs:date" use="optional"/> </xs:complexType> <xs:complexType name="RangeType"> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="desc" type="xs:string" use="required"/> <xs:attribute name="retailerdesc" type="xs:string" use="optional"/> <xs:attribute name="homedel" type="HomeDelType" use="optional"/> </xs:complexType> <xs:complexType name="ItemType"> <xs:sequence> <xs:element name="OptionLink" type="OptionLinkType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="AvailableDate" type="xs:date" minOccurs="0" maxOccurs="1"/> <xs:element name="IsVisible" type="xs:boolean" minOccurs="0" maxOccurs="1"/> <xs:element name="LongDescription" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="ImageUrl" type="ImageUrlType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="VideoUrl" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="IsViewOnly" type="xs:boolean" minOccurs="0" maxOccurs="1"/> <xs:element name="Keyword" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="Attribute" type="AttributeType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="CurrencyCost" type="xs:decimal" minOccurs="0" maxOccurs="1"/> <xs:element name="HiddenCost" type="xs:decimal" minOccurs="0" maxOccurs="1"/> <xs:element name="RelatedItems" type="RelatedItemsType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="SortNumber" type="xs:integer" minOccurs="0" maxOccurs="1"/> <xs:element name="Pack" type="PackType" minOccurs="0" maxOccurs="1"/> </xs:sequence> <xs:attribute name="code" type="xs:string" use="required"/> <xs:attribute name="desc" type="xs:string" use="required"/> <xs:attribute name="rangeid" type="xs:string" use="required"/> <xs:attribute name="retailercode" type="xs:string" use="required"/> <xs:attribute name="retailerdesc1" type="xs:string" use="optional"/> <xs:attribute name="retailerdesc2" type="xs:string" use="optional"/> <xs:attribute name="retailerdesc3" type="xs:string" use="optional"/> <xs:attribute name="barcode" type="xs:string" use="optional"/> <xs:attribute name="cost" type="xs:decimal" use="optional"/> <xs:attribute name="retail" type="xs:decimal" use="optional"/> <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.torex.com/SwanFRS-POS/GenericProductCatalogue" xmlns="http://www.torex.com/SwanFRS-POS/GenericProductCatalogue" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="Catalogues"> <xs:complexType> <xs:sequence> <xs:element name="Catalogue" type="CatalogueType" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="specversion" type="xs:decimal" use="required"/> </xs:complexType> </xs:element> <xs:complexType name="CatalogueType"> <xs:sequence> <xs:element name="Range" type="RangeType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="Option" type="OptionType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="Item" type="ItemType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="supplier" type="xs:string" use="required"/> <xs:attribute name="retailercode" type="xs:string" use="optional"/> <xs:attribute name="catname" type="xs:string" use="required"/> <xs:attribute name="version" type="xs:decimal" use="required"/> <xs:attribute name="catdesc" type="xs:string" use="required"/> <xs:attribute name="currency" type="xs:string" use="optional" default="GBP"/> <xs:attribute name="language" type="xs:string" use="optional" default="EN"/> <xs:attribute name="validfrom" type="xs:date" use="optional"/> <xs:attribute name="validto" type="xs:date" use="optional"/> </xs:complexType> <xs:complexType name="RangeType"> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="desc" type="xs:string" use="required"/> <xs:attribute name="retailerdesc" type="xs:string" use="optional"/> <xs:attribute name="homedel" type="HomeDelType" use="optional"/> </xs:complexType> <xs:complexType name="ItemType"> <xs:sequence> <xs:element name="OptionLink" type="OptionLinkType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="AvailableDate" type="xs:date" minOccurs="0" maxOccurs="1"/> <xs:element name="IsVisible" type="xs:boolean" minOccurs="0" maxOccurs="1"/> <xs:element name="LongDescription" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="ImageUrl" type="ImageUrlType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="VideoUrl" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="IsViewOnly" type="xs:boolean" minOccurs="0" maxOccurs="1"/> <xs:element name="Keyword" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="Attribute" type="AttributeType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="CurrencyCost" type="xs:decimal" minOccurs="0" maxOccurs="1"/> <xs:element name="HiddenCost" type="xs:decimal" minOccurs="0" maxOccurs="1"/> <xs:element name="RelatedItems" type="RelatedItemsType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="SortNumber" type="xs:integer" minOccurs="0" maxOccurs="1"/> <xs:element name="Pack" type="PackType" minOccurs="0" maxOccurs="1"/> <xs:element name="AlternativeRetailerCode" type="AlternativeRetailerCodeType" minOccurs="0" maxOccurs="1"/> <xs:element name="IsSerialNumberEntryRequired" type="xs:boolean" minOccurs="0" maxOccurs="1"/> <xs:element name="ShowPricesOnWeb" type="xs:boolean" minOccurs="0" maxOccurs="1"/> </xs:sequence> <xs:attribute name="code" type="xs:string" use="required"/> <xs:attribute name="desc" type="xs:string" use="required"/> <xs:attribute name="rangeid" type="xs:string" use="required"/> <xs:attribute name="retailercode" type="xs:string" use="required"/> <xs:attribute name="retailerdesc1" type="xs:string" use="optional"/> <xs:attribute name="retailerdesc2" type="xs:string" use="optional"/> <xs:attribute name="retailerdesc3" type="xs:string" use="optional"/> <xs:attribute name="barcode" type="xs:string" use="optional"/> <xs:attribute name="cost" type="xs:decimal" use="optional"/> <xs:attribute name="retail" type="xs:decimal" use="optional"/> <xs:attribute name="sell" type="xs:decimal" use="optional"/> <xs:attribute name="leadtime" type="xs:integer" use="optional"/> <xs:attribute name="class" type="xs:string" use="optional"/> <xs:attribute name="type" type="xs:string" use="optional"/> <xs:attribute name="specialorder" type="xs:boolean" use="optional"/> <xs:attribute name="reorderable" type="xs:boolean" use="optional"/> <xs:attribute name="minstocklevel" type="xs:integer" use="optional"/> <xs:attribute name="maxstocklevel" type="xs:integer" use="optional"/> <xs:attribute name="reorderqty" type="xs:integer" use="optional"/> <xs:attribute name="homedel" type="HomeDelType" use="optional"/> <xs:attribute name="part" type="xs:boolean" use="optional"/> <xs:attribute name="pieces" type="xs:integer" use="optional"/> <xs:attribute name="width" type="xs:decimal" use="optional"/> <xs:attribute name="height" type="xs:decimal" use="optional"/> <xs:attribute name="depth" type="xs:decimal" use="optional"/> <xs:attribute name="weight" type="xs:decimal" use="optional"/> <xs:attribute name="commissiongroup" type="character" use="optional"/> <xs:attribute name="incentivevalue" type="xs:decimal" use="optional"/> <xs:attribute name="incentiveperc" type="xs:decimal" use="optional"/> <xs:attribute name="weborders" type="xs:boolean" use="optional"/> <xs:attribute name="tvindicator" type="xs:integer" use="optional"/> <xs:attribute name="discontinueddate" type="xs:date" use="optional"/> <xs:attribute name="reptier1" type="xs:string" use="optional"/> <xs:attribute name="reptier2" type="xs:string" use="optional"/> <xs:attribute name="reptier3" type="xs:string" use="optional"/> <xs:attribute name="reptier4" type="xs:string" use="optional"/> <xs:attribute name="reptier5" type="xs:string" use="optional"/> <xs:attribute name="reptier6" type="xs:string" use="optional"/> <xs:attribute name="custom1" type="xs:string" use="optional"/> <xs:attribute name="custom2" type="xs:string" use="optional"/> <xs:attribute name="custom3" type="xs:string" use="optional"/> <xs:attribute name="maskseparator" type="xs:string" use="optional" default="-"/> </xs:complexType> <xs:complexType name="OptionType"> <xs:sequence> <xs:element name="Attribute" type="AttributeType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="AlternativeQuestion" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="NonTextOptionType" type="NonTextOptionTypeType" minOccurs="0" maxOccurs="1"/> <xs:element name="Choice" type="ChoiceType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="desc" type="xs:string" use="required"/> <xs:attribute name="retailerdesc" type="xs:string" use="optional"/> <xs:attribute name="istext" type="xs:boolean" use="optional"/> <xs:attribute name="affectcostflag" type="PriceAffectType" use="optional"/> <xs:attribute name="affectretailflag" type="PriceAffectType" use="optional"/> <xs:attribute name="affectsellflag" type="PriceAffectType" use="optional"/> <xs:attribute name="promptqty" type="QuantityPromptType" use="optional"/> <xs:attribute name="replaceprice" type="xs:boolean" use="optional"/> <xs:attribute name="expandchildoptionchoices" type="xs:boolean" use="optional"/> </xs:complexType> <xs:complexType name="ChoiceType"> <xs:sequence> <xs:element name="Attribute" type="AttributeType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="OptionLink" type="OptionLinkType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="ImageUrl" type="ImageUrlType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="code" type="xs:string" use="optional"/> <xs:attribute name="desc" type="xs:string" use="required"/> <xs:attribute name="retailerdesc" type="xs:string" use="optional"/> <xs:attribute name="sequence" type="xs:integer" use="optional"/> <xs:attribute name="affectcostvalue" type="xs:decimal" use="optional"/> <xs:attribute name="affectretailvalue" type="xs:decimal" use="optional"/> <xs:attribute name="affectsellvalue" type="xs:decimal" use="optional"/> <xs:attribute name="leadtime" use="optional"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="-99"/> <xs:maxInclusive value="99"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="pricereference" type="xs:integer" use="optional" /> <xs:attribute name="discontinueddate" type="xs:date" use="optional"/> </xs:complexType> <xs:complexType name="OptionLinkType"> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="sequence" type="xs:integer" use="optional"/> </xs:complexType> <xs:simpleType name="PriceAffectType"> <xs:restriction base="xs:string"> <xs:enumeration value="V"/> <xs:enumeration value="P"/> <xs:enumeration value="N"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="QuantityPromptType"> <xs:restriction base="xs:string"> <xs:enumeration value="C"/> <xs:enumeration value="Q"/> <xs:enumeration value="O"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="HomeDelType"> <xs:restriction base="xs:string"> <xs:enumeration value="Y"/> <xs:enumeration value="N"/> <xs:enumeration value="O"/> </xs:restriction> </xs:simpleType> <xs:complexType name="AttributeType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="Name" type="xs:string" /> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:simpleType name="nonEmptyString"> <xs:restriction base="xs:string"> <xs:minLength value="1" /> </xs:restriction> </xs:simpleType> <xs:simpleType name="character"> <xs:restriction base="xs:string"> <xs:length fixed="true" value="1" /> </xs:restriction> </xs:simpleType> <xs:complexType name="ImageUrlType"> <xs:simpleContent> <xs:extension base="nonEmptyString"> <xs:attribute name="sequence" type="xs:integer" use="optional"/> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:simpleType name="NonTextOptionTypeType"> <xs:restriction base="xs:string"> <xs:enumeration value="Radio"/> <xs:enumeration value="Swatch"/> <xs:enumeration value="List"/> <xs:enumeration value="CheckBox"/> </xs:restriction> </xs:simpleType> <xs:complexType name="RelatedItemsType"> <xs:sequence> <xs:element name="RetailerCode" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="RelationshipDescription" type="xs:string" use="required" /> </xs:complexType> <xs:complexType name="PackType"> <xs:sequence> <xs:element name="Size" type="xs:decimal" minOccurs="1" maxOccurs="1"/> <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1"/> </xs:sequence> </xs:complexType> <xs:complexType name="AlternativeRetailerCodeType"> <xs:sequence> <xs:element name="RetailerCode" type="xs:string" minOccurs="1" maxOccurs="1"/> <xs:element name="Sequence" type="xs:integer" minOccurs="0" maxOccurs="1"/> </xs:sequence> </xs:complexType> </xs:schema>
Example
<?xml version="1.0" encoding="utf-8"?> <Catalogues xmlns="http://www.torex.com/SwanFRS-POS/GenericProductCatalogue" specversion="2.1" > <Catalogue supplier="45" catname="Ultrasuites" version="2" catdesc="" > <Range id="20" desc="Inspiration Classic" retailerdesc="Inspiration" ></Range> <Option id="2" desc="Cover Type" istext="0" affectsellflag="N" promptqty="O" > <Choice desc="Leather" sequence="1" leadtime="7" > <OptionLink id="3" sequence="1"></OptionLink> </Choice> <Choice desc="Fabric" sequence="2" leadtime="14" > <OptionLink id="11" sequence="2"></OptionLink> </Choice> <Choice desc="Special Order" sequence="3" leadtime="21" > <OptionLink id="19" sequence="1"></OptionLink> </Choice> </Option> <Option id="13" desc="Extra Scatters" istext="0" affectsellflag="V" promptqty="O" > <Choice desc="Not Required" sequence="1" > </Choice> <Choice desc="2 Cushions" sequence="2" affectcostvalue="10" affectsellvalue="25" > </Choice> <Choice desc="3 Cushions" sequence="3" affectcostvalue="20" affectsellvalue="50" > </Choice> </Option> <Option id="14" desc="Feet Type" istext="0" affectsellflag="V" promptqty="O" > <Choice desc="Wood Effect" sequence="1" affectcostvalue="0" affectsellvalue="0" > </Choice> <Choice desc="Solid Wood" sequence="2" affectcostvalue="3" affectsellvalue="10" > </Choice> <Choice desc="Metal Glider" sequence="3" affectcostvalue="4" affectsellvalue="15" > </Choice> <Choice desc="Metail Bun" sequence="4" affectcostvalue="5" affectsellvalue="20" > </Choice> </Option> <Option id="16" desc="Recliner" istext="0" affectsellflag="V" promptqty="O" > <Choice desc="Not Required" sequence="1" > </Choice> <Choice desc="Left" sequence="2" affectcostvalue="25" affectsellvalue="50" > <OptionLink id="17" sequence="1"></OptionLink> </Choice> <Choice desc="Right" sequence="2" affectcostvalue="25" affectsellvalue="50" > <OptionLink id="17" sequence="1"></OptionLink> </Choice> <Choice desc="Dual" sequence="4" affectcostvalue="50" affectsellvalue="100" > <OptionLink id="17" sequence="1"></OptionLink> </Choice> </Option> <Item retailercode="45-20-5" AlternativeCode="INSP5CGP----" desc="5 Seater Corner Group" rangeid="20" code="Xcg" retailerdesc1="5 Seater Corner Group" cost="430" retail="865" sell="1385.1" leadtime="42" class="1" type="L001" reorderable="1" homedel="Y" pieces="3" width="200" height="100" depth="300" weight="5" weborders="0" > <OptionLink id="2" sequence="1"></OptionLink> <OptionLink id="13" sequence="2"></OptionLink> <OptionLink id="14" sequence="3"></OptionLink> <OptionLink id="16" sequence="4"></OptionLink> <LongDescription><![CDATA[Rolling out the red carpet, so to speak, with classic elements including a curvaceous camelback profile, pleated roll arms and scrolled, exposed frame, the luxuriously oversized Winnsboro chair lets you bring home the royal treatment well within budget. The style is clearly inspired by yesteryear, but the feel is modern comfort at its best. Masterful mix of designer back pillows in lieu of a traditional cushion is wonderfully indulgent. ]]></LongDescription> <ImageUrl sequence ="1">image1.png</ImageUrl> <ImageUrl sequence ="100">image100.png</ImageUrl> <Pack> <Size>102</Size> <Description>pallet</Description> </Pack> </Item> </Catalogue> </Catalogues>
Schema Content
The following section detail the elements required when importing the XML product catalogue.
Ranges (Range Type)
This section repeats for each range within the catalogue.
<xs:complexType name="RangeType"> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="desc" type="xs:string" use="required"/> <xs:attribute name="retailerdesc" type="xs:string" use="optional"/> <xs:attribute name="homedel" type="HomeDelType" use="optional"/> </xs:complexType>
|
Item |
Description |
Optional |
|
id |
A unique within supplier reference (numeric) for the range specified |
|
|
desc |
The name or title of the range (design or collection) |
|
|
retailerdesc |
The de-branded name of the range |
|
|
homedel |
Not currently used – indicates if the range is a direct home delivery Options will be Y / N / O |
Products (Item Type)
This section repeats for each product within the range.
<xs:complexType name="ItemType"> <xs:sequence> <xs:element name="OptionLink" type="OptionLinkType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="AvailableDate" type="xs:date" minOccurs="0" maxOccurs="1"/> <xs:element name="IsVisible" type="xs:boolean" minOccurs="0" maxOccurs="1"/> <xs:element name="LongDescription" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="ImageUrl" type="ImageUrlType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="VideoUrl" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="IsViewOnly" type="xs:boolean" minOccurs="0" maxOccurs="1"/> <xs:element name="Keyword" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="Attribute" type="AttributeType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="CurrencyCost" type="xs:decimal" minOccurs="0" maxOccurs="1"/> <xs:element name="HiddenCost" type="xs:decimal" minOccurs="0" maxOccurs="1"/> <xs:element name="RelatedItems" type="RelatedItemsType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="SortNumber" type="xs:integer" minOccurs="0" maxOccurs="1"/> <xs:element name="Pack" type="PackType" minOccurs="0" maxOccurs="1"/> </xs:sequence> <xs:attribute name="code" type="xs:string" use="required"/> <xs:attribute name="desc" type="xs:string" use="required"/> <xs:attribute name="rangeid" type="xs:string" use="required"/> <xs:attribute name="retailercode" type="xs:string" use="required"/> <xs:attribute name="retailerdesc1" type="xs:string" use="optional"/> <xs:attribute name="retailerdesc2" type="xs:string" use="optional"/> <xs:attribute name="retailerdesc3" type="xs:string" use="optional"/> <xs:attribute name="barcode" type="xs:string" use="optional"/> <xs:attribute name="cost" type="xs:decimal" use="optional"/> <xs:attribute name="retail" type="xs:decimal" use="optional"/> <xs:attribute name="sell" type="xs:decimal" use="optional"/> <xs:attribute name="leadtime" type="xs:integer" use="optional"/> <xs:attribute name="class" type="xs:string" use="optional"/> <xs:attribute name="type" type="xs:string" use="optional"/> <xs:attribute name="specialorder" type="xs:boolean" use="optional"/> <xs:attribute name="reorderable" type="xs:boolean" use="optional"/> <xs:attribute name="minstocklevel" type="xs:integer" use="optional"/> <xs:attribute name="maxstocklevel" type="xs:integer" use="optional"/> <xs:attribute name="reorderqty" type="xs:integer" use="optional"/> <xs:attribute name="homedel" type="HomeDelType" use="optional"/> <xs:attribute name="part" type="xs:boolean" use="optional"/> <xs:attribute name="pieces" type="xs:integer" use="optional"/> <xs:attribute name="width" type="xs:decimal" use="optional"/> <xs:attribute name="height" type="xs:decimal" use="optional"/> <xs:attribute name="depth" type="xs:decimal" use="optional"/> <xs:attribute name="weight" type="xs:decimal" use="optional"/> <xs:attribute name="commissiongroup" type="xs:string" use="optional"/> <xs:attribute name="incentivevalue" type="xs:decimal" use="optional"/> <xs:attribute name="incentiveperc" type="xs:decimal" use="optional"/> <xs:attribute name="weborders" type="xs:boolean" use="optional"/> <xs:attribute name="tvindicator" type="xs:integer" use="optional"/> <xs:attribute name="discontinueddate" type="xs:date" use="optional"/> <xs:attribute name="reptier1" type="xs:string" use="optional"/> <xs:attribute name="reptier2" type="xs:string" use="optional"/> <xs:attribute name="reptier3" type="xs:string" use="optional"/> <xs:attribute name="reptier4" type="xs:string" use="optional"/> <xs:attribute name="reptier5" type="xs:string" use="optional"/> <xs:attribute name="reptier6" type="xs:string" use="optional"/> <xs:attribute name="custom1" type="xs:string" use="optional"/> <xs:attribute name="custom2" type="xs:string" use="optional"/> <xs:attribute name="custom3" type="xs:string" use="optional"/> <xs:attribute name="maskseparator" type="xs:string" use="optional" default="-"/> </xs:complexType>
The following sections are repeating items within the SKU and require multiple tags – see Example for details.
|
Item |
Description |
Optional |
|
OptionLink |
Not currently used <xs:complexType name="OptionLinkType"> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="sequence" type="xs:integer" use="optional"/> </xs:complexType> |
|
|
AvailableDate |
The date available |
|
|
IsVisible |
Set to 1 if this item is to be visible on a linked website |
|
|
LongDescription |
Optional extra narrative used on the web and in information boxes within SwanFRS |
|
|
ImageURL |
Image paths associated with the product <xs:complexType name="ImageUrlType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="sequence" type="xs:integer" use="optional"/> </xs:extension> </xs:simpleContent> </xs:complexType> |
|
|
VideoURL |
Not currently used in SwanFRS |
|
|
IsViewOnly |
Set to 1 if this item can be seen but not ordered via a linked website |
|
|
Keyword |
A list of keywords used on the website for this item. |
|
|
Attribute |
A linked attribute for this SKU <xs:complexType name="AttributeType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="Name" type="xs:string" /> </xs:extension> </xs:simpleContent> </xs:complexType> |
|
|
CurrencyCost |
The cost of the SKU in the supplier’s currency where applicable |
|
|
RelatedItems |
Not currently used. <xs:complexType name="RelatedItemsType"> <xs:sequence> <xs:element name="RetailerCode" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="RelationshipDescription" type="xs:string" /> </xs:complexType> |
|
|
SortNumber |
Not currently used. |
|
|
Pack |
The pack size and type for this item. <xs:complexType name="PackType"> <xs:sequence> <xs:element name="Size" type="xs:decimal" minOccurs="1" maxOccurs="1"/> <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1"/> </xs:sequence> </xs:complexType> |
The following tags relate to the base SKU.
|
Item |
Description |
Optional |
|
code |
The supplier’s code – manufacturers part/item number |
|
|
desc |
The description of the item |
|
|
rangeid |
The reference linking the item within the range |
|
|
retailercode |
The SwanFRS SKU Code This must be unique across the whole of the SwanFRS database |
|
|
retailerdesc1 |
Description line 1 If not set, then <desc> will be used as the first description element in SwanFRS |
|
|
retailerdesc2 |
Description line 2 |
|
|
retailerdesc3 |
Description line 3 |
|
|
barcode |
The supplier’s barcode |
|
|
cost |
The cost price to the retailer of the item If measured the cost entered should be per unit of width i.e., £10 for a 3m wide item would equate to £30 per m sold at point of sale Costs should be in base currency. (Supplier currency settings are ignored) |
|
|
retail |
The MRP / RRP price If measured the MRP entered should be per unit of width i.e., £10 for a 3m wide item would equate to £30 per m sold at point of sale MRPs should be in base currency. (Supplier currency settings are ignored) |
|
|
sell |
The price the item will be sold for at point of sale If measured the price entered should be per unit of width i.e., £10 for a 3m wide item would equate to £30 per m sold at point of sale Sell prices should be in base currency. (Supplier currency settings are ignored) |
|
|
leadtime |
The number of days it takes from ordering to supplier delivery of the item |
|
|
class |
Not currently supported by SwanFRS |
|
|
type |
The product group the item will be part of (must be a valid product group known to SwanFRS) |
|
|
specialorder |
Not currently supported by SwanFRS |
|
|
reorderable |
0 or 1 – set to 1 if this item is to be monitored within the ‘purchase order optimisation’ process Will default to 0 if not populated |
|
|
minstocklevel |
Minimum stock level |
|
|
maxstocklevel |
Maximum stock level |
|
|
reorderqty |
Standard re-order pack quantity |
|
|
homedel |
Not currently operational Options will be Y / N / O |
|
|
part |
0 or 1 – set to 1 if the item is to be considered a part and therefore only saleable if the user has the SELL_PARTS privilege. |
|
|
pieces |
The number of boxes / pieces this item is shipped in (whole numbers greater than 0) Will default to 1 if not provided |
|
|
width |
The width of the item (in millimetres or inches) For measured products, set this to -1 to indicate the item is a custom fit carpet. |
|
|
height |
The height of the item (in millimetres or inches) Where set this cannot be zero. |
|
|
depth |
The depth of the item (in millimetres or inches) Where set this cannot be zero. |
|
|
weight |
The weight of the item Where set this cannot be zero. |
|
|
commissiongroup |
The commission grouping for this item |
|
|
incentivevalue |
Not currently supported by SwanFRS |
|
|
weborders |
0 or 1 – Indicates that this item can be sold through the SwanFRS web service interface. Will default to 0 if not provided. |
|
|
tvindicator |
Indicates the TV licensing category for this item. |
|
|
discontinueddate |
The date this item will cease to be available. |
|
|
reptier1 |
Reporting tier level 1 code |
|
|
reptier2 |
Reporting tier level 2 code |
|
|
reptier3 |
Reporting tier level 3 code |
|
|
reptier4 |
Reporting tier level 4 code |
|
|
reptier5 |
Reporting tier level 5 code |
|
|
reptier6 |
Reporting tier level 6 code |
|
|
custom1 |
Not currently supported by SwanFRS |
|
|
custom2 |
Not currently supported by SwanFRS |
|
|
custom3 |
Not currently supported by SwanFRS |
|
|
maskseparator |
Not currently supported by SwanFRS |
Options Header (Option Type)
This section repeats for each option (question) within the catalogue.
<xs:complexType name="OptionType"> <xs:sequence> <xs:element name="Attribute" type="AttributeType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="AlternativeQuestion" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element name="NonTextOptionType" type="NonTextOptionTypeType" minOccurs="0" maxOccurs="1"/> <xs:element name="Choice" type="ChoiceType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="desc" type="xs:string" use="required"/> <xs:attribute name="retailerdesc" type="xs:string" use="optional"/> <xs:attribute name="istext" type="xs:boolean" use="optional"/> <xs:attribute name="affectcostflag" type="PriceAffectType" use="optional"/> <xs:attribute name="affectretailflag" type="PriceAffectType" use="optional"/> <xs:attribute name="affectsellflag" type="PriceAffectType" use="optional"/> <xs:attribute name="promptqty" type="QuantityPromptType" use="optional"/> <xs:attribute name="replaceprice" type="xs:boolean" use="optional"/> <xs:attribute name="expandchildoptionchoices" type="xs:boolean" use="optional"/> </xs:complexType>
|
Item |
Description |
Optional |
|
id |
The unique within catalogue supplier numeric code for the option (question) |
|
|
desc |
The description of the option |
|
|
retailerdesc |
An alternative description |
|
|
istext |
0 = this is a drop-down list (default if not provided) 1 = this is a text box list requiring manual answers |
|
|
affectcostflag |
Not currently supported by SwanFRS N = not price affecting V = value uplift P = percentage uplift R = replacement cost – No longer supported |
|
|
affectretailflag |
Not currently supported by SwanFRS N = not price affecting V = value uplift P = percentage uplift R = replacement cost – No longer supported |
|
|
affectsellflag |
N = not price affecting (default if not provided) V = value uplift P = percentage uplift R = replacement costs/prices – No longer supported |
|
|
promptqty |
O = no quantity (default if not provided) Q = enter a quantity (decimal) C = choose answer from drop down – whole integer in range 0 to 10. |
|
|
replaceprice |
Used to indicate replacement pricing. If a replacement priced option is encountered, the choice replaces the base price of the item if the current base price is of lower value. Where a replacement price is lower than the current base price of an item then the price stated (using the affectcostvalue, affectsellvalue & affectretailvalue attributes against the choice) becomes an uplift price (value or percentage dependent upon affectsellflag attribute) and adds to the overall value of the item 1 = this option is price REPLACING dependant on the conditions outlined above 0 = this option is not price replacing |
Option answers (Choice Type)
This section repeats for each option choice (answer) within the catalogue.
<xs:complexType name="ChoiceType"> <xs:sequence> <xs:element name="Attribute" type="AttributeType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="OptionLink" type="OptionLinkType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="code" type="xs:string" use="optional"/> <xs:attribute name="desc" type="xs:string" use="required"/> <xs:attribute name="retailerdesc" type="xs:string" use="optional"/> <xs:attribute name="sequence" type="xs:integer" use="optional"/> <xs:attribute name="affectcostvalue" type="xs:decimal" use="optional"/> <xs:attribute name="affectretailvalue" type="xs:decimal" use="optional"/> <xs:attribute name="affectsellvalue" type="xs:decimal" use="optional"/> <xs:attribute name="leadtime" use="optional"> <xs:simpleType> <xs:restriction base="xs:integer"> <xs:minInclusive value="-99"/> <xs:maxInclusive value="99"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="pricereference" type="xs:integer" use="optional" /> <xs:attribute name="discontinueddate" type="xs:date" use="optional"/> </xs:complexType>
For ‘istext’ options no answer (choices) should be defined.
|
Item |
Description |
Optional |
|
code |
alphanumeric code representing this answer |
|
|
desc |
Description of the answer (drop down or text entry field title) |
|
|
retailerdesc |
Alternative description |
|
|
sequence |
Sequence reference If provided this will control the sequence that answers/choices are presented during product specification. |
|
|
affectcostvalue |
Value to affect cost price (use of value depends on option setting) |
|
|
affectretailvalue |
Value to affect retail price (use of value depends on option setting) |
|
|
affectsellvalue |
Value to affect selling price (use of value depends on option setting) |
|
|
leadtime |
The lead time adjustment for this answer (range -99 to +99) Option lead times cannot cause the SKU lead time to go negative. |
|
|
pricereference |
Used for replacement pricing and indicates the reference table used to hold the replacement prices for the chosen item and choice combination. |
|
|
discontinueddate |
The date this choice will cease to be available. |
Option link (Option Link Type)
Used when an answer has a further question or if the item has an option (list of options).
<xs:complexType name="OptionLinkType"> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="sequence" type="xs:integer" use="optional"/> </xs:complexType>
|
Item |
Description |
Optional |
|
id |
Reference linking to an option header id |
|
|
sequence |
Sequence reference If provided this will control the sequence that options are presented during product specification. |
It is important that the element is defined before it is referenced in the XML load file – e.g., the option must be specified before it can be referenced at item level. XML catalogues should be structured so that all ranges are defined first, followed by all options, with the item appearing at the end of the catalogue.
Options (and the choices) do not need to be included in the XML file if they have previously been loaded into the SwanFRS database – e.g., an OptionLink element against an Item can reference an Option ID that is not in this individual catalogue if the option has previously been added to the database on previous catalogue loads.
The catalogue once ready for loading should be saved in the specified directory and have a .xml suffix. (File name is user definable) once processed the suffix will change to. done.
The XML need not contain a full list of choices to questions. If a choice has been previously sent via an XML and is not contained within a later XML, the option choice will remain available at point of ordering. To remove an option choice the item must have a ‘discontinued date’ set.
Discontinuation of products can be controlled via a ‘radio button’ at time of load or by providing the DiscontinuedDate attribute against the item. To discontinue a product, it can be omitted from the XML and the discontinue option selected, or alternatively the Item can be included but DiscontinuedDate provided.
It is important that when revising already known products that they retain the same SKU reference otherwise the load process will create a second product rather than replacing the originals definition.
Blocked Options
It is possible to block certain answers to questions for specific products within SwanFRS. This is achieved via an XML load file
XML Schema for Blocked Options
The XSD for blocked options
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.Micros.com/SwanFRS/BlockedChoices" xmlns="http://www.Micros.com/SwanFRS/BlockedChoices" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="BlockedChoices"> <xs:complexType > <xs:sequence> <xs:element name="BlockedChoice" type="BlockedChoiceType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="BlockedChoiceType"> <xs:attribute name="itemretailercode" type="xs:string" use="required"/> <xs:attribute name="optionid" type="xs:string" use="required"/> <xs:attribute name="choicedesc" type="xs:string" use="required"/> <xs:attribute name="choiceretailerdesc" type="xs:string" use="optional"/> <xs:attribute name="isblocked" type="xs:boolean" use="required"/> </xs:complexType> </xs:schema>
Example of XML
<?xml version="1.0" encoding="utf-8" ?> <BlockedChoices xmlns="http://www.Micros.com/SwanFRS/BlockedChoices"> <BlockedChoice itemretailercode="866-0905-949" optionid="51" choicedesc="Brown Textured" isblocked="1"></BlockedChoice> <BlockedChoice itemretailercode="866-0905-949" optionid="302" choicedesc="Premium Fiber" isblocked="1"></BlockedChoice> <BlockedChoice itemretailercode="866-0905-950" optionid="52" choicedesc="Green" isblocked="1"></BlockedChoice> <BlockedChoice itemretailercode="866-0905-950" optionid="1" choicedesc="Grade C" isblocked="1"></BlockedChoice> </BlockedChoices>
Definition of the settings at line level.
|
Item |
Description |
Optional |
|
itemretailercode |
Set to the SKU of the SwanFRS code you wish to limit the possible answers for. |
|
|
optionid |
Set to the ‘option code’ specified for the question you wish to block answers to. |
|
|
choicedesc |
Set to the description of the answer you wish to block. |
|
|
Choiceretailerdesc |
The retailer’s description of the option |
|
|
isblocked |
Set to 1 to stop the operator from being able to choose (view) this answer when building the SKU Set to 0 when reverting a previous block The 0 option is only required when an answer has been previously blocked as the system assumes all answers are possible for all SKUs unless instructed otherwise. |
Default Options
It is possible to set a default offering for certain answers to questions for specific products within SwanFRS. This is achieved via an XML load file
XML Schema for Default Options
The XSD for default options
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.Micros.com/SwanFRS/DefaultChoices" xmlns="http://www.Micros.com/SwanFRS/DefaultChoices" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="DefaultChoices"> <xs:complexType> <xs:sequence> <xs:element name="DefaultChoice" type="DefaultChoiceType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="DefaultChoiceType"> <xs:attribute name="itemretailercode" type="xs:string" use="required"/> <xs:attribute name="optionid" type="xs:string" use="required"/> <xs:attribute name="choicedesc" type="xs:string" use="optional"/> <xs:attribute name="choiceretailerdesc" type="xs:string" use="optional"/> </xs:complexType> </xs:schema>
Example of XML
<?xml version="1.0" encoding="utf-8" ?> <DefaultChoices xmlns="http://www.Micros.com/SwanFRS/DefaultChoices"> <DefaultChoice itemretailercode="866-0905-949" optionid="301" choicedesc="Fabric Down"></DefaultChoice> <DefaultChoice itemretailercode="866-0905-949" optionid="302" choicedesc="Luxury Down"></DefaultChoice> <DefaultChoice itemretailercode="866-0905-950" optionid="301" choicedesc="Luxury Down"></DefaultChoice> <DefaultChoice itemretailercode="866-0905-950" optionid="1" choicedesc="Grade B"></DefaultChoice> </DefaultChoices>
Definition of the settings at line level.
|
Item |
Description |
Optional |
|
itemretailercode |
Set to the SKU of the SwanFRS code you wish to set a default answer for. |
|
|
optionid |
Set to the ‘option code’ specified for the question you wish to create a default answer to. |
|
|
choicedesc |
Set to the description of the answer you wish to be the default. Not providing this element turns off the default choice for the SKU/Option Should the optionid have a previous default it will be replaced with the new setting. |
|
|
Choiceretailerdesc |
The retailer’s description |
Replacement Pricing
It is possible to instruct SwanFRS to replace the ‘base’ selling price of a product dependent upon the answer given to a question. It is possible to define this to occur several times within the product whilst the composition of the item is being specified.
XML Schema for Replacement Prices
The XSD for replacement prices
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.Micros.com/SwanFRS/ReplacementPrices" xmlns="http://www.Micros.com/SwanFRS/ReplacementPrices" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="ReplacementPrices"> <xs:complexType> <xs:sequence> <xs:element name="ReplacementPrice" type="ReplacementPriceType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="ReplacementPriceType"> <xs:attribute name="itemretailercode" type="xs:string" use="required"/> <xs:attribute name="optionid" type="xs:string" use="optional"/> <xs:attribute name="pricereference" type="xs:integer" use="required"/> <xs:attribute name="costvalue" type="xs:decimal" use="required"/> <xs:attribute name="retailvalue" type="xs:decimal" use="optional"/> <xs:attribute name="sellvalue" type="xs:decimal" use="required"/> </xs:complexType> </xs:schema>
Example of XML
<?xml version="1.0" encoding="utf-8" ?> <ReplacementPrices xmlns="http://www.Micros.com/SwanFRS/ReplacementPrices"> <ReplacementPrice itemretailercode="866-0905-949" pricereference="10" costvalue="1000" sellvalue="1334"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-949" pricereference="20" costvalue="1100" sellvalue="1400"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-949" pricereference="30" costvalue="1200" sellvalue="1534"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-949" pricereference="40" costvalue="1300" sellvalue="1800"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-949" pricereference="35" costvalue="1500" sellvalue="2000"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-950" pricereference="10" costvalue="1100" sellvalue="1434"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-950" pricereference="20" costvalue="2000" sellvalue="2000"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-950" pricereference="30" costvalue="3000" sellvalue="3000"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-950" pricereference="40" costvalue="4000" sellvalue="4000"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-950" pricereference="35" costvalue="5000" sellvalue="5000"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-951" pricereference="10" costvalue="600" sellvalue="600"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-951" pricereference="20" costvalue="1000" sellvalue="1200"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-951" pricereference="30" costvalue="1100" sellvalue="1300"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-951" pricereference="40" costvalue="1200" sellvalue="1400"></ReplacementPrice> </ReplacementPrices>
Definition of the settings at line level.
|
Item |
Description |
Optional |
|
itemretailercode |
Set to the SKU of the SwanFRS code you wish to set a default answer for. |
|
|
Optionid |
If an item and option combination have a different replacement price value than all other option occurrences for this item, an individual set of prices can be provided. For example, encountering Optionid 1000 within Item 866-0905-951 could turn off replacement pricing (so set costvalue and sellvalue to 0) |
|
|
pricereference |
Define a code (numeric only) which will be used as option choices within the catalogue when seeking a replacement price. This price reference should be held within the <pricereference> element of the option choice in the main product catalogue XML file. |
|
|
costvalue |
The replacement cost price of the item with the chosen option answer. |
|
|
Retailvalue |
The replacement retail price of the item. |
|
|
sellvalue |
The replacement selling price of the item when the replacement answer is chosen. |
Example of a product XML containing a replacement option
<Option id="6" desc="Fabric" retailerdesc="Fabric" affectsellflag="N" replaceprice=”1”> <Choice desc="Grades COM/D/E" pricereference="1"><OptionLink id="51"></OptionLink></Choice> <Choice desc="Grades F/G pricereference ="2"><OptionLink id="52"></OptionLink></Choice> <Choice desc="Grades H/I" pricereference ="3"><OptionLink id="53"></OptionLink></Choice> <Choice desc="Grades J/K" pricereference ="4"><OptionLink id="54"></OptionLink></Choice> <Choice desc="Grades L/N" pricereference ="5"><OptionLink id="55"></OptionLink></Choice> <Choice desc="Grade P" pricereference ="6"><OptionLink id="56"></OptionLink></Choice> <Choice desc="Grades R/T" pricereference ="7"><OptionLink id="57"></OptionLink></Choice> <Choice desc="Grade U" pricereference ="8"><OptionLink id="58"></OptionLink></Choice> <Choice desc="Grade V" pricereference ="9"><OptionLink id="59"></OptionLink></Choice> <Choice desc="Grade W" pricereference ="10"><OptionLink id="60"></OptionLink></Choice> </Option> <Option id="50" desc="Wood Trim" affectsellflag="V"> <Choice code="047" desc="Gold" affectcostvalue="0" affectsellvalue="0"></Choice> <Choice code="058" desc="Signature" affectcostvalue="0" affectsellvalue="0"></Choice> <Choice code="068" desc="Craftsman Oak" affectcostvalue="0" affectsellvalue="0"></Choice> <Choice code="114" desc="Ebony" affectcostvalue="75" affectsellvalue="185"></Choice> <Choice code="981" desc="Old Continent Gold" affectcostvalue="170" affectsellvalue="425"></Choice> <Choice code="983" desc="Old Continent with Ivory" affectcostvalue="170" affectsellvalue="425"></Choice> <Choice code="988" desc="Tortoise" affectcostvalue="170" affectsellvalue="425"></Choice> </Option>
Option id 50 is a standard Price Uplift option (affectsellflag = V), and so the affectcostvalue and affectsellvalue attributes of the choices will uplift the items base price accordingly.
Option id 6 is a Price Replacement option (replaceprice=”1”), and so the pricereference attribute contains a Price Reference. Using the previous sample PriceReplacement xml, if I sell SKU 9-1-130 and option 1 (Fabric) is encountered, selecting Grades F/G will see a price reference = 2, and therefore will set the base price as $300. However, if I sell SKU 9-4-890 and I select Grades F/G, price reference still = 2 but for this SKU it will lead to a base price of $400.
Note the product XML does not contain the replacement price grid.
Explanation of Replacement Pricing
An item is selected, and the system begins to request the answers to a series of questions.
At this stage, the following is displayed.
|
Line |
Option |
MRP |
Base price |
Qty |
Option price |
Price |
Cumulative price |
|
1 |
SKU – base item |
£10.00 |
£10.00 |
1 |
£10.00 |
£10.00 |
|
|
2 |
Regular option (uplift flat rate of £3.00) |
2 |
£3.00 |
£6.00 |
£16.00 |
||
|
3 |
Regular option (percentage uplift of 10%) |
£1.00 |
£1.00 |
£17.00 |
When a replacement option is encountered is details will change to that shown below –
|
Line |
Option |
MRP |
Base price |
Qty |
Option price |
Price |
Cumulative price |
|
1 |
SKU – base item |
£10.00 |
£10.00 |
1 |
£50.00 |
||
|
2 |
Regular option (uplift flat rate of £3.00) |
2 |
£3.00 |
£6.00 |
£56.00 |
||
|
3 |
Regular option (percentage uplift of 10%) |
£5.00 |
£5.00 |
£61.00 |
|||
|
4 |
Replacement option |
£50.00 |
£50.00 |
£61.00 |
If a replacement option is met which is less than the prevailing base price the option settings are examined. (Line 5 of the examples below)
If the option is set to not price affecting, then the option answer becomes a zero priced option as in the example below
|
Line |
Option |
MRP |
Base price |
Qty |
Option price |
Price |
Cumulative price |
|
1 |
SKU – base item |
£10.00 |
£10.00 |
1 |
£50.00 |
||
|
2 |
Regular option (uplift flat rate of £3.00) |
2 |
£3.00 |
£6.00 |
£56.00 |
||
|
3 |
Regular option (percentage uplift of 10%) |
£5.00 |
£5.00 |
£61.00 |
|||
|
4 |
Replacement option |
£50.00 |
£50.00 |
£50.00 |
£61.00 |
||
|
5 |
Replacement option |
£45.00 |
£0.00 |
£0.00 |
£61.00 |
If the option is a percentage or value uplift option, the cost/sell price assigned to the answer will be added to the product. In the example below the option has a 10% uplift of base price.
|
Line |
Option |
MRP |
Base price |
Qty |
Option price |
Price |
Cumulative price |
|
1 |
SKU – base item |
£10.00 |
£10.00 |
1 |
£50.00 |
||
|
2 |
Regular option (uplift flat rate of £3.00) |
2 |
£3.00 |
£6.00 |
£56.00 |
||
|
3 |
Regular option (percentage uplift of 10%) |
£5.00 |
£5.00 |
£61.00 |
|||
|
4 |
Replacement option |
£50.00 |
£50.00 |
£50.00 |
£61.00 |
||
|
5 |
Replacement option |
£45.00 |
£5.00 |
£5.00 |
£66.00 |
As options are completed the routine may need to redisplay to accommodate changes to prices in respect of the new ‘replacement’ options and the impact this has on percentage uplift options.
Example of linking
|
SKU X-X-X - Option 1234 – replacement |
|
|
Answer A – reference 1 |
|
|
Answer B – reference 2 |
|
|
Answer C – reference 40 |
|
|
Answer D – reference 2 |
Price control
|
SKU X-X-X |
Reference 1 |
$500.00 |
|
|
Reference 2 |
$1000.00 |
||
|
Reference 40 |
$2000.00 |
If answer A is chosen, the product value is $500.00
If answer B or D is chosen, the price is $1000.00
If answer C is chosen, the price is $2000.00
Promotion Control for options
SwanFRS always suggests the newest active promotion at time of sale.
The logic flow below indicates the checking sequence used by SwanFRS to ensure the most recent promotion is used to present values to the operator.
1st pass
Find all CURRENT promotions for the selected SKU
If the promotion is branch specific and not for the operators branch it is ignored
If the promotion is for the operator’s branch it will be used
If branch specific promotions will be used in preference to company wide promotions
2nd pass
Sequence branch specific promotions first
Sequence using the effective date, place in descending date order i.e., the latest start date first
If more than one promotion has the same start date, then use the load date to sequence using load date sequence with the newest load date first.
If no current promotions are available find any suitable standard promotions – i.e., base line promotions
The same sequencing applies.
E.g.
|
Promotion |
Effective Date |
Load date |
End date |
|
A |
01/01/09 |
12/12/08 |
05/01/09 |
|
B |
04/01/09 |
13/12/08 |
05/01/09 |
|
C |
04/01/09 |
14/12/08 |
06/01/09 |
|
D |
03/01/09 |
15/12/08 |
06/01/09 |
-
On 02/01/09 the system would only offer promotion A
-
On 05/01/09 the system would offer C then B then D then A
-
On 06/01/09 the system would offer promotion C then D
If the operator has sufficient privilege, they can change the suggested promotion changing to another from the drop-down list.
Once the promotion has been established SwanFRS will attempt to use matching option prices for the chosen promotion.
Due to the methodologies employed with XML import it is possible to have a promotion with no option prices linked to it.
In these circumstances SwanFRS will take option pricing from the ‘base line promotion’ only – it will not attempt to obtain a price from any other current promotion in the system.
To present this another way – the option price presented at time of product specification will be that set against the promotion, failing this, the price will be from the base line promotion.
This logic only applies to promotions created via XML import – promotions generated via the third party import do not offer the potential for missing option prices in that the import from a third party forces a full send of all options with every supplier.
Product Sets
It is possible to load product sets into the application via XML (and / or via manual set up within the application)
XML Schema for Blocked Options
The XSD for blocked options
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.Micros.com/SwanFRS/FurnitureSets" xmlns="http://www.Micros.com/SwanFRS/FurnitureSets" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="FurnitureSets"> <xs:complexType> <xs:sequence> <xs:element name="FurnitureSet" type="FurnitureSetType" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="FurnitureSetType"> <xs:sequence> <xs:element name="Component" type="ComponentType" minOccurs="1" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="itemretailercode" type="xs:string" use="required"/> <xs:attribute name="fixedprice" type="xs:boolean" use="optional" default="0"/> </xs:complexType> <xs:complexType name="ComponentType"> <xs:attribute name="itemretailercode" type="xs:string" use="required"/> <xs:attribute name="quantity" type="xs:integer" use="required"/> </xs:complexType> </xs:schema>
Example of XML
<?xml version="1.0" encoding ="utf-8" ?> <FurnitureSets xmlns="http://www.Micros.com/SwanFRS/FurnitureSets"> <FurnitureSet itemretailercode="862-36792-227" fixedprice="1"> <Component itemretailercode="862-36792-227-1" quantity="1"/> <Component itemretailercode="862-36792-227-2" quantity="1"/> </FurnitureSet> <FurnitureSet itemretailercode="862-41219-435" fixedprice="1"> <Component itemretailercode="862-41219-435-1" quantity="1"/> <Component itemretailercode="862-41219-435-2" quantity="1"/> <Component itemretailercode="862-41219-435-3" quantity="1"/> <Component itemretailercode="862-41219-435-4" quantity="1"/> </FurnitureSet> </FurnitureSets>
Definition of the settings at set level.
|
Item |
Description |
Optional |
|
Furnitureset itemretailercode |
Set to the SKU of the product set |
|
|
Fixedprice |
Set to 1 for fixed prices, 0 for interactive pricing |
Definition of the settings at component level.
|
Item |
Description |
Optional |
|
Component itemretailercode |
Set to the SKU of the item or component of the set |
|
|
quantity |
The number of units of this item within the set |
Loading XML into SwanFRS
XML load Screen
Via the products menu within the administration section of SwanFRS it is possible to load an XML data file.
Selecting the option produces the following screen –
Mode Options
There are three modes of operation each building on the previous. It is not necessary to run all three in that the second option performs the tasks of the first option plus a data check. The third option checks the structure, data and loads the XML into the database.
|
Option |
Comments |
|
Verify structure |
This option checks the XML against the ‘standard’ schema to ensure it adheres to the rule and regulations of a product catalogue load. This option does not require the promotion to be specified. |
|
Verify structure & data |
In addition to checking the XML structure this option also checks the contents of the data file for validity and reports on what would have happened if the data had been applied to the existing database. This option enables the choice of a promotion from the drop-down list. |
|
Verify structure, data, and update |
This option checks the catalogue structure and data content and applies the data to the database, assuming the XML and its contents pass the verification processes. This option enables the setting of promotion and offers the choice of discontinuing ranges/items missing from the catalogue. |
Upload Type
There are four XML structures. This element of the load process allows the operator to tell the system which format of XML is being processed and therefore which schema to check the structure against. It is not possible to mix structures in a single load file.
|
Option |
Comments |
|
Ranges, products, options, and prices |
The data file specified contains a product catalogue (items options and prices) |
|
Default option choices |
The data file contains a series of default settings for options. |
|
Blocked option choices |
The load file specified contains blocked option data. |
|
Replacement prices |
The load file contains replacement prices for use within the product specification processes. |
|
Product sets |
The load file contains information re the formulation of a product set. |
Control Options
|
Option |
Comments |
|
Always Calculate and Overwrite Selling Prices |
Ticking this box instructs SwanFRS to calculate selling prices for SKUs within the Catalogue where the selling price is omitted from the load data. The formula for calculation of the selling price is set against the supplier’s catalogue ID. This option only applies when loading Ranges, Products, Options and Prices catalogues. |
|
Location |
This option is not available when using the verify structure only option or when loading default or blocked option XMLs. When available this option allows the operator to specify which location the prices within the XML are to be applied to. If the operator has the POWER_USER privilege all locations will be listed. If the operator has CHANGE_LOCATION_ALL, then all locations within the company will be visible. If the operator has CHANGE_LOCATION_BA, then only locations within the operator’s BA will be visible. If the operator as none of the above, then they will only be able to select their own location. Selecting ‘all locations’ effectively creates prices for all locations listed. If not selecting ‘all locations’, then it is only possible to update a single location at a time. |
|
Selling promotion |
This option is not available when using the verify structure only option or when loading default or blocked option XMLs. The routine will only display promotions available for the selected location. If ‘all locations’ are selected, then only company wide promotions will be shown. Choose the selling promotion the catalogue contents are to be linked to. The promotion chosen will then be updated and prices loaded or replaced, as necessary. If the promotion is active today and prices are to change today, then it will be necessary to run a ‘refresh prices’ option once the catalogue has been processed (either via set up promotions or via the catalogue search/search stock page within sales) |
|
Discontinue missing ranges within suppliers |
Only required when operating with verify and update and with an XML product/price catalogue. When selected the routine will discontinue all products that exist against ranges not identified in this XML file (within the same supplier). I.e., If range 1 was included in the <range> section of the XML file but range 2 was not, the whole of range 2 would be discontinued. |
|
Discontinue missing items within supplier range |
Only required when operating with verify and update and with an XML product/price catalogue. When selected the routine will discontinue all products not present within the XML load file which are linked to a supplier range contained within it. I.e., if range 1 contained only 40% of the products in it and no items from range 2 (and no reference to range 2 in the <range> section), the routine would discontinue 60% of range 1 but leave range 2 unaffected. |
|
Discontinue missing options within the vendor |
Only required when operating within verify and update and with an XML product/price catalogue. When selected the routine will discontinue all options within the vendor that are not present within the XML load. This option allows a clean-up of old options questions. Ticking does not discontinue option answers. To remove an answer include it in the option list setting a discontinue date of today. This instructs the system that this answer is no longer to be offered as a choice at time of product specification. |
Price / Cost Control
SwanFRS can manage multiple cost/selling prices for different locations on a day. This is documented in the Use of Promotions guide.
When importing data via an XML catalogue it is necessary to link the catalogue to a promotion to enable SwanFRS to ensure the correct prices are charged for the appropriate location/product/date combination. This is achieved at time of importing the XML.
When the XML is to be loaded, the selection of a promotion is required. The routine will then create a pricing record for each product in the XML load file and associate it with the selected promotion. The effective dates are taken from the promotion set up.
It is therefore possible to load one XML file into several promotions and to pre-load prices which will not become effective until the system data reaches the start date of the promotion.
If the promotion chosen is a ‘base line’ promotion the routine will only generate cost and MRP records.
If the promotion chose is not a base line, then cost, selling and MRP prices will be created.
If a price already exists for the product within the chosen promotion, it will be overwritten by the prices contained within the XML.
It is therefore important to ensure the XML load file contains the correct prices for the chosen promotion.
Processing the XML
Catalogue Loads
Having selected the PROCESS button, the routine will ‘crunch’ the selected XML load file.
Where a problem has been found with the load file a warning message will be displayed, like that shown below –
To view the details of the error, click the link on the screen.
Successful processing produces the following type of message.
Clicking the here option produces an audit screen like that shown below
There is no undo facility with XML catalogue loading therefore it is important to ensure you have checked the content of the load file and are happy re the changes to be made by reviewing the audit produced.
Blocked Option Load
To process an XML containing blocked options the screen option selection should appear like that shown below.
Processing the data file will produce an audit report and warning message as per the XML catalogue load.
Clicking the highlighter hyperlink opens the audit log where details of the load may be viewed.
Default Option Load
To process an XML containing blocked options the screen option selection should appear like that shown below.
Processing the data file will produce an audit report and warning message as per the XML catalogue load.
Clicking the highlighter hyperlink opens the audit log where details of the load may be viewed.
Replacement Prices Load
Replacement options require the ‘replacement’ choice setting (replaceprice=”R”)
<Option id="1" desc="Fabric Base Unit Grade" affectsellflag="R"> <Choice desc="Grade A" affectcostvalue="10">
The second step is to import the replacement prices XML, when importing replacement prices, the load screen will appear like that shown below.
Loading replacement prices requires the specification of a promotion to link the prices to.
Processing the data file will produce an audit report and warning message as per the XML catalogue load.
Clicking the highlighted hyperlink opens the audit log where details of the load may be viewed.
Product Sets Load
Product sets may be loaded / amended via the XML
Loading replacement prices requires the specification of a promotion to link the prices to.
Processing the data file will produce an audit report and warning message as per the XML catalogue load.
Clicking the highlighter hyperlink opens the audit log where details of the load may be viewed.
Audit
To view the audit produced, click the audit trail / here hyperlink. This will open a window like the page below
Audits are saved in the designated XML folder with a <XML load filename>.log. to ensure your disk does not fill with audit logs these files may be removed
Sales Order Screen
Basic Options
When adding products during sales order/internal order entry process the screen will –
-
Default to the specified option choice where set.
-
Omit from the drop down list any blocked options.
-
Redisplay the base price when a chosen answer causes the base selling price of an item to be replaced.
To cater for replacement price elements within an option structure the price presentation has changed slightly.
|
Option |
Comments |
|
Previous price |
This column may not display if your system has MRP turned off, likewise the title of the column will be as per set in your application parameters. Where set the column will show the price of the unit/option which may be used as a guide showing the client the value of saving being achieved when compared to the price being charged. |
|
Base price |
The base price is always present for the first line of a product and will also show when a ‘replacement’ item has been chosen within the options list. If the answer to an option is not ‘flagged’ as a replacement price this column will be blank. |
|
Quantity |
When showing the base line, the quantity will default to 1. Where an option requires entry of a quantity then the user will be invited to either enter a quantity or to choose a value in the 0 to 9 drop down list. |
|
Option price |
Where set the system will request a price for the option from the operator. This column refers to the unit price of the option and may be multiplied by the quantity thus showing to actual price in the price column. |
|
Price |
The price column shows the actual price to be charged for the item for the stated promotion. If the option is not price affecting this column will be blank. Where there is an option quantity this column shows the total option price. If the replacement price exceeds the prevailing price prior to the selection the routine will show the replacement value in the price column. (only one replacement price will appear per SKU – i.e., the more expensive option answer flagged as a replacement) |
|
Cumulative price |
The cumulative price is effectively the running total of the item at that stage of the product specification. |
In the example below the completed list shows how the cumulative price is affected by option prices. Also note the change in lead time and the expansion of the screen to accommodate the extra options available because of making selections.
Blocked Options
Importing an XML with a blocked option results in the system omitting the option from the drop-down list offered to the operator.
Option list shown with all options available.
Same product shown with the E7– Snowdrop option blocked
XML load file
<?xml version="1.0" encoding="utf-8" ?> <BlockedChoices xmlns="http://www.Micros.com/SwanFRS/BlockedChoices"> <BlockedChoice itemretailercode="866-0905-949" optionid="51" choicedesc="Brown Textured" isblocked="1"></BlockedChoice> </BlockedChoices>
Default Options
Importing an XML with a default option results in the system preselecting the option before the operator is invited to alter the specification.
Please note there are no restrictions on the operator re changing the default option. If a default option causes a further question the screen will redisplay now showing the additional choice which will require a selection to be made.
Option list shown with no default option choices.
Same product shown at the same stage of product specification but this time with default options pre-set.
XML load file
<?xml version="1.0" encoding="utf-8" ?> <DefaultChoices xmlns="http://www.Micros.com/SwanFRS/DefaultChoices"> <DefaultChoice itemretailercode="866-0905-949" optionid="301" choicedesc="Fabric Down"></DefaultChoice> <DefaultChoice itemretailercode="866-0905-949" optionid="302" choicedesc="Luxury Down"></DefaultChoice> </DefaultChoices>
Replacement Pricing
Price replacement XML loads become active once the operator has selected the answer to a question predefined as affecting the base price of a product.
When selected the base price for the item is £1334.00
Once an answer to a ‘replacement’ priced option has been selected the routine will replace the ‘base price’ of the item.
In the example above ‘Grade B’ causes the item to change from £1334.00 to £1400.00.
Having answered additional questions we reach the ‘fabric back grade’ this is also a replacement price, having chosen a ‘Grade C’ fabric this again causes the base price to change in that the price for a grade C is higher than a grade B.
The base price for the item does not change but the cumulative price now reflects the higher price for the grade C fabric.
In the example below Grade D was selected for the ‘fabric base unit grade’ this caused the item to be £1800.00 when the ‘fabric back grade’ was selected this resulted in a replacement charge of £1534.00. Since this is less than the current prevailing base price it effectively has no impact on the price of the item.
XML load file
<?xml version="1.0" encoding="utf-8" ?> <ReplacementPrices xmlns="http://www.Micros.com/SwanFRS/ReplacementPrices"> <ReplacementPrice itemretailercode="866-0905-949" pricereference="10" costvalue="1000" sellvalue="1334"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-949" pricereference="20" costvalue="1100" sellvalue="1400"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-949" pricereference="30" costvalue="1200" sellvalue="1534"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-949" pricereference="40" costvalue="1300" sellvalue="1800"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-949" pricereference="35" costvalue="1500" sellvalue="2000"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-950" pricereference="10" costvalue="1100" sellvalue="1434"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-950" pricereference="20" costvalue="2000" sellvalue="2000"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-950" pricereference="30" costvalue="3000" sellvalue="3000"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-950" pricereference="40" costvalue="4000" sellvalue="4000"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-950" pricereference="35" costvalue="5000" sellvalue="5000"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-951" pricereference="10" costvalue="600" sellvalue="600"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-951" pricereference="20" costvalue="1000" sellvalue="1200"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-951" pricereference="30" costvalue="1100" sellvalue="1300"></ReplacementPrice> <ReplacementPrice itemretailercode="866-0905-951" pricereference="40" costvalue="1200" sellvalue="1400"></ReplacementPrice> </ReplacementPrices>10">
Files from the Confluence page
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article