Crear y administrar familias de productos, productos, agrupaciones y propiedades del producto
Defina el catálogo de productos organizando los productos en una estructura jerárquica mediante la creación de productos y agrupaciones en una familia de productos, la definición de productos relacionados, y la adición de propiedades (atributos) a la familia de productos principales de modo que todos los productos y agrupaciones secundarios en una familia de productos hereden automáticamente las propiedades.
De forma predeterminada, al crear un registro de familia de productos, producto, o agrupación, se encuentran en el estado Borrador. Después de crear un producto, definir productos relacionados y configurar atributos para el registro de familia de productos principales, debe publicar el registro de familia de productos, producto, o agrupación para que esté disponible en el sistema para que los agentes de ventas los vendan. Más información: Publicar una familia de productos, un producto o una agrupación
Nota
Para los productos que no están asociados con una familia de productos, es decir, los productos que no tienen un registro de familia de productos primario asignado, puede crearlos directamente en un estado Activo al establecer la columna Organization.CreateProductsWithoutParentInActiveState como 1
(true). De forma predeterminada, esta columna se establece en 0
(false) para una nueva instalación de Dynamics 365 for Customer Engagement y en 1
(true) si actualiza desde una versión anterior de Customer Engagement para garantizar la compatibilidad para las aplicaciones que trabajan con la versión anterior de Customer Engagement donde los registros de productos se crearon en un estado Activo.
También puede usar la pestaña Ventas en el área de configuración del sistema en Dynamics 365 for Customer Engagement o Microsoft Dynamics 365 for Outlook para especificar si los productos se crean en un estado Activo. Más información: Administrar configuración del catálogo de productos
Defina productos, familias de productos y agrupaciones
Use la columna Product.ProductStructure
para definir si un elemento es una familia de productos, producto, o agrupación. Establezca el valor de esta columna como:
1 para crear un producto
2 para crear una familia de productos
3 para crear una agrupación
A continuación encontrará algunos aspectos importantes a tener en cuenta cuando define familias de productos, productos, y las agrupaciones:
Un registro de familia de productos puede contener varias instancias de familia de productos, producto y agrupación en una estructura jerárquica. Para una instancia de familia de productos secundaria, producto secundario o agrupación secundaria, defina la instancia de familia de productos primaria mediante la columna
Product.ParentProductId
. No puede cambiar el registro primario una vez que lo ha establecido.Un producto o agrupación no puede establecerse como principal, lo que implica que un registro de producto o agrupación no puede tener registros secundarios.
Una instancia de familia de productos, producto o agrupación puede formar parte de una instancia de familia de productos solo.
No hay límite en el nivel de anidamiento de una familia de productos.
Los atributos
Product.ValidFromDate
yProduct.ValidToDate
no tienen ninguna lógica de negocios predefinida asociada con ellos, pero hay una comprobación para asegurar que la fecha enProduct.ValidToDate
debería ser posterior o igual que la fecha enProduct.ValidFromDate
. Si corresponde, puede implementar su propia lógica de negocios basada en estos atributos. Por ejemplo, puede ejecutar un trabajo programado para automáticamente retirar productos de la temporada pasada mediante el valor de fecha en la columnaProduct.ValidToDate
.El siguiente código de ejemplo demuestra cómo puede crear un registro de familia de productos y producto secundario.
// Create a product family
Product newProductFamily = new Product
{
Name = "Example Product Family",
ProductNumber = "PF001",
ProductStructure = new OptionSetValue(2)
};
_productFamilyId = _serviceProxy.Create(newProductFamily);
Console.WriteLine("\nCreated {0}", newProductFamily.Name);
// Create a product record under the product family
Product newProduct1 = new Product
{
Name = "Example Product 1",
ProductNumber = "P001",
ProductStructure = new OptionSetValue(1),
ParentProductId = new EntityReference(Product.EntityLogicalName, _productFamilyId),
QuantityDecimal = 2,
DefaultUoMScheduleId = new EntityReference(UoMSchedule.EntityLogicalName, _unitGroupId),
DefaultUoMId = new EntityReference(UoM.EntityLogicalName, _unit.Id)
};
_product1Id = _serviceProxy.Create(newProduct1);
Console.WriteLine("Created {0} under the product family", newProduct1.Name);
Definir las propiedades del producto
Las propiedades del producto ayudan a definir las características de un producto, como el tamaño, color, o componente. Una propiedad del producto se define mediante la tabla DynamicProperty
. Cuando define una propiedad del producto, solo puede asociarla a un registro de la familia de productos en estado Draft
y no a un registro de producto o de agrupación. El número máximo de propiedades del producto que se pueden asociar a un registro de la familia de productos de borrador se determina mediante la siguiente opción de la organización: Organization.MaximumDynamicPropertiesAllowed. El número entra en vigor cuando se publica un registro de producto secundario o una agrupación bajo una familia de productos a la que están asociadas las propiedades, y no cuando se asocian las propiedades a un registro de familia de productos de borrador.
Propina
También puede usar la pestaña Ventas en el área de configuración del sistema en Dynamics 365 o Dynamics 365 for Outlook para configurar el número máximo de propiedades de producto. Más información: Administrar configuración del catálogo de productos.
Mientras crea una propiedad del producto, especifique su nombre, el registro de la familia del producto en estado Draft
a la que está asociado, atributos de la propiedad como si es oculto, requerido o de sólo lectura, y el tipo de datos de la propiedad. Una propiedad del producto puede ser de uno de los siguientes tipos de datos:
Valor | Tipo de datos |
---|---|
0 | Conjunto de opciones |
1 | Decimal |
2 | Número de punto flotante |
3 | Línea de texto única |
4 | Número entero |
No puede cambiar el tipo de datos de una propiedad del productos después crearla. Al crear una propiedad del producto, se crea en el estado Draft
.
El siguiente código de ejemplo demuestra cómo puede crear una propiedad del producto:
DynamicProperty newProperty = new DynamicProperty
{
Name = "Example Property",
RegardingObjectId = new EntityReference(Product.EntityLogicalName,
_productFamilyId),
IsReadOnly = true,
IsRequired = true,
IsHidden = false,
DataType = new OptionSetValue(3), //Single line of text
DefaultValueString = "Default Value"
};
_productPropertyId = _serviceProxy.Create(newProperty);
Para obtener un ejemplo completo, vea Ejemplo: crear y publicar productos
Nota
Al crear una propiedad del producto del tipo de datos Option Set
, debe definir las opciones individuales para la propiedad del producto mediante la creación de registros de tabla DynamicPropertyOptionSetItem
. Cada registro de tabla almacena información sobre la opción individual donde los atributos DynamicPropertyOptionSetItem.DynamicPropertyOptionName
y DynamicPropertyOptionSetItem.DynamicPropertyOptionValue
definen el nombre y el valor de la opción correspondiente, y puede asociar registros de opción individuales a la instancia principal de la propiedad del producto mediante la columna DynamicPropertyOptionSetItem.DynamicPropertyId
.
Para obtener información acerca de la creación y administración de propiedades del producto mediante el cliente web, vea Use propiedades para describir un producto.
Nota
La forma en que se define una propiedad del producto determina cómo lo puede usar el agente de ventas en tiempo de ejecución, es decir, mientras agrega un producto asociado a una oportunidad, una oferta, un pedido, o factura. Un valor de propiedad del producto actualizable se puede cambiar en tiempo de ejecución, a diferencia del valor de una propiedad de producto de solo lectura. Para una propiedad del producto establecida como necesaria, se debe especificar un valor para la propiedad en tiempo de ejecución. De lo contrario, la propiedad se muestra como no resuelta. Una propiedad oculta no se mostrará a los agentes de ventas en tiempo de ejecución.
Asimismo, las propiedades del producto no afectan al precio de un producto. Esto implica que el motor de precios de Dynamics 365 no admite el cambio del precio de un producto en función de un cambio en los valores de propiedad del producto.
Cambiar las propiedades del producto
Es importante conocer las distintos estados de la propiedad del producto para comprender cómo y cuándo se pueden cambiar. Una propiedad del producto puede estar en estado Borrador, Activo, o Retirado. Cuando se crea un producto, su estado es Borrador y cambia al estado Activo una vez que se publica el registro de la familia de productos con el que está asociado. Cuando se retira el registro de la familia de productos asociado, el estado de la propiedad del producto también cambia a Retired
.
Una propiedad del producto puede cambiar en dos niveles: primero en el nivel de la familia del producto con el que esté asociada la propiedad del producto; segundo en el nivel de la familia de productos secundarios, producto o agrupación de la que se hereda la propiedad del producto.
Cambiar la propiedad del producto para la familia de productos con la que está asociado
Para un registro de la familia de productos Draft
, puede cambiar una propiedad del producto asociada a él. Una vez que publique el registro de la familia de productos (cambie al estado Active
) no puede cambiar la propiedad del producto hasta que revise el registro de la familia de productos. Después de revisar el registro de la familia de productos (cambia al estado Under Revision
) y luego sobrescribir la versión publicada (activa) de la propiedad para realizar cambios. Para obtener información sobre el ciclo de vida de los productos, vea Publicar, revisar, revertir, retirar y activar productos (ciclo de vida de los productos)
Cambiar la propiedad del producto heredada para la familia de productos secundarios, el producto, o la agrupación
Para una propiedad del producto con el estado Draft
, los registros de familia de productos secundarios, producto y agrupación pueden reemplazar la propiedad heredada para definir su propia versión de la propiedad. Por ejemplo, reemplace la propiedad heredada para cambiar nombre o cambiar sus atributos de oculto a visible, de requerido a opcional, o de solo lectura a actualizable. No puede reemplazar o cambiar el tipo de datos de la propiedad heredada.
Para reemplazar una propiedad del producto, cree una instancia de la propiedad del producto y establezca la propiedad BaseDynamicPropertyId
con el GUID de la propiedad que se está reemplazando. Además, asocie también la nueva instancia de la propiedad al registro de la familia de productos secundarios, el producto, o la agrupación donde se reemplaza.
El código de ejemplo siguiente demuestra cómo puede reemplazar un registro existente de propiedad del producto, por ejemplo, con GUID _productPropertyId
, y asociar la propiedad reemplazada con el registro del producto, por ejemplo con GUID _product1Id
. Después de esto, puede actualizar los atributos de la nueva propiedad para especificar sus propios valores para completar el reemplazo.
// Override a product property
DynamicProperty newOverrideProperty = new DynamicProperty();
newOverrideProperty.BaseDynamicPropertyId = new EntityReference(DynamicProperty.EntityLogicalName,
_productPropertyId);
newOverrideProperty.RegardingObjectId = new EntityReference(Product.EntityLogicalName, _product1Id);
_productOverridenPropertyId = _serviceProxy.Create(newOverrideProperty);
// Retrieve the attributes of the cloned property you want to update
ColumnSet columns = new ColumnSet();
columns.AddColumns("name", "isreadonly", "isrequired");
DynamicProperty retrievedOverridenProperty = (DynamicProperty)_serviceProxy.Retrieve(
DynamicProperty.EntityLogicalName, _productOverridenPropertyId,
columns);
// Update the attributes
retrievedOverridenProperty.Name = "Overridden Example Property";
retrievedOverridenProperty.IsReadOnly = true;
retrievedOverridenProperty.IsRequired = false;
_serviceProxy.Update(retrievedOverridenProperty);
Para obtener un ejemplo completo, vea Ejemplo: crear y publicar productos
Para una propiedad del producto con el estado Active
, puede sobrescribir la propiedad heredada para el registro de la familia de productos secundarios, producto, o agrupación siempre que las cláusulas siguientes se cumplan:
El registro de la familia de productos secundarios, producto, o agrupación se encuentra en estado En revisión.
La propiedad del producto activa heredada ya se ha sobrescrito.
Para sobrescribir una propiedad del producto, cree una instancia de la propiedad del producto y establezca la propiedad
BaseDynamicPropertyId
con el GUID de la propiedad ya sobrescrita. Además, asocie también la nueva instancia de la propiedad al registro de la familia de productos, el producto, o la agrupación que se encuentra en la faseUnder Revision
.El código de ejemplo siguiente demuestra cómo puede sobrescribir un registro de propiedad del producto en estado activo que ya está sobrescrito, por ejemplo, con GUID
_productOverridenPropertyId
, y asociar la nueva propiedad con el registro del producto en estadoUnder Revision
, por ejemplo con GUID_product1Id
. Después de esto, puede actualizar los atributos de la nueva propiedad para especificar sus propios valores y completar la sobrescritura.
// Overwrite a product property
DynamicProperty newOverwriteProperty = new DynamicProperty();
newOverwriteProperty.BaseDynamicPropertyId = new EntityReference(DynamicProperty.EntityLogicalName,
_productOverridenPropertyId);
newOverwriteProperty.RegardingObjectId = new EntityReference(Product.EntityLogicalName,
_product1Id);
_productOverwrittenPropertyId = _serviceProxy.Create(newOverwriteProperty);
// Retrieve the attributes of the cloned property you want to update
ColumnSet myCols = new ColumnSet();
myCols.AddColumns("name", "isreadonly", "isrequired");
DynamicProperty retrievedOverwrittenProperty = (DynamicProperty)_serviceProxy.Retrieve(
DynamicProperty.EntityLogicalName, _productOverwrittenPropertyId,
myCols);
// Update the attributes of the cloned property to complete the overwrite
retrievedOverwrittenProperty.Name = "Overwritten Example Property";
retrievedOverwrittenProperty.IsReadOnly = true;
retrievedOverridenProperty.IsRequired = false;
_serviceProxy.Update(retrievedOverwrittenProperty);
Para obtener un ejemplo completo, vea Ejemplo: crear y publicar productos
Agrupaciones y kits
Una agrupación es una característica introducida en Customer Engagement para reemplazar la antigua funcionalidad de kit. Al igual que un kit, una agrupación es una colección de productos que se vende como una sola unidad. La agrupación de productos es útil para empaquetar productos de forma que los clientes obtengan más ventajas de toda la línea de productos o para ofrecer descuentos en los productos agrupados, lo que permite agrupar productos y venderlos como una sola unidad.
Sólo se pueden agregar productos una agrupación; no se puede agregar un registro de familia de productos, agrupación o kit a una agrupación. Puede agregar productos a una agrupación o un kit creando un registro de asociación de producto con la tabla ProductAssociation
. El registro ProductAssociation.ProductId
especifica la agrupación o el kit al que desea agregar un producto y ProductAssociation.AssociatedProduct
especifica el producto que se agregará. El número máximo de productos que se pueden agregar a una agrupación se determina mediante la siguiente opción de la organización: Organization.MaxProductsinBundle
.
También puede usar la pestaña Ventas en el área de configuración del sistema en Dynamics 365 o Dynamics 365 for Outlook para especificar el número máximo de productos que se puedan agregar a una agrupación. Más información: Administrar configuración del catálogo de productos
El siguiente código de ejemplo demuestra cómo puede agregar productos a una agrupación.
// Add a product to a bundle
ProductAssociation newAssociation1 = new ProductAssociation
{
AssociatedProduct = new EntityReference(Product.EntityLogicalName, _product1Id),
ProductId = new EntityReference(Product.EntityLogicalName, _bundleId),
Quantity = new decimal(15),
ProductIsRequired = new OptionSetValue(0),
UoMId = new EntityReference(UoM.EntityLogicalName, unit.Id)
};
_product1AssociationId = _serviceProxy.Create(newAssociation1);
// Add another product to the bundle
ProductAssociation newAssociation2 = new ProductAssociation
{
AssociatedProduct = new EntityReference(Product.EntityLogicalName, _product2Id),
ProductId = new EntityReference(Product.EntityLogicalName, _bundleId),
Quantity = new decimal(20),
ProductIsRequired = new OptionSetValue(1),
UoMId = new EntityReference(UoM.EntityLogicalName, unit.Id),
};
_product2AssociationId = _serviceProxy.Create(newAssociation2);
if ((_product1AssociationId != null) && (_product2AssociationId != null))
Console.WriteLine("\nAdded both the products to the bundle");
Para obtener un ejemplo completo, vea Ejemplo: agregar productos a una agrupación.
Diferencias entre kits y agrupaciones
Los kits y las agrupaciones permiten agrupar productos en una sola unidad, pero éstas son algunas diferencias entre los dos.
Kits | Agrupaciones |
---|---|
Todos los productos en un kit son obligatorios. | Algunos productos en la agrupación pueden ser opcionales. |
Los kits admiten anidamiento; puede agregar un kit a otro kit. | No puede agregar una agrupación a otra. Solo puede agregar productos a una agrupación. |
Mientras agrega un kit a una oportunidad, oferta, pedido o factura, puede ver solo los detalles a nivel del kit; no puede ver los productos individuales en el kit. | Mientras agrega una agrupación a una oportunidad, oferta, pedido o factura, puede ver solo los detalles a nivel de la agrupación, así como los productos individuales en la agrupación. |
Nota
Los kits quedaron en desuso en Dynamics 365; por lo que deberá utilizar agrupaciones.
Defina las relaciones de productos para obtener sugerencias mejoradas durante la venta de productos
Puede definir productos relacionados para un producto que se muestran como sugerencias a los agentes de ventas durante la administración de oportunidades o pedidos. Las sugerencias de productos para un producto ayudan a los agentes de ventas a recomendar productos relacionados y agrupaciones/kits a los clientes, y aumentan las ventas de productos. Puede definir las siguientes relaciones de un producto: accesorio, venta cruzada, sustituto e incremento de ventas. Por ejemplo, Surface Pro puede agregarse como producto de incremento de ventas para Surface RT de modo que cuando su agente de ventas esté agregando Surface RT a cualquier oportunidad, oferta, pedido, factura, se sugiera Surface Pro como opción de incremento de ventas.
Use la columna ProductSubstitute.SalesRelationshipType para definir relaciones de productos. Establezca el valor de esta columna como:
0 para incremento de ventas
1 para venta cruzada
2 para accesorio
3 para sustituto
Cuando define relaciones de productos, es importante definir la dirección de la relación para evitar duplicación de datos. Las direcciones compatibles en las relaciones de productos son:
Relación de productos | Dirección |
---|---|
Accesorio | Unidireccional |
Venta cruzada | Unidireccional o bidireccional |
Sustituto | Unidireccional o bidireccional |
Incremento de ventas | Unidireccional |
Use la columna ProductSubstitute.Direction para especificar la dirección de una relación de productos. Establezca el valor de esta columna como:
0 para unidireccional
1 para bidireccional
El siguiente código de ejemplo demuestra cómo puede definir relaciones para productos.
// Set product relationship
// Set product1 and product2 as substitute of each other (bi-directional)
ProductSubstitute newProductRelation = new ProductSubstitute
{
SalesRelationshipType = new OptionSetValue(3),
Direction = new OptionSetValue(1),
ProductId = new EntityReference(Product.EntityLogicalName, _product1Id),
SubstitutedProductId = new EntityReference(Product.EntityLogicalName, _product2Id)
};
_productRelationId = _serviceProxy.Create(newProductRelation);
Clonar una familia de productos, un producto, o agrupación
Utilice el mensaje CloneProductRequest para clonar un registro de familia de productos, producto, o agrupación, y crear una copia del registro bajo el mismo nodo primario. Debe proporcionar el Id. del registro a clonar. Al clonar un registro del producto también se copian las propiedades del producto. El registro clonado se crea con un sello de fecha y hora anexado a valores originales en los atributos Product.Name y Product.ProductNumber; el sello de fecha y hora denota la hora en que se clonó el registro. El siguiente código de ejemplo demuestra cómo clonar un producto.
CloneProductRequest cloneReq = new CloneProductRequest
{
Source = new EntityReference(Product.EntityLogicalName, _productId)
};
CloneProductResponse cloned = (CloneProductResponse)_serviceProxy.Execute(cloneReq);
_productCloneId = cloned.ClonedProduct.Id;
// Retrieve the cloned product record
Product retrievedProduct = (Product)_serviceProxy.Retrieve(Product.EntityLogicalName, _productCloneId, new ColumnSet(true));
Console.WriteLine("\nCreated clone product: {0}", retrievedProduct.Name);
Paso siguiente
Publique los registros del producto para hacer que los productos estén disponibles que los vendan los agentes de ventas. Más información: Publicar una familia de productos, un producto o una agrupación
Información relacionada
Publicar, revisar, revertir, retirar, y habilitar los productos (el ciclo de vida de productos)
Ejemplo: Creación y publicación de productos
Ejemplo: Clonar registros de productos
Ejemplo: Agregar productos a una agrupación
Tablas del catálogo de productos