The Product data model with variants
A product with variants may appear similar to a product without variants at first glance. However, if the Collection Variants
is not empty, it contains a list of the variants. These variants have the same element contract as the root product, but with some notable differences.
Schema: Product with variants
An example product (with variants)
{ "Id": 31883770, "Name": "Delta t-shirt", "Description": "T-shirt från MINIMUM. Rak modell med rundad hals. ", "PartNo": "", "SubHeader": "", "Manufacturer": { "Id": 25030, "Name": "Minimum", "PartNo": "", "LogoPath": "", "LogoKey": null, "UniqueName": "Minimum" }, "Image": null, "CampaignImage": null, "LargeImage": null, "ThumbnailImage": null, "Files": [], "FlagIdSeed": "917,915,1001", "Price": 240.00, "PriceCatalog": null, "PriceRecommended": null, "PriceFreight": null, "PriceFreightVatRate": null, "VatRate": 1.25, "RecommendedQuantity": 1.000, "OnHand": { "Value": 10.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": 0, "LastChecked": null, "IsActive": true, "IsReturnable": false, "Info": null }, "OnHandStore": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": false, "Info": null }, "OnHandSupplier": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": false, "Info": null }, "Variants": [ { "Id": 31883770, "Name": "Adobe Rose, S", "Description": "T-shirt från MINIMUM. Rak modell med rundad hals. ", "PartNo": "124480222-S-ROSE", "SubHeader": "", "Manufacturer": { "Id": 25030, "Name": "Minimum", "PartNo": "124480222-S-ROSE", "LogoPath": "", "LogoKey": null, "UniqueName": "Minimum" }, "Image": null, "CampaignImage": null, "LargeImage": null, "ThumbnailImage": null, "Files": [], "FlagIdSeed": "", "Price": 240.00, "PriceCatalog": null, "PriceRecommended": null, "PriceFreight": null, "PriceFreightVatRate": null, "VatRate": 1.25, "RecommendedQuantity": 1.000, "OnHand": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandStore": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandSupplier": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "Variants": null, "PriceListId": 1, "Key": "f7e9a96c-eb29-48fa-906b-852279f93bdf", "Updated": "/Date(1527770280000+0200)/", "NavigationNodeKey": null, "CategoryId": null, "CategoryName": null, "ImageKey": "7c63e89d-b131-4b05-8840-ebaa1a186ac4", "VariantParametrics": [ { "Name": "Färg", "Value": "Adobe Rose", "Id": 14113, "ValueId": 53535, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "Adobe Rose", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 1 }, { "Name": "Storlek", "Value": "S", "Id": 14314, "ValueId": 53534, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "S", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 2 } ], "StatusId": 1, "MetaTags": "", "MetaDescription": "", "VariantName": "Delta t-shirt", "DescriptionHeader": "", "UniqueName": "delta-t-shirt-31883770", "StockDisplayBreakPoint": null, "Parametrics": [], "Families": null, "IsBuyable": true, "SubDescription": "", "Uom": "st", "UomCount": 1.000, "EanCode": null, "Type": 1, "Categories": null, "IsRecommendedQuantityFixed": false, "PopularityRank": null, "CostPurchase": 0.00, "CostUnit": 0.00, "Title": null, "ActualWeight": 0.00, "IsDropShipOnly": false, "Synonyms": null, "IsSubscribable": false, "UnspscCode": null, "PriceStandard": null, "Width": null, "Height": null, "Depth": null }, { "Id": 31883771, "Name": "Adobe Rose, M", "Description": "T-shirt från MINIMUM. Rak modell med rundad hals. ", "PartNo": "124480222-M-ROSE", "SubHeader": "", "Manufacturer": { "Id": 25030, "Name": "Minimum", "PartNo": "124480222-M-ROSE", "LogoPath": "", "LogoKey": null, "UniqueName": "Minimum" }, "Image": null, "CampaignImage": null, "LargeImage": null, "ThumbnailImage": null, "Files": [ { "Id": 11, "Type": 1, "Path": null, "Name": "", "Description": "", "Key": "e9e10c69-e410-4950-b0b8-d6595e88976f", "Extension": ".jpg", "Code": "Additional" } ], "FlagIdSeed": "", "Price": 240.00, "PriceCatalog": null, "PriceRecommended": null, "PriceFreight": null, "PriceFreightVatRate": null, "VatRate": 1.25, "RecommendedQuantity": 1.000, "OnHand": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandStore": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandSupplier": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "Variants": null, "PriceListId": 1, "Key": "dd851207-bd92-4048-90f1-2c50aa8dcd26", "Updated": "/Date(1527770280000+0200)/", "NavigationNodeKey": null, "CategoryId": null, "CategoryName": null, "ImageKey": "6f525f31-76e9-46b3-93c3-a3fe080b9ca9", "VariantParametrics": [ { "Name": "Färg", "Value": "Adobe Rose", "Id": 14113, "ValueId": 53535, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "Adobe Rose", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 1 }, { "Name": "Storlek", "Value": "M", "Id": 14314, "ValueId": 53536, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "M", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 2 } ], "StatusId": 1, "MetaTags": "", "MetaDescription": "", "VariantName": "Delta t-shirt", "DescriptionHeader": "", "UniqueName": "delta-t-shirt-31883771", "StockDisplayBreakPoint": null, "Parametrics": [], "Families": null, "IsBuyable": true, "SubDescription": "", "Uom": "st", "UomCount": 1.000, "EanCode": null, "Type": 1, "Categories": null, "IsRecommendedQuantityFixed": false, "PopularityRank": null, "CostPurchase": 0.00, "CostUnit": 0.00, "Title": null, "ActualWeight": 0.00, "IsDropShipOnly": false, "Synonyms": null, "IsSubscribable": false, "UnspscCode": null, "PriceStandard": null, "Width": null, "Height": null, "Depth": null }, { "Id": 31883772, "Name": "Adobe Rose, L", "Description": "T-shirt från MINIMUM. Rak modell med rundad hals. ", "PartNo": "124480222-L-ROSE", "SubHeader": "", "Manufacturer": { "Id": 25030, "Name": "Minimum", "PartNo": "124480222-L-ROSE", "LogoPath": "", "LogoKey": null, "UniqueName": "Minimum" }, "Image": null, "CampaignImage": null, "LargeImage": null, "ThumbnailImage": null, "Files": [], "FlagIdSeed": "", "Price": 240.00, "PriceCatalog": null, "PriceRecommended": null, "PriceFreight": null, "PriceFreightVatRate": null, "VatRate": 1.25, "RecommendedQuantity": 1.000, "OnHand": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandStore": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandSupplier": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "Variants": null, "PriceListId": 1, "Key": "c1f63c94-4ac4-4f51-a50f-e6f71c25c56b", "Updated": "/Date(1527770280000+0200)/", "NavigationNodeKey": null, "CategoryId": null, "CategoryName": null, "ImageKey": "eab6bebf-f1a7-42cc-9ff9-fa085e169f75", "VariantParametrics": [ { "Name": "Färg", "Value": "Adobe Rose", "Id": 14113, "ValueId": 53535, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "Adobe Rose", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 1 }, { "Name": "Storlek", "Value": "L", "Id": 14314, "ValueId": 53537, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "L", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 2 } ], "StatusId": 1, "MetaTags": "", "MetaDescription": "", "VariantName": "Delta t-shirt", "DescriptionHeader": "", "UniqueName": "delta-t-shirt-31883772", "StockDisplayBreakPoint": null, "Parametrics": [], "Families": null, "IsBuyable": true, "SubDescription": "", "Uom": "st", "UomCount": 1.000, "EanCode": null, "Type": 1, "Categories": null, "IsRecommendedQuantityFixed": false, "PopularityRank": null, "CostPurchase": 0.00, "CostUnit": 0.00, "Title": null, "ActualWeight": 0.00, "IsDropShipOnly": false, "Synonyms": null, "IsSubscribable": false, "UnspscCode": null, "PriceStandard": null, "Width": null, "Height": null, "Depth": null }, { "Id": 31883773, "Name": "Adobe Rose, XL", "Description": "T-shirt från MINIMUM. Rak modell med rundad hals. ", "PartNo": "124480222-XL-ROSE", "SubHeader": "", "Manufacturer": { "Id": 25030, "Name": "Minimum", "PartNo": "124480222-XL-ROSE", "LogoPath": "", "LogoKey": null, "UniqueName": "Minimum" }, "Image": null, "CampaignImage": null, "LargeImage": null, "ThumbnailImage": null, "Files": [], "FlagIdSeed": "", "Price": 240.00, "PriceCatalog": null, "PriceRecommended": null, "PriceFreight": null, "PriceFreightVatRate": null, "VatRate": 1.25, "RecommendedQuantity": 1.000, "OnHand": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandStore": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "OnHandSupplier": { "Value": 0.000, "IncomingValue": 0.000, "NextDeliveryDate": null, "LeadtimeDayCount": null, "LastChecked": null, "IsActive": false, "IsReturnable": true, "Info": null }, "Variants": null, "PriceListId": 1, "Key": "f42bbe91-2f73-4bdc-a19f-81c1e75c80d4", "Updated": "/Date(1527770280000+0200)/", "NavigationNodeKey": null, "CategoryId": null, "CategoryName": null, "ImageKey": "6f7282b4-7c17-46ff-a2b6-d643bfa41fb2", "VariantParametrics": [ { "Name": "Färg", "Value": "Adobe Rose", "Id": 14113, "ValueId": 53535, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "Adobe Rose", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 1 }, { "Name": "Storlek", "Value": "XL", "Id": 14314, "ValueId": 53538, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "XL", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 2 } ], "StatusId": 1, "MetaTags": "", "MetaDescription": "", "VariantName": "Delta t-shirt", "DescriptionHeader": "", "UniqueName": "delta-t-shirt-31883773", "StockDisplayBreakPoint": null, "Parametrics": [], "Families": null, "IsBuyable": true, "SubDescription": "", "Uom": "st", "UomCount": 1.000, "EanCode": null, "Type": 1, "Categories": null, "IsRecommendedQuantityFixed": false, "PopularityRank": null, "CostPurchase": 0.00, "CostUnit": 0.00, "Title": null, "ActualWeight": 0.00, "IsDropShipOnly": false, "Synonyms": null, "IsSubscribable": false, "UnspscCode": null, "PriceStandard": null, "Width": null, "Height": null, "Depth": null } ], "PriceListId": 1, "Key": "f7e9a96c-eb29-48fa-906b-852279f93bdf", "Updated": "/Date(1527770280000+0200)/", "NavigationNodeKey": "8cf3381a-4205-4fd8-8d90-034e8fa6e249", "CategoryId": 42507, "CategoryName": "Clothes", "ImageKey": "7c63e89d-b131-4b05-8840-ebaa1a186ac4", "VariantParametrics": [ { "Name": "Material", "Value": "100% bomull", "Id": 14313, "ValueId": 53533, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "100% bomull", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 5 }, { "Name": "Tvättråd", "Value": "40 C", "Id": 14315, "ValueId": null, "Description": "", "ValueDescription": null, "IsPrimary": true, "ValueIdSeed": "", "Value2": "40 C", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 6 }, { "Name": "Storlek/Längd", "Value": "Modellen är 189 cm lång och bär storlek L. Längd bak är 76 cm. I stl L.", "Id": 12717, "ValueId": null, "Description": "", "ValueDescription": null, "IsPrimary": true, "ValueIdSeed": "", "Value2": "Modellen är 189 cm lång och bär storlek L. Längd bak är 76 cm. I stl L.", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 7 } ], "StatusId": 1, "MetaTags": "", "MetaDescription": "", "VariantName": null, "DescriptionHeader": "", "UniqueName": "delta-t-shirt", "StockDisplayBreakPoint": null, "Parametrics": [ { "Name": "Material", "Value": "100% bomull", "Id": 14313, "ValueId": 53533, "Description": "", "ValueDescription": "", "IsPrimary": true, "ValueIdSeed": "", "Value2": "100% bomull", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 5 }, { "Name": "Tvättråd", "Value": "40 C", "Id": 14315, "ValueId": null, "Description": "", "ValueDescription": null, "IsPrimary": true, "ValueIdSeed": "", "Value2": "40 C", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 6 }, { "Name": "Storlek/Längd", "Value": "Modellen är 189 cm lång och bär storlek L. Längd bak är 76 cm. I stl L.", "Id": 12717, "ValueId": null, "Description": "", "ValueDescription": null, "IsPrimary": true, "ValueIdSeed": "", "Value2": "Modellen är 189 cm lång och bär storlek L. Längd bak är 76 cm. I stl L.", "Uom": "", "GroupId": 0, "GroupName": null, "SortOrder": 7 } ], "Families": [], "IsBuyable": false, "SubDescription": "", "Uom": "st", "UomCount": 1.000, "EanCode": null, "Type": 1, "Categories": [ { "Id": 42507, "Value": "Clothes", "Code": "clothes" } ], "IsRecommendedQuantityFixed": false, "PopularityRank": null, "CostPurchase": 0.00, "CostUnit": 0.00, "Title": null, "ActualWeight": 0.00, "IsDropShipOnly": false, "Synonyms": null, "IsSubscribable": false, "UnspscCode": null, "PriceStandard": null, "Width": null, "Height": null, "Depth": null }
Product (Root) Level
The Product (root) level includes all the common data for all the variants, and under the Variants field, each variant has its own data. The Product root level have some minor differences depending on how you retrieve the product:
- When fetching the product without a specific variant pre-selected, such as when calling GetProductByUniqueName and providing the common product
UniqueName
. - When fetching a specific variant by calling one of the
GetProduct
methods with a specific variantPartNo
or variantUniqueName
.
The most visible difference is the identifier fields on the root level: PartNo
and Manufacturer.PartNo
, which is empty for the first case above and has the specific variant identifiers in the latter.
Nested Product -> Variant relations are not allowed. A variant cannot contain its own variants.
Product Identifiers
The identifiers for a product with variants differ based on the two scenarios mentioned earlier:
- In the first scenario, the
Id
represents the internal ID of one of the variants (which may change over time based on Norce Commerce's internal indexing of the database). ThePartNo
andManufacturer/PartNo
are empty. TheUniqueName
is the SEO-friendly language-specific name shared by all variants of the product. - In the second scenario, the Id represents the internal ID of the specified variant being requested. The PartNo and Manufacturer/PartNo are the identifiers for the specified variant. The UniqueName is the SEO-friendly language-specific name shared by all variants of the product.
Avoid using Norce's internal ProductId
for indexing the products and variants in other services, like a CMS or an external Search service. Firstly, this id is different in different environments. Also, the internal id that represents the product (root) level on a product with variants might change over time, since this is decided by the internal re-indexing of Norce's data layer. Use PartNo
and UniqueName
instead.
Text Information, Images and Files
The text information, images, and files at the root level contain only information that is the same for all variants in the product cluster.
Parametrics
For products with variants, the Parametrics collection contains all parametrics that are the same for all variants in the product cluster. The VariantParametrics collection is not relevant at the root level.
Flags
The FlagIdSeed
field contains all common flags set at the product level.
Price Information
The price information at the root level for products with variants displays the best price from all variants (i.e., the lowest price). This can be presented as a "from price" in a listing of the whole group of variants.
On hand information
The on-hand information is a summary of all on-hand quantities on all variants in the collection.
Buying information
The buying information should not be used from the root level. Check instead under each variant.
The variant level
The Variants collection contains all variants (depending on the input parameters).
If you, for example, pass in statuses Active and Coming, all variants with status Expiring will not be returned.
Variant identifiers
Id
, PartNo
, Manufacturer/PartNo
, UniqueName
are the identifiers for the variant.
Text information, images and files
Only files, images, and text that are unique to the variant are returned. Shared data with other variants exist only at the root level.
VariantParametrics and Parametrics
The VariantParametrics
collection lists all variant-identifiable parametrics. These are parametrics set up in the variant definition (called Variant types in the admin ui) that are meant to be used when the visitor wants to navigate to the correct variant using drop lists of choices (like color or size).
The Parametrics
collection contains other parametrics unique to the variant. Other shared parametrics exist at the root level.
Flags
The FlagIdSeed
field contains all variant-specific flags that are set, while shared flags exist at the root level.
Price, onhand and buying information
Price, on-hand, and buying information at the variant level contain the information at the root level for products without variants ( see product model).