Basics
Requirement
You must have read the Glossary.
What you will learn
As a basic example we will model a Products table. This will give you a good understanding of:
- Levels
- Identifiers
- Classifications
- Fields
- Matrix
- Screens
- Partitions
To model a new table, you must ask yourself each of these questions:
What will store my table?
Here we want to store products, so name your table Products.
Table's name must always be in plural.
View api example
xml
<Table key="MY_DEMO_PRODUCTS">
<Title>Products</Title>
<Color>BLUE</Color>
<Position>1</Position>
<Schema>
</Schema>
</Table>
1
2
3
4
5
6
7
2
3
4
5
6
7
What does each row represent?
For a Products table the answer is a Product. The answer to this question is the definition of a Level on a table. In this example our products only one Level named Product. Level's name must be in singular.
View api example
xml
<Table key="MY_DEMO_PRODUCTS">
<Title>Products</Title>
<Color>BLUE</Color>
<Position>1</Position>
<Schema>
<Levels>
<Level key="PRODUCT" index="1">
<Title>Product</Title>
</Level>
</Levels>
</Schema>
</Table>
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
How each product is uniquely identified?
Here we are looking for an attribute that has a unique value for each product.
Usually this attribute can be:
Unique values must be stored in Identifiers. Your table must have at least one Identifier and can have up to 5 Identifiers.
The best practice is to display this property in the first columns and to always set it non editable by users:
View api example
xml
<Table key="MY_DEMO_PRODUCTS">
<Title>Products</Title>
<Color>BLUE</Color>
<Position>1</Position>
<Schema>
<Levels>
<Level key="PRODUCT" index="1">
<Title>Product</Title>
</Level>
</Levels>
<Identifiers>
<Identifier key="EAN_13" index="1" level="PRODUCT">
<Title>EAN 13</Title>
</Identifier>
</Identifiers>
</Schema>
</Table>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
How each product is classified?
At first sight it is a trivial question. In the demo products table, we have just added a classification named Typology with this hierarchical structure:
This kind of hierarchical structure is managed in Product-Live by Classifications.
View api example
xml
<Table key="MY_DEMO_PRODUCTS">
<Title>Products</Title>
<Color>BLUE</Color>
<Position>1</Position>
<Schema>
<Levels>
<Level key="PRODUCT" index="1">
<Title>Product</Title>
</Level>
</Levels>
<Identifiers>
<Identifier key="EAN_13" index="1" level="PRODUCT">
<Title>EAN 13</Title>
</Identifier>
</Identifiers>
<Classifications>
<Classification key="TYPOLOGY">
<Title>Typology</Title>
<Categories>
<Category key="HOME_APPLIANCE">
<Title>Home appliance</Title>
</Category>
<Category key="WASHING_MACHINE" parent="HOME_APPLIANCE">
<Title>Washing machine</Title>
</Category>
<Category key="FRIDGE" parent="HOME_APPLIANCE">
<Title>Fridge</Title>
</Category>
<Category key="LAPTOP" parent="HOME_APPLIANCE">
<Title>Laptop</Title>
</Category>
</Categories>
</Classification>
</Classifications>
</Schema>
</Table>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
In practice this is the most difficult question to answer, because there is not only one response.
Usually you can think about three classifications:
- A purchase classification used in your legacy systems like an ERP
- A typology classification that gives attributes specific to categories
- A sale classification used in your website
Purchase classification
An example would be as follow:
- Purchase classification
- Ready to wear
- Top
- T-Shirts
- Bottom
- Pants
- Other
- Shoes
- Food
- Top
- Ready to wear
As you can see it is not well classified, this is due to the fact that it as been build with iterations. If you sell products, you already have a system like an ERP that has this type of classification.
Usually there is to many other systems/business that depends on this classification. Even if you a have a project to recast your classification, Product-Live encourage to mirror this classification, without trying to modify it in the first place.
Typology
If you have a system like a PIM or a MDM you have been sensitized to the notion of typology. If not you can fully create this kind of notion with Product-Live.
The goal to define a typology is to define a hierarchical structure of categories, where each categories implies specific fields. These specific fields will then be used as filters in your website to give the best experience to your customers to find your products.
In our example this will be as follow:
- Typology
- Apparel
- Shoes
- Clothing
- T-shirts
- Pants
- Food and beverage
- Energy drink
- Apparel
With these specific fields:
- Gender (men, women, kids) is a Field specific to all products that are classified in Apparel or in sub categories of Apparel.
- New release (yes/no) is a Field specific to all products that are classified in Apparel or in sub categories of Apparel.
- Shoe type (running, lifestyle) is a Field specific to Shoes
- Collar shape (round, v-neck) is a Field specific to T-Shirts
- Closure type (zipper, button) is a Field specific to Pants
- Gifts (yes/no) is a Field common to all categories.
But why gender is not a category? And why round and v-neck are not a sub categories of T-Shirts?
For each categories of the classification Typology, we ask ourself "Does this category implies specific attributes?" and if the answer is yes, this is a category, if the answer is no, then it is an attribute. We will see later that this mindset is not the same when we are dealing with the sale classification.
So here if we ask the question "Does the gender implies new attributes specific to the gender?" the answer is no, then gender is an attribute not a category. "Does the collar shape implies new attributes specific to the collar shape?" the answer is no, then collar shape is an attribute not a sub category.
You might wonder: does it exist a universal typology classification? The answer is no. Many companies like GS1 or Google try to give you an answer, but their answer might not fit with your business.
For example, if you sell shoes but shoes only represent a few part of your products, then you can create a typology shoes with a specific attribute shoe type (running, lifestyle). Now imagine you only sell shoes and you want to give your customers the best experience to find a shoe. Then you should create this categories in the typology classification:
- Shoes
- Running
- Lifestyle
- Soccer
with these specific fields:
- Specific fields to Running:
- Run type (Trail, Shorter, Every day)
- Support level (Elevated, Neutral)
- Shoe feel (Free & Flexible, Soft & Supportive, Springy & Neutral)
- Specific fields to Lifestyle:
- Shoe height (Low top, Medium top, High top)
- Specific to Soccer
- Playing surface (Artificial grass, Firm ground, Turf, Indoor, Multi ground, Indoor court)
- Technology (Nike Flyknit, Nike Lunarlon, Nike FlyEase)
As you can see defining a typology classification is not trivial and has not one universal answer. It depends on your products and also on the experience that you want to give to your customers.
Sale classification
Now if we look at the sale classification on the website it will look like this:
- Sale classification
- New releases
- New for Men
- New for Women
- Men
- Shoes
- Lifestyle
- Running
- Clothing
- T-shirts
- Pants
- Shoes
- Women
- Shoes
- Lifestyle
- Running
- Clothing
- T-shirts
- Pants
- Shoes
- Gifts
- Top gifts
- Gifts for Her
- Gifts for Him
- Gifts for Kids
- Gifts by price
- 150$ & under
- 100$ & under
- Top gifts
- New releases
As you can see this is the same information available that in the typology classification but not displayed the same way. It can be fully deduced by the typology and the common and specific attributes.
In Product-Live we encourage you to create a sale classification and to use formulas to automatically classify your products in the sale classification depending on the typology and specific fields.
You can write rules like "if the product is in typology pants and gender is women then classify it in Sale classification > Women > Clothing > Pants". This will give you the ability to filters products like your customers will do in the website.
Best practice
You must know that you will deal with multiple classification. Do not try to think the classification problem as a unique idea, think about it as multiple classification depending on your needs.
If you already have classifications in legacy systems just mirror it in Product-Live, and then create new better classification in Product-Live. By table you can create up to 5 classifications.
What are the other properties?
Now that we know how or products are identified and classified, we can define other properties. All other properties are managed in Product-Live with Fields.
Common fields to all products
For example all products have a title and a description:
Title EN and Description EN are Fields with types Single line text and Long text.
View api example
xml
<Table key="MY_DEMO_PRODUCTS">
<Title>Products</Title>
<Color>BLUE</Color>
<Position>1</Position>
<Schema>
<Levels>
<Level key="PRODUCT" index="1">
<Title>Product</Title>
</Level>
</Levels>
<Identifiers>
<Identifier key="EAN_13" index="1" level="PRODUCT">
<Title>EAN 13</Title>
</Identifier>
</Identifiers>
<Classifications>
<Classification key="TYPOLOGY">
<Title>Typology</Title>
<Categories>
<Category key="HOME_APPLIANCE">
<Title>Home appliance</Title>
</Category>
<Category key="WASHING_MACHINE" parent="HOME_APPLIANCE">
<Title>Washing machine</Title>
</Category>
<Category key="FRIDGE" parent="HOME_APPLIANCE">
<Title>Fridge</Title>
</Category>
<Category key="LAPTOP" parent="HOME_APPLIANCE">
<Title>Laptop</Title>
</Category>
</Categories>
</Classification>
</Classifications>
<!--
All other properties are Fields
The order does not matter
-->
<Fields>
<Field key="TITLE_EN" type="SINGLE-LINE-TEXT" level="PRODUCT">
<Title>Title EN</Title>
</Field>
<Field key="DESCRIPTION_EN" type="LONG-TEXT" level="PRODUCT">
<Title>Description EN</Title>
</Field>
</Fields>
<!-- Matrix defines if a Field is common to all items or specific to a category -->
<Matrix>
<Common>
<Field key="TITLE_EN" />
<Field key="DESCRIPTION_EN" />
<!--
Identifiers and Classifications must not be used here because they are only common properties, they cannot be specific.
-->
</Common>
</Matrix>
</Schema>
</Table>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Best practice
For text fields, add a suffix with the language code, for example here EN means english. For more information about how to set multilingual schema, view the tutorial Multilingual.
Next all our products have a life cycle, a main color and a country of origin. These two attributes are Fields with type Single Select:
View api example
xml
<Table key="MY_DEMO_PRODUCTS">
<Title>Products</Title>
<Color>BLUE</Color>
<Position>1</Position>
<Schema>
<Levels>
<Level key="PRODUCT" index="1">
<Title>Product</Title>
</Level>
</Levels>
<Identifiers>
<Identifier key="EAN_13" index="1" level="PRODUCT">
<Title>EAN 13</Title>
</Identifier>
</Identifiers>
<Classifications>
<Classification key="TYPOLOGY">
<Title>Typology</Title>
<Categories>
<Category key="HOME_APPLIANCE">
<Title>Home appliance</Title>
</Category>
<Category key="WASHING_MACHINE" parent="HOME_APPLIANCE">
<Title>Washing machine</Title>
</Category>
<Category key="FRIDGE" parent="HOME_APPLIANCE">
<Title>Fridge</Title>
</Category>
<Category key="LAPTOP" parent="HOME_APPLIANCE">
<Title>Laptop</Title>
</Category>
</Categories>
</Classification>
</Classifications>
<Fields>
<Field key="TITLE_EN" type="SINGLE-LINE-TEXT" level="PRODUCT">
<Title>Title EN</Title>
</Field>
<Field key="DESCRIPTION_EN" type="LONG-TEXT" level="PRODUCT">
<Title>Description EN</Title>
</Field>
<Field key="LIFE_CYCLE" type="SINGLE-SELECT" level="PRODUCT">
<Title>Life cycle</Title>
<Options>
<Option key="NEW" color="PURPLE">
<Title>New</Title>
</Option>
<Option key="RENEWED" color="YELLOW">
<Title>Renewed</Title>
</Option>
</Options>
</Field>
<Field key="MAIN_COLOR" type="SINGLE-SELECT" level="PRODUCT">
<Title>Main color</Title>
<Options>
<Option key="RED">
<Title>Red</Title>
</Option>
<Option key="GREEN">
<Title>Green</Title>
</Option>
<Option key="BLUE">
<Title>Blue</Title>
</Option>
<Option key="WHITE">
<Title>White</Title>
</Option>
<Option key="BLACK">
<Title>Black</Title>
</Option>
<Option key="GREY">
<Title>Grey</Title>
</Option>
</Options>
</Field>
<Field key="COUNTRY_OF_ORIGIN" type="SINGLE-SELECT" level="PRODUCT">
<Title>Country of origin</Title>
<Options>
<Option key="GERMANY">
<Title>Germany</Title>
</Option>
<Option key="FRANCE">
<Title>France</Title>
</Option>
<Option key="BULGARIA">
<Title>Bulgaria</Title>
</Option>
<Option key="CHINA">
<Title>China</Title>
</Option>
<Option key="KOREA">
<Title>Korea</Title>
</Option>
<Option key="JAPAN">
<Title>Japan</Title>
</Option>
</Options>
</Field>
</Fields>
<Matrix>
<Common>
<Field key="TITLE_EN" />
<Field key="DESCRIPTION_EN" />
<Field key="LIFE_CYCLE" />
<Field key="MAIN_COLOR" />
<Field key="COUNTRY_OF_ORIGIN" />
</Common>
</Matrix>
</Schema>
</Table>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
Best practice
For fields that represent a status, like the life cycle field, you can set colors for each options. Use it to give a better readability to users.
Next all our products have a:
- Width
- Height
- Depth
- Stock
View api example
xml
<Table key="MY_DEMO_PRODUCTS">
<Title>Products</Title>
<Color>BLUE</Color>
<Position>1</Position>
<Schema>
<Levels>
<Level key="PRODUCT" index="1">
<Title>Product</Title>
</Level>
</Levels>
<Identifiers>
<Identifier key="EAN_13" index="1" level="PRODUCT">
<Title>EAN 13</Title>
</Identifier>
</Identifiers>
<Classifications>
<Classification key="TYPOLOGY">
<Title>Typology</Title>
<Categories>
<Category key="HOME_APPLIANCE">
<Title>Home appliance</Title>
</Category>
<Category key="WASHING_MACHINE" parent="HOME_APPLIANCE">
<Title>Washing machine</Title>
</Category>
<Category key="FRIDGE" parent="HOME_APPLIANCE">
<Title>Fridge</Title>
</Category>
<Category key="LAPTOP" parent="HOME_APPLIANCE">
<Title>Laptop</Title>
</Category>
</Categories>
</Classification>
</Classifications>
<Fields>
<Field key="TITLE_EN" type="SINGLE-LINE-TEXT" level="PRODUCT">
<Title>Title EN</Title>
</Field>
<Field key="DESCRIPTION_EN" type="LONG-TEXT" level="PRODUCT">
<Title>Description EN</Title>
</Field>
<Field key="LIFE_CYCLE" type="SINGLE-SELECT" level="PRODUCT">
<Title>Life cycle</Title>
<Options>
<Option key="NEW" color="GREEN">
<Title>New</Title>
</Option>
<Option key="RENEWED" color="BLUE">
<Title>Renewed</Title>
</Option>
<Option key="ENDED" color="RED">
<Title>Ended</Title>
</Option>
</Options>
</Field>
<Field key="MAIN_COLOR" type="SINGLE-SELECT" level="PRODUCT">
<Title>Main color</Title>
<Options>
<Option key="RED">
<Title>Red</Title>
</Option>
<Option key="GREEN">
<Title>Green</Title>
</Option>
<Option key="BLUE">
<Title>Blue</Title>
</Option>
<Option key="WHITE">
<Title>White</Title>
</Option>
<Option key="BLACK">
<Title>Black</Title>
</Option>
<Option key="GREY">
<Title>Grey</Title>
</Option>
</Options>
</Field>
<Field key="COUNTRY_OF_ORIGIN" type="SINGLE-SELECT" level="PRODUCT">
<Title>Country of origin</Title>
<Options>
<Option key="GERMANY">
<Title>Germany</Title>
</Option>
<Option key="FRANCE">
<Title>France</Title>
</Option>
<Option key="BULGARIA">
<Title>Bulgaria</Title>
</Option>
<Option key="CHINA">
<Title>China</Title>
</Option>
<Option key="KOREA">
<Title>Korea</Title>
</Option>
<Option key="JAPAN">
<Title>Japan</Title>
</Option>
</Options>
</Field>
<Field key="WIDTH_MM" type="NUMBER" level="PRODUCT">
<Title>Width</Title>
<Suffix>mm</Suffix>
<Precision>0</Precision>
</Field>
<Field key="HEIGHT_MM" type="NUMBER" level="PRODUCT">
<Title>Height</Title>
<Suffix>mm</Suffix>
<Precision>0</Precision>
</Field>
<Field key="DEPTH_MM" type="NUMBER" level="PRODUCT">
<Title>Depth</Title>
<Suffix>mm</Suffix>
<Precision>0</Precision>
</Field>
<Field key="WEIGHT_KG" type="NUMBER" level="PRODUCT">
<Title>Weight</Title>
<Suffix>kg</Suffix>
<Precision>2</Precision>
</Field>
<Field key="STOCK" type="NUMBER" level="PRODUCT">
<Title>Stock</Title>
<Precision>0</Precision>
</Field>
</Fields>
<Matrix>
<Common>
<Field key="TITLE_EN" />
<Field key="DESCRIPTION_EN" />
<Field key="LIFE_CYCLE" />
<Field key="MAIN_COLOR" />
<Field key="COUNTRY_OF_ORIGIN" />
<Field key="WIDTH_MM" />
<Field key="HEIGHT_MM" />
<Field key="DEPTH_MM" />
<Field key="WEIGHT_KG" />
<Field key="STOCK" />
</Common>
</Matrix>
</Schema>
</Table>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
Best practice
For each fields with type Number, you can set a Precision (number of decimal places displayed), a Prefix and a Suffix than can be used to display units or currencies.
You can think many other common fields like:
- Main image (field type = Image)
- First arrival date (field type = Date Time)
- Price (field type = Number)
- ...
Specific fields to categories
A Laptop, a Fridge and a Washing machine does not have the same properties.
For Laptops we will create these specific Fields:
Notice that these specific fields can only be seen if the user filter on Typology = Laptop
View api example
xml
<Table key="MY_DEMO_PRODUCTS">
<Title>Products</Title>
<Color>BLUE</Color>
<Position>1</Position>
<Schema>
<Levels>
<Level key="PRODUCT" index="1">
<Title>Product</Title>
</Level>
</Levels>
<Identifiers>
<Identifier key="EAN_13" index="1" level="PRODUCT">
<Title>EAN 13</Title>
</Identifier>
</Identifiers>
<Classifications>
<Classification key="TYPOLOGY">
<Title>Typology</Title>
<Categories>
<Category key="HOME_APPLIANCE">
<Title>Home appliance</Title>
</Category>
<Category key="WASHING_MACHINE" parent="HOME_APPLIANCE">
<Title>Washing machine</Title>
</Category>
<Category key="FRIDGE" parent="HOME_APPLIANCE">
<Title>Fridge</Title>
</Category>
<Category key="LAPTOP" parent="HOME_APPLIANCE">
<Title>Laptop</Title>
</Category>
</Categories>
</Classification>
</Classifications>
<Fields>
<Field key="TITLE_EN" type="SINGLE-LINE-TEXT" level="PRODUCT">
<Title>Title EN</Title>
</Field>
<Field key="DESCRIPTION_EN" type="LONG-TEXT" level="PRODUCT">
<Title>Description EN</Title>
</Field>
<Field key="LIFE_CYCLE" type="SINGLE-SELECT" level="PRODUCT">
<Title>Life cycle</Title>
<Options>
<Option key="NEW" color="GREEN">
<Title>New</Title>
</Option>
<Option key="RENEWED" color="BLUE">
<Title>Renewed</Title>
</Option>
<Option key="ENDED" color="RED">
<Title>Ended</Title>
</Option>
</Options>
</Field>
<Field key="MAIN_COLOR" type="SINGLE-SELECT" level="PRODUCT">
<Title>Main color</Title>
<Options>
<Option key="RED">
<Title>Red</Title>
</Option>
<Option key="GREEN">
<Title>Green</Title>
</Option>
<Option key="BLUE">
<Title>Blue</Title>
</Option>
<Option key="WHITE">
<Title>White</Title>
</Option>
<Option key="BLACK">
<Title>Black</Title>
</Option>
<Option key="GREY">
<Title>Grey</Title>
</Option>
</Options>
</Field>
<Field key="COUNTRY_OF_ORIGIN" type="SINGLE-SELECT" level="PRODUCT">
<Title>Country of origin</Title>
<Options>
<Option key="GERMANY">
<Title>Germany</Title>
</Option>
<Option key="FRANCE">
<Title>France</Title>
</Option>
<Option key="BULGARIA">
<Title>Bulgaria</Title>
</Option>
<Option key="CHINA">
<Title>China</Title>
</Option>
<Option key="KOREA">
<Title>Korea</Title>
</Option>
<Option key="JAPAN">
<Title>Japan</Title>
</Option>
</Options>
</Field>
<Field key="WIDTH_MM" type="NUMBER" level="PRODUCT">
<Title>Width</Title>
<Suffix>mm</Suffix>
<Precision>0</Precision>
</Field>
<Field key="HEIGHT_MM" type="NUMBER" level="PRODUCT">
<Title>Height</Title>
<Suffix>mm</Suffix>
<Precision>0</Precision>
</Field>
<Field key="DEPTH_MM" type="NUMBER" level="PRODUCT">
<Title>Depth</Title>
<Suffix>mm</Suffix>
<Precision>0</Precision>
</Field>
<Field key="WEIGHT_KG" type="NUMBER" level="PRODUCT">
<Title>Weight</Title>
<Suffix>kg</Suffix>
<Precision>2</Precision>
</Field>
<Field key="STOCK" type="NUMBER" level="PRODUCT">
<Title>Stock</Title>
<Precision>0</Precision>
</Field>
<!--
We only present two fields to explain the logic
first add the fields in Fields, regardless they are common or specific
-->
<Field key="HARD_DRIVE_TYPE" type="SINGLE-SELECT" level="PRODUCT">
<Title>Hard drive type</Title>
<Options>
<Option key="HDD">
<Title>HDD</Title>
</Option>
<Option key="SSD">
<Title>SSD</Title>
</Option>
<Option key="HDD_SSD">
<Title>HDD & SSD</Title>
</Option>
</Options>
</Field>
<Field key="CONNECTORS" type="MULTIPLE-SELECT-QUANTIFIED" level="PRODUCT">
<Title>Connectors</Title>
<Options>
<Option key="USB">
<Title>USB</Title>
</Option>
<Option key="USB-C">
<Title>USB C</Title>
</Option>
<Option key="VGA">
<Title>VGA</Title>
</Option>
<Option key="HDMI">
<Title>HDMI</Title>
</Option>
</Options>
</Field>
</Fields>
<Matrix>
<Common>
<Field key="TITLE_EN" />
<Field key="DESCRIPTION_EN" />
<Field key="LIFE_CYCLE" />
<Field key="MAIN_COLOR" />
<Field key="COUNTRY_OF_ORIGIN" />
<Field key="WIDTH_MM" />
<Field key="HEIGHT_MM" />
<Field key="DEPTH_MM" />
<Field key="WEIGHT_KG" />
<Field key="STOCK" />
</Common>
<!-- Then for each category where there are specific fields add a Specific bloc -->
<Specific classification="TYPOLOGY" category="LAPTOP">
<Field key="HARD_DRIVE_TYPE" />
<Field key="CONNECTORS" />
</Specific>
</Matrix>
</Schema>
</Table>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
With the same logic, we can define fields specific to Washing machines (only visible if the user filter on Typology = Washing machines):
And fields specific to Fridges (only visible if the user filter on Typology = Fridges):
What are the rules that define that a product is compliant?
In Product-Live you can use Conditional Formatting to answer this question.
A Conditional Formatting is represented by a column on which you can configure different statuses, and rules that activate each status.
For example here we have a column Data compliance that can take three statuses: Valid in green, Invalid in red and Recommended in orange.
These status are fully customizable, you can name it has you want, and create more than 3 status.
As you can see, if the status is Invalid in red or Recommended in orange then some cells appears to be in red or orange. This allows to simply view which cells have a problem.
The rules associated with each status are displayed to the user when he clicks on a cell on the conditional formatting column. Then he can click on the attribute to get positioned on the right cell, and here he can read more about what left to be done to get the cell valid.
You can view this feature has an assistant for your users, an assistant that will give them what left to be done to go to the next step.
Then you can use these status to define :
- which data must be exported or not
- which data can be send by suppliers
- model blocking (a product must be valid before going to the next step) or non blocking process (if a product has a recommended status, then allow to export items but with a warning)
View api example
xml
<Table key="MY_DEMO_PRODUCTS">
<Title>Products</Title>
<Color>BLUE</Color>
<Position>1</Position>
<Schema>
<Levels />
<Identifiers />
<Classifications />
<Fields />
<Matrix />
<Conditional-Formattings>
<Conditional-Formatting key="DATA_COMPLIANCE" level="PRODUCT">
<Title>Data compliance</Title>
<Description>Data compliance, click on a cell to find out what remains to be done</Description>
<Default-Status key="VALID">
<Title>Valid</Title>
<Color>GREEN</Color>
</Default-Status>
<Statuses>
<Status key="INVALID">
<Title>Invalid</Title>
<Color>RED</Color>
<Priority>1</Priority>
<Rules>
<Common>
<Identifier key="EAN_13">
<Rule-Required />
<Rule-Barcode type="EAN13" />
</Identifier>
<Classification key="TYPOLOGY">
<Rule-Required />
<Rule-Is-Leaf />
</Classification>
<Field key="TITLE_EN">
<Rule-Required />
<Rule-Min-Length min="3" />
</Field>
<Field key="MAIN_COLOR">
<Rule-Required />
</Field>
<Field key="COUNTRY_OF_ORIGIN">
<Rule-Required />
</Field>
<Field key="MAIN_VIEW">
<Rule-Required />
</Field>
<Field key="STORE_PRICE">
<Rule-Must-Be-Greater-Than-Another-Field field="STARTING_PRICE" />
</Field>
</Common>
<Specific classification="TYPOLOGY" category="FRIDGE">
<Field key="ENERGY_CLASS">
<Rule-Required />
</Field>
<Field key="SOUND_LEVEL">
<Rule-Required />
</Field>
<Field key="CHILD_SAFETY">
<Rule-Required />
</Field>
</Specific>
<Specific classification="TYPOLOGY" category="WASHING_MACHINE">
<Field key="ENERGY_CLASS">
<Rule-Required />
</Field>
</Specific>
<Specific classification="TYPOLOGY" category="LAPTOP">
<Field key="HARD_DRIVE_TYPE">
<Rule-Required />
</Field>
<Field key="CONNECTORS">
<Rule-Required />
</Field>
<Field key="BATTERY_CAPACITY">
<Rule-Required-If-Another-Field-Is-Not-Empty field="BATTERY_INCLUDED" />
</Field>
</Specific>
</Rules>
</Status>
<Status key="RECOMMENDED">
<Title>Recommended</Title>
<Color>ORANGE</Color>
<Priority>2</Priority>
<Rules>
<Common>
<Field key="TITLE_EN">
<Rule-Min-Length min="5" />
<Rule-Max-Length max="40" />
</Field>
<Field key="DESCRIPTION_EN">
<Rule-Required />
</Field>
<Field key="WIDTH_MM">
<Rule-Required />
</Field>
<Field key="HEIGHT_MM">
<Rule-Required />
</Field>
<Field key="DEPTH_MM">
<Rule-Required />
</Field>
<Field key="WEIGHT_KG">
<Rule-Required />
</Field>
</Common>
</Rules>
</Status>
</Statuses>
</Conditional-Formatting>
</Conditional-Formattings>
</Schema>
</Table>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
How all these properties must be displayed to users?
In Product-Live you can use Screens to answer this question.
On a screen you define:
- The order of sections which are graphical group of columns
- The order of columns relative to sections
- The size of each column
- If the column is editable or not.
- If the column is fixed.
Then you can set permissions on each screens to define which group of users are able to access each screen.
Usually screens names can be:
- A name of an existing system, like ERP or PIM... where the screen ERP only show the columns of the ERP, and the screen PIM only show the columns of the PIM
- A name of a team or a business step like Listing or Enrichment... where the screen Listing only show the columns required for listing products (usually the columns of the ERP), and the screen Enrichment is a mix of the listing screens (like EAN, Typology, Title... but not editable) and columns for the enrichment (usually the columns of the PIM)
- It is also a best practice to have a screen "All attributes" and a screen "Media" if you need to handle a lot of media.
Best practice
Use screens to define rights on columns
View api example
xml
<Table key="MY_DEMO_PRODUCTS">
<Title>Products</Title>
<Color>BLUE</Color>
<Position>1</Position>
<Schema>
<Levels />
<Identifiers />
<Classifications />
<Fields />
<Matrix />
<Conditional-Formattings />
<Sections>
<Section key="INFORMATIONS">
<Title>Informations</Title>
</Section>
<Section key="LOGISTIC">
<Title>Logistic</Title>
</Section>
<Section key="PRICING">
<Title>Pricing</Title>
</Section>
<Section key="MEDIA">
<Title>Media</Title>
</Section>
<Section key="SPECIFICS_FRIDGE">
<Title>Specifics fridge</Title>
</Section>
<Section key="SPECIFICS_WASHING_MACHINE">
<Title>Specifics washing machine</Title>
</Section>
<Section key="SPECIFICS_LAPTOP">
<Title>Specifics laptop</Title>
</Section>
</Sections>
<Screens>
<Screen key="ALL_COLUMNS" level="PRODUCT">
<Title>All columns</Title>
<Position>1</Position>
<Grid>
<Line-Height>SHORT</Line-Height>
<Common>
<Section key="INFORMATIONS" position="1">
<Column-Identifier key="EAN_13" position="1" read-only="true" fixed="true" />
<Column-Field key="MAIN_VIEW" position="2" width="SMALL" fixed="true" />
<Column-Conditional-Formatting key="DATA_COMPLIANCE" position="3" fixed="true" />
<Column-Classification key="TYPOLOGY" position="4" />
<Column-Field key="TITLE_EN" position="5" width="MEDIUM" />
<Column-Field key="TITLE_FR" position="6" width="MEDIUM" />
<Column-Field key="DESCRIPTION_EN" position="7" width="LARGE" />
<Column-Field key="DESCRIPTION_FR" position="8" width="LARGE" />
<Column-Field key="LIFE_CYCLE" position="9" width="SMALL" />
<Column-Field key="MAIN_COLOR" position="10" width="SMALL" />
<Column-Field key="INSTRUCTIONS" position="11" />
</Section>
<Section key="LOGISTIC" position="2">
<Column-Field key="COUNTRY_OF_ORIGIN" position="1" width="SMALL" />
<Column-Field key="WIDTH_MM" position="2" width="SMALL" />
<Column-Field key="HEIGHT_MM" position="3" width="SMALL" />
<Column-Field key="DEPTH_MM" position="4" width="SMALL" />
<Column-Field key="WEIGHT_KG" position="5" width="SMALL" />
<Column-Field key="STOCK" position="6" width="SMALL" />
<Column-Field key="NEXT_ARRIVAL" position="7" width="SMALL" />
</Section>
<Section key="PRICING" position="3">
<Column-Field key="STARTING_PRICE" position="1" width="SMALL" />
<Column-Field key="STORE_PRICE" position="2" width="SMALL" />
</Section>
</Common>
<Specific classification="TYPOLOGY" category="FRIDGE">
<Section key="SPECIFICS_FRIDGE" position="1">
<Column-Field key="ENERGY_CLASS" position="1" />
<Column-Field key="SOUND_LEVEL" position="2" />
<Column-Field key="CHILD_SAFETY" position="3" />
<Column-Field key="EGG_TRAY" position="4" />
<Column-Field key="ICE_TRAY" position="5" />
</Section>
<Section key="MEDIA" position="2">
<Column-Field key="FRONT_VIEW" position="1" width="SMALL" />
<Column-Field key="ENERGY_LABEL" position="2" width="SMALL" />
<Column-Field key="INSTALLATION_DIAGRAM" position="3" width="SMALL" />
</Section>
</Specific>
<Specific classification="TYPOLOGY" category="WASHING_MACHINE">
<Section key="SPECIFICS_WASHING_MACHINE" position="1">
<Column-Field key="ENERGY_CLASS" position="1" />
<Column-Field key="SOUND_LEVEL" position="2" />
<Column-Field key="CHILD_SAFETY" position="3" />
<Column-Field key="DELAYED_START" position="4" />
<Column-Field key="DELAYED_END" position="5" />
</Section>
<Section key="MEDIA" position="2">
<Column-Field key="FRONT_VIEW" position="1" width="SMALL" />
<Column-Field key="ENERGY_LABEL" position="2" width="SMALL" />
<Column-Field key="INSTALLATION_DIAGRAM" position="3" width="SMALL" />
<Column-Field key="IN_SITUATION_1" position="4" width="SMALL" />
<Column-Field key="IN_SITUATION_2" position="5" width="SMALL" />
</Section>
</Specific>
<Specific classification="TYPOLOGY" category="LAPTOP">
<Section key="SPECIFICS_LAPTOP" position="1">
<Column-Field key="HARD_DRIVE_TYPE" position="1" />
<Column-Field key="CONNECTORS" position="2" />
<Column-Field key="BATTERY_INCLUDED" position="3" />
<Column-Field key="BATTERY_CAPACITY" position="4" />
</Section>
<Section key="MEDIA" position="2">
<Column-Field key="BACK_VIEW" position="1" width="SMALL" />
<Column-Field key="LEFT_VIEW" position="2" width="SMALL" />
<Column-Field key="RIGHT_VIEW" position="3" width="SMALL" />
</Section>
</Specific>
</Grid>
</Screen>
<Screen key="MEDIA" level="PRODUCT">
<Title>Media</Title>
<Position>2</Position>
<Grid>
<Line-Height>EXTRA_TALL</Line-Height>
<Common>
<Section key="INFORMATIONS" position="1">
<Column-Identifier key="EAN_13" position="1" read-only="true" fixed="true" />
<Column-Conditional-Formatting key="DATA_COMPLIANCE" position="2" fixed="true" />
<Column-Classification key="TYPOLOGY" position="3" read-only="true" fixed="true" />
<Column-Field key="TITLE_EN" position="4" read-only="true" width="LARGE" fixed="true" />
<Column-Field key="DESCRIPTION_EN" position="5" read-only="true" width="LARGE" />
<Column-Field key="LIFE_CYCLE" position="6" read-only="true" width="SMALL" />
<Column-Field key="MAIN_COLOR" position="7" read-only="true" width="SMALL" />
</Section>
<Section key="MEDIA" position="2">
<Column-Field key="INSTRUCTIONS" position="1" />
<Column-Field key="MAIN_VIEW" position="2" width="LARGE" />
</Section>
</Common>
<Specific classification="TYPOLOGY" category="FRIDGE">
<Section key="MEDIA" position="2">
<Column-Field key="FRONT_VIEW" position="1" width="LARGE" />
<Column-Field key="ENERGY_LABEL" position="2" width="LARGE" />
<Column-Field key="INSTALLATION_DIAGRAM" position="3" width="LARGE" />
</Section>
</Specific>
<Specific classification="TYPOLOGY" category="WASHING_MACHINE">
<Section key="MEDIA" position="2">
<Column-Field key="FRONT_VIEW" position="1" width="LARGE" />
<Column-Field key="ENERGY_LABEL" position="2" width="LARGE" />
<Column-Field key="INSTALLATION_DIAGRAM" position="3" width="LARGE" />
<Column-Field key="IN_SITUATION_1" position="4" width="LARGE" />
<Column-Field key="IN_SITUATION_2" position="5" width="LARGE" />
</Section>
</Specific>
<Specific classification="TYPOLOGY" category="LAPTOP">
<Section key="MEDIA" position="2">
<Column-Field key="BACK_VIEW" position="1" width="LARGE" />
<Column-Field key="LEFT_VIEW" position="2" width="LARGE" />
<Column-Field key="RIGHT_VIEW" position="3" width="LARGE" />
</Section>
</Specific>
</Grid>
</Screen>
</Screens>
</Schema>
</Table>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
Does all products must be displayed to all users?
Each Item, in this example each product, is associated with one and only one Partition.
Usually partitions are used to model data silos like:
- Active products
- Archived products 2020
- Archived products 2019
- Archived products 2018
Best practice
On large data set, you must use partitions to boost performance on filters.
You can also define permissions on partitions to define which group of users can access which group of items.
View api example
xml
<Table key="MY_DEMO_PRODUCTS">
<Title>Products</Title>
<Color>BLUE</Color>
<Position>1</Position>
<Schema>
<Levels />
<Partitions>
<Partition key="ACTIVES">
<Title>Actives</Title>
</Partition>
<Partition key="ARCHIVED">
<Title>Archived</Title>
</Partition>
</Partitions>
<Identifiers />
<Classifications />
<Fields />
<Matrix />
<Conditional-Formattings />
</Schema>
</Table>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Congratulation!
Now you know how to create a table in Product-Live.
Just remember that every time you need to create a new table, just ask yourself each of the questions defined above.
Next
Now that you know how to model a basic product table, you can:
- Learn about how to model more complex data like multi-levels and items combination
- How to handle multiple languages
- Understand how the life cycle of each attribute / options / categories... are managed