Descubrir por dónde empezar puede ser difícil para un nuevo desarrollador, independientemente de la plataforma, pero una buena hoja de ruta puede hacerlo más fácil.
Aprende, haz demostraciones y construye magníficos sitios Lightning Web Runtime (LWR) con una nueva extensión de Chrome que te permite obtener información detallada sobre los componentes de la página
Revisar objetos, campos, automatizaciones e incluso informes creados hace tiempo para optimizarlos puede llevar mucho tiempo, pero es una tarea importante con ventajas significativas. Construido con la facilidad de uso en mente tanto para los recién llegados como para los profesionales de Salesforce con mucha experiencia, Org Check es una herramienta gratuita que seguramente mejorará la forma en que […]
Los profesionales de Salesforce pueden utilizar Salesforce Org Check
The post Salesforce Org Check: Free Technical Debt Analysis appeared first on Salesforce Ben.
El análisis de la deuda técnica de Salesforce es gratuito
En nuestra serie “Engineering Energizers” Q&A, presentamos a Leo Tran, Arquitecto jefe de ingeniería de plataformas en Salesforce. Con más de 15 años de experiencia en liderazgo de ingeniería, Leo desempeña un papel fundamental en el desarrollo de la plataforma Einstein 1. Esta plataforma integra IA generativa, gestión de datos, capacidades de CRM y sistemas de confianza para proporcionar a las empresas experiencias de cliente personalizadas e impulsadas por IA […]
Aprenda a elevar su estrategia de negocio con la Previsión de la Demanda. Predicciones precisas y decisiones informadas. Optimice el inventario, impulse el crecimiento y manténgase a la vanguardia.
En nuestra serie de preguntas y respuestas «Engineering Energizers», exploramos las extraordinarias trayectorias de líderes en ingeniería que han realizado importantes contribuciones en sus respectivos campos. Hoy, nos sumergimos en el viaje técnico de Evangelina Martínez Ruiz Moreno, Directora Senior de Salesforce, que encabezó el desarrollo del nuevo Anypoint Flex Gateway de MuleSoft. Sigue leyendo para explorar cómo […]
Las mejores citas sobre IA de expertos en inteligencia artificial sobre el impacto en los negocios, las ventas, la preparación de la fuerza laboral, el futuro del trabajo, la confianza, la ética y la privacidad.
The post 35 citas inspiradoras sobre inteligencia artificial appeared first on Salesforce.
Revisa las respuestas a la Encuesta sobre el estado de LWC 2023 y, a continuación, completa la encuesta 2024, que se llevará a cabo hasta finales de marzo de 2024.
Participa en la Encuesta sobre el estado de LWC 2024
2023 fue un gran año para los desarrolladores de Salesforce. Hubo un montón de nuevas funciones interesantes, grandes mejoras en cosas como Lightning Web Components y, por supuesto, un montón de nuevas herramientas y capacidades que aprovechan la Inteligencia Artificial. Todos los años, en enero, celebramos los mejores contenidos destacados del año anterior y se los traemos […]
La versión Spring ’24 ya está aquí, y estos son algunos de los aspectos más destacados de la versión, que detallan las novedades para los desarrolladores de todo el ecosistema de Salesforce.
El versionado de la API de LWC es una excelente forma de garantizar la compatibilidad con versiones anteriores de los componentes existentes y, al mismo tiempo, permitir que los nuevos componentes adopten las nuevas características.
El shadow DOM nativo hará que tus componentes LWC estén más alineados con los estándares web, las nuevas características de los navegadores y un rendimiento mejorado.
Construya pruebas de extremo a extremo rápidamente con dos elementos que hacen grande a UTAM: los objetos de página base (PO) y la extensión UTAM para Chrome.
Los objetos de página base (PO) y la extensión UTAM para Chrome son dos elementos que hacen grande a UTAM
Por Yuliya Feldman y Scott Nyberg En nuestra serie de preguntas y respuestas «Engineering Energizers», examinamos las experiencias profesionales que han formado a los líderes de ingeniería de Salesforce. Conozca a Yuliya Feldman, Arquitecta de ingeniería de software en Salesforce. Yuliya trabaja en el equipo de servicios de aprendizaje automático de Salesforce Einstein, responsable de la operacionalización de los modelos de IA, que sirven como motor detrás de los […]
Se necesita un amplio conjunto de funciones para ofrecer y respaldar las experiencias digitales de los ciudadanos; ¿cómo pueden los departamentos del gobierno del Reino Unido ofrecerlas a un ritmo adecuado con Salesforce?
The post Creación de experiencias ciudadanas a un ritmo acelerado con Salesforce appeared first on Blog de Salesforce en España.
Aunque esperamos que su organización de Salesforce sea la excepción, según las últimas investigaciones, es probable que albergue más de 2000 riesgos de seguridad de código personalizado, alrededor de 14 paquetes instalados obsoletos y muchos errores de automatización. Pero seguro que su organización es la excepción, ¿verdad? Recientemente hemos analizado los metadatos agregados de cientos de orgs reales de Salesforce y […]
El post Optimice su organización de Salesforce con estos 7 datos críticos appeared first on Salesforce Ben.
Última actualización el 7 de septiembre de 2023 por Rakesh Gupta Como nuevo Salesforce Certified AI Associate, comparto mis experiencias de estudio contigo y quiero que seas el próximo en superarlo Así que, ¡prepárese y sumérjase! 👉 Ya que estás aquí, es posible que desees
El post Cómo aprobar el examen de certificación Salesforce Certified AI Associate appeared first on Campeón de la Automatización.
Cómo aprobar el examen de certificación Salesforce Certified AI Associate appeared first on Campeón de la Automatización
Última actualización el 24 de octubre de 2023 por Rakesh Gupta Big Idea or Enduring Question: ¿Cómo se registran los correos electrónicos enviados con la acción ‘enviar correo electrónico’? Objetivos: Después de leer este blog, serás capaz de: Utilizar el flujo activado por registro para enviar una alerta por correo electrónico. Utilizar la acción de flujo «Enviar correo electrónico». Utilizar
The post Enviar, registrar, repetir: registro de alertas de correo electrónico como actividades appeared first on Campeón de la Automatización.
Las alertas de correo electrónico se envían por correo electrónico
Ingresar en el ecosistema de Salesforce puede ser una experiencia desalentadora pero emocionante. Hace poco más de un año, me incorporé a Giveclarity como consultor técnico en prácticas. Tras tres meses de formación, me adentré en el dinámico mundo de la consultoría. Como nuevo miembro del equipo técnico, me dedico a todo tipo de tareas, desde trabajar en […]
The post Un día en la vida de un nuevo codificador de Salesforce appeared first on Salesforce Ben.
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:
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?
La captura de datos modificados (CDC) es una técnica utilizada en bases de datos y sistemas de procesamiento de datos para identificar y capturar los cambios realizados en los datos. El objetivo principal de CDC es garantizar que los cambios en los datos de origen (como inserciones, actualizaciones y eliminaciones) puedan detectarse y procesarse fácilmente en sistemas posteriores.
La captura de datos de cambios (CDC) en Salesforce es una función que le permite realizar un seguimiento y capturar los cambios realizados en los datos de Salesforce. Proporciona una manera de capturar y entregar cambios en los datos, tanto en tiempo real como de manera histórica, lo que facilita la sincronización de datos entre sistemas y mantiene una copia actualizada de los datos de Salesforce en almacenes de datos externos. Aquí hay un desglose de de qué se trata la captura de datos modificados en Salesforce:
Actualizaciones en tiempo real : CDC proporciona un flujo de cambios en tiempo real, lo que significa que tan pronto como se realiza un cambio en Salesforce, se captura y se puede actuar de inmediato.
Captura integral de datos : CDC captura no solo los datos modificados sino también los metadatos sobre el cambio, como cuándo ocurrió el cambio y qué tipo de cambio fue (por ejemplo, crear, actualizar, eliminar).
Objetos estándar y personalizados : puede habilitar CDC tanto para objetos estándar de Salesforce (como Cuenta, Contacto) como para objetos personalizados.
Arquitectura basada en eventos : los cambios se entregan como eventos. Las aplicaciones pueden suscribirse a estos eventos y tomar medidas cada vez que haya un cambio. Esto permite una integración más dinámica y con mayor capacidad de respuesta entre Salesforce y los sistemas externos.
Integración simplificada : CDC puede simplificar los desafíos de integración. En lugar de sondear frecuentemente a Salesforce en busca de cambios, los sistemas externos pueden simplemente escuchar los eventos de cambio y actuar en consecuencia.
Alto volumen : está diseñado para manejar un gran volumen de eventos de cambio, lo que garantiza que incluso las empresas con cantidades masivas de datos puedan utilizar CDC de manera efectiva.
API y eventos de plataforma : Salesforce proporciona API que permiten que los sistemas externos se suscriban a estos eventos de cambio. Además, estos eventos de cambio se basan en Salesforce Platform Events, lo que facilita el trabajo dentro del ecosistema de Salesforce.
Canales de eventos: los eventos de cambio se envían a canales de eventos que tienen una convención de nomenclatura como data/ObjectNameChangeEvent , donde ObjectName es el nombre del objeto de Salesforce, como Account o Contact .
Detalles del evento: cada evento de cambio contiene información sobre el cambio, como el tipo de cambio (crear, actualizar, eliminar, recuperar), el ID del registro, los nombres de los campos modificados y los nuevos valores de esos campos.
Salesforce retiene los eventos de cambio durante 72 horas, lo que permite que los sistemas se pongan al día si se retrasan en el procesamiento de eventos.
Los administradores pueden habilitar la captura de datos modificados para objetos específicos en Salesforce a través del menú de configuración. Una vez habilitados, los cambios en esos objetos comenzarán a generar eventos de cambio.
Change Data Capture en Salesforce proporciona una manera poderosa de mantener los sistemas externos sincronizados con los datos de Salesforce sin la necesidad de una lógica de integración compleja o sondeos frecuentes. Es especialmente útil para análisis en tiempo real, sistemas de respaldo y otras aplicaciones que requieren datos actualizados de Salesforce.
Posible solución I: flujo activado por registro en el cliente potencial
Antes de profundizar en la solución funcional real, permítame guiarlo a través de algunas soluciones potenciales que pueden parecer las rutas más fáciles y rápidas a primera vista. Sin embargo, existen razones específicas por las que estas soluciones no serán viables.
Si tiene experiencia en la gestión de clientes potenciales y cadencias de participación de ventas, es posible que haya notado que Salesforce almacena ActionCadenceId (el ID de la cadencia asignada al cliente potencial) en el registro del cliente potencial. En particular, Salesforce establece ActionCadenceId en nulo cuando un cliente potencial se elimina/completa manualmente de la cadencia de participación de ventas.
Es posible que esté contemplando la idea de implementar un flujo posterior al guardado activado por registro (no conozco el flujo posterior al guardado, consulte este artículo) en el objeto principal y aplicando las siguientes condiciones:
ActionCadenceId no es nulo {!$GlobalConstant.False}
Con la condición "Solo si el registro que desencadenó la ejecución del flujo se actualiza para cumplir con los requisitos de la condición".
Luego consulte el objeto ActionCadenceTracker para averiguar el estado y CompletionReason = ' ManuallyRemoved '
Sin embargo, encontrará un obstáculo al intentar guardar el flujo. Resultaría en un mensaje de error que indica:
Sí (resultado de la decisión): el campo $Record.ActionCadenceId contiene un valor derivado que no se admite. En un flujo programado o activado por registro, $Record no admite algunos campos estándar cuyos valores se derivan. Elimine el campo $Record.ActionCadenceId.
Ahora comprende por qué no podemos utilizar este enfoque para abordar el caso de uso empresarial mencionado anteriormente.
Nota : Los campos Cadencia y Cadencia asignado en registros de clientes potenciales, contactos y cuentas personales no se pueden utilizar como criterios de campo en reglas de flujo de trabajo, flujos y Generador de procesos.
Posible solución II: flujo activado por registro en ActionCadenceTracker
Inicialmente, esta solución puede parecer una opción más prometedora que la anterior, y quizás se pregunte por qué no se consideró antes. Desafortunadamente, Salesforce impone restricciones, lo que impide el uso de flujos activados por registros y activadores de Apex en este tipo de SObject en particular ( ActionCadenceTracker ).
Lamentablemente, esto marca el final de esta solución.
Posible solución III: flujo activado por programación en ActionCadenceTracker
La tercera opción es crear un flujo activado por programación para el objeto ActionCadenceTracker , lo cual ciertamente es factible. Sin embargo, es fundamental tener en cuenta que esta solución no es en tiempo real.
Puede configurar el flujo activado por programación para que se ejecute a intervalos , como cada minuto o cada hora, pero tiene sus limitaciones. Recomiendo encarecidamente considerar la escalabilidad al optar por esta solución.
Si bien este enfoque puede ser adecuado para ciertos escenarios, no sirve como una solución viable para el caso de uso empresarial específico mencionado, que requiere notificaciones en tiempo real.
La pregunta ahora es: ¿Cuál es la mejor solución para el caso de uso empresarial mencionado anteriormente? Empecemos.
Enfoque de campeón de automatización (Sí, quiero):
La mejor solución para el caso de uso empresarial determinado es utilizar Change Data Capture (CDC) en el objeto ActionCadenceTrackerChangeEvent . Si no está familiarizado con Change Data Capture (CDC), le recomiendo encarecidamente hacer una pausa aquí y completar este módulo de Trailhead.
Antes de continuar, debes familiarizarte con el objeto ActionCadenceTracker en Salesforce. Representa un objetivo de cadencia activa.
Se crea un registro ActionCadenceTracker cuando agrega un objetivo a una cadencia. Utilice ActionCadenceTracker para obtener información sobre un objetivo de cadencia de carrera, incluido su estado, paso actual, cliente potencial asignado y motivo de finalización.
Nombre del campo
Detalles
Razón de finalización
El motivo por el que el objetivo completó la cadencia. Este campo contiene un valor si el estado del objetivo es Completo. Los valores posibles son:
Salida automática: el objetivo se completó porque se produjo una condición de salida global. Este valor está disponible en la versión API 49.0 y posteriores.
AutomáticamenteSalidoEliminadoPaso
Salida automáticaPaso principal no válido
DaisyChained: el objetivo se completó porque está conectado a otra cadencia de acción.
LeadConverted: el objetivo se completó porque el cliente potencial se convirtió.
Eliminado manualmente: el objetivo se completó porque el representante de ventas lo eliminó de la cadencia.
ManuallyRemovedNoAccess: reservado para uso futuro.
NoMoreSteps: el objetivo completó la cadencia de acción porque se completaron todos los pasos de la cadencia de acción.
Estado
El estado del rastreador de cadencia de acción actual. Los valores posibles son:
Completo
Error
Inicializando
En pausa
Procesamiento: Salesforce está trabajando para cambiar el estado de este rastreador de cadencia de acción. Le recomendamos que filtre los pasos que tienen este estado en sus paneles.
Correr
ID de destino
El ID del objetivo (Contacto, Cliente potencial) que está asignado a esta cadencia de acción.
Para resolver este requisito, utilizaremos Change Data Capture (CDC), un Apex Trigger para suscribirnos a eventos de CDC y un flujo de inicio automático para gestionar la creación de tareas.
Antes de discutir la solución, permítanme mostrarles un diagrama del proceso a alto nivel. Dedique unos minutos a revisar el siguiente diagrama de flujo para comprenderlo. Comencemos a construir este proceso de automatización.
Práctica guiada (nosotros hacemos):
Hay tres pasos para resolver los requisitos comerciales de Benjamin utilizando Change Data Capture (CDC), un Apex Triggeryun flujo de inicio automático . Debemos:
Habilite el objeto ActionCadenceTracker para notificaciones de cambios
Flujo iniciado automáticamente
Definir propiedades de flujo
Cree una variable de colección de registros para almacenar clientes potenciales
Agregue un elemento Loop para recuperar los registros de la variable de colección de registros
Agregue un elemento de Asignación para asignar valores a una Variable de registro (Tarea)
Agregue un elemento de Asignación para agregar la Variable de registro a una Variable de colección de registros .
Agregue un elemento Crear registros para crear tareas
Desencadenadores asincrónicos de Apex para eventos de cambio
Paso 1: habilite el objeto ActionCadenceTracker para notificaciones de cambios
Haga clic en Configuración .
En el cuadro Búsqueda rápida, escriba Cambiar captura de datos y seleccione Cambiar captura de datos.
En Entidades disponibles, seleccione Rastreador de cadencia ( ActionCadenceTracker ) y haga clic en la flecha > .
Haga clic en Guardar .
Paso 2.1: Definir las propiedades del flujo
Haga clic en Configuración .
En el cuadro Búsqueda rápida, escriba Flujos .
Seleccione Flujos y luego haga clic en Nuevo flujo .
Seleccione el flujo iniciado automáticamente (sin activación) opción.
Haga clic en Crear .
Paso 2.2: Agregar una variable de recopilación de registros para almacenar clientes potenciales
En Caja de herramientas , seleccione Administrador y luego haga clic en Nuevo recurso para almacenar los clientes potenciales.
Introduzca la siguiente información:
Tipode recurso : variable
Nombre de API : varR_Leads
Tipo de datos : Registro
Objeto : Plomo
Marque Permitir múltiples valores (colección)
Marque disponible para entrada
Verificar disponible para salida
Haga clic en Listo.
Paso 2.3: Agregar un elemento de bucle para recuperar los registros de la variable de colección de registros
En Flow Designer, haga clic en el icono + y seleccione el elemento Bucle .
Ingrese un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
ParaVariable de colección,seleccione{!varR_Leads}.
Para especificar la dirección para iterar sobre la colección seleccione la opciónDesde el primer elemento hasta el último elemento.
Haga clic enListo .
Paso 2.4: Agregar un elemento de asignación para asignar los valores a una variable de registro (tarea)
Cree una tareade tipovarR_Task de variable de registro para crear una tarea para el propietario del cliente potencial.
En Flow Designer, debajo del nodo Para cada , haga clic en el icono + y seleccione el elemento Asignación .
Ingrese un nombre en laetiqueta ; el nombre de API se completará automáticamente.
Establecer valores de variables
Fila 1 :
Campo : Asunto
Valor : Cliente potencial eliminado de la cadencia de participación en ventas
Haga clic enAgregar tarea
Fila 2 :
Campo : Estado
Valor : No iniciado
Haga clic enAgregar tarea
Fila 3 :
Campo : Prioridad
Valor : Alto
Haga clic en Agregar tarea
Fila 4 :
Campo : Fecha de actividad
Valor : {!$Flujo.FechaActual}
Haga clic enAgregar tarea
Fila 5 :
Campo : WhoId
Valor : {!Loop_Through_Leads.Id}
Haga clic enAgregar tarea
Fila 6 :
Campo : ID de propietario
Valor : {!Loop_Through_Leads.OwnerId}
Haga clic en Listo.
Paso 2.5: Agregar un elemento de asignación para agregar la variable de registro a la variable de colección de registros
Cree una tareade tipovarR_Tasks de recopilación de registros para almacenar la variable de registro (creada en el paso 2.4) para el proceso masivo.
En Flow Designer, haga clic en el icono + y seleccione el elemento Asignación .
Ingrese un nombre en laetiqueta ; el nombre de API se completará automáticamente.
Establecer valores de variables
Fila 1:
Campo:{!varR_Tasks}
Operador:Agregar
Valor:{!varR_Task}
Haga clic en Listo.
Paso 2.6: Agregar un elemento Crear registros para crear tareas
En Flow Designer, debajo del nodo Después del último , haga clic en el icono + y seleccione el elemento Crear registros .
Ingrese un nombre en laetiqueta ; el nombre de API se completará automáticamente.
Para Cuántos registros crear, seleccione Múltiples.
Colección de registros de mapas: {!varR_Tasks}
Haga clic en la X en la parte superior para guardar los cambios.
Al final, Benjamin'sFlowse verá como la siguiente captura de pantalla:
Una vez que todo se vea bien, realice los pasos a continuación:
Haga clic enGuardar.
Ingrese la etiqueta de flujo(CadenceTracker); el nombre de la API se completará automáticamente.
Versión API para ejecutar el flujo : 59
Etiqueta de la entrevista : CadenceTracker{!$Flow.CurrentDateTime}
Haga clic enGuardar.
¡Casi llegamos! Una vez que todo se vea bien, haga clic en el botón Activar .
Paso 3: Activadores asincrónicos de Apex para eventos de cambio
Tiene la opción de recibir notificaciones de cambios en la plataforma Lightning suscribiéndose para cambiar eventos a través de activadores de Apex. Si bien los activadores de Apex para eventos de cambio comparten similitudes con los de los objetos estándar de Salesforce, también existen distinciones notables. Al igual que los activadores de Apex tradicionales para objetos de Salesforce, usted crea un activador de evento de cambio para el evento de cambio específico asociado con el objeto de Salesforce. Vale la pena señalar que en este contexto solo se admiten activadores posteriores a la inserción.
El desencadenador de evento de cambio se activa cuando se recibe uno o un lote de eventos de cambio. A diferencia de los activadores de objetos, los activadores de eventos de cambio se ejecutan de forma asincrónica una vez completada la transacción de la base de datos. La ejecución asincrónica hace que los desencadenadores de eventos de cambio sean ideales para procesar la lógica empresarial que consume muchos recursos y al mismo tiempo mantener la lógica basada en transacciones en el desencadenador de objetos. Al desacoplar el procesamiento de cambios, los desencadenantes de eventos de cambio pueden ayudar a reducir el tiempo de procesamiento de las transacciones.
Los desencadenantes de eventos de cambio tienen estas características.
Se ejecutan bajo la entidad Proceso Automatizado. Como tal, los registros de depuración para el desencadenador son creados por la entidad de proceso automatizado y los campos del sistema, como CreadoById y OwnerId, hacen referencia al proceso automatizado.
Están sujetos a los límites del gobernador síncrono de Apex.
Tienen un tamaño de lote máximo de 2000 mensajes de eventos (la cantidad de elementos en Trigger.New).
Cree un desencadenador de Apex en el objeto ActionCadenceTrackerChangeEvent .
desencadenar ActionCadenceTrackerAsyncTrigger en ActionCadenceTrackerChangeEvent (después de insertar) { ActionCadenceTrackerAsyncTriggerHandler.handleChangeEvent(Trigger.new);
}
Cree una clase de Apex ActionCadenceTrackerAsyncTriggerHandler , como se muestra a continuación.
clase pública ActionCadenceTrackerAsyncTriggerHandler { handleChangeEvent vacío estático público (List<ActionCadenceTrackerChangeEvent> changeEvents) { Set<Id> actionCadenceTrackerIds = nuevo Set<Id>(); for(evento ActionCadenceTrackerChangeEvent: eventos de cambio) { encabezado EventBus.ChangeEventHeader = evento.ChangeEventHeader; if (header.changetype == 'ACTUALIZAR' && event.CompletionReason == 'Manualmente eliminado') { Lista<Id> recordIds = header.getRecordIds(); actionCadenceTrackerIds.addAll(recordIds); } } if(!actionCadenceTrackerIds.isEmpty()) { encontrarRelatedLeads(actionCadenceTrackerIds); } } findRelatedLeads vacío estático privado (Set<Id> actionCadenceTrackerIds) { Lista<Lead> AssociatedLeads = [Seleccione ID, OwnerId de plomo donde Id IN (SELECCIONAR targetId DESDE ActionCadenceTracker DÓNDE ID EN: actionCadenceTrackerIds AND Target.Type = 'Cliente')]; if(!asociadosLeads.isEmpty()) { runFlow (líderes asociados); } } runFlow vacío estático privado (List<Lead> leads) { Mapa<Cadena, Objeto> params = nuevo Mapa<Cadena, Objeto>(); params.put('varR_Leads', clientes potenciales); Flow.Interview.CadenceTracker myFlow = nuevo Flow.Interview.CadenceTracker(params); miFlow.start(); }
}
Prueba de concepto
De ahora en adelante, si un usuario elimina un cliente potencial de la cadencia de participación de ventas, Change Data Capture (CDC) publicará un evento. Más adelante, un activador de Apex y un flujo crearán una tarea para el propietario principal.
El primer paso es asignar la cadencia de participación de ventas a un cliente potencial.
El siguiente paso es eliminar manualmente el cliente potencial de la cadencia de participación en ventas.
Tarea creada por automatización.
Evaluación formativa:
¡Quiero saber de ti!
¿Qué es lo que aprendiste de esta publicación? ¿Cómo imagina aplicar este nuevo conocimiento en el mundo real? Siéntete libre de compartir en los comentarios a continuación.
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.
…
Desmitificando Light DOM y sus casos de uso | Blog de desarrolladores de Salesforce
Light DOM es una función de Lightning Web Components que ha estado disponible de forma general en Lightning Experience, Experience Cloud, LWC OSS (código abierto) y todas las versiones de la aplicación móvil Salesforce desde Summer '23 .
Los componentes web Lightning, de forma predeterminada, se representan en DOM oculto , lo que proporciona una encapsulación y seguridad sólidas para sus componentes. Sin embargo, al mismo tiempo, evita el estilo global y bloquea las integraciones de terceros que introspeccionan el interior de sus componentes. Light DOM es una característica que se puede habilitar de forma granular en componentes seleccionados, de modo que Shadow DOM no los afecte.
¿Cómo funciona el DOM ligero?
Usemos un componente web Lightning muy simple como ejemplo.
holaCodey.html
<dx-code-block title language="html" code-block="
Hello Codey!
«>
holaCodey.js
En el ejemplo anterior, el DOM oculto predeterminado del componente evita que una regla CSS definida en el componente principal o el host alcance el elemento <p> . Además, no permite que el código JavaScript externo al componente consulte el elemento <p> mediante las API de consulta del navegador.
Para activar el DOM ligero para un componente, debe especificar el renderMode ligero en su archivo JavaScript y la directiva de plantilla lwc:render-mode en la etiqueta <template> del componente. Ambos cambios son necesarios debido a la forma en que se compilan los componentes web Lightning.
holaCodey.html
<dx-code-block title language="html" code-block="
Hello Codey!
«>
holaCodey.js
Cuando activa el DOM claro en un componente, el marcado del componente se adjunta al elemento anfitrión en lugar de a su árbol de sombra. Luego puede acceder al marcado desde otros componentes de la página como cualquier otro contenido en el host del documento que no esté protegido por Shadow DOM.
Los componentes DOM ligeros permiten el uso de API de consulta de navegador estándar como querySelector y querySelectorAll . En este caso, en lugar de usar this.template.querySelector , debes usar this.querySelector .
holaCodey.js
O más simplemente, a menudo puedes usar la directivalwc:ref en ambos casos (componentes DOM sombreados y claros) y omitir el querySelector .
holaCodey.html
<dx-code-block title language="html" code-block="
Hello Codey!
«>
holaCodey.js
Cuándo usarlo y cuándo no usarlo
Light DOM es una opción para cada componente individual. Sus efectos no se aplicarán a otros componentes a menos que también opten por participar. Tenga en cuenta que los componentes base siempre se representan en DOM oculto.
Recomendamos habilitar DOM ligero si tiene bibliotecas que necesitan acceder a los componentes internos mediante API de consulta de navegador estándar, aplicar estilos globales o necesita más flexibilidad para implementar las mejores prácticas de accesibilidad, siempre y cuando el componente no exponga datos confidenciales. Cubriremos estos casos de uso con más profundidad en la siguiente sección.
No recomendamos habilitar DOM ligero para un componente si ese componente aparece o funciona con datos confidenciales. El uso de DOM ligero elimina la encapsulación de DOM en sombra y expone los componentes al raspado de DOM. Por lo tanto, tenga en cuenta esta importante consideración.
Casos de uso habilitados por DOM ligero
Light DOM permite varios casos de uso que anteriormente no eran compatibles.
1) Soporte de bibliotecas que necesitan acceso a las partes internas de un componente
Light DOM permite el uso de bibliotecas que necesitan acceso a los componentes internos. Un buen ejemplo de esto son las bibliotecas de análisis utilizadas en los sitios de Experience Cloud, como Google Analytics, ya que necesitan acceso a los componentes internos para obtener mejores resultados.
Podemos probar este caso de uso, incluido el componente helloCodey anterior, en un componente principal mascotChanger de la siguiente manera.
mascotChanger.html
<dx-code-block title language="html" code-block="
«>
mascotChanger.js
Tenga en cuenta que, aunque el párrafo consultado pertenece al componente helloCodey , podemos acceder a él con this.template.querySelector , porque pertenece al DOM ligero secundario. Sin embargo, si el componente helloCodey no tuviera habilitado el DOM ligero, querySelector habría devuelto null .
También puede acceder a los componentes internos del DOM ligero desde un script que se carga como un recurso estático en la página, siempre y cuando todos los componentes ancestros estén habilitados para el DOM ligero. Por ejemplo, en un sitio LWR Experience Cloud, que es DOM completamente ligero, puede agregar un recurso estático de JavaScript que encuentre los componentes internos helloCodey de la siguiente manera.
myJSResource.js
2) Implementación más sencilla de componentes profundamente anidados
Otro ejemplo en el que esto puede resultar útil es implementar componentes complejos y profundamente anidados. En ese caso, es posible que prefiera tener un único componente DOM de sombra en el nivel superior y componentes DOM claros dentro para evitar gastos generales. Por ejemplo, un componente de tabla de datos personalizado puede tener solo un gran componente DOM de sombra alrededor de todo, en lugar de una sombra para cada fila y celda de la tabla.
Esta implementación facilita la consulta de sus propios elementos desde el componente de nivel superior de su jerarquía y también la implementación de la accesibilidad. Además, hay una ligera mejora en el rendimiento en algunos casos de uso al usar DOM claro sobre DOM sombreado, lo que se debe principalmente a la sobrecarga de simplemente crear nodos de sombra adicionales.
3) Estilo global
Light DOM también facilita el estilo global, ya que permite que los estilos CSS caigan en cascada en el marcado del componente. Por ejemplo, un componente DOM ligero puede establecer un estilo que se carga y luego se aplica una vez para todos los componentes DOM ligeros de la página. La inyección de estilos globales a través de DOM ligero solo se admite en sitios de Experience Cloud, editor de contenido CMS o Sales Enablement.
Por ejemplo, definamos un componente colorChanger de la siguiente manera.
colorChanger.html
<dx-code-block title language="html" code-block="
«>
colorChanger.js
colorChanger.css
El color de fondo azul se aplicará a los párrafos de todas las instancias del componente helloCodey en la página, ya que está habilitado para DOM claro.
En la mayoría de los casos, no querrás que tu estilo se filtre a otros componentes. Eso todavía es posible para componentes DOM ligeros. Solo necesita colocar esas reglas de estilo en un archivo *.scoped.css , para que tengan como alcance el componente DOM ligero. El CSS con alcance está escrito exactamente igual que el CSS normal, pero solo se aplicará a ese componente sin filtrarse.
Tenga en cuenta que si las reglas de estilo se cargan globalmente como recursos estáticos en una página de Lightning Experience o un sitio de Experience Cloud, se les quitará el alcance y se aplicarán tanto a los componentes DOM claros como también a los componentes DOM de sombra, ya que la sombra sintética no evitará que se filtren. Esta es una limitación que se solucionará una vez que la sombra nativa sea totalmente compatible (actualmente en Developer Preview ). Cuando la sombra nativa está habilitada, solo los componentes habilitados para DOM claro heredarán los estilos globales.
4) Implementación más flexible de las mejores prácticas de accesibilidad
Light DOM permite que un componente haga referencia a la idun elemento que vive en otro componente separado habilitado para Light DOM. Esto le permite vincular dos elementos utilizando los atributos idy aria , lo que le otorga flexibilidad adicional para implementar las mejores prácticas de accesibilidaden sus proyectos. Mejoremos nuestro componente mascotChanger para demostrar esto.
mascotChanger.html
<dx-code-block title language="html" code-block="
«>
mascotChanger.js
mascotaNombreInput.html
<dx-code-block title language="html" code-block="
«>
mascotaNombreEtiqueta.html
<dx-code-block title language="html" code-block="
«>
Tenga en cuenta que Salesforce está trabajando actualmente con el W3C para agregar nuevos estándares, de modo que el DOM oculto nativo pueda participar en estos patrones de accesibilidad. Esto significa que, en el futuro, este caso de uso ligero de DOM no será necesario. Como parte de nuestros esfuerzos de accesibilidad, también patrocinamos a Igalia para implementar parcialmente ARIA Element Reflection , que ahora es totalmente compatible con Safari y parcialmente con Chrome. Si quieres saber más sobre este tema, echa un vistazo a nuestra propuesta cross-root-aria , el repositorio para el grupo de trabajo Modelo de objetos de accesibilidad .
La siguiente tabla resume los casos de uso y dónde se admiten.
Experiencia en la nube
Experiencia relámpago
Aplicaciones móviles de Salesforce
LWC OSS/LWR en Node.js*
Soporte de bibliotecas que necesitan acceso a las partes internas de los componentes.
Sí
Sí
Sí
Sí
Implementación más sencilla de componentes profundamente anidados
Sí
Sí
Sí
Sí
Estilo global
Sí
No
No
Sí
Implementación más flexible de las mejores prácticas de accesibilidad
Sí
Sí
Sí
Sí
*Si se utiliza DOM de sombra nativo en lugar de sombra sintética . La sombra nativa es la opción predeterminada para LWC OSS y LWR en Node.js.
Otras Consideraciones
Cuando se trabaja con DOM ligero, hay algunas consideraciones adicionales a tener en cuenta, entre ellas:
No hay soporte de navegador para espacios fuera del DOM oculto, por lo que se emula. Esto implica que algunas funciones, como los enlaces de ciclo de vida, no están disponibles en ellos. Eche un vistazo a ladocumentación para saber más.
Por ahora, los componentes ligeros habilitados para DOM no se pueden empaquetar.
Conclusión
En esta publicación de blog, revisamos qué es el DOM ligero, los casos de uso que permite y las consideraciones a tener en cuenta para decidir qué componentes habilitarán la función. Todos los ejemplos que se muestran en este blog se encuentran en un repositorio de GitHub que puedes probar tú mismo.
Para obtener más información sobre DOM ligero en la plataforma Salesforce, lea la documentación o, si está trabajando fuera de la plataforma, lea la documentación OSS .
Si decide seguir adelante y transformar sus componentes DOM ocultos en componentes DOM claros, consulte esta herramienta creada por Salesforce Engineering para simplificar la migración.
Sobre el Autor
Alba Rivastrabaja como Principal Developer Advocate en Salesforce. Puedes seguirla enLinkedin , Twitter o GitHub .
Obtenga las últimas publicaciones de blog y episodios de podcasts para desarrolladores de Salesforce a través de Slack o RSS.