Aprovecha el potencial de los campos gemelos de CPQ en Salesforce
Domina los campos gemelos de CPQ en Salesforce mediante ejemplos prácticos y obtén mayor flexibilidad y eficiencia en tu proceso de gestión de datos.
Por Randalyn Hill-Coffer·Revisado por el equipo de Blue Canvas··12 min de lectura
En este artículo, te presentaremos una función potente, pero a menudo pasada por alto, de Salesforce CPQ: los campos gemelos. Mediante ejemplos prácticos, exploraremos cómo los campos gemelos y los campos especiales de Salesforce CPQ pueden brindar mayor flexibilidad y eficiencia en la gestión de datos, al replicar valores entre distintos objetos y desbloquear funciones avanzadas del paquete.
Estas son nuestras 5 conclusiones clave:
- Los campos gemelos de Salesforce CPQ permiten transferir valores de campos personalizados entre pares de objetos al crear el segundo objeto, lo que supera las capacidades de la sincronización de cotizaciones.
- Estas funciones son especialmente útiles en organizaciones con grandes volúmenes de datos, ya que permiten mapear datos entre objetos compatibles y reducen la necesidad de personalizaciones.
- Los campos gemelos tienen ciertas limitaciones, como la imposibilidad de mapear campos estándar y la necesidad de que los nombres de API y los tipos de campo coincidan exactamente.
- Los campos especiales, otra función de Salesforce CPQ, se pueden crear para desbloquear funciones avanzadas del paquete y permitir una mayor personalización.
- Los campos gemelos y los campos especiales son herramientas valiosas para el mapeo de datos, pero requieren comprensión y una implementación cuidadosa para aprovechar al máximo sus capacidades.
Campos gemelos vs. sincronización de cotizaciones
Hoy vamos a hablar de una de las funciones más subestimadas de CPQ que merece mayor reconocimiento: los campos gemelos. También mencionaremos una función relacionada: los campos especiales.
Cuando conocimos esta función, nos recordó a la sincronización de cotizaciones de Sales Cloud. De hecho, los campos gemelos y los campos especiales ofrecen muchas más funciones que la sincronización de cotizaciones. Normalmente, la sincronización de cotizaciones copia los valores y productos del registro de oportunidad a partir del cual se creó la cotización, en lo que respecta a campos estándar y partidas.
Comprende las limitaciones de la sincronización de cotizaciones
Sin embargo, como puedes tener más de una cotización vinculada a un registro de oportunidad, solo puedes sincronizar una cotización a la vez y todavía no puedes sincronizar campos personalizados de partidas. (Por cierto, puedes votar por esta función aquí).
Tampoco puedes sincronizar productos que tengan un precio de lista, una lista de precios o un producto inactivos. Debes marcarlos como activos o eliminarlos si están marcados como archivados. Un error común es mantener una moneda inactiva en una organización con múltiples monedas y sincronizar un registro con esa moneda. Si tienes algún proceso de aprobación pendiente en una cotización, no puedes sincronizar otra hasta que la instancia del proceso termine de ejecutarse.
El mecanismo de los campos gemelos de Salesforce CPQ
En CPQ, ciertos pares de objetos de CPQ transfieren valores de campos personalizados del primer objeto al segundo cuando se crea el segundo objeto. Los valores se transfieren si los campos personalizados son editables y sus tipos de campo y nombres de API coinciden. Llamamos a estos pares de campos «campos gemelos». Puedes mapear estos valores en una sola dirección entre objetos compatibles, incluidos los campos personalizados. Necesitas acceso de lectura al campo de origen y acceso de edición al campo de destino. Los campos estándar no se pueden mapear entre objetos.
Cómo funcionan los campos gemelos con distintos objetos
Los objetos de la columna 1 de esta tabla transfieren valores de campos a los campos personalizados de los objetos de la columna 2 cuyos tipos y nombres de API coinciden.
| Columna 1 | Columna 2 |
|---|---|
| Contrato | Oportunidades creadas al modificar o renovar el contrato |
| Contrato de servicio | Oportunidades creadas al modificar o renovar el contrato de servicio |
| Productos de oportunidad | Línea de cotización Salesforce CPQ asigna valores de los productos de oportunidad a las líneas de cotización únicamente para productos independientes y solo cuando los productos de oportunidad se han creado antes de que un representante de ventas cree la primera cotización principal de la oportunidad. |
| Producto | Línea de cotización |
| Opción de producto | Línea de cotización Si un producto y una opción de producto tienen el mismo campo que una línea de cotización relacionada, el campo de la línea de cotización hereda el valor del campo de la opción de producto. |
| Cotización | Pedido El campo Condiciones de pago de la cotización es una lista de selección editable, mientras que el campo Condición de pago del pedido está restringido a un conjunto global de valores de lista de selección. Si un administrador agrega un valor personalizado al campo Condición de pago de la cotización y luego un representante de ventas genera un pedido a partir de esa cotización, Salesforce CPQ encuentra un error. |
| Línea de cotización | Producto de pedido |
| Línea de cotización | Producto de oportunidad Salesforce CPQ asigna los valores de los campos gemelos de la línea de cotización al producto de oportunidad cuando se crea la línea de cotización y cada vez que se actualiza su registro. |
| Línea de cotización | Suscripción |
| Línea de cotización | Activos |
| Línea de cotización | Partida de contrato |
| Suscripciones | Línea de cotización En las cotizaciones de modificación, las líneas de cotización heredan los valores de los campos gemelos del primer registro de suscripción, no de las suscripciones modificadas que se hayan creado a partir de ese registro. |
| Partida de contrato | Línea de cotización |
| Producto de pedido | Línea de factura |
| Activo | Línea de cotización Salesforce CPQ asigna valores del activo a la línea de cotización únicamente durante los procesos de modificación y renovación, cuando se generan líneas de cotización a partir de activos. |
Uso de campos gemelos en la gestión de datos
La necesidad de usar campos gemelos depende de si actualizas regularmente los mismos valores de un objeto mediante automatización o con Apex en Salesforce. En lugar de desarrollar estas personalizaciones, puedes usar campos gemelos para asignar datos entre objetos compatibles y ahorrar recursos de la plataforma. Esta función puede ser especialmente útil en una organización con un gran volumen de datos. Un excelente ejemplo de uso de un campo gemelo es copiar el valor de un campo de un producto a todas las líneas de cotización generadas a partir de ese producto. Esta función tampoco requiere que la actives en Configuración. Puedes usarla simplemente siguiendo las condiciones indicadas anteriormente.
Comprende las limitaciones de los campos gemelos
Las posibles desventajas de esta asignación son que debes trabajar con objetos estándar, ya que los objetos personalizados no son compatibles, y verificar que los objetos que usarás sean compatibles. También debes usar el nombre de API exacto, no las etiquetas. Un error común es usar tipos de campo diferentes, ya que esto tampoco es compatible.

Campos gemelos y configuración de paquetes en Salesforce CPQ
Cuando se configura un paquete, los objetos de la Columna 1 transfieren sus valores a las nuevas líneas de cotización que se generan. Cuando accedes al configurador para volver a configurar el paquete, Salesforce CPQ establece los valores de las opciones de producto y de los atributos de configuración según los valores de los campos coincidentes de sus líneas de cotización relacionadas.
Nota: Si marcas un paquete como favorito y luego agregas ese paquete favorito al editor de líneas de cotización, no tomará ningún valor de los campos gemelos.
Solución de problemas de campos gemelos
Consejo: Si tus campos gemelos no se asignan de un objeto a otro, ve a Configuración>Búsqueda rápida>Paquetes instalados y haz clic en el enlace Configurar junto al paquete Salesforce CPQ. Luego, ve a la pestaña Configuración adicional e intenta realizar los "Pasos posteriores a la instalación": haz clic en Ejecutar scripts y vuelve a probar tus campos gemelos. Origen: (¡También un saludo para John Garvens!)
Otro punto clave es que los campos gemelos solo se completan al crear el registro, por lo que editar el origen no copiará el valor al destino.
El siguiente diagrama muestra la dirección de asignación entre los campos gemelos de varios objetos durante determinados procesos de automatización en Salesforce CPQ y Salesforce Billing.

Campos especiales en Salesforce CPQ
También debemos hablar aquí de los campos especiales, que puedes crear para desbloquear funciones avanzadas del paquete CPQ. Aquí tienes una lista de campos especiales de CPQ que puedes usar para facilitar tu implementación de CPQ.
Configuración de campos especiales para personalizar cotizaciones
Por ejemplo, quieres personalizar los campos de cotización en el editor de líneas de cotización para distintos usuarios: ¿se puede personalizar el conjunto de campos 'Editor de líneas' del objeto Cotización para distintos usuarios? Esto corresponde a Cotización, no a Líneas de cotización. El resultado deseado es que un grupo de usuarios vea un conjunto específico de campos de cotización, mientras que otro grupo vea campos diferentes al configurar una cotización.
La respuesta es sí: con el campo especial de Salesforce CPQ, HeaderFieldSetName, puedes crear un campo en el objeto Cotización para mostrar dinámicamente un campo de cotización específico en el editor de líneas de cotización. Puedes controlar el conjunto de campos de cotización que se muestra mediante un campo de fórmula o permitir que los usuarios hagan su propia selección mediante un campo de lista de selección.
Estos son los pasos necesarios:
- Ve al objeto Cotización.
- Crea nuevos conjuntos de campos según sea necesario.
- Crea un nuevo campo de lista de selección en el objeto Cotización.
- Define una etiqueta de campo.
- Establece el nombre del campo como HeaderFieldSetName.
- Ingresa los valores de la lista de selección; deben ser los nombres de API de los conjuntos de campos que creaste en el objeto Cotización (recuerda: los nombres de API de los conjuntos de campos no contienen "__c").
- Vuelve al objeto Cotización.
- Edita el conjunto de campos Editor de líneas e incluye el nuevo campo.
- Incluye el campo HeaderFieldSetName en todos los conjuntos de campos de la lista de selección.
- Haz clic en Guardado rápido. Observa que el conjunto de campos ha cambiado.
NOTA:
- Debes hacer clic en "Guardado rápido" para ver el cambio en los campos de cotización del editor de líneas de cotización. Además, si vuelves a establecer el valor de la lista de selección en "--Ninguno--" y haces clic en "Guardado rápido", la interfaz volverá al conjunto de campos "Editor de líneas".
- Si el campo HeaderFieldSetName no está seleccionado en los conjuntos de campos ni se muestra en el editor de líneas de cotización, el valor se puede editar desde el registro de la cotización.
- Si se usan valores de campo no válidos en HeaderFieldSetName, no se mostrará ningún campo en el editor de líneas de cotización.
Comprende cada campo especial
| Campo | Objeto/Ubicación | Tipo de datos | Descripción |
|---|---|---|---|
| AdditionalDiscountUnit | Línea de cotización | Lista de selección | El valor ingresado en este campo de lista de selección cambiará la unidad de un descuento adicional ingresado en la línea de cotización. Los valores predeterminados recomendados para la lista de selección son porcentaje, moneda, unidad y total. |
| AdditionalInstructions | Característica de producto | Texto | Crea un campo de texto con este nombre y complétalo en un registro de característica de producto para que muestre instrucciones o texto de ayuda al usuario cuando configure el paquete. |
| ApplyAdditionalDiscountLast | Cotización | Fórmula de tipo número | Aplica el 'descuento adicional' al final de la cascada de precios (lógica interna de precios). |
| ApplyPartnerDiscountFirst | Cotización | Fórmula de tipo número | ApplyPartnerDiscountFirst calcula el descuento del socio sobre el precio de lista, luego aplica los descuentos automáticos y, por último, los descuentos adicionales manuales. |
| ApprovalsArchived | Cotización | Fórmula de tipo número | Puedes establecer este campo en 1 para evitar que se eliminen registros de aprobación de la lista relacionada de aprobaciones al usar aprobaciones avanzadas. |
| ChannelDiscountsOffList | Cotización | Fórmula de tipo número | ChannelDiscountsOffList calcula todos los descuentos sobre el precio de lista, sin calcularlos de forma secuencial. |
| ChannelDiscountsOffList | Cotización | Fórmula de tipo texto | Te permite ingresar el ID de Salesforce de una cuenta que contenga un precio contratado que quieras usar (generalmente mediante una regla de flujo de trabajo). Por ejemplo, si quieres configurar una lógica que indique "sin importar si esta cotización es directa o de canal, usa el precio contratado directo", este campo te permite hacerlo. |
| ContractGroup | Contratos | Texto | Este campo se puede usar para combinar contratos activos de una cuenta, renovarlos y unificar sus fechas de finalización en una sola oportunidad de renovación. |
| CustomActiveContract | Contratos | Casilla de verificación | Indica qué contratos se deben usar como activos en un proceso de renovación. |
| CustomName | Cotización o documento de cotización | Fórmula de tipo texto | El valor que devuelve la fórmula se puede usar para modificar el nombre del documento de cotización. |
| DefaultSalesRepID | Cotización | Fórmula de tipo texto | Completa automáticamente el campo de representante de ventas en las cotizaciones cuando está vacío. |
| DocumentCurrencySymbol | Cotización | Fórmula de tipo texto | Crea una fórmula de texto que devuelva un símbolo de moneda según el código ISO de la moneda para mostrar el símbolo deseado en lugar del código ISO en el documento generado. Por ejemplo: CASE(CurrencyIsoCode, "EUR","€", "GBP","£", "$"). |
| EditLinesFieldSetName | Cotización | Fórmula de tipo texto o lista de selección | Muestra dinámicamente distintas columnas de campos en la página de edición de líneas según el tipo de usuario o de cotización. Consulta las instrucciones en Página dinámica de edición de líneas. Si quieres que distintos usuarios vean diferentes campos o columnas en la página de edición de líneas según el tipo de usuario o de cotización, configura el campo EditLinesFieldSetName para aplicar distintos conjuntos de campos en diferentes escenarios. |
| ForceDeferred | Contrato | Fórmula de tipo número | Cambia de síncrono a asíncrono el proceso que se activa al establecer la previsión de renovación en verdadero. |
| HeaderFieldSetName | Cotización | Fórmula de tipo texto o lista de selección | Muestra dinámicamente campos de cotización en el editor de líneas de cotización según el tipo de usuario o de cotización. Consulta las instrucciones en Visualización dinámica de campos de cotización de Salesforce CPQ en el editor de líneas de cotización. Para mostrar distintos campos de cotización según el tipo de usuario o de cotización, configura el campo HeaderFieldSetName para aplicar distintos conjuntos de campos en diferentes escenarios. NOTA: Para mostrar dinámicamente los campos de cotización mediante HeaderFieldSetName, el tipo de campo debe ser lista de selección o fórmula. Esta función no funciona si el tipo de campo es área de texto enriquecido. |
| IncludePriorQuantity | Cotización y suscripción | Fórmula de tipo casilla de verificación | Incluye la cantidad previa de un producto de suscripción para calcular escalas de descuento con la opción de pedidos cruzados habilitada. |
| LineSortField | Cotización | Fórmula de tipo número o texto | Ordena automáticamente las líneas de cotización en el editor de líneas en el mismo orden en que aparecen los productos en la página de configuración. |
| Markupunit | Línea de cotización | Lista de selección | Lista de selección personalizada que permite aplicar recargos por porcentaje o por monto. |
| OverageRate | Precio por bloque | Moneda | Te permite ingresar una tarifa por excedente para los precios por bloque. Esta se suma al precio por bloque seleccionado y se calcula a partir de la diferencia entre la cantidad mínima del bloque y la cantidad ingresada para esa partida. |
| ProrateAmountDiscounts | Línea de cotización | Fórmula de tipo número | Te permite configurar las cotizaciones para que el monto total de la cotización refleje el descuento por unidad de cantidad y por unidad de plazo. Por ejemplo, podrías querer aplicar un descuento anual a un producto de suscripción al que le quedan 6 meses de vigencia. |
| QuotePrimaryContact | Oportunidad | Fórmula de tipo texto | Reemplaza el mapeo predeterminado del contacto principal de la oportunidad a la cotización. |
| QuotePrimaryPartner | Oportunidad | Fórmula de tipo texto | Salesforce CPQ determina el registro de socio principal de la cotización a partir del registro de socio marcado como principal en la lista relacionada de roles de socios de la oportunidad asociada. Si QuotePrimaryPartner contiene el ID de un registro de socio, Salesforce CPQ usará ese valor para copiarlo al campo de socio principal de la cotización. |
| UnitPriceForceOverride | OrderItem | Moneda | Permite reemplazar el precio unitario de una partida de pedido. NOTA: Este campo especial no es compatible con Salesforce Billing. |
Maximiza la eficiencia con los campos gemelos de Salesforce CPQ
Como has visto a lo largo de este artículo, los campos gemelos y los campos especiales de Salesforce CPQ ofrecen importantes capacidades de mapeo de datos y opciones de personalización que pueden transformar la gestión de datos. Sin embargo, para usarlos de forma eficaz, es necesario comprender bien sus limitaciones.
A medida que te familiarices con el alcance de las capacidades de CPQ, también te recomendamos explorar herramientas que te ayuden a implementar y sincronizar datos de CPQ entre tus distintas organizaciones de Salesforce. En Blue Canvas ofrecemos una herramienta de despliegue dedicada a Salesforce CPQ que te ayuda a comparar y sincronizar CPQ entre entornos de prueba en minutos. Si necesitas ayuda con la implementación o quieres saber más sobre estas funciones, no dudes en contactar a nuestro equipo de Blue Canvas hoy.
-------
Preguntas frecuentes
¿Qué son los campos gemelos en Salesforce CPQ?
- Los campos gemelos en Salesforce CPQ facilitan la transferencia de valores de campos personalizados entre objetos emparejados al crear el segundo objeto. Esta función supera las capacidades de la sincronización de cotizaciones, ya que permite mapear datos entre objetos compatibles y reduce la necesidad de personalizaciones.
¿En qué situaciones son útiles los campos gemelos?
- Los campos gemelos son especialmente útiles en organizaciones con grandes volúmenes de datos. Por ejemplo, si actualizas regularmente los mismos valores de un objeto mediante automatizaciones o con Apex en Salesforce, los campos gemelos pueden ayudarte a mapear datos entre objetos compatibles y ahorrar recursos de la plataforma. Un caso de uso común es copiar el valor de un campo de un producto en todas las líneas de cotización generadas a partir de él.
¿Cuáles son las limitaciones de los campos gemelos en Salesforce CPQ?
- Los campos gemelos no pueden mapear campos estándar. También requieren nombres de API exactos y tipos de campo coincidentes para que el mapeo funcione. No admiten objetos personalizados, y es importante que te asegures de que los objetos que usarás sean compatibles con los campos gemelos.
¿Qué son los campos especiales en Salesforce CPQ?
- Los campos especiales son campos que creas en Salesforce CPQ para habilitar funciones avanzadas del paquete. Pueden ayudarte a implementar CPQ al permitir una mayor personalización. Por ejemplo, con el campo especial 'HeaderFieldSetName', puedes mostrar dinámicamente un campo específico de la cotización en el editor de líneas de cotización según el usuario.
¿Se puede personalizar el conjunto de campos 'Line Editor' de la cotización para diferentes usuarios?
- Sí, con el campo especial de Salesforce CPQ 'HeaderFieldSetName', puedes crear un campo en el objeto de cotización para mostrar dinámicamente un campo específico de la cotización en el editor de líneas de cotización. Puedes controlarlo mediante un campo de fórmula o permitir que los usuarios elijan mediante un campo de lista de selección.
¿Qué precauciones debo tomar al implementar campos gemelos y campos especiales?
- Los campos gemelos y los campos especiales requieren una implementación cuidadosa para aprovechar al máximo sus capacidades. Asegúrate de que los nombres de API sean exactos y los tipos de campo coincidan. Además, recuerda que los campos gemelos solo se completan al crear el registro, por lo que editar el origen no copiará el valor al destino. Del mismo modo, asegúrate de implementar correctamente los campos especiales para habilitar las funciones avanzadas que necesitas.



