Product Variants
Hoy vamos a resumir las Variantes de Productos y sus conceptos
VariantProduct es un subtipo de Product, incluye una relación con product, llamada baseProduct que (es una referencia Product a través de la pk). A su vez Product tiene un atributo llamado variantType que define el tipo de Variante a nivel de descriptores de Hybris (extiende de ComposedType)
Un ejemplo sencillo
Por un lado tenemos un tipo nuevo Reloj con un atributo nuevo (mecanismo) que extiende de Product
Por otro lado tenemos una variante llamada ColorReloj que extiende de VariantProduct
Si es un atributo que se va a usar en la lógica de nuestro negocio tendremos que declarar mecanismo en Product
Así la variante ColorReloj dispone del atributo color y mecanismo (heredado)
Si el atributo va a ser usado para visualizar, buscar, filtro, ordenación... Nos vale con hacer uso del Sistema de Clasificación de Hybris (Classification). La ventaja es que nos permite tener toda la potencia de los atributos de clasificación.
Con esto se puede generalizar en una regla a la hora de modelar (aunque obviamente habría que estudiar cada caso).
![]() |
Un articulo puede tener múltiples variantes (CC - https://pixabay.com/es/t-shirts-camisas-prendas-de-vestir-154312/) |
Las variantes de productos (Product Variants)
Las variantes (Variants) son productos que entre sí tienen alguna diferencia pero tienen en común un producto base. El ejemplo clásico son los colores y tallas de una prenda de ropa. El producto base es la camisa (puede ser no vendible, es decir, no puedes comprar esa camisa sin elegir talla y/o color) y los variantes pueden ser camisa XL azul; camisa M blanca; camisa ajustada estampado flores...
Variantes usando el modelo de datos de Hybris
Para modelar las variantes que queremos tenemos que tener en cuenta cómo Hybris trabaja la herencia en el modelo de datos y como ha modelado las variantes![]() |
Modelado de las Variantes |
VariantProduct es un subtipo de Product, incluye una relación con product, llamada baseProduct que (es una referencia Product a través de la pk). A su vez Product tiene un atributo llamado variantType que define el tipo de Variante a nivel de descriptores de Hybris (extiende de ComposedType)
Un ejemplo sencillo
![]() |
Variantes - Extensión del modelo de datos |
Por un lado tenemos un tipo nuevo Reloj con un atributo nuevo (mecanismo) que extiende de Product
Por otro lado tenemos una variante llamada ColorReloj que extiende de VariantProduct
¿Qué problema tenemos?
Efectivamente, ColorReloj al heredar de VariantProduct no dispone del atributo mecanismo¿Qué solución tenemos?
Desde mi punto de vista, dos. Depende de si el atributo entra en juego para algún proceso de negocio o se va a utilizar únicamente para visualizar, buscar o filtrar.Si es un atributo que se va a usar en la lógica de nuestro negocio tendremos que declarar mecanismo en Product
![]() |
Variantes - Atributo en la Variante |
Así la variante ColorReloj dispone del atributo color y mecanismo (heredado)
Si el atributo va a ser usado para visualizar, buscar, filtro, ordenación... Nos vale con hacer uso del Sistema de Clasificación de Hybris (Classification). La ventaja es que nos permite tener toda la potencia de los atributos de clasificación.
Con esto se puede generalizar en una regla a la hora de modelar (aunque obviamente habría que estudiar cada caso).
Si vamos a añadir un atributo que impacta en la lógica de negocio modificamos el modelo de datos. Si el atributo no impacta en el negocio lo incluimos a través del Sistema de Clasificación de Hybris
Incluir más variantes
Visto el ejemplo anterior, si queremos incluir una nueva variante CorreaReloj tenemos que preguntarnos ¿queremos que el producto tenga el atributo color? Si es así simplemente debemos hacer que CorreaReloj extienda de ColorReloj
![]() |
Variantes - Nuevo variante Correa |
En el acelerador B2C Apparel tenemos esa relación donde ApparelSizeVariantProduct extiende ApparelStyleVariantProduct así un producto variante con atributo size dispone del atributo style
Productos Multi-dimensionales
No, no hablo de "demoproductos" del "Mundo del Revés".
Un producto multi-dimensional se compone de:
Como vemos arriba VariantCategory y VariantValueCategory heredan de Category
VariantProduct es una suerte de clase abstracta, es decir, nunca se va a usar en las implementaciones, siempre serán usadas clases que la extiendan.
Con el modelo de arriba para implementar nuestra productos tenemos en cuenta que se usará el sistema y jerarquía de categorías de Hybris. Para incluir dimensones es
En el accelerator B2B powertools, tenemos un ejemplo de cómo funcionan los Multi-Dimensional Products. Este acelerador incluye con soporte a 3 dimensiones pero se puede refactorizar Product Detail Page (PDP), Order Form y Shopping Cart para soportar más.
Un producto multi-dimensional se compone de:
- VariantCategory -> Lo que llaman la dimensión, define el atributo diferenciador del producto. En nuestro ejemplo sería el Color, Tamaño, Mecanismo...
- VariantValueCategorys -> Es el valor, cuantía de ese atributo. Por ejemplo Rojo, Tamaño Caballero, Automático
¿Cómo Hybris modela Multi-Dimensional Products?
![]() |
VariantCategory y VariantValueCategory heredan de Category |
Como vemos arriba VariantCategory y VariantValueCategory heredan de Category
![]() |
GenericVariantProduct extiende de VariantProduct |
Con el modelo de arriba para implementar nuestra productos tenemos en cuenta que se usará el sistema y jerarquía de categorías de Hybris. Para incluir dimensones es
- VariantCategory se añaden al atributo conocido de supercategories de Product (Sería el BaseProduct)
- VariantValueCategory
- El campo de supercategories hace referencia a la VariantCategory que dan valor
- El campo name es el valor
- GenericVariantProduct es el variante
- Tiene un código de producto diferente
- Referencia al baseProduct
- Tiene como supercategories a VariantValueCategory
- Product (el producto base) tiene el atributo variantType como GenericVariantProduct
Nota: Para distinguir correctamente en el Grid y el resto de páginas es conveniente que en el nombre del producto GenericVariantProduct aparezcan sus valores, es decir:
Reloj XXX Caballero Color Rojo Automático
En el accelerator B2B powertools, tenemos un ejemplo de cómo funcionan los Multi-Dimensional Products. Este acelerador incluye con soporte a 3 dimensiones pero se puede refactorizar Product Detail Page (PDP), Order Form y Shopping Cart para soportar más.
Comentarios
Publicar un comentario