Share via


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 y Product.ValidToDate no tienen ninguna lógica de negocios predefinida asociada con ellos, pero hay una comprobación para asegurar que la fecha en Product.ValidToDate debería ser posterior o igual que la fecha en Product.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 columna Product.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 Customer Engagement (on-premises) 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 Customer Engagement (on-premises) 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 fase Under 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 estado Under 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 Customer Engagement (on-premises) 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 Customer Engagement (on-premises); 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

Consulte también

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