Escrito por Viraj Jasani y Andrew Purtell Los datos son el motor de las operaciones de Salesforce y ayudan a nuestros clientes a tomar mejores decisiones a diario. El equipo de almacenamiento de Big Data (BDS), una parte clave de la organización de ingeniería de Salesforce, despliega posiblemente una de las mayores huellas de producción de bases de datos distribuidas. Esta infraestructura se basa en la combinación de […]
TL;DR:PyRCA es una biblioteca de aprendizaje automático de código abierto diseñada específicamente para realizar análisis de causa raíz (RCA) en operaciones de TI. Ofrece un marco integral que permite a los usuarios identificar fácilmente las dependencias causales métricas complicadas y localizar automáticamente las causas raíz de los incidentes. La biblioteca proporciona una interfaz unificada
Ú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
Última actualización el 25 de octubre de 2023 por Rakesh Gupta Salesforce es la plataforma CRM líder en el mundo por una razón: está en constante evolución e innovación, impulsando un crecimiento masivo en el ecosistema. El ecosistema de servicios y productos de Salesforce ha crecido significativamente en los últimos años. En 2021, IDC publicó un estudio en el que se
The post Salesforce Velocity con Sweep: A New Operational State of Mind appeared first on Campeón de la Automatización.
Última actualización en October 29, 2023 por Rakesh Gupta Big Idea or Enduring Question: Cómo se asignan automáticamente los clientes potenciales recién creados a una cadencia de compromiso de ventas? Objetivos: Después de leer este blog, serás capaz de: Trabajar con el objeto ActionCadence para conocer una Cadencia. Asignar un compromiso 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:
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.
Anteriormente, si queríamos probar el flujo, necesitábamos escribir una clase de prueba de Apex para el flujo. Con la versión Summer '22, Salesforce introdujo un marco de prueba para flujos activados por registros para automatizar las pruebas de flujos. Ahora podemos dejar que Salesforce pruebe el flujo, asegurarnos de que los resultados cumplan con las expectativas y resaltar cuando no lo sean. Ahora podemos crear y ejecutar pruebas dentro del propio generador de flujo, de forma declarativa sin escribir ningún código.
Cómo funciona
Establecer detalles de prueba, desencadenante y ruta
Proporciona una etiqueta de prueba de flujo y una descripción de la prueba. Establezca el activador de prueba en Creado/actualizado según el escenario. La ruta de la prueba está configurada para Ejecutar inmediatamente.
Establecer registro de activación inicial/actualizado
Usando la función de búsqueda, podemos buscar el registro para usarlo como plantilla inicial. Tras la selección del registro, los campos se completan a partir del registro seleccionado. La prueba hereda los valores de campo del registro seleccionado. Sin embargo, podemos modificar los valores de estos campos antes de finalizar la prueba. La prueba no está vinculada a este registro pero contiene y utiliza sus valores de campo.
Establecer afirmaciones
La aserción es una forma de comparar el resultado real con el resultado previsto. Si coinciden, entonces la afirmación se evalúa como verdadera. De lo contrario, la afirmación falla. Escriba las siguientes afirmaciones para garantizar que se cumplan los criterios de entrada de registros para el flujo y se logre el resultado esperado.
Ejecutar prueba y ver detalles
Haga clic en el botón "Ver pruebas", seleccione el menú desplegable de la prueba de flujo que queremos ejecutar y seleccione Ejecutar prueba y ver detalles.
La prueba de flujo se ejecuta y resalta el camino que tomó la prueba. Si necesitamos probar el flujo, simplemente podemos ejecutar la prueba. Ya no es necesario configurar los datos de prueba mediante programación. ¡Esto aumenta la eficiencia de las pruebas! Si necesitamos realizar una mejora en este flujo en el futuro, necesitaremos actualizar el registro de prueba asociado en consecuencia.
Beneficios
Fácil y cómodo de usar: podemos crear registros de prueba a través de la interfaz de usuario y ponerlos a prueba.
Tiempo y esfuerzo: reduce el tiempo y el esfuerzo necesarios, ya que no necesitamos escribir código, solo crear registros desde la interfaz de usuario y realizar afirmaciones.
No afectará la cobertura del código existente a nivel de clase: si migramos cualquier funcionalidad del activador al flujo, la lógica subyacente del activador/clase también se limpia manualmente como parte de este ejercicio. Esto no reducirá la cobertura del código de la clase ya que la lógica se elimina por completo.
Cobertura de la prueba de flujo: el porcentaje de cobertura no se captura en la prueba de flujo como podemos hacerlo a través de la clase Apex. Más bien es capaz de cubrir nodos. Una vez seleccionamos “Ejecutar prueba y ver detalles”. La ruta resaltada en amarillo representará la cobertura real del flujo desde el principio hasta el final del nodo.
Desventaja
Solo puede crear pruebas de flujo para crear, actualizar o crear/actualizar flujos activados por registros. Aún no se admite la eliminación de flujos activados por registros. – Solo para el escenario de eliminación de registros podemos escribir una clase de prueba
Puede afectar la cobertura general: dado que la cobertura de prueba general se calcula en función de la cobertura de prueba de todas las clases combinadas (promedio), si migramos cualquier característica que tenga una cobertura de prueba más alta en la clase ápice relevante, podría reducir el porcentaje de cobertura general del código. (Como actualmente solo nos estamos enfocando en migrar el activador relacionado con la cuenta para fluir, solo se ve afectada 1 clase de prueba, por lo que no hay cambios significativos en la cobertura del código Apex).
Las pruebas de flujo no admiten rutas de flujo que se ejecuten de forma asincrónica. Sin embargo, no tenemos flujo asíncrono en nuestra organización. Estamos creando flujos para cubrir escenarios que se ejecutan sincrónicamente.
Recomendación
Podemos comenzar a dar pasos para pasar a la prueba de flujo a medida que Salesforce realiza mejoras continuas en el flujo, por lo que en versiones futuras, podemos esperar que la prueba de flujo incluya más mejoras y reduzca las limitaciones.
Podemos comenzar escribiendo una prueba de flujo para las actualizaciones rápidas de campos (antes) de los flujos de activación de registros.
Mejorar la cobertura de prueba de las clases que tienen menos cobertura para que podamos usar la prueba de flujo.
Preguntas más frecuentes
¿Cuál es el porcentaje de cobertura para implementar Flow?
En relación con las pruebas de Apex, las pruebas de flujo no se consideran parte de la cobertura de pruebas como en el 75%+ para el despliegue de productos.
¿Brindan cobertura de código como lo hace la clase de prueba? Si no, ¿debemos pensar en eliminar el flujo de la cobertura de prueba?
Sí, cubren resaltando nodo por nodo.
¿Puede confirmar si la prueba de flujo permite ejecutar pruebas masivas?
No, no admite pruebas de registros masivos. En la mayoría de los escenarios relacionados con desencadenantes, hemos creado un registro individual en la clase de prueba y verificamos los escenarios de prueba. Si reemplazamos esos desencadenantes con flujos, no habrá una gran diferencia en los casos de prueba.
¿La prueba de flujo admite la asincronía?
Las pruebas de flujo no admiten rutas de flujo que se ejecuten de forma asincrónica. Sin embargo, no tenemos flujo asíncrono en nuestra organización. Estamos creando flujos para cubrir escenarios que se ejecutan sincrónicamente.
¿Cuál es el rendimiento de las pruebas de flujo en comparación con las clases de prueba?
No veo ninguna documentación oficial, pero creo que la prueba de flujo será más rápida en comparación con la clase de prueba porque cuando ejecutamos una prueba creará una instancia de la clase y llamará a métodos individuales. Podemos ejecutar casos de prueba individuales utilizando una prueba de flujo, pero no es posible ejecutar un solo método individual desde la clase de prueba, lo que lleva mucho tiempo.
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 abiertaexistente 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:
Actualizar campos en registros nuevos o modificados: significa que desea actualizar los campos en el registro que inició el Flujo
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ónpara verificar si el registro de oportunidad fue creado o actualizado.
En Flow Designer, haga clic en el icono + y seleccione el elemento Decisión .
Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
En Detalles del resultado ,ingrese la etiqueta que el nombre de la API se completará automáticamente.
Requisitos de condición para ejecutar el resultado : se cumplen todas las condiciones (Y)
Fila 1:
Recurso : {!$Record.Id}
Operador : es nulo
Valor : {!$ConstanteGlobal.Verdadero}
Cuándo ejecutar el resultado : si se cumplen los requisitos de la condición
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 registrospara encontrar oportunidades abiertas relacionadas en la cuenta.
En Flow Designer, debajo del nodo Creado , haga clic en el icono + y seleccione el elemento Obtener registros .
Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
Seleccione elobjeto Oportunidad de la lista desplegable.
SeleccioneSe cumplen todas las condiciones (Y).
Establecer condiciones de filtro
Fila 1:
Campo : ID de cuenta
Operador : Igual
Valor : {!$Record.AccountId}
Haga clic en Agregar condición
Fila 1:
Campo : EstáCerrado
Operador : Igual
Valor : {!$ConstanteGlobal.Falso}
Cuántos registros almacenar:
seleccioneTodos los registros
Cómo almacenar datos de registro:
Elija la opción para Almacenar automáticamente todos los campos .
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.
En Flow Designer, haga clic en el icono + y seleccione el elemento Decisión .
Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
En Detalles del resultado , ingrese la etiqueta que el nombre de la API se completará automáticamente.
Requisitos de condición para ejecutar el resultado : se cumplen todas las condiciones (Y)
Fila 1:
Recurso: {!Get_Related_Opportunity}
Operador: es nulo
Valor: {!$ConstanteGlobal.Falso}
Cuándo ejecutar Resultado : Si se cumplen los requisitos de la condición.
Haga clic enListo .
Paso 5: agregar un elemento de error personalizado para mostrar mensajes de error
En el nodo Sí , seleccione el elemento Error personalizado .
Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
Establecer detalles del mensaje de error 1
Dónde mostrar el mensaje de error : en una ventana en una página de registro
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.
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:
Haga clic en Guardar .
Ingrese la etiqueta de flujo, el nombre de la API se completará automáticamente.
Haga clic en Mostrar avanzado .
Versión de API para ejecutar el flujo : 59
Etiqueta de entrevista : regla de validación personalizada mediante flujo {!$Flow.CurrentDateTime}
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
El límite para el campo del mensaje de error es de 255 caracteres.
Solo puede agregar un mensaje de error para una página.
Solo puede agregar un mensaje de error por campo.
no es posible utilizar el enlace con su mensaje de error.
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. Leaeste 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.
Última actualización el 29 de junio de 2023 por Rakesh Gupta
Gran idea o pregunta duradera:
¿Cómo puede aprovechar la API de zona horaria de Google para actualizar automáticamente la información de zona horaria de un cliente potencial en función de sus coordenadas geográficas?
Objetivos:
Después de leer este blog, podrá:
Jestilla Zetkin se desempeña actualmente como arquitecta de Salesforce en Gurukul On Cloud (GoC). El Director Comercial le ha confiado a Jestilla un desafío único. El objetivo es asegurarse de que, en el momento de la creación, los prospectos de Salesforce (creados a través de Web-to-lead) reciban los detalles exactos de la zona horaria, que se determinan en función de sus respectivas coordenadas geográficas.
El caso de uso comercial requiere que usemos la API de zona horaria de Google para actualizar automáticamente cuatro campos específicos en los clientes potenciales:
dstOffset (la compensación del horario de verano en segundos)
rawOffset (el desplazamiento de la hora universal coordinada para la zona horaria de la ubicación dada)
timeZoneId (una cadena que identifica de forma única la zona horaria)
y timeZoneName (el nombre largo de la zona horaria)
En caso de una respuesta fallida, instituya una acción de contingencia para crear una tarea para el propietario designado del cliente potencial.
¿Qué es la API de zona horaria de Google?
Hay muchas posibilidades de que su base de clientes esté repartida en varias zonas horarias. Este factor puede influir en gran medida en sus interacciones con ellos, especialmente al programar llamadas, reuniones o enviar mensajes automáticos. La plataforma de Salesforce ofrece un entorno altamente adaptable para almacenar y administrar datos de clientes, pero de forma predeterminada, no proporciona una forma de registrar automáticamente la zona horaria del cliente potencial en función de sus coordenadas geográficas.
La API de zona horaria de Google es un servicio ofrecido por Google como parte de su plataforma Google Maps. La API proporciona datos de zona horaria para cualquier ubicación en todo el mundo en función de las coordenadas de latitud y longitud. Este servicio puede ser particularmente útil para los desarrolladores que necesitan ajustar la comunicación de acuerdo con la ubicación geográfica de un cliente potencial o contacto o para empresas que operan en diferentes zonas horarias.
La API de zona horaria proporciona la siguiente información:
El ID de la zona horaria , según lo define la base de datos de zonas horarias de la IANA (por ejemplo, America/New_York ).
El nombre de la zona horaria (por ejemplo, hora de verano del este ).
La diferencia horaria con respecto a la hora universal coordinada (UTC) sin tener en cuenta el horario de verano (rawOffset).
El desfase horario debido al horario de verano (dstOffset).
Tenga en cuenta que la API de zona horaria de Google está sujeta a cargos, por lo que es importante comprender las implicaciones de costos antes de implementarla.
¿ Cómofunciona la API de zona horaria de Google?
La API de zona horaria de Google funciona tomando coordenadas de latitud y longitud y devolviendo datos de zona horaria en formato JSON. Aquí hay un ejemplo básico de cómo usarlo.
La siguiente solicitud HTTP GET obtiene información de zona horaria para una ubicación en la latitud 40.712776 y longitud -74.005974 (ciudad de Nueva York), y asume que está realizando la solicitud en una determinada marca de tiempo (marca de tiempo UNIX).
En la URL de solicitud anterior, reemplace YOUR_API_KEY con su clave API real.
Aquí hay una respuesta de muestra en formato JSON que la API podría devolver:
{ "dstOffset": 3600, "compensación sin procesar": -18000, "estado": "OK", "timeZoneId": "América/Nueva_York", "timeZoneName" : "Hora de verano del Este"
}
La respuesta incluye la siguiente información:
dstOffset : La compensación del horario de verano en segundos. Será cero si la zona horaria no está en el horario de verano durante la marca de tiempo especificada.
rawOffset : el desplazamiento de UTC (sin contar el horario de verano) en segundos.
estado : una cadena que indica el estado de la solicitud. “OK” significa que la solicitud fue exitosa.
timeZoneId : una cadena que contiene el ID "tz" de la zona horaria (por ejemplo, "América/Nueva_York").
timeZoneName : una cadena que contiene el nombre de forma larga de la zona horaria (por ejemplo, "hora de verano del este").
Recuerde, en la URL de solicitud, se requiere el parámetro de marca de tiempo y el parámetro de ubicación espera coordenadas de latitud y longitud.
Marca de tiempo : el tiempo deseado en segundos desde la medianoche del 1 de enero de 1970 UTC. La API de zona horaria utiliza la marca de tiempo para determinar si se debe aplicar o no el horario de verano, según la zona horaria de la ubicación.
Ubicación : una tupla de latitud, longitud separada por comas, ubicación = 40.712776, -74.005974, que representa la ubicación para buscar.
Además, no olvide incluir su clave API.
Beneficios de usar la API de zona horaria de Google
La API de zona horaria de Google ofrece una serie de beneficios significativos, especialmente para desarrolladores y empresas que necesitan operar en diferentes zonas horarias. Estos son algunos de los beneficios clave:
Precisión : la API de zona horaria de Google proporciona datos de zona horaria precisos para cualquier ubicación en todo el mundo. Tiene en cuenta tanto la zona horaria 'sin procesar' como el horario de verano, lo que garantiza que siempre tenga la hora local correcta.
Facilidad de uso : la API es fácil de usar y solo requiere la latitud y la longitud como entradas. Devuelve datos en un formato JSON estructurado, que es fácil de analizar y usar en varias aplicaciones.
Cobertura global : la API proporciona datos de zona horaria para ubicaciones en todo el mundo, lo que la hace útil para empresas globales y aplicaciones con bases de usuarios internacionales.
Confiabilidad : como servicio proporcionado por Google, es altamente confiable, lo que garantiza que tenga acceso constante a los datos de la zona horaria cuando los necesite.
Integración : se puede integrar en una variedad de aplicaciones y plataformas, incluidas aplicaciones móviles, servicios web y plataformas de CRM como Salesforce. Esto permite funcionalidades como la programación de comunicaciones en diferentes franjas horarias, etc.
Información actualizada : Google actualiza continuamente sus bases de datos, lo que garantiza que los datos devueltos por la API de zona horaria, como los cambios de horario de verano, estén siempre actualizados.
Al aprovechar estos beneficios, las empresas pueden mejorar la experiencia del cliente, aumentar la eficiencia operativa y garantizar un registro de datos preciso, entre otras ventajas.
Antes de comenzar a usar la API de zona horaria, necesita un proyecto con una cuenta de facturación y la API de zona horaria habilitada. Aquí hay una guía paso a paso para configurar su proyecto de Google Cloud y habilitar la API de zona horaria:
Si ha creado un proyecto anteriormente, puede seleccionarlo de la lista desplegable en la parte superior. De lo contrario, haga clic en Nuevo proyecto en la parte superior derecha.
Asigne un nombre a su proyecto y, opcionalmente, también puede editar el ID del proyecto.
Haga clic en Crear para crear el proyecto.
Paso 2: configurar una cuenta de facturación
Debe vincular una cuenta de facturación a su proyecto para usar la API de zona horaria de Google. Así es cómo:
En Google Cloud Console, abra el menú del lado izquierdo de la consola y haga clic en Facturación .
Si tiene una o más cuentas de facturación, elija una cuenta y asóciela con su proyecto. De lo contrario, haga clic en Crear cuenta , complete el formulario para crear una nueva cuenta de facturación y luego asóciela con su proyecto.
Paso 3: habilite la API de zona horaria
Una vez que haya configurado su proyecto y su cuenta de facturación, puede habilitar la API de zona horaria.
En Google Cloud Console, abra el menú del lado izquierdo de la consola y vaya a API y servicios | biblioteca
En la biblioteca de API, busque API de zona horaria y selecciónela.
En la página de la API de zona horaria, haga clic en Habilitar .
Paso 4: Genere su clave API
Finalmente, necesita una clave de API para autenticar sus solicitudes en la API de zona horaria.
En Google Cloud Console, abra el menú del lado izquierdo de la consola y vaya aAPI y servicios | Cartas credenciales.
Haga clic en el botón + CREAR CREDENCIALES en la parte superior y seleccione Clave API .
Su nueva clave de API se creará y se mostrará. Cópielo y guárdelo de forma segura. Necesitará esta clave para realizar solicitudes a la API de zona horaria.
Ahora, su proyecto de Google Cloud está todo configurado y puede comenzar a usar la API de zona horaria de Google.
👉 Si bien la API de zona horaria es compatible con OAuth 2.0 y la cuenta de servicio para la autenticación, esta guía se enfoca en el método de clave de API más simple por razones de brevedad. Si necesita un método de autenticación más seguro o complejo, consulte la documentación de autenticación oficial de Google.
Enfoque de Campeón de Automatización (I-do):
Si bien esto se puede resolver utilizando varias herramientas de automatización como Apex Trigger y otras, utilizaremos Salesforce Flow y la función de flujo HTTP Callout (GET) recientemente introducida .
HTTP Callout extrae o envía datos entre la base de datos de Salesforce y un sistema externo a través de Flow Builder sin usar código. Puede configurar integraciones directas según sea necesario sin tener que trabajar con un desarrollador o llamar a una herramienta de middleware, como Mulesoft. Después de configurar la acción de llamada HTTP en un flujo, Flow Builder genera automáticamente un registro de servicio externo , una acción invocable y una clase de Apex que puede usar para crear un recurso definido por Apex para flujos. A continuación, puede utilizar la salida de datos de la solicitud de la API como entrada en Flow Builder y en Salesforce.
Puede usar HTTP Callout para conectar un flujo a una variedad de API.
Obtener información de direcciones usando una API de mapa
Obtén las condiciones meteorológicas con una API de servicios meteorológicos
Genere el código de barras con una API de servicio de código de barras
Obtenga información de autorización de pago con una API de procesamiento de pagos
y mucho más
Antes de discutir la solución, permítame mostrarle un diagrama del proceso a un 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 3 pasos para resolver el requisito empresarial de Jestilla mediante Record-Triggered After-SaveFlow . Debemos:
Cree campos personalizados en el cliente potencial para almacenar la respuesta
Crear una credencial con nombre
Flujo de fuerza de ventas
Definir propiedades de flujo para el flujo desencadenado por registro
Agregue una fórmula para calcular la marca de tiempo
Configurar una llamada HTTP GET para la API de zona horaria
Agregue un elemento de decisión para verificar el código de respuesta
Agregue un elemento Actualizar registros para actualizar el prospecto
Agregue un elemento Crear registros para crear una tarea para que el propietario del cliente potencial maneje la respuesta de error
Paso 1: Cree campos personalizados en el objeto principal para almacenar la respuesta
En este paso, hemos establecido campos personalizados dentro del objeto principal. Estos servirán como repositorios para los datos de respuesta de la API de zona horaria de Google.
Etiqueta de campo
Nombre de API de campo
Tipo de datos
dstOffset
dstOffset __c
Número (18,0)
rawOffset
rawOffset__c
Número (18,0)
Posición actual
Posición_actual__c
Geolocalización
Identificación de zona horaria
Time_Zone_Id__c
Texto (255)
Nombre de zona horaria
Nombre_de_la_zona_horaria__c
Texto (255)
Paso 2: crear una credencial con nombre
Haga clic en Configuración .
En el cuadro Búsqueda rápida, ingrese Credenciales con nombre y luego seleccione Credenciales con nombre .
Haga clic en Nuevo legado .
Rellene la página con la URL y los parámetros de autenticación del extremo de la llamada.
Haga clic en Guardar .
Paso 3.1: Definir propiedades de flujo
Haga clic en Configuración .
En el cuadro Búsqueda rápida, escriba Flujos .
Seleccione Flujos , luego haga clic en Nuevo flujo .
Seleccione la opción Flujo activado por registro , haga clic en Crear
Objeto: Plomo
Activar el flujo cuando: se crea un registro
Establecer condiciones de entrada: se cumplen todas las condiciones (Y)
Fila 1:
Campo : Posición_Actual__Latitud__s
Operador : es nulo
Valor : {!$ConstanteGlobal.Falso}
Haga clic en + Agregar condición
Fila 2:
Campo : Posición_Actual__Longitud__s
Operador : es nulo
Valor : {!$ConstanteGlobal.Falso}
Optimizar el flujo para:acción y registros relacionados
Elija la opción para incluir una ruta de ejecución asíncrona para acceder a un sistema externo después de que la transacción original para el registro de activación se confirme con éxito .
Haga clic en Listo.
Paso 3.2: fórmula para calcular la marca de tiempo
En Caja de herramientas , seleccione Administrador y luego haga clic en Nuevo recurso para calcular los segundos desde la época de Unix (1 de enero de 1970, 00:00:00).
Paso 3.3: configurar una acción de llamada HTTP GET
HTTP Callout lo guía a través de la introducción de los detalles sobre el servicio HTTP basado en web o el punto final de la API REST al que se está conectando. Después de completar la configuración, invoca la acción en un flujo.
En el nodo Ejecutar asincrónicamente , seleccione Acción .
Haga clic en +Crear llamada HTTP .
Configure el servicio externo que conecta Salesforce con la API basada en HTTP.
Introduzca un Nombre para el servicio externo.
Seleccione la credencial con nombre que creó en el paso 2 .
Haga clic en Siguiente .
El siguiente paso es configurar la acción invocable que puede usar en Flow Builder o en Salesforce.
Para Etiqueta , ingrese la acción que realiza la llamada.
Método : OBTENER
Agregue el extremo de la URL para la solicitud.
Ruta URL : /maps/api/timezone/json
Agregue claves de parámetros de consulta si la API a la que está llamando las tiene. Cuando usa esta acción en un flujo, ingresa valores para las claves definidas.
Haga clic en Agregar clave
Clave : ubicación
Tipo de datos : cadena
Requerido : Verdadero
Haga clic en Agregar clave
Clave : marca de tiempo
Tipo de datos : entero
Requerido : Verdadero
Haga clic en Agregar clave
Clave: clave
Tipo de datos : cadena
Requerido : Verdadero
Proporcione un cuerpo de respuesta de API de muestra. Salesforce genera una estructura de datos a partir de la respuesta de muestra.
Vaya a la secciónProporcione una respuesta de muestra.
Haga clic en Nuevo .
Pegue una respuesta JSON de muestra .
{ "timeZoneName": "cadena de muestra", "compensación sin procesar": 1, "timeZoneId": "cadena de muestra", "errorMessage": "cadena de muestra", "dstOffset": 1, "estado": "cadena de muestra"
}
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.
…
Herramientas para desarrolladores desde cero (Parte 1 de 2) | Blog de desarrolladores de Salesforce
Tanto si es un nuevo desarrollador que acaba de empezar su carrera en el ecosistema de Salesforce como si es un desarrollador experimentado de Salesforce que aún no se ha cambiado a nuestras nuevas herramientas para desarrolladores, esta serie de publicaciones de blog es para usted. Le mostraremos cómo configurar y utilizar las herramientas que pueden ayudar a todos los desarrolladores de Salesforce a ser mucho más productivos y felices.
Antes de que empieces
Si es nuevo en Salesforce y no tiene una organización (instancia de Salesforce) disponible para practicar, regístrese en una organización Developer Edition . Es completamente gratis y tiene la mayoría de las funciones de Salesforce preinstaladas para que pruebe y aprenda. Deberá proporcionar un nombre de usuario en forma de dirección de correo electrónico, pero no es necesario que sea uno real. Es solo un nombre de usuario que debe ser único en todos los productos de Salesforce. Después de solicitar una organización, recibirá un correo electrónico con los pasos para iniciar sesión. Tome nota del nombre de usuario de la organización que proporcionó, ya que tendrá que usarlo más adelante.
Si es un desarrollador de Salesforce establecido y un usuario de Developer Console, este es el momento adecuado para adoptar las nuevas herramientas de desarrollador. Si bien Developer Console puede ser una forma rápida de cambiar algunas líneas de código, usar las herramientas más modernas cambiará las reglas del juego, ya que incluyen un montón de capacidades que simplificarán su trabajo. Usar las nuevas herramientas requiere un cambio de hábitos al principio, pero te prometo que muy pronto entenderás sus beneficios. Además, tenga en cuenta que ya no estamos invirtiendo en Developer Console, y problemas como la falta de soporte para Lightning Web Components son algo que no abordaremos.
Instalación de las herramientas de desarrollador
Los metadatos de su organización están en la nube, pero para desarrollarse de una manera más productiva, desarrollará localmente. El modus operandi será trabajar con los metadatos en su máquina local y sincronizarlos con su organización, lo que significa recuperarlos o implementarlos cuando sea necesario.
Una alternativa al desarrollo local es usar Code Builder (Beta) , un IDE basado en web que puede iniciar desde su organización y que tiene las herramientas de desarrollador instaladas. Sin embargo, en este blog, nos centraremos en el flujo de trabajo de desarrollo local.
El primer paso es instalar las siguientes herramientas en su máquina:
CLI de Salesforce : esta es la herramienta de interfaz de línea de comandos que utilizará para escribir comandos para mover su código entre su entorno local y su organización, ejecutar pruebas, implementar datos de muestra y mucho más. Si no le gusta escribir comandos en una terminal, no tema, ya que tenemos opciones alternativas como se describe en esta publicación de blog.
Código VS : este es el IDE que usará para desarrollar en su máquina local.
Java : algunas funciones en las extensiones de Salesforce para VS Code dependen de la plataforma Java, kit de desarrollo de edición estándar (JDK). Instálelo siguiendo las instrucciones vinculadas.
Extensiones de Salesforce para VS Code : Este es un grupo de extensiones de VS Code que aumentan las capacidades de VSCode, exponiendo la mayoría de los comandos de la CLI de Salesforce en la interfaz de usuario de VS Code, para que pueda ejecutarlos con clics. Las extensiones también agregan funciones para habilitar la depuración, facilitar las pruebas, permitirle explorar los metadatos en su organización y más.
Creación de un proyecto de Salesforce DX
Cuando trabaja con los metadatos de una organización localmente, los archivos de metadatos deben almacenarse en una carpeta de proyecto, siguiendo una estructura determinada. Eso es lo que llamamos un proyecto de Salesforce DX.
Una vez instaladas las herramientas para desarrolladores, puede continuar y crear un proyecto de Salesforce DX que luego conectará a su organización. Una forma de hacerlo es escribir un comando que utilice la CLI de Salesforce para crear el proyecto. Puede escribir ese comando en una terminal normal.
sf project generate -n myProject
Nota: la CLI de Salesforce contiene dos ejecutables, sfdx y sf . En este blog, escribiremos los comandos utilizando el ejecutable y la sintaxis más modernos, que es sf .
El indicador -n indica el nombre del proyecto. La CLI de Salesforce aplicará scaffolding a un proyecto en una carpeta con ese nombre. Una vez que se crea el proyecto, puede abrirlo en VS Code, con File → Open Folder .
Gracias a las extensiones de Salesforce para VS Code, existe una forma sin escribir para ejecutar los comandos de la CLI de Salesforce. Simplemente abra la paleta de comandos de VS Code con View → Command Palette y escriba SFDX para ver todos los comandos disponibles. También podríamos haber creado el proyecto con SFDX: Create Project en lugar de escribir el comando.
Autorizar y establecer una organización como predeterminada
Una vez que su proyecto esté configurado, el siguiente paso es autorizar la CLI de Salesforce para que funcione con su organización. Comencemos esta vez con la forma de hacerlo sin escribir. Cuando abra el proyecto por primera vez, simplemente haga clic en el botón Sin conjunto de organizaciones predeterminado y aparecerá la paleta de comandos, sugiriendo que autorice una organización. Proceda siguiendo las instrucciones del comando.
Otra forma de hacerlo es ejecutar un comando CLI de Salesforce. Esta vez, y de ahora en adelante, le recomiendo que use el terminal integrado de VS Code para ejecutar comandos, ya que tener todas las herramientas en la misma pantalla reduce el cambio de contexto. Puede abrirlo en Terminal → New Terminal .
El comando CLI de Salesforce utilizado para autorizar una organización es:
sf org login web -s
Luego, siga las instrucciones dadas por el comando. El indicador -s configurará esa organización como su organización predeterminada para este proyecto. Puede ver la organización predeterminada de su proyecto en la barra inferior de VS Code.
Todos los comandos de la CLI de Salesforce tienen varios indicadores disponibles. Por ejemplo, si desea conectarse a una zona de pruebas, puede pasar la URL de la instancia de la zona de pruebas a sf org login web usando -r . Para ver la ayuda del comando y todos sus indicadores disponibles, ejecute el comando agregando --help al final.
Cuando trabaja con varias organizaciones, será común autorizar la CLI de Salesforce con varias organizaciones. Puede ver las organizaciones a las que la CLI de Salesforce tiene autorización para acceder ejecutando sf org list . Puede cambiar la organización predeterminada de un proyecto haciendo clic en el nombre de la organización en la barra inferior de VS Code, como hicimos para autorizar por primera vez, o ejecutando:
sf config set target-org=your-org-username@sf.com
Permítanme compartir con ustedes un último consejo. Las organizaciones pueden tener alias. Esto es útil cuando no desea recordar nombres de usuario largos o complejos. Para establecer un alias, escriba el siguiente comando.
sf alias set myalias=your-org-username@sf.com
Cuando se establece un alias, puede utilizar el alias en lugar del nombre de usuario de la organización en cualquiera de los comandos de la CLI de Salesforce.
Implementación de metadatos en la organización
Una vez que la CLI de Salesforce y su IDE estén autorizados con su organización, y la organización esté configurada como la organización predeterminada para su proyecto, puede comenzar a desarrollar e implementar cambios. Por ejemplo, digamos que queremos crear una clase de Apex. Puede crear el archivo de metadatos que representa la clase de Apex manualmente en la carpeta classes . Sin embargo, es mucho más efectivo crear la clase desde la paleta de comandos.
También puede crear una clase escribiendo el siguiente comando de la CLI de Salesforce:
sf apex generate class -n myClass -d force-app/main/default/classes
Una vez que su clase esté lista para implementarse en su organización, hay varias formas de hacerlo. Una forma es especificar los metadatos en el comando.
sf project deploy start -m ApexClass
Una segunda forma es especificar una carpeta para implementar.
sf project deploy start -p force-app/main/default/classes
Y una tercera forma, disponible gracias a Salesforce Extensions for VS Code, es hacer clic con el botón derecho en el archivo y hacer clic en Deploy This Source to Org .
Todas esas opciones le permiten ejecutar las implementaciones usted mismo. Si desea automatizar este paso e implementar un archivo cada vez que se guarda, puede establecer la configuración Implementar al guardar VS Code en "Verdadero" y ahorrar algo de tiempo.
Cuando se implementan sus metadatos, normalmente querrá abrir su organización para realizar pruebas. Puede iniciar sesión utilizando su navegador como de costumbre. Pero para los desarrolladores, es más eficiente hacer clic en el botón de abrir organización en la barra inferior de VS Code.
Conclusión
En esta publicación de blog, aprendió cómo obtener una organización gratuita para el desarrollo y cómo instalar las herramientas de desarrollo que todo desarrollador de Salesforce debería usar hoy. Ha entendido cómo crear un proyecto y autorizarlo con su organización y, por último, cómo implementar metadatos mediante la CLI de Salesforce o VS Code. En la Parte 2 de esta serie, aprenderá cómo recuperar metadatos, trabajar con organizaciones con seguimiento de origen y usar bibliotecas de Node para cuidar la calidad de su código. Además, compartiremos otras gemas ocultas de las extensiones de Salesforce para VS Code. Si te gusta un formato de video, mira nuestro episodio de codeLive . Y si tiene preguntas, no dude en hacerlas en Salesforce Developers Trailblazer Community . ¡Estén atentos para la segunda publicación de blog de esta serie mañana!
Sobre el Autor
Alba Rivas trabaja como Principal Developer Advocate en Salesforce. Puedes seguirla en Linkedin , Twitter o GitHub .
Obtenga las últimas publicaciones de blog de desarrolladores de Salesforce y episodios de podcast a través de Slack o RSS.
Última actualización el 30 de marzo de 2022 por Rakesh Gupta Gran idea o pregunta duradera: ¿Cómo se agregan automáticamente productos a una nueva oportunidad? Objetivos: esta publicación de blog nos ayudará a comprender lo siguiente Usar el generador de flujo de salesforce para asignar automáticamente el producto a una oportunidad Usar elementos get para evitar
Última actualización el 29 de marzo de 2022 por Rakesh GuptaSalesforce Flow es una forma fantástica de automatizar varios procesos comerciales. Le permite crear un flujo basado en ciertos criterios que establezca. El flujo de Salesforce puede hacer muchas cosas: crear un registro, actualizar registros, publicar en Chatter, enviar un correo electrónico, etc.
Última actualización el 17 de marzo de 2022 por Rakesh GuptaGran idea o pregunta duradera: ¿Cómo puede asignar automáticamente una licencia de paquete administrado a nuevos usuarios? Objetivos: después de leer esta publicación de blog, el lector podrá: Usar Flow para agregar automáticamente una licencia de paquete a nuevos usuarios Usar obtener
Última actualización el 11 de marzo de 2022 por Rakesh GuptaGran idea o pregunta duradera: ¿Cómo se agregan automáticamente usuarios asociados a un grupo público? Esta es una continuación de mi último artículo Primeros pasos con Process Builder – Parte 56 (Creación automática de un grupo público para una cuenta nueva). En mi artículo anterior,
Última actualización el 3 de marzo de 2022 por Rakesh Gupta Gran idea o pregunta duradera: ¿Cómo se eliminan las publicaciones de Chatter generadas por el sistema? Objetivos: después de leer esta publicación de blog, el lector podrá: Asignar un campo personalizado de prospecto a un campo personalizado de cuenta Crear un flujo activado por registro para eliminar registros y mucho más
Última actualización el 27 de abril de 2021 por Rakesh Gupta Gran idea o pregunta duradera: los conjuntos de permisos son útiles para proporcionar un conjunto particular de funcionalidades a un usuario además de los permisos proporcionados por su perfil. Por ejemplo, puede… Continuar leyendo →