Última actualización el 6 de julio de 2023 por Rakesh Gupta
Gran idea o pregunta duradera:
Cómo monitorear el consumo de eventos de la plataforma según el nombre del evento, el ID del cliente, el tipo de evento y el tipo de uso
Objetivos:
Después de leer este blog, podrá:
Obtenga una comprensión integral de los eventos de la plataforma
Descubra las ventajas de monitorear los patrones de consumo para la optimización del rendimiento del sistema y la identificación de tendencias de uso
Implemente métricas de uso mejoradas para eventos de plataforma a través de una guía paso a paso
Explore los beneficios de monitorear patrones de consumo para optimizar el rendimiento del sistema e identificar tendencias de uso
y mucho más
Jestilla Zetkin trabaja como arquitecta de Salesforce en Gurukul On Cloud (GoC), recientemente se encontró con una publicación de blog titulada Monitoreo de publicación de eventos y uso de entrega de la plataforma . Esta publicación proporcionó información sobre cómo varias formas de monitorear el uso de la publicación y entrega de eventos de la plataforma.
A medida que se expande el negocio de GoC, la afluencia de datos ha llevado a casos frecuentes de alcanzar los límites diarios para los eventos de la plataforma. En consecuencia, Jestilla está buscando una solución para monitorear el consumo de eventos de la plataforma según el nombre del evento, la identificación del cliente o el tipo. Esta capacidad de monitoreo le permitirá analizar qué evento está consumiendo una parte significativa de la asignación, lo que le permitirá tomar las medidas adecuadas en consecuencia.
¿Qué es Plataforma de Eventos?
Las arquitecturas basadas en eventos se han vuelto muy populares en los últimos años y por una buena razón. Se basa en el patrón de fuego y olvido . Activar un evento y dejar que cada sistema maneje la lógica empresarial le permite mantener los sistemas no relacionados desacoplados y puede ayudar a simplificar la arquitectura.
Los eventos de la plataforma le permiten entregar notificaciones de eventos seguras, escalables y personalizables dentro de Salesforce o desde fuentes externas. Las aplicaciones pueden publicar y suscribirse a eventos de plataforma en la plataforma de Salesforce mediante Apex, Flow o en un sistema externo mediante CometD. Si desea obtener más información sobre el evento de plataforma, consulte elmódulo de Trailhead .
Contiene datos de uso para la publicación y entrega de eventos a clientes CometD y Pub/Sub API, componentes empApi Lightning y retransmisiones de eventos. Si las métricas de uso mejoradas están habilitadas, los datos de uso están disponibles para las últimas 24 horas, hasta la última hora y para el uso diario histórico.
En API 58.0 y versiones posteriores, puede habilitar Métricas de uso mejoradas para obtener datos de uso por nombre de evento y cliente para intervalos de tiempo granulares. PlatformEventUsageMetric contiene métricas de uso separadas para eventos de plataforma y eventos de captura de datos modificados.
Nombre del campo
Detalles
Tipo de evento
El tipo de evento para el que le gustaría consultar las métricas de uso, como un evento de cambio o un evento de plataforma personalizado. Este campo está disponible cuando las métricas de uso mejoradas están habilitadas.
Segmento de tiempo
El intervalo de tiempo utilizado para agregar los datos de uso devueltos en los resultados de la consulta. Este campo está disponible cuando las métricas de uso mejoradas están habilitadas.
Tipo de uso
Este campo está disponible cuando las métricas de uso mejoradas están habilitadas. El tipo de métricas de uso de eventos para consultar, como publicación de eventos o entrega de eventos. Utilice este campo con los campos EventName o EventType. Los valores posibles son:
PUBLISH —Métricas de uso para eventos publicados.
ENTREGA —Métricas de uso para eventos que se entregaron a los suscriptores.
Valor
El valor de uso para la métrica y el intervalo de fechas especificados.
Para obtener datos de uso completos para cada evento, aprovecharemos las métricas de uso de eventos mejoradas. Esta función nos permitirá recopilar información agregada e identificar los eventos específicos que consumen una parte importante de la asignación.
Mientras que PlatformEventSettings representa configuraciones para eventos de plataforma y eventos de captura de datos modificados.
Nombre del campo
Detalles
enableEnhancedUsageMetrics
Habilita métricas de uso mejoradas para consultas ejecutadas en PlatformEventUsageMetric. Las métricas de uso mejoradas proporcionan campos adicionales para las consultas y segmentos de tiempo granulares. Para obtener más información, consulte Métricas de uso mejoradas en la Guía para desarrolladores de eventos de plataforma. El valor predeterminado es falso.
Práctica guiada (nosotros hacemos):
Antes de que pueda obtener más métricas de uso, debe habilitar las Métricas de uso mejoradas en la API de metadatos . Para hacer esto, establezca el valor del campo enableEnhancedUsageMetrics en verdadero en PlatformEventSettings . Una vez hecho esto, podrá obtener métricas de uso detalladas para el consumo de eventos de la plataforma.
Paso 1: habilite las métricas de uso mejoradas
Asegúrese de que Visual Studio Code esté correctamente configurado y que su organización de Salesforce esté conectada a él.
Modifique el paquete.xml para recuperar los metadatos relacionados con los eventos de la plataforma.
Ejemplo de paquete.xml para recuperar la configuración de PlatformEvent.
El siguiente paso es modificar PlatformEventSettings .
Proceda a modificar PlatformEventSettings, cuyos valores se almacenan en el archivo PlatformEvent.settings en la carpeta de configuración .
En PlatformEventSettings, establezca el campo enableEnhancedUsageMetrics en true .
Guarde los cambios en el archivo PlatformEvent.settings-meta.xml .
Finalmente, haga clic con el botón derecho en el archivo de su paquete en el Explorador y seleccione SFDX: Implementar origen en el manifiesto en la organización .
Paso 2.1: obtenga métricas de uso diario agregadas por nombre de evento
Haga clic en Configuración | Consola de desarrollador .
En el Editor de consultas, ejecute la siguiente consulta SOQL
SELECCIONE EventName, EventType, UsageType, Value, StartDate, EndDate FROM PlatformEventUsageMetric WHERE TimeSegment='Diario'
Última actualización el 3 de julio de 2023 por Rakesh Gupta
En el acelerado mundo empresarial actual, la eficiencia en el desarrollo de software es vital. La automatización ha surgido como una solución clave, agilizando los procesos para aumentar la productividad y liberar la innovación. Salesforce no es inmune a estos desafíos y complejidades de toda la industria.
Ingrese a DevOps. DevOps se ha convertido en un elemento esencial en el desarrollo de software, incluido Salesforce. Mediante la colaboración de desarrolladores, administradores y partes interesadas, Salesforce DevOps crea un entorno perfecto para la automatización.
La combinación de automatización y Salesforce DevOps cosecha múltiples beneficios: menos errores, preparación más rápida para el mercado, una canalización de lanzamiento optimizada, menos repeticiones, calidad de código superior y mecanismos de retroalimentación más fuertes. Mejora la eficiencia operativa y la velocidad de implementación en el ecosistema de Salesforce, fomentando un desarrollo ágil.
Este artículo explora la intersección de la automatización y Salesforce DevOps, los beneficios de su sinergia y formas prácticas de aplicarla para un desarrollo más rápido en sus operaciones de Salesforce. Tanto si es un profesional de Salesforce como un novato, este artículo ofrece información para reforzar su enfoque de DevOps de Salesforce con la automatización.
Descripción de DevOps de Salesforce
Antes de profundizar en cómo se cruzan Salesforce DevOps y la automatización, es fundamental comprender lo que implica Salesforce DevOps.
DevOps, una combinación de ' Desarrollo ' y ' Operaciones ', es un conjunto de prácticas diseñadas para fusionar el desarrollo de software, el control de calidad y las operaciones de TI en un proceso unificado y fluido. En un contexto de Salesforce , DevOps es la unión de estos principios con las sólidas capacidades de CRM de Salesforce, con el objetivo de facilitar procesos de desarrollo e implementación más fluidos y rápidos.
En esencia, Salesforce DevOps incorpora principios como:
Integración continua y entrega continua (CI/CD),
responsabilidades compartidas,
Acción centrada en el cliente,
Cultura de colaboración.
El objetivo es crear un entorno cohesivo donde los administradores, desarrolladores y otras partes interesadas puedan trabajar en armonía, lo que lleva a ciclos de desarrollo más cortos, tiempo de comercialización más rápido y software de alta calidad.
Sin embargo, a pesar de las ventajas de Salesforce DevOps, los desarrolladores a menudo enfrentan desafíos. Si bien es un activo, las características integrales y la capacidad de personalización de Salesforce pueden complicar el proceso de desarrollo e implementación .
Los desafíos difieren de un equipo a otro y de un caso de uso a otro, pero estos son algunos de los más comunes:
Las diferencias en los entornos,
Administrar dependencias de código,
Manejo de metadatos,
Alinear el trabajo de diferentes equipos
Necesidad de mantener la calidad del código
Estabilidad del sistema mientras entrega a gran velocidad
Aquí es donde la automatización viene al rescate. La automatización, en esencia, es el uso de la tecnología para realizar tareas con una intervención humana reducida. Cuando se aplica a Salesforce DevOps , puede aliviar significativamente estos desafíos.
Las pruebas automatizadas, por ejemplo, pueden mejorar la calidad del código al identificar errores al principio del proceso de desarrollo. Las implementaciones automatizadas pueden sincronizar metadatos y código en diferentes entornos, lo que reduce los errores de implementación. Del mismo modo, la automatización de tareas repetitivas puede liberar el tiempo de los desarrolladores, lo que les permite concentrarse en actividades que agregan más valor, como el desarrollo de funciones o el diseño de sistemas.
Además, la automatización fomenta un proceso de desarrollo más ágil, lo que permite actualizaciones periódicas e incrementales en lugar de implementaciones rígidas de Salesforce. Este aspecto acorta el ciclo de desarrollo y facilita la reversión de los cambios si algo sale mal, lo que aumenta la estabilidad general del sistema.
Aprovechamiento de la automatización para el desarrollo acelerado de Salesforce
Acelerar el desarrollo de Salesforce a través de la automatización implica identificar tareas manuales y repetitivas, implementar herramientas y marcos de automatización adecuados y perfeccionar los procesos para mejorar la eficiencia y reducir los cuellos de botella. Profundicemos en cada una de estas áreas con más detalle:
Identificación de tareas manuales y repetitivas
El primer paso hacia la automatización es reconocer qué tareas están ralentizando su velocidad de desarrollo.
Estos típicamente incluyen:
Revisiones de código,
Pruebas,
Despliegue,
Configuración,
Migración de datos.
Suelen implicar procesos manuales tediosos que consumen tiempo y son propensos a errores. Al identificar estas tareas, puede identificar dónde la automatización proporcionará el mayor beneficio y tendrá un impacto significativo en la velocidad y la eficiencia de su desarrollo.
Implementación de herramientas y marcos de automatización
Una vez que haya identificado las áreas que podrían beneficiarse de la automatización, es hora de elegir e implementar las herramientas y los marcos adecuados. Salesforce ofrece varias funciones de automatización integradas, como Apex y Salesforce Flow .
Sin embargo, otras herramientas pueden ser más adecuadas para tareas complejas, como Salesforce DX para la gestión del ciclo de vida del desarrollo, o Jenkins y CircleCI para la integración y entrega continuas. Al seleccionar estas herramientas, asegúrese de que se alineen con las habilidades de su equipo y los requisitos específicos de su entorno de Salesforce.
Optimización de procesos para mejorar la eficiencia
La automatización no se trata solo de herramientas y tecnología. También se trata de refinar sus procesos. Revise su flujo de trabajo de desarrollo actual para identificar posibles cuellos de botella y áreas de mejora.
Por ejemplo:
¿Cómo se informan y rastrean los errores?
¿Con qué frecuencia se realizan las implementaciones y cómo se programan?
¿Cómo se recopilan los comentarios y cómo se actúa en consecuencia?
Simplificar estos procesos puede mejorar drásticamente la eficiencia de su equipo, permitiéndole aprovechar al máximo sus esfuerzos de automatización.
Vale la pena mencionar que los beneficios de la automatización van más allá de acelerar el desarrollo. La automatización también puede mejorar la calidad del código al detectar errores temprano a través de pruebas automatizadas. Puede reducir los errores de implementación al sincronizar el código en diferentes entornos.
Y al liberar a los desarrolladores de las tareas rutinarias, les permite concentrarse más en el desarrollo de características y el diseño del sistema, fomentando así la innovación y mejorando el valor entregado a los usuarios finales.
Pruebas automatizadas para el desarrollo acelerado de Salesforce
Las pruebas son un componente crucial de cualquier ciclo de vida de desarrollo, y su importancia se multiplica para acelerar el desarrollo de Salesforce. Las pruebas periódicas y exhaustivas ayudan a identificar errores y problemas desde el principio, lo que reduce el riesgo de reparaciones costosas y lentas en el futuro. Asegura la calidad y la confiabilidad de la aplicación, lo que a su vez contribuye a mejorar las experiencias de los usuarios y los resultados comerciales.
La automatización puede potenciar este proceso de prueba. Las pruebas automatizadas implican el uso de herramientas de software para ejecutar pruebas y comparar los resultados reales con los resultados esperados. La implementación de una estrategia de prueba automatizada para las aplicaciones de Salesforce puede acelerar drásticamente el proceso de desarrollo, lo que garantiza implementaciones más rápidas, eficientes y confiables con menos errores.
Existen numerosas herramientas disponibles para pruebas automatizadas en Salesforce. Apex proporciona soporte integrado para pruebas unitarias, mientras que herramientas como Selenium, Provar y AssureClick pueden automatizar las pruebas de IU. Jest es una excelente opción para probar Lightning Web Components (LWC). Al seleccionar una herramienta, considere las necesidades específicas de su aplicación, la experiencia de su equipo y la complejidad y frecuencia de sus requisitos de prueba.
Seguir las mejores prácticas es esencial para aprovechar todo el potencial de las pruebas automatizadas. Estas son algunas de las mejores prácticas para pruebas automatizadas eficientes y completas en el desarrollo de Salesforce:
Apunte a una alta cobertura de prueba : asegúrese de probar todas las partes de su aplicación. Salesforce requiere una cobertura de código mínima del 75 %, pero apuntar a una mayor cobertura puede brindar más confianza en la confiabilidad de la aplicación.
Cree pruebas repetibles y autónomas : las pruebas deben poder ejecutarse en cualquier entorno y no deben basarse en datos de pruebas anteriores. Esto garantiza que cada prueba valide una función específica de forma independiente.
Mantenga sus conjuntos de pruebas : a medida que su aplicación evolucione, sus pruebas también deberían hacerlo. Revise y actualice regularmente sus pruebas para asegurarse de que reflejen con precisión el estado actual de su aplicación.
Implemente diferentes niveles de prueba : combine pruebas unitarias, pruebas de integración y pruebas de interfaz de usuario para validar todos los aspectos de su aplicación. Cada nivel de prueba proporciona una perspectiva diferente sobre la funcionalidad de la aplicación.
Priorizar la legibilidad de la prueba : las pruebas a menudo sirven como documentación, explicando lo que se supone que debe hacer una parte del código. Asegúrese de que sus pruebas estén bien estructuradas y claramente escritas para que sean fáciles de entender para los demás.
Incorpore las pruebas al principio del proceso de desarrollo : no espere hasta el final del ciclo de desarrollo para comenzar las pruebas. La incorporación de pruebas de manera temprana y frecuente le permite detectar y solucionar problemas rápidamente.
Integración e implementación continuas con automatización
La integración continua y la implementación continua (CI/CD) forman un pilar central de Salesforce DevOps. CI/CD está diseñado para reducir errores y acelerar el desarrollo a través de la integración continua de código y procesos de implementación automatizados y consistentes.
En el contexto de Salesforce, CI fusiona periódicamente los cambios de código en un repositorio compartido, a menudo varias veces al día. Cada integración se verifica automáticamente mediante la creación de la aplicación y la ejecución de pruebas, lo que garantiza que los nuevos cambios se integren perfectamente con el código existente y no introduzcan errores.
Por otro lado, CD implementa automáticamente esos cambios en la producción, lo que garantiza que las nuevas características, configuraciones y mejoras lleguen a los usuarios finales lo más rápido posible. En Salesforce, CD puede implicar la implementación de cambios en diferentes entornos, como entornos de desarrollo, prueba, ensayo y producción.
La automatización es clave para lograr procesos impecables de CI/CD de Salesforce. A través de la automatización, puede optimizar y estandarizar los pasos involucrados en:
Creación, prueba e implementación de aplicaciones de Salesforce,
Reducir el potencial de error humano
Acelerar el ciclo de desarrollo general.
La automatización del proceso de compilación garantiza que los cambios en el código se integren y validen de manera constante. Las pruebas automatizadas, como comentamos anteriormente, verifican la integridad y la calidad del nuevo código. La automatización del proceso de implementación ayuda a sincronizar el código y los cambios de configuración en diferentes entornos, lo que garantiza que todos los equipos de DevOps trabajen con la versión más reciente y precisa de la aplicación.
Control de versiones y automatización de la gestión de cambios
En el desarrollo de Salesforce, el control de versiones y la gestión de cambios son fundamentales para mantener la integridad, coherencia y calidad de su aplicación.
El control de versiones, una parte integral del desarrollo de software, implica administrar y rastrear diferentes versiones de su base de código. Le permite ver los cambios a lo largo del tiempo, volver a las versiones anteriores cuando sea necesario y administrar el código de varios desarrolladores al mismo tiempo.
La gestión de cambios se refiere a la gestión y el seguimiento de los cambios del sistema, incluidos los cambios de configuración, las modificaciones de código y las implementaciones de nuevas funciones.
La automatización de estos procesos puede mejorar su eficiencia y confiabilidad en el desarrollo de Salesforce.
El control de versiones automatizado permite una integración de código más fluida de diferentes desarrolladores, lo que reduce el riesgo de conflictos y errores.
La gestión de cambios automatizada asegura que todas las modificaciones a su sistema sean rastreadas y verificadas con precisión, mejorando la responsabilidad y facilitando el diagnóstico de cualquier problema que surja.
Varias herramientas pueden ayudar a automatizar el control de versiones y la gestión de cambios en Salesforce. Los sistemas de control de versiones (VCS) como Git permiten un control de versiones efectivo. Facilita el seguimiento de los cambios en la base del código, lo que ayuda a mantener la integridad del código.
Las herramientas de DevOps como Copado o Gearset pueden ayudar a automatizar el seguimiento y la implementación de cambios en diferentes entornos para la gestión de cambios. Brindan una visibilidad integral de su historial de cambios, lo que le permite administrar los cambios de manera más efectiva y mantener la estabilidad de su aplicación.
Automatización de la supervisión y el tratamiento de errores
En el ámbito vertiginoso del desarrollo de Salesforce, el papel de la automatización se extiende más allá de la creación, prueba e implementación. El monitoreo automatizado y el manejo de errores son igualmente importantes para mantener la salud de la aplicación y corregir rápidamente cualquier problema.
El monitoreo automatizado implica el uso de herramientas para realizar un seguimiento constante del rendimiento, el uso y el estado general de sus aplicaciones de Salesforce. Este enfoque proactivo permite a los equipos de desarrollo identificar y abordar posibles problemas antes de que afecten a los usuarios.
El manejo proactivo de errores va de la mano con el monitoreo automatizado. En lugar de esperar a que se informen los problemas, el manejo proactivo de errores implica el uso de sistemas automatizados para identificar y, a menudo, resolver los problemas tan pronto como ocurran. Las notificaciones de error automatizadas aseguran que su equipo esté al tanto de cualquier problema al instante, lo que permite una respuesta rápida, minimiza el tiempo de inactividad y reduce la posibilidad de errores costosos.
La implementación de estas herramientas de automatización en Salesforce DevOps implica el uso estratégico de recursos como Monitoreo de eventos de Salesforce, que proporciona un flujo de eventos de auditoría de aplicaciones de su organización, y herramientas de Monitoreo y advertencia de errores, que pueden notificarle automáticamente sobre errores o excepciones.
Conclusión
La automatización combinada con las prácticas de Salesforce DevOps ofrece una poderosa estrategia para acelerar el desarrollo y mejorar la calidad del software. Es una receta para el éxito en el vertiginoso panorama digital actual.
Para implementar la automatización en su desarrollo de Salesforce, comience por identificar las tareas repetitivas que podrían automatizarse. Luego, implemente herramientas adecuadas para tareas como integración continua, pruebas automatizadas, control de versiones y monitoreo de aplicaciones. Agilice cualquier proceso manual junto con la implementación de estas herramientas, creando un flujo de trabajo de desarrollo eficiente y efectivo.
La adopción de la automatización en Salesforce DevOps acelera el desarrollo y refuerza la confiabilidad y el valor de sus aplicaciones. A medida que el ecosistema de Salesforce continúa evolucionando, el papel de la automatización crecerá aún más, dando forma al futuro del desarrollo de Salesforce.
Este artículo fue escrito por Sam Hops. Es redactora de contenido para una revista digital que cubre temas relacionados con el diseño, el comercio electrónico, el marketing digital y el espíritu empresarial. Sam es un apasionado de todo lo relacionado con el marketing digital, pero tiene un interés particular en el diseño gráfico, el SEO y las redes sociales.
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.
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.
…
Presentamos HowToDev_ | Blog de desarrolladores de Salesforce
HowToDev_ es una nueva serie sobre Salesforce+ que creamos para ayudar a los desarrolladores a familiarizarse con Salesforce Platform. Si ya tiene habilidades tecnológicas pero es nuevo en el ecosistema de Salesforce, o si desea aprender un poco sobre el desarrollo, ¡HowToDev_ es la serie para usted!
En esta nueva serie, aprenderá a ampliar la Plataforma de Salesforce y crear aplicaciones personalizadas utilizando potentes funciones de desarrollo de Salesforce líderes en la industria. Seré su anfitrión y, en cada episodio, lo explicaré cómo tomar una interfaz de usuario basada en datos que viene lista para usar con Salesforce y crear una experiencia intuitiva e interactiva que facilite la vida de los usuarios.
Descripción general de la plataforma de Salesforce
La plataforma de Salesforce reúne una serie de servicios de infraestructura, red, aplicaciones y datos para crear una poderosa herramienta que puede ampliar en un abrir y cerrar de ojos. Esto se debe a muchas de las complejidades que puede haber utilizado en otras plataformas de usuarios y desarrolladores. En el primer episodio de HowToDev_, repasamos una descripción general de Salesforce Platform y cómo puede crear objetos personalizados para ampliar el modelo de datos.
Realmente solo necesita preocuparse por la aplicación y los servicios de datos que se le proporcionan para construir. Desde su front-end hasta sus API, todo sale de la caja listo para que comience a construir.
¡Vamos a codificar!
¡Espera un segundo! Hay algunas cosas que necesita saber aquí antes de abrir ese entorno de desarrollo. Aquí hay un vistazo de lo que cubrimos en el Episodio 1 .
Comprender la importanciade los metadatos en Salesforce: Nosotrosexplicar la función de los metadatos, que representan toda la configuración, la automatización y la interfaz de usuario en el entorno de Salesforce.
Definición de qué son una aplicación y una organización en Salesforce: aclaramos los conceptos de una aplicación y una organización en Salesforce, subrayando su distinción con respecto a las aplicaciones y organizaciones tradicionales.
Creación del objeto de propiedad : demostramos el proceso de creación de un objeto personalizado (el objeto de propiedad) en Configuración de Salesforce, que funciona como una tabla de base de datos para administrar y rastrear propiedades.
Agregar nuevos campos al objeto: agregamos dos nuevos campos personalizados al objeto Propiedad (es decir, Fecha de cotización y Días en el mercado), que resaltan la naturaleza dinámica de los campos de Salesforce.
Mirando hacia el futuro: Concluimos el episodio con una mirada al futuro de lo que cubrirá la serie, prometiendo una futura exploración de la codificación y la resolución de problemas complejos dentro de Salesforce.
Una vez que tenga una mayor comprensión de estos conceptos, ¡podemos abrir la CLI en el Episodio 2 !
Dónde ver HowToDev_
Todos los episodios se lanzaron a la vez en Salesforce+, ¡así que puede disfrutarlos todos ahora! Esto es lo que se trata en cada episodio:
HowToDev_ Repositorio de GitHub : este es el lugar donde encontrará todo el código, las definiciones, los enlaces y los documentos a los que se hace referencia en la serie.
Creamos una divertida Trailhead Quest para completar mientras ves HowToDev_. Únase a la búsqueda ahora para poner a prueba sus conocimientos y tener la oportunidad de ganar* uno de los 10 paquetes de premios HowToDev_, que incluyen un par de Apple AirPods y un estuche personalizado de Salesforce Developers. También recibirá una insignia exclusiva de la comunidad HowToDev_ en Trailhead. Complete la misión en cualquier momento antes del 31 de julio a las 11:59 p. m. (hora del Pacífico) para participar y ganar.
Sobre el Autor
Stephan Chandler-Garcia es promotor de desarrolladores en Salesforce. Ha estado en el ecosistema de Salesforce durante más de 10 años como cliente, socio e ISV. Puede encontrar a Stephan en persona en un grupo comunitario de Trailblazer o en una de nuestras conferencias en todo el mundo. Alternativamente, sígalo en Twitter @stephanwcg o @schandlergarcia en GitHub, y consulte su repositorio de GitHub para ver código de muestra y proyectos.
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 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.
…
Diseñe una API de Swagger con código para llevar datos a Salesforce | Blog de desarrolladores de Salesforce
La integración de una API externa con su organización de Salesforce puede ser una tarea sencilla que no requiere código si utilizaCredenciales con nombre y Servicios externos . Deberá crear una credencial con nombre que apunte a la API y configurar un servicio externo en la interfaz de usuario de configuración. La clave aquí es proporcionar una especificación OpenAPI para la API. Si la API no tiene una, puede diseñarla usted mismo manualmente usando YAML o JSON, usar MuleSoft Anypoint Platform o aprovechar las herramientas y el código de código abierto.
En esta publicación, le presentaremos la especificación OpenAPI y Swagger, discutiremos los elementos principales de la especificación y lo guiaremos a través del diseño e implementación de una API con código. Usaremos Node.js y Swagger dentro del marco Fastify para esta tarea. Finalmente, integraremos esta API con Salesforce.
OpenAPI y Swagger
OpenAPI es una especificación para diseñar y construir API. Proporciona una forma estandarizada de definir su API para otros, brindando una forma estructurada que incluye puntos finales, tipos de solicitud/respuesta, definiciones de esquema, métodos de autenticación y más. Las especificaciones de OpenAPI están escritas en formatos YAML o JSON, ambos fáciles de leer y escribir. Esta especificación es ampliamente adoptada y respaldada por una variedad de herramientas, lo que la convierte en una opción popular para diseñar y documentar API. De hecho, si desea importar una API a Salesforce utilizando servicios externos, deberá especificarse con OpenAPI. Además, Salesforce es miembro de la Iniciativa OpenAPI .
Nota:A la fecha de esta publicación, la versión actual de la especificación OpenAPI es 3.1.0.
Swagger , por otro lado, es un conjunto de herramientas ( la mayoría de código abierto ) para implementar la especificación OpenAPI. Incluye la interfaz de usuario de Swagger, que proporciona una interfaz gráfica para comprender y probar las API, y Swagger Codegen, que genera código SDK de cliente y apéndices de servidor a partir de una especificación OpenAPI.
La especificación OpenAPI v2 también se conoce como Swagger, pero su nombre cambió cuando se convirtió en parte de la iniciativa OpenAPI en 2016.
Estructura básica de la especificación OpenAPI
La especificación OpenAPI está organizada en las siguientes secciones clave:
API abierta
Define el documento raíz y combina la lista de recursos y la declaración de la API. Requerido
Información
Proporciona metadatos sobre la API, como el título, la descripción, los términos del servicio, la información de contacto, etc. Obligatorio
Servidores
Especifica una o más URL base para su API, como producción o preparación.
Seguridad
Define un esquema de seguridad que pueden utilizar las operaciones de la API.
Caminos
Describe las rutas y operaciones disponibles para la API. Cada ruta tiene un método HTTP con los detalles de la operación.
Etiquetas
Agrega metadatos a una sola etiqueta que utiliza el objeto de operación.
Documentos externos
Proporciona una descripción y una URL para la documentación externa.
Componentes
Define un conjunto de objetos reutilizables para diferentes aspectos de la API. Esto puede incluir esquemas, respuestas, parámetros, ejemplos, cuerpos de solicitud, encabezados, esquemas de seguridad, etc.
Para fines de demostración, crearemos una API para administrar una librería. Esta API contará con dos métodos HTTP: uno para enumerar los libros disponibles y otro para agregar nuevos libros. A continuación, encontrará una definición básica de esta API, centrándose en el método para listar libros ( GET /books ) y sus objetos de respuesta.
Tenga en cuenta que estamos usando tres secciones principales aquí: Información , Rutas y Componentes . Como se mencionó anteriormente, describiremos esta API a medida que la implementemos mediante código. Para este propósito, utilizaremos Fastify y Fastify Swagger.
Fastify y Fastify Swagger
Fastify es un marco web altamente eficiente y flexible para Node.js. Está diseñado para facilitar su uso y ofrecer la máxima velocidad sin comprometer la personalización. Fastify proporciona una base sólida para las aplicaciones web y las API, con funciones como la validación de solicitudes y respuestas basadas en esquemas, ganchos, complementos y registro automático. Una de sus principales ventajas radica en su ecosistema, que incluye numerosos complementos centrales y mantenidos por la comunidad.
Uno de estos complementos es fastify-swagger . Este complemento nos permite ofrecer definiciones de Swagger (OpenAPI v2) u OpenAPI v3, que se generan automáticamente a partir de sus esquemas de ruta o de una definición existente de Swagger/OpenAPI. Además, utilizará fastify-swagger-ui , un complemento que sirve una instancia de Swagger UI dentro de su aplicación.
Nota: La siguiente demostración requiere la instalación de Node.js LTS y, a la fecha de esta publicación de blog, la última versión es v18.16.0.
Comencemos a crear la API de su librería instalando Fastify CLI y generando un nuevo proyecto ejecutando:
Luego, vayamos a la carpeta del proyecto e instalemos las dependencias fastify-swagger y fastify-swagger-ui .
Nota: En esta demostración, se centrará en tres aspectos principales: agregar compatibilidad con Swagger a Fastify, definir rutas de API y delinear esquemas y tipos de respuesta. No explicaremos cómo integrar la API con una base de datos. Si está interesado en explorar la fuente completa del proyecto, está disponible en el repositorio de ejemplos de codeLive.
Agreguemos compatibilidad con Swagger a Fastify editando el archivo app.js , luego importemos Swagger y SwaggerUI y registrémoslos como complementos.
aplicación.js
En la configuración del complemento de Swagger, tiene la opción de pasar toda la definición de especificación de OpenAPI, o puede aprovechar el enfoque dinámico que ofrece el complemento. Para esta demostración, utilizará el enfoque dinámico. Dado que el único campo obligatorio es info , definirá los metadatos de su API allí, además, la sección refResolver se encarga de nombrar las referencias de definición de esquema.
Y para SwaggerUI, solo especifica la ruta donde se alojará el sitio de documentación.
Ahora vamos a crear una carpeta schemas . Aquí es donde definirá los esquemas de su API. Para esta demostración, definirá un esquema book y un esquema error .
esquemas/index.js
Los esquemas representan la estructura de los objetos con los que trabajará, tanto para los cuerpos de solicitud como para los de respuesta. Para la especificación OpenAPI, el complemento Swagger agregará automáticamente estos objetos en el campo components .
Finalmente, definamos las rutas API para GET /books y POST /books usando Fastify. Primero, deberá registrar los esquemas dentro de Fastify. Luego, especificará los objetos de respuesta y solicitud para cada ruta que haga referencia a esos esquemas.
rutas/root.js
{ // … look at the code repository for a complete implementation } ) // POST /books fastify.post( ‘/books’, { schema: { description: "Create a book", body: { $ref: ‘book#’, required: [‘author’, ‘title’] }, response: { 201: { description: ‘Returns the book that has been created’, $ref: ‘book#’ }, 500: { description: ‘Returns an error’, $ref: ‘error#’ } } } }, async (request, reply) => { const { title, author } = request.body const id = randomUUID() const client = await fastify.pg.connect() try { const { rows: books } = await client.query( ‘INSERT INTO books(id, title, author) VALUES($1, $2, $3) RETURNING *’, [id, title, author] ) const [newBook] = books reply.code(201).send(newBook) } catch (error) { reply .status(500) .send({ code: 500, message: `An error ocurred: ${error.message}` }) } finally { client.release() } } ) // GET / fastify.get(‘/’, { schema: { hide: true } }, async function (request, reply) { reply.status(301).redirect(‘/api-docs’) })
} «>
Analicemos la ruta POST /books :
La función fastify.post define el método HTTP.
El primer argumento especifica la ruta: /books.
El segundo argumento especifica el schema , que incluye el body : el objeto de carga útil que espera la API. (Tenga en cuenta que es una referencia al esquema del book ). También incluye varios objetos response para esa ruta, que se asignan a los códigos de estado HTTP correspondientes 201 y 500 .
El tercer argumento es la implementación de la ruta. En este caso, está insertando el objeto en la base de datos y devolviendo el nuevo objeto. Si este proceso falla, devolverá un objeto de error. Es importante tener en cuenta que está utilizando los mismos esquemas que definió anteriormente.
Nota: También tiene la opción de excluir ciertas rutas de la documentación pasando hide: true en el objeto de esquema de esa ruta específica, como se demuestra en GET / route.
Su API está lista, así que ejecútela localmente para echar un vistazo a la interfaz de SwaggerUI ejecutando:
Y navegue a http://localhost:3000/api-docs para ver las diferentes rutas, su documentación y tener una forma de probarlas directamente desde la interfaz.
Si desea probarlo e implementarlo en Heroku, asegúrese de actualizar el script start en el archivo package.json con lo siguiente.
Además, asegúrese de tener acceso a una base de datos Heroku PostgreSQL y cree el esquema de la base de datos ejecutando:
<dx-code-block title language code-block="heroku pg:psql
Ahora que tiene una API de acceso público, integrémosla con Salesforce como un servicio externo.
Primero, deberá crear una credencial con nombre para esta API. En la interfaz de usuario de configuración, vaya a Seguridad > Credenciales con nombre y cree una credencial externa con un protocolo de autenticación personalizado y una entidad de seguridad.
Asegúrese de que la credencial externa tenga una entidad principal a la que le haya asignado permisos en Acceso principal de credenciales externas en su conjunto de permisos.
Luego, cree una credencial con nombre que haga referencia a la credencial externa con la URL que apunta a la API pública.
A continuación, vaya a Integraciones > Servicios externos y agregue un nuevo servicio externo desde una especificación de API, seleccione la credencial con nombre y configure la ruta relativa a la ruta de especificación de OpenAPI. En su demostración, será /api-docs/json .
Después de eso, guarde sus cambios y seleccione las operaciones que desea importar a Salesforce, revise las operaciones y finalice.
Como puede ver, las operaciones que ha seleccionado se han importado correctamente, especificando tanto los parámetros de entrada como los de salida.
Ahora podrá invocar este servicio externo desde Flow, Apex, Einstein Bots y OmniStudio.
Conclusión
OpenAPI y los servicios externos de Salesforce brindan una poderosa combinación para integrar API externas en su organización de Salesforce. Al aprovechar el enfoque estandarizado de OpenAPI para definir las API y la capacidad de Salesforce para consumir fácilmente estas definiciones e invocarlas desde soluciones de código bajo y pro-código, los desarrolladores como usted pueden optimizar el proceso de conexión a servicios externos y mejorar las capacidades de sus aplicaciones de Salesforce.
Si está interesado en obtener más información sobre los servicios externos , puede encontrar una lista de recursos de aprendizaje a continuación, incluidos videos que muestran cómo invocarlos desde Flow y Apex.
Recursos de aprendizaje
Sobre el Autor
Julián Duque es un defensor principal de desarrolladores en Salesforce, donde se enfoca en Node.js, JavaScript y desarrollo backend. Le apasiona la educación y el intercambio de conocimientos y ha estado involucrado en la organización de comunidades tecnológicas y de desarrolladores desde 2001.
Sígalo en Twitter @julian_duque, @julianduque.co en Bluesky social o LinkedIn.
Obtenga las últimas publicaciones de blog de desarrolladores de Salesforce y episodios de podcast a través de Slack o RSS.
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.
…
Aspectos destacados de la versión para desarrolladores | Aprende Moar Verano '23 | Blog de desarrolladores de Salesforce
¡Haz un gran revuelo con el lanzamiento de Summer '23!
Sabemos que cada versión trae consigo muchas funciones nuevas y sorprendentes, y puede haber mucho que digerir. Con Learn MOAR, empaquetamos el lanzamiento y se lo ofrecemos en un formato fácil de digerir con blogs, videos y más.
¡Es fácil empezar!
¡Explore los trailmixes de Trailhead con aspectos destacados de lanzamiento clave para desarrolladores o administradores, o ambos!
¡Únase a nosotros para Release Readiness Live ! Los expertos en productos y los defensores de los desarrolladores analizarán y demostrarán las nuevas funciones en el lanzamiento de Summer '23 y, al final de nuestra transmisión, responderemos sus preguntas. Sintonice a las 9 am PT el 19 de mayo para la sesión de desarrolladores. ¿No puedes unirte a nosotros en vivo? La grabación se publicará unas horas después de que finalice la transmisión.
Siga y complete un trailmix de Learn MOAR Summer '23 para administradores o desarrolladores para obtener una insignia exclusiva de la comunidad.
Introducción
¡El lanzamiento de Summer '23 está aquí y está repleto de funciones para desarrolladores! En esta publicación de blog, resumiremos los aspectos más destacados, para que pueda obtener una descripción general de las novedades y decidir qué es lo más interesante para usted. En publicaciones posteriores de Learn MOAR, profundizaremos en algunos de estos aspectos destacados, para que pueda explorarlos con mayor detalle. Mantenerse actualizado con las últimas innovaciones lo ayudará a aumentar su experiencia y convertirse en un desarrollador más exitoso.
Componentes web Lightning
Comencemos hablando de Lightning Web Components, que presentará una gran cantidad de nuevas funciones en Summer '23.
Un par de funciones que estaban en Beta ahora estarán disponibles de forma general (GA). Esto incluye DOM ligero , que permite integraciones de terceros y estilo global, Lightning Web Security para LWC y Aura , que facilita el uso de bibliotecas de JavaScript de terceros en LWC. La API RefreshView , que le permite actualizar la vista de un componente, también será GA. Además, el adaptador de cable GraphQL se está moviendo a Beta, lo que significa que puede probarlo de inmediato, sin tener que registrarse para el programa piloto. Esto cambiará las reglas del juego sobre cómo se leen los datos en Lightning Web Components.
Hay varias mejoras en la sintaxis de LWC que facilitarán la escritura de sus componentes. Se está lanzando una nueva directiva de plantilla lwc:spread (consulte los documentos ), que le permite distribuir propiedades de objetos a un componente secundario, lo que reduce significativamente la cantidad de código que necesita escribir. A partir de Summer '23, podrá establecer un valor dinámico para el atributo de ranura de un elemento HTML. Además, se habilitará la inyección programática de hojas de estilo, lo que le permitirá establecer la propiedad estática de las hojas de estilo para un componente.
Salesforce Mobile App Plus (Salesforce App+) es una versión de la aplicación Salesforce Mobile que habilita LWC Offline. LWC Offline es un entorno de tiempo de ejecución avanzado para componentes web Lightning que aumenta el tiempo de ejecución estándar con funciones diseñadas específicamente para uso móvil y sin conexión. Si bien LWC Offline anteriormente solo estaba disponible en la aplicación móvil Salesforce Field Service, Salesforce App+ le permite usarlo en un contexto más genérico. Salesforce App+ se cerró en Beta en Spring '23 y se trasladará a GA en Summer '23. Salesforce App+ está disponible bajo la licencia Salesforce Mobile Plus.
Integración de plataforma
Tener una plataforma robusta es tan importante como tener capacidades de integración sólidas. Es por eso que la versión Summer '23 trae muchas funciones de integración nuevas.
También se están mejorando las capacidades de integración en Flow. Flow Builders ahora podrá configurar llamadas HTTP GET a sistemas externos que no tienen una especificación de API abierta a través de la función Servicios externos. Las llamadas HTTP POST están en Beta. Si es un Muley, puede leer más sobre las innovaciones de Flow plus MuleSoft en la siguiente sección.
Además de todo esto, el adaptador GraphQL de Salesforce Connect que anunciamos en febrero se mudará a GA, y Event Relay ahora admitirá Shield Platform Encryption y tendrá una nueva interfaz de usuario de configuración fácil de usar.
Innovaciones entre nubes
Aunque MuleSoft, Tableau y Slack siguen sus propios ciclos de lanzamiento, son partes integrales del ecosistema de Salesforce y de vital importancia para los desarrolladores.
Mula Suave
Una de las innovaciones más recientes de MuleSoft es Anypoint Code Builder (Beta), el IDE de próxima generación de MuleSoft para diseñar, desarrollar e implementar API, integraciones y automatización desde un solo entorno. ¡Compruébalo si aún no lo has hecho!
Si leyó la sección "Integración de la plataforma" anterior, es posible que haya recibido un spoiler: MuleSoft se está integrando en Flow más que nunca. En Summer '23, habrá una nueva sección en la interfaz de usuario de configuración de Salesforce Platform, desde la cual podrá configurar y administrar los servicios de MuleSoft , que luego se pueden usar en Flow Builder. Además, el soporte de MuleSoft se está agregando a Flow Orchestrator , lo que facilita la creación de procesos comerciales automatizados de varios pasos que utilizan los servicios de MuleSoft.
Si trabaja con API, es posible que esté familiarizado con la colección Postman de API de Salesforce . Esta colección se ha vuelto muy popular y es ampliamente adoptada en el ecosistema de Salesforce, con actualmente más de 500 bifurcaciones y más de 800 estrellas. Tableau recientemente se subió al carro al agregar sus propias muestras de la API REST de Tableau a la colección. Para obtener más información, lea nuestra entrada de blog .
Si le gustó la colección, le encantará la innovación más reciente de Tableau, cuya vista previa pública se anunció en la Conferencia de Tableau (TC) 2023 del 9 al 11 de mayo. El nuevo Tableau Embedding Playground ofrece a los desarrolladores un entorno de aprendizaje interactivo para desarrollar rápidamente soluciones de análisis integradas. Integre visualizaciones de Tableau y agregue rápidamente interacciones que establezcan filtros y parámetros, obtengan marcas y datos seleccionados, utilizando los componentes básicos de los métodos y las propiedades de la API de incorporación. En el futuro, use sus propias visualizaciones en Tableau Cloud, Tableau Server o Tableau Public para desarrollar sus aplicaciones personalizadas con código que puede exportar y ejecutar en cualquier lugar.
La diversión no se detiene ahí. Para admitir análisis integrados personalizados y seguros, Tableau introdujo recientemente dos nuevas funciones de usuario que permiten a los desarrolladores y administradores pasar cualquier atributo de usuario en tiempo de ejecución dentro del flujo de autenticación integrado. Para obtener más información, leanuestra entrada de blog .
Flojo
Finalmente, nos complace compartir que Slack acaba de anunciar la disponibilidad general de su plataforma Slack de próxima generación. En la nueva plataforma, puede crear aplicaciones modulares mediante el desarrollo de componentes básicos, como funciones, flujos de trabajo y activadores, mediante TypeScript y Deno . Ahora puede implementar en la infraestructura administrada por Slack, ahorrando tiempo y aumentando la eficiencia. En el futuro, los usuarios de Slack podrán aprovechar cada capacidad que ofrece y combinarlas con otras funciones, servicios y proveedores de software para crear automatizaciones potentes y personalizadas. La plataforma también incluye una CLI, que puede usar para desarrollar, probar e implementar sus funciones y flujos de trabajo. Para obtener más información al respecto y obtener experiencia práctica, diríjase a la guía de inicio rápido .
Aprende MOAR
Nuestros gerentes de producto y defensores de desarrolladores están de vuelta para compartir las últimas características y funcionalidades que llegarán en Summer '23. Para ayudarlo a desarrollarse más rápido, hay una gran cantidad de contenido nuevo del equipo de relaciones con desarrolladores que cubre sus nuevas características favoritas. ¡Asegúrese de consultar Release Readiness Live el viernes 19 de mayo a las 9:00 a. m. PST, y lea lo último en el blog de desarrolladores de Salesforce para conocer más innovaciones relacionadas con desarrolladores en el lanzamiento de Summer '23!
Sobre el Autor
Alba Rivas trabaja como Principal Developer Advocate en Salesforce. Actualmente se enfoca en el desarrollo de Lightning Web Components y Slack. Puedes seguirla en Twitter o Linkedin .
Obtenga las últimas publicaciones de blog de desarrolladores de Salesforce y episodios de podcast a través de Slack o RSS.
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.
…
Subiendo de nivel tus habilidades de Apex | Blog de desarrolladores de Salesforce
Apex es una habilidad única que los desarrolladores deben dominar al crear soluciones personalizadas con Salesforce. Hay algunos conceptos básicos que son esenciales. Ciertas cosas, como la sintaxis y el flujo de control, son como aprender cualquier otro idioma. Otras cosas, como operaciones masivas, límites reguladores y disparadores, son particulares de Apex y cómo se implementa en la Plataforma de Salesforce. Una vez que tenga una idea de estas características y modismos clave, ¿a dónde va después?
En esta publicación, aprenderá sobre algunas características de Apex que son críticas para cualquier desarrollador de Apex que busque mejorar más allá de lo básico, junto con dónde puede ir para aprender sobre ellas.
Nota:Siempre que sea posible, los ejemplos de código en esta publicación se toman directamente o se adaptan de la aplicación de muestra Recetas de Apex o la Guía para desarrolladores de Apex. Ver las referencias al final del artículo.
En estos días, si desea un proceso automatizado o una interfaz de usuario similar a un asistente, Flow siempre debe ser una opción que considere. El alcance, la flexibilidad y la madurez de Flow han crecido enormemente. Aún así, es raro que los problemas comerciales complejos se puedan resolver sin ningún tipo de código.
Introduzca Apex invocable.
La anotación @InvocableMethod se usa para definir métodos llamados por Flow. Y @InvocableVariable muestra los parámetros para que Flow pase datos a su código Apex. ¿Por qué llamaría a Apex desde Flow? Quizás la lógica de su flujo se está volviendo demasiado compleja. Tal vez su automatización necesite realizar una operación que no sea accesible para Flow. En casos como estos, Apex puede ser su amigo.
Aquí hay una ilustración básica del uso de la anotación @InvocableMethod :
<dx-code-block title language="java" code-block="public class AccountQueryAction { @InvocableMethod(label='Get Account Names' description='Returns the list of account names corresponding to the specified account IDs.' category='Account') public static List getAccountNames(List ids) { List accountNames = new List(); List accounts = [SELECT Name FROM Account WHERE Id in :ids]; for (Account account : accounts) { accountNames.add(account.Name); } return accountNames; } }»>
Este ejemplo de la Guía para desarrolladores de Apex ilustra cómo la anotación marca esto como un método que Flow puede invocar. Tenga en cuenta que la anotación también define detalles como una etiqueta y una descripción que determinan lo que se muestra al usuario de Flow Builder.
Un efecto secundario importante de las anotaciones de @Invocable… del que pocas personas hablan es que esto muestra automáticamente su Apex al punto final de la API <INSTANCEURL>/data/<VERSION>/actions/custom/apex .
Otra cosa útil que puede hacer al invocar Apex desde su flujo es acceder a los diferentes tipos de Apex asíncrono. Lo que trae a colación la siguiente característica de Apex que se debe abordar.
La ejecución asíncrona desacopla una acción que queremos realizar del contexto de ejecución actual. Siguiendo las mejores prácticas actuales, existen tres formas de ejecutar Apex de forma asincrónica: en cola, programable y por lotes. Aunque técnicamente el bus de eventos es asíncrono, lo omitiremos por el momento.
Si solo necesita activar un poco de código para ejecutarlo de forma asincrónica, la opción en cola es la herramienta de referencia. Si tiene varias tareas asincrónicas, queueable las ejecuta de manera determinista en orden. Debido a que están en cola en orden, también puede encadenar una llamada asíncrona de otra. Y Apex en cola admite entradas de objetos o tipos primitivos.
Apex programado funciona tal como lo esperaría: ejecute algún código de Apex en un horario. Batch Apex está optimizado para trabajar con conjuntos de datos muy grandes. Para utilizar Apex asíncrono, debe crear una clase de Apex que implemente una interfaz específica: Queueable , Schedulable o Batchable , respectivamente.
Nota: algunos desarrolladores pueden estar familiarizados con la anotación @Future para hacer que un solo método sea asincrónico, también conocido como "métodos futuros". Los métodos futuros, aunque rápidos y fáciles, tienen limitaciones que los hacen menos útiles. No hay nada que pueda hacer con un método futuro que no se pueda hacer mejor con una clase en cola. Por este motivo, no recomendamos implementaciones de producción con métodos futuros.
Por lo tanto, echemos un vistazo a un ejemplo de una clase de Apex que se puede poner en cola.
<dx-code-block title language="Java" code-block="public with sharing class QueueableRecipes implements Queueable { public static void execute(QueueableContext qc) { List accounts = [ SELECT Id, Description FROM Account LIMIT 1000 ]; for (Account acct : accounts) { acct.Description += ‘ Edited by Queueable class’; } try { update accounts; } catch (DmlException dmle) { System.debug( LoggingLevel.INFO, ‘real life use cases should do more than just logging the error: ‘ + dmle.getMessage() ); } }
} «>
Todas las interfaces asíncronas de Apex tienen un método execute() que debe implementarse como se muestra arriba. Para ejecutar su clase Queueable , debe ponerla en cola.
Si bien no se muestra en este ejemplo de la aplicación de muestra Recetas de Apex, para pasar datos a su cola, anule el constructor con los parámetros que necesita.
El término "Apex dinámico" es un poco inapropiado. O, al menos, podría malinterpretarse como que Apex de alguna manera funciona como un lenguaje de programación dinámico. Esto no es a lo que se refiere (por ejemplo, no hay Apex función eval !).
Dynamic Apex es un código que se adapta a diferentes tipos de SObject ( Account , Contact , My_Custom_Object__c , etc.) en tiempo de ejecución. Esto se hace abstrayendo referencias específicas de SObject. La clave es usar la superclase SObject cuando se trabaja con datos. También utilizará las funciones de "descripción" de Apex para detectar con qué objetos y campos está trabajando y qué puede hacer con ellos (por ejemplo, si este usuario puede consultar este objeto).
Esta es una habilidad esencial para los desarrolladores de ISV. A menudo, creará una aplicación que debe adaptarse al entorno local del cliente que instala su aplicación. Esto significa que su código necesita detectar, describir y adaptar su comportamiento dependiendo de datos conocidos o incluso desconocidos.
Aunque es esencial para un desarrollador de ISV, también es importante para cualquier persona que quiera escribir código más reutilizable.
Tome este ejemplo de consulta muy básico:
<dx-code-block title language="Java" code-block="List accts = [SELECT Id, Name, Website FROM Account];»>
Esto funcionará todo el día consultando los datos de la cuenta. Pero, ¿y si queremos construir una consulta para cualquier SObject?
Para convertir esto en un Apex "dinámico", necesitamos abstraer las referencias de campo y SObject específicas. Y tal vez lo incluiríamos en un método que permitiera a otro desarrollador pasarlos. También podríamos verificar para asegurarnos de que el usuario tenga los permisos de objeto para realizar la operación que estamos a punto de intentar.
<dx-code-block title language="Java" code-block="public static List executeDynamicQuery(Schema.DescribeSObjectResult obj, List fields){ // Create a result-set list List resultRecords; if (obj.isQueryable()){ // Set up a query string String queryTemplate = ‘SELECT {0} FROM {1}’; List queryDetails = new List{String.join(fields, ‘, ‘), obj.getName()}; String queryString = String.format(queryTemplate, queryDetails); // Run your query resultRecords = Database.query(queryString); } return resultRecords; } «>
Lo anterior construye una consulta para un SObject que se pasa al método y una lista arbitraria de campos. Utiliza el objeto DescribeSObjectResult para detectar la capacidad de consulta e inferir el nombre de la API de SObject al construir y ejecutar la consulta. A continuación, debe invocarlo.
Así es como podríamos hacer eso con los objetos Cuenta y Contacto, respectivamente:
<dx-code-block title language="Java" code-block="List accountRecords = DynamicApexClass.dynamicQuery(Account.SObjectType.getDescribe(), new List{‘Id’,’Name’,’Website’}); List contactRecords = DynamicApexClass.dynamicQuery(Contact.SObjectType.getDescribe(), new List{‘Id’,’FirstName’,’LastName’}); «>
Este ejemplo no aborda algunos riesgos de SOQL dinámico, como la inyección de SOQL. Por lo tanto, asegúrese de leer sobre Apex dinámico. Aprender a escribir Apex seguro hará que sea menos probable que implemente código vulnerable en su organización (o la de un cliente). El enlace de variables en sus consultas SOQL es una herramienta clave para proteger su Apex dinámico de ser explotado. El método escapeSingleQuotes() es otra herramienta más antigua que también puede encontrar. El modo de usuario también es clave para garantizar que cualquier acción realizada tenga que cumplir con todas y cada una de las restricciones del usuario que la ejecuta.
Para obtener un ejemplo más completo y seguro de Apex dinámico, consulte la receta de Apex del método invocable en la aplicación de ejemplo Recetas de Apex. Esa acción invocable funciona con el objeto Cuenta o Tarea.
Con Salesforce, hay algunas formas de realizar la integración sin código. Específicamente, si solo necesita una aplicación o servicio de cliente para obtener datos de Salesforce, hay muchas API que se muestran automáticamente sin ningún tipo de codificación en el lado de Salesforce. Incluso se ajustan a su esquema personalizado. Si está integrando su organización a un sistema externo compatible con OData, puede usar Salesforce Connect y objetos externos (nuevamente, no se requiere código).
Pero a veces, es posible que deba llamar desde su organización a un servicio externo. O tal vez desee mostrar un punto final personalizado que agrupe más complejidad que una de las API estándar. Nuevamente, Apex contiene funciones que admiten tanto la aparición de nuevas API personalizadas como la llamada a servicios web.
Al pensar en API personalizadas, en estos días, la mayoría de los desarrolladores pensarían en API REST. Puede crear una API REST personalizada en Salesforce Platform creando una clase de Apex que se anota con la anotación @RestResource . Parte del trabajo de la anotación es definir también el nombre del recurso. Todas las API REST personalizadas basadas en Apex se encuentran en <INSTANCEURL>/services/apexrest/ .
Para definir los comportamientos que necesita admitir, hay una serie de anotaciones de métodos que corresponden a verbos HTTP, como @HttpGet y @HttpPost . La clase RestContext contiene un conjunto de elementos de acceso para obtener el estado de la solicitud HTTP entrante y la respuesta saliente que devuelve. A continuación, se muestra un ejemplo de un extremo REST básico que aparece en el método HTTP GET. Tenga en cuenta cómo se utilizan las anotaciones.
<dx-code-block title language="Java" code-block="@RestResource(urlmapping='/integration-service/*')
global inherited sharing class CustomRestEndpointRecipes( … @HttpGet global static String getRecordsToReturn() { RestResponse response = RestContext.response; try { List accounts = [ SELECT Id, Name, Phone, Website FROM Account WITH USER_MODE ]; response.statusCode = 200; String serializedAccounts = JSON.serialize(accounts); return serializedAccounts; } catch (QueryException qe) { System.debug( LoggingLevel.INFO, ‘Failed to query a list of Accounts. Error is: ‘ + qe.getMessage() ); response.statusCode = 400; return qe.getMessage(); } }
} «>
Si su requisito es crear un servicio SOAP, también hay un conjunto de características para admitir ese protocolo.
Fuera del código real, necesitará una sesión autorizada para acceder a cualquier servicio web que cree. Pero si ya tiene un cliente autorizado, la solicitud es solo otra llamada al punto final personalizado que defina.
La llamada a un punto final REST externo se realiza a través de un conjunto de clases. La clase HttpRequest le permite definir los parámetros de cómo se comportará su solicitud (punto final, verbo HTTP, encabezados, etc.). La solicitud se realiza a través del método estático Http.request() . Esto devuelve un objeto HttpResponse que le proporciona los datos devueltos o el error si la solicitud falla.
Nota: Las clases HttpRequest y HttpResponse son las mismas para las llamadas REST y los servicios REST personalizados.
Se requiere cierta configuración para su texto destacado. Específicamente, deberá configurar una credencial con nombre en la mayoría de los casos. Esta configuración le permite descargar el protocolo de enlace de autenticación de su código. Aunque, si está llamando a un servicio anónimo no autenticado, también puede optar por usar una configuración de sitio remoto más simple.
= 200 && response.getStatusCode()
El ejemplo anterior hace una llamada simple a un punto final. Tenga en cuenta que no se utilizan las opciones para establecer encabezados ni usar una credencial con nombre, ya que esta solicitud es para una API simple que no requiere autenticación.
La transmisión de eventos es una herramienta valiosa para crear arquitecturas débilmente acopladas en aplicaciones complejas. La plataforma de Salesforce implementa la transmisión de eventos a través de dos características principales: eventos de plataforma y captura de datos modificados. Lacolumna vertebral de estas funcioneses el bus de eventos.
De la Guía para desarrolladores de eventos de plataforma, el bus de eventos es "Un servicio de entrega y almacenamiento de eventos de múltiples inquilinos y múltiples nubes basado en un modelo de publicación-suscripción". Tanto su organización como los sistemas externos pueden publicar y suscribirse a eventos. Por supuesto, es clave que si publicas un mensaje, algo debe haberse suscrito para que suceda cualquier otra cosa.
Los eventos de plataforma representan los datos que pasan a través del bus de eventos. Los eventos se procesan en el orden en que se reciben. Una forma de pensar en ellos es como un SObject efímero que se almacena temporalmente en el bus de eventos en su camino hacia su destino. De hecho, los metadatos de un evento se almacenan en el mismo lugar de su proyecto que sus SObjects. Puede distinguir los eventos de plataforma personalizados de los SObjects por su sufijo __e (por ejemplo Order_Complete__e ).
Una vez que completa un evento con sus datos, el método EventBus.publish() es similar a una llamada DML en su SObject normal. Tenga en cuenta el código a continuación que publica un evento.
En Apex, se suscribe a un evento creando un disparador asíncrono para él. Pero los disparadores asíncronos son diferentes de la operación DML transaccional estándar de un disparador normal. Por esta razón, debe tener en cuenta algunas diferencias. Con disparadores asíncronos, el tamaño del lote es diferente. Necesitas configurar tu usuario de ejecución. Las operaciones de activación de eventos también se pueden volver a intentar. Asegúrese de conocer estas diferencias a medida que comience a implementar activadores de eventos de plataforma. Tenga en cuenta el disparador a continuación.
A diferencia de los disparadores DML típicos, los disparadores de eventos de plataforma solo admiten el contexto after insert . Tampoco existe una acción explícita para suscribir un disparador a un evento de plataforma. Una vez que el activador se implementa en su organización, se suscribe automáticamente.
Además de Apex, los eventos de la plataforma pueden activarse y suscribirse mediante sistemas externos y Flow. Son clave en las integraciones débilmente acopladas. Como tal, es raro que Apex active y se suscriba al mismo evento.
Hemos cubierto mucho. Pero de ninguna manera esto es todo lo que necesita saber como desarrollador de Apex. Los elementos cubiertos se basan en algunas características bastante comunes. Pero es posible que deba aprender otras funciones de Apex según los requisitos de su proyecto. Aquí hay algunos otros elementos que debe tener en cuenta.
Caché de plataforma: si proviene de otras plataformas de programación, estará familiarizado con la noción de una variable estática o global persistente en todas las transacciones. Pero en Apex, las estáticas se limitan a la transacción.La memoria caché de la plataformaes una característica de Apex que permite la persistencia de datos en memoria entre transacciones. Si encuentra un retraso en el rendimiento relacionado con la recuperación de datos, la memoria caché de la plataforma puede ayudar.
Marcos de activación: no es una característica del lenguaje, sino bibliotecas que facilitan el uso de activadores. Estos proyectos creados por la comunidad abstraen el código de activación repetitivo que a menudo necesita escribir. Al usar un marco de activación, debería permitirle concentrarse solo en la lógica que debe abordarse. Para algo más que un disparador trivial, se recomienda encarecidamente adoptar un marco. Y conozco a algunos que argumentarían que debería considerar un marco incluso para ese disparador trivial. Pero este no es el lugar para debatir el tiempo de valor frente a la optimización prematura. Hay una implementación muy simple de esto en laaplicación Apex Recipes .
SOSL: el lenguaje de búsqueda de objetos de Salesforce (SOSL) es el primo subestimado de SOQL. SOSL permite consultas basadas en texto no deterministas. Es muy eficiente para encontrar datos de texto en comparación con la búsqueda de campos de texto con SOQL y comodines. Admite la búsqueda de varios SObjects simultáneamente y contiene funciones para filtrar de forma determinista los resultados de la búsqueda. Si tiene consultas SOQL de texto que son lentas, definitivamente consulte esta herramienta.
AuraEnabled: paramostrarel código Apex personalizado en sus componentes web Lightning (LWC), estaanotaciónes clave. Es muy probable que ya esté usando este si comenzó su viaje de Salesforce creando LWC. Pero si aún no lo ha usado, búsquelo en cualquier proyecto que involucre una interfaz de usuario personalizada. ¿Por qué "Aura" habilitado si es para LWC? Bueno, esta anotación se creó inicialmente para admitir el predecesor de LWC, el marco Aura. Tenía sentido no reinventar unanuevaanotación cuando la existente funcionaría igual de bien para LWC.
Cada viaje para aprender un nuevo lenguaje de programación tiene algunas características clave que todos deben conocer. La sintaxis básica, el control de flujo y el modelo de ejecución de la plataforma son fundamentales para comprender. Pero una vez que tenga esos conceptos básicos, trabajar en funciones más avanzadas es clave para aumentar su conjunto de habilidades. Las acciones invocables, el Apex asíncrono, el Apex "dinámico", la integración y el bus de eventos son funciones que probablemente utilizará a medida que avanza. Al familiarizarse con estos ahora, no solo se preparará para abordar proyectos en el futuro, sino que también podrá tomar mejores decisiones de solución.
Si cree que está listo para aprender, los senderos para desarrolladores intermediosyavanzadosen Trailhead pueden ayudarlo a encaminarse con todos estos temas y más.
Peter Chittumha trabajado en software empresarial y habilitación para desarrolladores durante más de 20 años. Pasó los últimos 12 años ayudando a miles de desarrolladores a tener éxito en la plataforma de Salesforce, y más recientemente lideró el equipo de promotores de desarrolladores en Salesforce. Pasa su tiempo libre con su familia, anda en bicicleta de montaña, cocina y toca música. Sígalo en Twitter (@pchittum), LinkedIn (en/PeterChittum) o BlueSky Social (@pchittum.bsky.social).
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 22 de mayo de 2023 por Rakesh Gupta
Gran idea o pregunta duradera:
¿Cómo eliminar registros de Salesforce utilizando Flow?
Objetivos:
Después de leer este blog, podrá:
Comprender la anotación @InvocableMethod
Más información sobre el método database.emptyRecycleBin
Configurar la acción de Apex para eliminar registros de forma permanente de Flow
Configurar el flujo de pantalla con el elemento Eliminar registro
Y mucho más
¿Qué es la eliminación completa?
La eliminación definitiva es la eliminación permanente de los registros especificados de la Papelera de reciclaje. Cuando los datos se eliminan de forma permanente, es casi imposible recuperarlos. Esto generalmente se logra a través de los métodos Database.EmptyRecycleBin .
Al vaciar los contenedores de reciclaje, tenga en cuenta las siguientes reglas y pautas:
Una vez que los registros se eliminan de la Papelera de reciclaje mediante esta llamada, se pueden consultar mediantequeryAll()durante algún tiempo. Por lo general, este tiempo es de 24 horas, pero puede ser más corto o más largo.
Una vez que los registros se eliminan mediante la llamada Database.EmptyRecycleBin , no se pueden recuperar.
Warren Mason es administrador de sistemas en Gurukul on Cloud (GoC). En GoC están utilizando Salesforce Flow para optimizar los procesos de ventas. Warren tiene un requisito para eliminar clientes potenciales sin correo electrónico. Está construyendo un flujo de pantalla:
Descubra todos los clientes potenciales sin correo electrónico
Si bien esto se puede resolver con varias herramientas de automatización como Apex Trigger y otras, usaremos Salesforce Flow y llamaremos a un método de Apex. Para llamar a un método de Apex, agregue el elemento Acción a su Flujo de Salesforce y seleccione una clase de Apex con una anotación @InvocableMethod.
En este artículo, usaremos la llamada clase de base de datos EmptyRecycleBin . Con Database.EmptyRecycleBin es posible borrar los registros de Salesforce. El método EmptyRecycleBin() elimina los registros de la papelera de reciclaje inmediatamente. A partir del lanzamiento de Summer'23 , no es posible acceder directamente al método EmptyRecycleBin desde Flow, por eso estamos usando la clase Apex Invocable.
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 2 pasos para resolver el requisito comercial de Warren usando ScreenFlow . Debemos:
Cree una clase de Apex y una clase de prueba para eliminar registros de forma permanente de la Papelera de reciclaje.
Flujo de fuerza de ventas
Definir propiedades de flujo para el flujo de pantalla
Agregue un elemento Obtener registros para encontrar todos los clientes potenciales sin dirección de correo electrónico
Agregue un elemento de decisión para verificar los clientes potenciales encontrados o no (del paso 2)
Agregue el elemento Eliminar registros para eliminar clientes potenciales
Agregar acción: llame a Empty RecycleBin Invocable Apex Class
Paso 1: Cree una clase de Apex y una clase de prueba
Ahora, tenemos que comprender una nueva anotación de Apex, es decir, @InvocableMethod. Esta anotación nos permite usar un método de Apex como algo que se puede llamar desde Flow y Apex. Los métodos invocables se llaman con la API REST y se usan para invocar un solo método de Apex. Los métodos invocables tienen valores de entrada y salida dinámicos y admiten llamadas de descripción.
La anotación InvocableVariable identifica una variable de clase utilizada como parámetro de entrada o salida para la acción invocable de un método InvocableMethod. Si crea su propia clase personalizada para usarla como entrada o salida de un método invocable, puede anotar variables de miembros de clase individuales para que estén disponibles para el método.
La anotación de variable invocable admite los modificadores que se muestran en este ejemplo.
La clase EmptyRecycleBin contiene dos variables, una para eliminar un solo registro y otra para manejar la eliminación de varios registros. Siéntase libre de pasar el valor a una o ambas variables según sea necesario.Cree la siguiente clase en su organización.
clase pública EmptyRecycleBin { @InvocableMethod(label='Papelera de reciclaje vacía' description='Eliminar permanentemente los registros de la Papelera de reciclaje.' iconName='slds:estándar:record_delete' categoría = 'Acciones de Apex personalizadas') ejecución de vacío estático público (Lista <Solicitudes> lista de solicitudes) { List<SObject> recordstoDelete = New List<SObject>(); para (Solicitudes req: lista de solicitudes) { if(req.obj != null){ recordstoDelete.add(req.obj); } if(req.listofSObjects != null){ recordstoDelete.addAll(req.listofSObjects); } } if(registrosparaEliminar.tamaño()>0){ Database.emptyRecycleBin(registrosparaEliminar); } } Solicitudes de clases públicas{ @InvocableVariable (descripción ='Aceptar un registro de tipo SObject.' requerido=falso) objeto público SObject; @InvocableVariable (descripción ='Aceptar múltiples registros de un tipo SObject.' requerido=falso) public List<SObject> listofSObjects; }
}
Copie el código deGitHubo instálelo usandoesta URL.
Paso 2.1: Definir propiedades de 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 de pantalla opción y haga clic en Crear y configurar el flujo.
Se abrirá el diseñador de flujo para usted.
Paso 2.2: Adición de elementos Obtener registros para encontrar clientes potenciales sin correo electrónico
El siguiente paso es usar el objeto Prospecto para encontrar los prospectos sin dirección de correo electrónico.
En Flow Designer, 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 Prospecto de la lista desplegable.
SeleccioneSe cumplen todas las condiciones (Y).
Establecer condiciones de filtro
Fila 1:
Campo : Correo electrónico
Operador : Igual
Valor : {!$ConstanteGlobal.EmptyString}
Cuántos registros almacenar:
Seleccionartodos los registros
Cómo almacenar datos de registro:
Elija la opción para Almacenar automáticamente todos los campos .
Paso 2.3: uso del elemento de decisión para verificar la variable de recopilación de registros (del paso 2)
Ahora usaremos el elemento Decisiónpara comprobar la Variable de recopilación de registros del paso 2para saber si devuelve el cliente potencial o no.
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_Leads}
Operador: es nulo
Valor: {!$ConstanteGlobal.Falso}
Haga clic enListo .
Paso 2.4: Agregar acción: eliminar registros para eliminar clientes potenciales
El siguiente paso es eliminar los clientes potenciales que encontramos en el Paso 2.2. Para ello utilizaremos el elemento Eliminar Registros .
En Flow Designer, debajo del nodo Sí , haga clic en el icono + y seleccione el elemento Eliminar registros .
Introduzca un nombre en el campo Etiqueta ; el nombre de la API se completará automáticamente.
Para Cómo encontrar registros para eliminar, seleccione Usar los ID almacenados en una variable de registro o una variable de colección de registros .
Selecciona el {!Get_Leads} de la lista desplegable.
Haga clic en Listo.
Paso 2.5: Adición de una acción para llamar a una clase de Apex invocable
En Flow Designer, haga clic en el icono+ y seleccione el elemento Acción .
Seleccione la clase de Apex invocableEmptyRecycleBin .
Ingrese un nombre en el campo Etiqueta : el nombre de la API se completará automáticamente.
Establecer valores de entrada:
Objeto para “listofSObjects” (Entrada) : Lead
Objeto para "obj" (Entrada) : Plomo
Almacenar valores de entrada
listofSObjects : {!Get_Leads}
Haga clic enListo .
Al final, Warren's Flow se verá como la siguiente captura de pantalla:
Una vez que todo se vea bien, guarde el flujo.
Prueba de concepto
Creé 201 clientes potenciales sin una dirección de correo electrónico para probar el flujo anterior.
Ahora ejecute el flujo de pantalla y espere a que se complete el flujo.
Vuelva a la Papelera de reciclaje para asegurarse de que los clientes potenciales se hayan eliminado definitivamente.
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.
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.
…
Actualizaciones de integración de plataforma para desarrolladores | Aprende Moar Verano '23 | Blog de desarrolladores de Salesforce
¡Únase a nosotros para Release Readiness Live esta semana! Los expertos en productos y los defensores de los desarrolladores analizarán y demostrarán las nuevas funciones en el lanzamiento de Summer '23 y, al final de nuestra transmisión, responderemos sus preguntas. Sintonice a las 9 am PT el 19 de mayo para la sesión de desarrolladores. ¿No puedes unirte a nosotros en vivo? La grabación se publicará unas horas después de que finalice la transmisión.
Introducción
El verano finalmente está aquí, y para nosotros los desarrolladores, ¡eso significa un nuevo y emocionante lanzamiento! Exploremos las próximas características que trae la versión Summer '23 para los desarrolladores centrados en la integración de plataformas.
Consultas SOQL anidadas en API
A partir de la API de la plataforma de Salesforce v58.0, SOQL ahora admite consultas de relación que atraviesan hasta cinco niveles de registros primarios y secundarios . Anteriormente, solo se admitía un nivel. Esta característica está disponible para objetos estándar y personalizados, y está limitada a consultas realizadas a través de llamadas de consulta REST y SOAP.
Probémoslo probando una relación padre-hijo de cuatro niveles usando la API REST con la siguiente consulta:
La llamada API ahora devuelve los registros anidados solicitados en la siguiente jerarquía: Cuenta (Nivel 1) → Contacto (Nivel 2) → Caso (Nivel 3) → Comentarios del caso (Nivel 4).
Credenciales con nombre en Connect API
Otra característica útil introducida en esta versión es la capacidad de administrar credenciales con nombre tanto desde la API REST de Connect como desde la API de Connect . Ya no necesita interrumpir su configuración para crear credenciales a través de la interfaz de usuario; ahora, se puede hacer programáticamente,
Por ejemplo, puede recuperar la lista de todas las credenciales con nombre existentes realizando la siguiente llamada a la API:
GET /services/data/v58/named-credentials/named-credential-setup
Alternativamente, puede usar Apex con lo siguiente:
También puede crear credenciales con nombre mediante programación con la API y Apex. Este es un ejemplo de cómo hacerlo con Apex:
Podrá contar la cantidad de registros que coinciden con ciertos criterios, calcular el ingreso promedio en todas las cuentas o ver la cantidad total de todas las oportunidades.
Se admiten las siguientes funciones agregadas:
avg : devuelve el valor promedio de un campo numérico
count : devuelve el número de resultados que coinciden con los criterios de consulta
countDistinct : devuelve el número de valores de campo distintos y no nulos que coinciden con los criterios de consulta
grouping : especifica si se utiliza un campo al componer el grupo; usar con el argumento de consulta groupBy y el tipo ROLLUP o CUBE
max – Devuelve el valor máximo de un campo
min – Devuelve el valor mínimo de un campo
sum : devuelve la suma total de un campo numérico
Echemos un vistazo a una consulta de ejemplo. La siguiente consulta calcula el ingreso anual promedio de todas las cuentas, agrupadas por industria. Tenga en cuenta que estamos usando el campo aggregate en uiapi en lugar de query , lo que nos permite aprovechar las funciones agregadas.
A continuación, una consulta de GraphQL utilizando la función de agregado promedio y la función de agrupación.
También puede realizar consultas tradicionales dentro de la misma solicitud:
El nuevo adaptador de Salesforce Connect para GraphQL actúa como un cliente para integrar datos de fuentes externas que exponen sus capacidades a través de GraphQL. Lo hace de una manera de copia cero al hacer llamadas en vivo a los puntos finales de la API cuando una acción del usuario o del sistema requiere registros específicos. Solo los datos necesarios para esa acción en particular se consultan a través de GraphQL y Salesforce Connect no almacena ni almacena en caché los registros devueltos por el servidor. Además, este adaptador incluye extensiones especiales para AWS AppSync y brinda acceso sin inconvenientes a Amazon RDS.
Para aprovechar este nuevo adaptador, simplemente cree una nueva fuente de datos externa y seleccione el tipo GraphQL .
Apex publica devoluciones de llamada en eventos de la plataforma
Con el lanzamiento de Summer '23, ahora puede realizar un seguimiento de la publicación de eventos de la plataforma utilizando Apex Publish Callbacks . Con esta nueva versión, puede obtener el resultado final de una llamada EventBus.publish a través de una devolución de llamada de publicación de Apex que implemente. Esto le da la opción de realizar un seguimiento de los errores o los éxitos para recibir el resultado final de la publicación. En función de ese resultado, puede decidir qué acción tomar, como intentar volver a publicar eventos fallidos, por ejemplo.
Para realizar un seguimiento de un evento fallido publicado, escriba una clase de Apex e implemente la interfaz EventBus.EventPublishFailureCallback . Si la operación asincrónica falla, se invocará el método onFailure . El parámetro result contiene los valores del campo EventUuid para cada evento fallido, pero no incluye los datos del evento en sí.
Para realizar un seguimiento de las publicaciones de eventos exitosas, escriba una clase de Apex e implemente la interfaz EventBus.EventPublishSuccessCallback . Debido a que la mayoría de las llamadas de publicación suelen tener éxito, el procesamiento de publicaciones de eventos exitosas probablemente no sea una preocupación. Observe siempre los límites de rendimiento y del gobernador de Apex cuando procese este tipo de resultado.
Como práctica recomendada, siempre cree eventos usando sObjectType.newSObject , ya que esto incluye un EventUuid que puede usar para rastrear el evento. Al crear eventos con este enfoque, recomendamos no publicar el mismo evento más de una vez para evitar duplicaciones EventUuid .
Métricas mejoradas para eventos de plataforma
Con esta actualización, ahora puede obtener métricas de uso de eventos mejoradas para eventos de plataforma consultando el objeto PlatformEventUsageMetric . Esto le permite agregar datos de uso por nombre de evento y determinar qué evento consume más de sus asignaciones. Además, puede agrupar el uso por cliente para descubrir cuántos clientes se suscribieron a un evento en particular y cómo se distribuye el uso de entrega de eventos entre los clientes. Además, utilice agregaciones granulares de tiempo de períodos diarios, por hora y de 15 minutos para segmentar los datos de uso para obtener información más detallada.
Cuando consulta PlatformEventUsageMetric , puede usar estos nuevos campos: EventName , Client , EventType y UsageType .
La siguiente consulta de ejemplo devuelve el uso de eventos por hora para eventos entregados entre el 1 y el 2 de abril en horario UTC. También agrega los resultados en intervalos de una hora según lo especificado por el campo TimeSegment . Dado que los campos EventName y Client se especifican en la consulta, los resultados se agruparán por evento y cliente.
= 2023-04-01T00:00:00.000Z AND EndDate
Un resultado de muestra de la consulta anterior sería similar al siguiente, incluirá datos de uso para todos los eventos, Order_Event__e y AccountChangeEvent .
Para obtener más información sobre esta función, consulte la documentación .
Acción HTTP en flujo: GET es GA, POST es Beta
HTTP Callout ahora está generalmente disponible para solicitudes GET , lo que le permite traer datos externos a Flow Builder sin ningún código. Usted crea una acción de Llamada HTTP desde dentro de Flow, que puede llamar a cualquier API de servicio basado en la web. Después de agregar los detalles de la API, Flow Builder genera una acción de llamada reutilizable que puede usar para diferentes flujos y en todo Salesforce.
Para ponerlo en uso, desde el elemento Acciones, seleccione Crear llamada HTTP .
Junto con GA, hemos incluido algunos cambios desde la última versión que agilizan el proceso de configuración.
Ahora puede editar una acción de llamada HTTP de forma declarativa. Las API cambian regularmente, por ejemplo, cuando se agrega un nuevo campo obligatorio a un sistema externo. Anteriormente, para editar la acción de llamada HTTP reutilizable, modificó la especificación de API generada automáticamente, lo que requería conocimientos de JSON. Ahora, puede editar la acción con clics en el menú de configuración de Servicios externos.
También se simplificó la configuración de la estructura de datos de la respuesta de la API. Proporciona una respuesta de API de muestra y Flow infiere los tipos de datos y analiza el JSON para que los datos se puedan utilizar en los flujos. Anteriormente, si necesitaba cambiar los tipos de datos inferidos, editaba el propio JSON. Ahora, selecciona los tipos de datos del campo con clics. Ahora también se admiten los tipos de datos de fecha, fecha/hora y booleano.
Como bonificación adicional, obtiene mensajes de error más intuitivos al crear su acción de llamada HTTP para ayudar a resolver el error y evitar problemas en el tiempo de ejecución.
Y si no puede OBTENER suficiente con HTTP Callout, ahora puede usar el método POST (Beta) para enviar datos de Salesforce a un servidor externo en Flow Builder. Por ejemplo, una nueva cuenta en Salesforce activa un flujo que crea una factura en un sistema externo. Seleccione POST (Beta) , ingrese un cuerpo de solicitud JSON de muestra que la API espera al configurar la llamada HTTP, y Flow infiere la estructura de datos externos.
Aprende MOAR
Guau, ¡son bastantes nuevas características de integración de plataforma para probar! Confío en que facilitarán la vida de muchos desarrolladores. ¡Pero hay más por descubrir! Lo invito a explorar nuestras otras publicaciones de blog para conocer las últimas actualizaciones de LWC, Mobile, MuleSoft y Tableau.
Nuestros gerentes de producto y defensores de desarrolladores están de vuelta para compartir las últimas características y funcionalidades que llegarán en Summer '23. Para ayudarlo a desarrollarse más rápido, hay una gran cantidad de contenido nuevo del equipo de relaciones con desarrolladores que cubre sus nuevas funciones favoritas. ¡Asegúrese de consultar Release Readiness Live el viernes 19 de mayo a las 9:00 a. m. PST, y lea lo último en el blog de desarrolladores de Salesforce para conocer más innovaciones relacionadas con desarrolladores en el lanzamiento de Summer '23!
¡Explore los trailmixes de Trailhead con aspectos destacados de lanzamiento clave para desarrolladores o administradores, o ambos!Siga y complete un trailmix de Learn MOAR Summer '23 para administradores o desarrolladores para obtener una insignia exclusiva de la comunidad.
Otras lecturas
Sobre el Autor
Julián Duque es un defensor principal de desarrolladores en Salesforce, donde se enfoca en Node.js, JavaScript y desarrollo backend. Le apasiona la educación y el intercambio de conocimientos y ha estado involucrado en la organización de comunidades tecnológicas y de desarrolladores desde 2001.
Última actualización el 16 de mayo de 2023 por Rakesh Gupta
Gran idea o pregunta duradera:
¿Cómo averiguar todas las funciones de fórmula permitidas en un Flujo?
Objetivos:
Después de leer este blog, podrá:
Descubra todas las funciones de fórmula admitidas en Salesforce Flow
Ejecute SOQL para objetos de la API de herramientas
y mucho más
Isabella Stewart trabaja como administradora de Salesforce en Gurukul On Cloud (GoC). Quiere saber cómo encontrar todas las fórmulas disponibles para Salesforce Flow.
Práctica guiada (nosotros hacemos):
Con la Fórmula, puede crear cualquier cosa, desde ecuaciones matemáticas simples hasta cálculos más complejos y avanzados. En este artículo, aprenderá cómo encontrar todas las funciones de fórmula disponibles que se pueden usar en Salesforce Flow.
Si está buscando una explicación sobre cómo usar la columna de fórmula, consulteeste artículo .
Representa una función utilizada al construir una fórmula, incluidos ejemplos y usos. Este objeto está disponible en la API de herramientas versión 39.0 y posteriores.
CustomFielFormulaFunctionAllowedTyped
Representa las funciones que se admiten en el contexto de la fórmula dada. Este objeto está disponible en la versión API 48.0 y posteriores.
Realice los pasos a continuación para obtener una cobertura de código confiable:
Haga clic en Configuración | Consola de desarrollador .
En el Editor de consultas, ingrese la siguiente consulta SOQL
SELECCIONE Function.Name, Function.Label, Function.Description, Function.ExampleString FROM FormulaFunctionAllowedType where Type='Flow'
Seleccione la casilla de verificación Usar API de herramientas .
Haga clic en Ejecutar .
SELECCIONE Función.Nombre, Función.Etiqueta, Función.Descripción, Función.Cadena de ejemplo
FROM FormulaFunctionAllowedType donde Tipo='Flujo'
Lista de todas las fórmulas disponibles para Salesforce Flow
FórmulaFunción.Nombre
FormulaFunction.Label
FormulaFunction.Descripción
FormulaFunction.ExampleString
1
abdominales
abdominales
Devuelve el valor absoluto de un número, un número sin su signo
ABS (número)
2
ACOS
ACOS
Devuelve el arcocoseno del número en radianes, si el número dado está entre -1 y 1. De lo contrario, NULL.
ACOS(número)
3
AGREGARMESES
AGREGARMESES
Agregue el número de meses a la fecha, usando la última fecha del mes si la fecha es el último día del mes o agregando el número de meses tiene menos días.
AGREGARMESES(fecha,num)
4
Y
Y
Comprueba si todos los argumentos son verdaderos y devuelve VERDADERO si todos los argumentos son verdaderos
Y (lógico1, lógico2,…)
5
ASCII
ASCII
Devuelve el punto de código del primer carácter de la cadena dada como un número.
ASCII(texto)
6
COMO EN
COMO EN
Devuelve el arcoseno del número en radianes, si el número dado está entre -1 y 1. De lo contrario, NULL.
ASIN(número)
7
UN BRONCEADO
UN BRONCEADO
Devuelve el arco tangente del número en radianes.
ATAN(número)
8
ATAN2
ATAN2
Devuelve el arco tangente del cociente de y y x en radianes.
ATAN2(y,x)
9
COMIENZA
COMIENZA
Comprueba si el texto comienza con los caracteres especificados y devuelve VERDADERO si es así. De lo contrario devuelve FALSO
COMIENZA(texto, comparar_texto)
10
VALOR EN BLANCO
VALOR EN BLANCO
Comprueba si la expresión está en blanco y devuelve expresión_sustituta si está en blanco. Si la expresión no está en blanco, devuelve el valor de la expresión original.
VALOR EN BLANCO (expresión, expresión_sustituta)
11
BR
BR
Inserta una etiqueta de interrupción HTML en fórmulas de cadena
BR()
12
CASO
CASO
Compara una expresión con una serie de valores. Si la expresión es igual a cualquier valor, se devuelve el resultado correspondiente. Si no es igual a ninguno de los valores, se devuelve el resultado de otra cosa
Devuelve la fecha y hora que representa el número dado como los segundos transcurridos desde el 1 de enero de 1970.
DESDEUNIXTIME(número)
30
GEOLOCALIZACIÓN
GEOLOCALIZACIÓN
Devuelve una ubicación basada en la latitud y longitud proporcionadas.
GEOLOCALIZACIÓN (latitud, longitud)
31
GETSESIONID
GETSESIONID
Devuelve el ID de la sesión actual. Esto puede ser útil en los hipervínculos a otras aplicaciones que utilizan las credenciales de salesforce.com para la autenticación.
GETSESIONID()
32
HTMLENCODE
HTMLENCODE
Codifica texto y fusiona valores de campo para su uso en HTML
HTMLENCODE(texto)
33
HIPERVÍNCULO
HIPERVÍNCULO
Crea un hipervínculo
HIPERVÍNCULO (url, nombre_amistoso [, destino])
34
SI
SI
Comprueba si una condición es verdadera y devuelve un valor si es VERDADERO y otro valor si es FALSO.
SI (prueba_lógica, valor_si_verdadero, valor_si_falso)
35
INCLUYE
INCLUYE
Determina si cualquier valor seleccionado en un campo de lista de selección múltiple es igual a un literal de texto que especifique.
Devuelve VERDADERO si Texto coincide con la expresión regular RegEx_Text. De lo contrario, devuelve FALSO.
REGEX(Texto, RegEx_Text)
67
CONTRARRESTAR
CONTRARRESTAR
Devuelve la cadena de texto en orden inverso
REVERSO (texto)
68
BIEN
BIEN
Devuelve el número especificado de caracteres desde el final de una cadena de texto
DERECHA(texto, num_chars)
69
REDONDO
REDONDO
Redondea un número a un número específico de dígitos
REDONDO(número,núm_dígitos)
70
RPAD
RPAD
Rellene el lado derecho del valor con espacios o la cadena de relleno opcional para que la longitud sea padded_length
RPAD(texto, padded_length [, pad_string])
71
PECADO
PECADO
Devuelve el seno del número, donde el número dado en radianes
SIN(número)
72
SQRT
SQRT
Devuelve la raíz cuadrada positiva de un número
SQRT(número)
73
SUSTITUTO
SUSTITUTO
Sustituye texto_nuevo por texto_antiguo en una cadena de texto. Use SUSTITUIR cuando desee reemplazar texto específico en una cadena de texto
SUSTITUIR (texto, texto_antiguo, texto_nuevo)
74
BRONCEARSE
BRONCEARSE
Devuelve la tangente del número, donde el número dado en radianes
TAN(número)
75
TEXTO
TEXTO
Convierte un valor en texto usando un formato de visualización estándar
TEXTO(valor)
76
HOY
HOY
Devuelve la fecha actual
HOY()
77
RECORTAR
RECORTAR
Elimina todos los espacios de una cadena de texto excepto los espacios individuales entre palabras
RECORTAR (texto)
78
TRONCO
TRONCO
Trunca un número a un número específico de dígitos
TRUNC(número,núm_dígitos)
79
UNIXTIMESTAMP
UNIXTIMESTAMP
Devuelve la cantidad de segundos desde el 1 de enero de 1970 para la fecha dada, o la cantidad de segundos en el día para una hora.
UNIXTIMESTAMP(fecha/hora)
80
SUPERIOR
SUPERIOR
Convierte todas las letras del valor a mayúsculas
SUPERIOR (texto)
81
CÓDIGOURL
CÓDIGOURL
Codifica texto y valores de campo combinados para su uso en direcciones URL
CÓDIGOURL(texto)
82
URLPARA
URLPARA
Devuelve la URL del destino seleccionado con entradas opcionales expresadas como parámetros de consulta
URLFOR(objetivo, id, [entradas], [sin anular])
83
VALOR
VALOR
Convierte una cadena de texto que representa un número en un número
VALOR(texto)
84
DÍA LABORABLE
DÍA LABORABLE
Devuelve el día de la semana para la fecha dada, usando 1 para el domingo, 2 para el lunes, hasta 7 para el sábado.
DÍA DE LA SEMANA (fecha)
85
AÑO
AÑO
Devuelve el año de una fecha, un número entre 1900 y 9999
AÑO (fecha)
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.
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.
…
Escriba Apex simplificado y seguro con las actualizaciones de Spring '23 | Blog de desarrolladores de Salesforce
La versión Spring '23 de Salesforce Platform, disponible en general a partir del 13 de febrero, agregó algunas actualizaciones fantásticas al lenguaje de Apex. Hemos implementado algunas de las actualizaciones de Spring '23 en la aplicación de ejemplo Apex-Recipes , lo que ha simplificado significativamente la base de código existente.
En esta publicación de blog, revisaremos las actualizaciones en Spring '23 para Apex con ejemplos de código. Estas actualizaciones ayudan a los desarrolladores a crear aplicaciones más seguras para sus organizaciones.
1. Operaciones de base de datos en modo usuario
Apex, de forma predeterminada, se ejecuta en modo Sistema con permisos elevados, lo que significa que los desarrolladores pueden pasar por alto los controles de seguridad sin darse cuenta al escribir código.
Antes de continuar, revisemos rápidamente los controles de seguridad que los administradores de Salesforce pueden colocar para garantizar que los usuarios solo puedan acceder y manipular los datos para los que están autorizados a ver o editar. Las viñetas a continuación resumen diferentes mecanismos para aplicar un modelo de seguridad detallado para sus datos de Salesforce.
CRUD significa "Crear, Leer, Actualizar y Eliminar", las cuatro operaciones básicas que un usuario puede realizar en un registro en Salesforce
FLS significa "Seguridad de nivel de campo", que determina qué campos dentro de un registro que un usuario puede ver o editar
El uso compartido de registros permite al administrador configurar reglas sobre quién puede ver o editar un registro en función de varios criterios.
Con las operaciones de base de datos en modo usuario , los desarrolladores pueden optar por ejecutar Apex en el contexto del usuario, lo que garantiza que se apliquen las reglas CRUD/FLS y de uso compartido del usuario configuradas. Veamos esto en acción con ejemplos de código detallados.
Aplicar CRUD/FLS y reglas de uso compartido para SOQL estático
Puede indicar el modo de operación usando la palabra clave WITH USER_MODE para el modo de usuario y WITH SYSTEM_MODEpara el modo de sistemaen su consulta SOQL. Vea el ejemplo a continuación.
<dx-code-block title language code-block="List accounts = [SELECT Name, ShippingCity, ShippingStreet FROM Account WITH USER_MODE];»>
En el ejemplo anterior, al usar la palabra clave WITH USER_MODE ,la consulta respeta estas restricciones de seguridad:
Permisos de lectura en el objeto Cuenta (configurado para Perfil/Conjunto de permisos) para el usuario
Permisos de campo (FLS) para Nombre, Calle de envío y Ciudad de envío para el usuario
Configuración de nivel de registro (como valores predeterminados de toda la organización y reglas de colaboración) para el objeto Cuenta para el usuario
El WITH USER_MODEla palabra clave también es compatible conagregar SOQL para hacer cumplir CRUD/FLS y reglas de uso compartido de registros.
<dx-code-block title language code-block="List groupedResults = [SELECT SUM(AMOUNT) total FROM Opportunity WHERE AccountId = :accountId WITH USER_MODE];»>
En el ejemplo anterior, al usar la palabra clave WITH USER_MODE ,la consulta respeta estas restricciones de seguridad:
Permisos de lectura en el objeto Oportunidad para el usuario
Permisos de campo (FLS) para Amount y AccountId (sí, incluso los campos utilizados en la cláusula SOQL WHERE se verifican para FLS) para el usuario
Acceso a nivel de registro (como valores predeterminados de toda la organización y reglas de colaboración) en el objeto Oportunidad para el usuario
Para obtener más ejemplos, consulte la claseSOQLRecipes de la aplicación apex-recipes.
Aplicar CRUD/FLS y reglas de uso compartido para SOQL dinámico
Los nuevos métodos Database (ver documentos ) ahora admiten un parámetro AccessLevel que le permite ejecutar operaciones de base de datos en modo de usuario en lugar de en el modo de sistema predeterminado. Veamos un código de ejemplo para ejecutar un SOQL dinámico en el modo de usuario.
<dx-code-block title language code-block="String query = 'SELECT ID, Name FROM Account LIMIT 1';
List lstAccounts = Database.query(query, AccessLevel.USER_MODE);»>
En el ejemplo anterior, el modo de usuario se aplicará de manera similar al ejemplo de SOQL estático que vimos en la sección anterior.
Para obtener más ejemplos, consulte la claseDynamicSOQLRecipes de apex-recipes. Hemos actualizado todos los métodos de la clase para usar el parámetro AccessLevel .
Hacer cumplir CRUD/FLS y reglas de uso compartido para SOSL
WITH USER_MODE o WITH SYSTEM_MODE también son compatibles con declaraciones SOSL (Lenguaje de búsqueda de objetos de Salesforce).
Veamos un ejemplo de una instrucción SOSL estática.
<dx-code-block title language code-block="String keyword = 'Alaska';
List<List> searchResults = [ FIND :keyword IN Name FIELDS RETURNING Account(Name), Contact(LastName, Account.Name) WITH USER_MODE ];»>
En el ejemplo anterior, al usar la palabra clave WITH USER_MODE, la consulta respeta estas restricciones de seguridad:
Permisos de lectura en los objetos Cuenta y Contacto para el usuario
Permisos de campo (FLS) para el campo Nombre en Cuenta y campo Apellido en Contacto para el usuario
Acceso a nivel de registro (como valores predeterminados de toda la organización y reglas de colaboración) en los objetos Cuenta y Contacto para el usuario
Para Dynamic SOSL, los nuevos métodos Search (ver documentos ) también admiten el parámetro AccessLevel similar a los nuevos métodos Database . A continuación se muestra un ejemplo de cómo usar el parámetro AccessLevel para ejecutar SOSL en el contexto de los usuarios.
<dx-code-block title language code-block="String query = 'FIND 'Edge*' IN ALL FIELDS RETURNING Account(ID,Name), Contact, Lead'; List<List> searchResults = Search.query(query, AccessLevel.USER_MODE);»>
Hacer cumplir CRUD/FLS y reglas de uso compartido para DML
Las operaciones de la base de datos pueden especificar el modo de usuario o sistema utilizando las palabras clave as useroas system .
El siguiente es un código de ejemplo que ejecuta DML en el modo de usuario aplicando CRUD/FLS y reglas de uso compartido.
Para Dynamic DML, los desarrolladores pueden utilizar el parámetro AccessLevel para ejecutar operaciones de base de datos en el modo de usuario o en el modo de sistema.
Echemos un vistazo a un ejemplo de la aplicación apex-recipes para ver cómo puede diseñar métodos para que sean genéricos, de modo que el consumidor del método pueda decidir ejecutar el código en el modo de usuario o de sistema.
El fragmento de código siguiente muestra cómo invocar este método en el modo de usuario.
El siguiente fragmento de código muestra cómo invocar este método en el modo de sistema.
Para obtener más ejemplos, consulte la claseDMLRecipes de la aplicación apex-recipes.
Consideraciones importantes
Las operaciones de la base de datos en modo usuario generan excepciones de seguridad si se encuentra una infracción CRUD/FLS. Si tiene un requisito para evitar excepciones y aún aplicar la seguridad, use el método Security.stripInaccessible() (consulte los documentos ). Consulte la clase StripInaccessibleRecipes (ver documentos ) de la aplicación apex-recipes para ver ejemplos de código.
Si usa la palabra clave WITH SECURITY_ENFORCED en sus declaraciones SOQL para hacer cumplir CRUD/FLS, ahora le recomendamos que use la palabra clave WITH USER_MODE en su lugar debido a las siguientes razones:
La consulta SOQL que usa la palabra clave WITH USER_MODE admite muchas innovaciones nuevas, como reglas de restricción, reglas de alcance y cualquier otra operación de seguridad para el acceso a datos y CRUD/FLS, que la plataforma puede agregar en el futuro, por lo que es una especie de prueba del futuro
La consulta SOQL que usa la palabra clave WITH USER_MODE maneja casos de uso de seguridad complejos mucho mejor. Por ejemplo, WITH USER_MODE es compatible con SOSL y consultas polimórficas .
Las declaraciones SOQL que usan la palabra clave WITH USER_MODE manejan CRUD/FLS para los campos usados en la cláusula where y order by o campos usados en la consulta de relación o búsqueda polimórfica
Las consultas SOQL que utilizan la palabra clave WITH USER_MODE funcionan mucho mejor en comparación con el uso WITH SECURITY_ENFORCED
El modo de usuario anula la configuración de nivel de clase para la consulta SOQL o DML escrita en modo de usuario. Exploremos esto con el siguiente código de ejemplo.
<dx-code-block title language code-block="public without sharing ExampleCls { public static List getAccount() { String query = ‘SELECT Id FROM Account Limit 1’; return Database.query(query, AccessLevel.USER_MODE); } }»>
En el ejemplo anterior, aunque la clase Apex está configurada para ejecutarse en el contexto del sistema (sin la palabra clave compartida), la consulta SOQL se ejecuta en el modo de usuario, lo que refuerza la seguridad. El modo de usuario para la operación (SOQL/SOSL o DML) anula el uso compartido a nivel de clase.
2. Pasar dinámicamente variables de vinculación a consultas SOQL
Spring '23 agregó nuevos métodos como Database.queryWithBinds , Database.getQueryLocatorWithBinds y Database.countQueryWithBinds .
Estos métodos proporcionan los siguientes beneficios:
Anteriormente, si los desarrolladores usaban variables de vinculación en SOQL dinámico (usando el método Database.query ) que están fuera de contexto, la consulta no podía resolver las variables. Con queryWithBinds , las variables de vinculación de la consulta se resuelven directamente desde un parámetro Map con una clave en lugar de variables de código de Apex.
Con Database.queryWithBinds , los ataques de inyección SOQL se evitan automáticamente.
Echemos un vistazo a un ejemplo de código para comprender el segundo punto con más profundidad.
<dx-code-block title language code-block="public static List simpleBindingSoqlQuery(Map bindParams) { String query = ‘SELECT Id, Name ‘ + ‘FROM Account ‘ + ‘WHERE name = :name’; return Database.queryWithBinds( query, bindParams, AccessLevel.USER_MODE );
}»>
El código anterior ejecuta un SOQL dinámico en el modo de usuario. El método acepta un parámetro Map y se puede llamar usando el código a continuación.
<dx-code-block title language code-block="String accountName = 'Codey And Co';
Map nameBind = new Map{‘name’ => accountName};
List accounts = simpleBindingSoqlQuery(nameBind);
System.debug(accounts);»>
Tenga en cuenta que no es necesario que nos aseguremos de que el nombre de la variable esté en el mismo ámbito de método que la consulta dinámica. Además, no es necesario usar el método String.escapeSingleQuotes para el valor en la variable name cuando se usa queryWithBinds .
3. Especifique un retraso en la programación de trabajos en cola
Otra característica importante que lanzamos en Spring '23 es la capacidad de especificar demoras para trabajos programados que se pueden poner en cola.
Puede ser beneficioso ajustar el tiempo antes de que se ejecute el trabajo en cola en los siguientes casos de uso:
Si el sistema externo tiene una velocidad limitada y puede sobrecargarse con trabajos en cola encadenados que realizan llamadas rápidas
Al sondear los resultados, y ejecutar demasiado rápido puede provocar el uso desperdiciado de los límites diarios de Apex asíncrono
Usa el método System.enqueue(queueable, delay) (ver docs ) para especificar retrasos. Los retrasos pueden variar de cero a 10 minutos. Veamos un ejemplo para comprender mejor esta función.
El ejemplo anterior agrega un trabajo para la ejecución asincrónica retrasada al pasar una instancia de la implementación de su clase de la interfazQueueable para la ejecución. Hay un retraso mínimo de cinco minutos antes de que se ejecute el trabajo.
Especificar un retraso predeterminado en toda la organización en la programación de trabajos en cola
Actualmente, si tiene un trabajo en cola de Apex, utiliza el tiempo estándar en cola sin demoras adicionales. Los administradores pueden definir un retraso predeterminado en toda la organización para todos los trabajos en cola que no especifican retraso usando System.enqueue(queueable, delay) . Este es principalmente un mecanismo para manejar trabajos fuera de control que podrían estar ejecutándose demasiado rápido.
Importante consideración
Cuando establece el retraso en 0 (cero), el trabajo en cola se ejecuta lo más rápido posible. Con trabajos en cola encadenados, implemente un mecanismo para ralentizar o detener el trabajo si es necesario. Sin un mecanismo a prueba de fallas de este tipo, puede alcanzar rápidamente el límite de Apex asíncrono diario.
También hay una próxima función Beta en la versión Summer '23 (planificada para estar disponible el 10 de junio de 2023 en todas las organizaciones) que permite a los desarrolladores controlar la profundidad de los trabajos en cola encadenados.
4. Obtenga el SObject de origen de una instancia DescribeFieldResult usando el nuevo método getSObjectType
El método getSObjectType (ver documentos ) en el objeto DescribeFieldResult (ver documentos ) es un método de mejora de la calidad de vida del desarrollador que se implementó en Spring '23.
Anteriormente, los desarrolladores tenían que hackear y escribir código adicional para obtener el objeto de origen de la información del esquema de campos obtenida a través de la descripción del campo. Puede consultar las soluciones anteriores a través de esta publicación de stackexchange .
A continuación se muestra un ejemplo de código de cómo usar el nuevo método getSObjectType .
Con el método getSObjectType , los desarrolladores ya no tienen que pasar el nombre del objeto como una cadena. Consulte un ejemplo más completo en las notas de la versión de Spring '23.
También quiero agradecer a Dang Mai por actualizar el complemento más bonito para Apex (usado para formatear el código Apex automáticamente) para admitir todas las palabras clave introducidas para las operaciones de la base de datos en modo usuario.
Conclusión
En conclusión, la versión Spring '23 de Salesforce incluye varias actualizaciones. Mediante el uso de estas nuevas funciones, los desarrolladores pueden crear aplicaciones más eficaces y seguras para sus organizaciones.
Los equipos de productos de Apex no se detienen ahí y hay más innovaciones en la hoja de ruta. Puede obtener una vista previa de lo que viene para Apex en Summer '23 (nuestro próximo lanzamiento) en la vista previa de las notas de la versión . También recomiendo ver la grabación de la sesión TrailblazerDX '23, Apex: What's New and What's Coming , para aprender más sobre lo que se está cocinando.
Referencias adicionales
Sobre el Autor
Mohith Shrivastava es promotor de desarrollo en Salesforce con una década de experiencia en la creación de productos a escala empresarial en la plataforma de Salesforce. Actualmente se está enfocando en las herramientas para desarrolladores de Salesforce, Flow, Apex y Lightning Web Components en Salesforce. Mohith se encuentra actualmente entre los principales contribuyentes en Salesforce Stack Exchange, un foro de desarrolladores donde los desarrolladores de Salesforce pueden hacer preguntas y compartir conocimientos. Puedes seguirlo a través de su Twitter @msrivastav13 .
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 abril de 2023 por Rakesh Gupta
Gran idea o pregunta duradera:
¿Cómo configurar el usuario y el tamaño del lote para Platform Event Trigger?
Objetivos:
Después de leer este blog, podrá:
Comprender el tamaño del lote para el activador de eventos de la plataforma
Anular el usuario de ejecución predeterminado para el desencadenador de eventos de la plataforma
Cree PlatformEventSubscriberConfig a través de la API REST
y mucho más
Jestilla Zetkin trabaja como arquitecta de Salesforce en Gurukul On Cloud (GoC) . Recientemente, enfrentó desafíos mientras trabajaba con eventos de plataforma, principalmente límites de gobernadores. Quiere aprender a configurar el tamaño del lote para el activador de eventos de la plataforma. En este ejercicio, configuraremos el tamaño del lote para lo siguiente:
Activador de vértice
LeadGenerationEventTrigger en Lead_Generation__e
Tamaño del lote: 50
Usuario ejecutor: Usuario de integración
¿Qué es Plataforma de Eventos?
Las arquitecturas basadas en eventos se han vuelto muy populares en los últimos años, y por una buena razón. Se basa en el patrón de fuego y olvido . Activar un evento y dejar que cada sistema maneje la lógica empresarial le permite mantener los sistemas no relacionados desacoplados y puede ayudar a simplificar la arquitectura.
Los eventos de la plataforma le permiten entregar notificaciones de eventos seguras, escalables y personalizables dentro de Salesforce o desde fuentes externas. Las aplicaciones pueden publicar y suscribirse a eventos de plataforma en la plataforma de Salesforce mediante Apex, Flow o en un sistema externo mediante CometD. Si desea obtener más información sobre el evento de plataforma, consulte el módulo de Trailhead .
¿Cuál es el tamaño de lote predeterminado para el desencadenador de eventos de plataforma?
De forma predeterminada, el disparador de eventos de la plataforma se ejecuta como el usuario del sistema de procesos automatizados con un tamaño de lote de 2000 mensajes de eventos. A veces es necesario cambiar el usuario y el tamaño del lote para eludir los límites del gobernador u otros desafíos.
Salesforce le permite anular el usuario de ejecución predeterminado y el tamaño de lote de un desencadenador de Apex de evento de plataforma con PlatformEventSubscriberConfig en la API de herramientas o la API de metadatos para configurar el desencadenador.
Puede especificar cualquier usuario activo en la organización de Salesforce. El activador se ejecuta en un contexto de sistema con privilegios para acceder a todos los registros independientemente de los permisos de nivel de campo y de objeto del usuario. Puede especificar un tamaño de lote personalizado de 1 a 2000. El tamaño del lote es el número máximo de mensajes de eventos que se pueden enviar a un disparador en una ejecución.
Comprender el objeto PlatformEventSubscriberConfig
Hagamos una pausa aquí, familiarícese con el objeto de la API de herramientas PlatformEventUsageMetricen Salesforce. Representa los ajustes de configuración para un disparador de Apex de evento de plataforma, incluido el tamaño del lote y el usuario que ejecuta el disparador.
Nombre del campo
Detalles
Tamaño del lote
Un tamaño de lote personalizado, de 1 a 2000, para el desencadenador Apex del evento de plataforma. El tamaño del lote corresponde al número máximo de mensajes de eventos que se pueden enviar a un disparador en una ejecución. El tamaño de lote predeterminado es 2000 para activadores de eventos de plataforma.
Nombre del desarrollador
El nombre exclusivo del objeto PlatformEventSubscriberConfig.
etiqueta maestra
Etiqueta para PlatformEventSubscriberConfig. En la interfaz de usuario, este campo es Configuración de suscriptor de eventos de plataforma.
PlatformEventConsumerId
El ID del desencadenador de Apex del evento de plataforma que se va a configurar.
ID de usuario
El ID del usuario con el que se ejecuta el desencadenador de Apex del evento de plataforma. De forma predeterminada, el disparador de eventos de la plataforma se ejecuta como la entidad de proceso automatizado. Establecer el usuario que ejecuta a un usuario específico tiene estos beneficios:
Los registros se crean o modifican como este usuario.
Los registros con campos OwnerId tienen sus campos OwnerId completados para este usuario cuando se crean o modifican.
Este usuario crea los registros de depuración para la ejecución del disparador.
Puede enviar un correo electrónico desde el activador, que no es compatible con el usuario de Proceso automatizado predeterminado.
Los componentes PlatformEventSubscriberConfig tienen el sufijo .platformEventSubscriberConfig y se almacenan en la carpeta PlatformEventSubscriberConfigs .
Este componente PlatformEventSubscriberConfig tiene la etiqueta LeadGenerationEventTriggerConfig . Contiene la configuración de un disparador de eventos de plataforma, LeadGenerationTrigger , y especifica el tamaño del lote y el usuario.
<?versión xml="1.0" codificación="UTF-8"?>
<PlatformEventSubscriberConfig xmlns="http://soap.sforce.com/2006/04/metadatos"> <platformEventConsumer>LeadGenerationTrigger</platformEventConsumer> <tamaño del lote>50</tamaño del lote> <masterLabel>LeadGenerationEventTriggerConfig</masterLabel> <usuario>desarrollador@automationchampion.com</usuario> <isProtected>falso</isProtected>
</PlatformEventSubscriberConfig>
Práctica guiada (nosotros hacemos):
Para agregar una configuración, realice una solicitud POST como se menciona a continuación:
AbraWorkbenche inicie sesión con su nombre de usuario y contraseña de Trailhead Playground .
Asegúrese de haber seleccionado la opción Producción para el medio ambiente .
Navegue a la pestaña Utilidades y seleccione la opción REST Explorer .
Selecciona las siguientes opciones:
Elija un método HTTP para realizar en el URI del servicio REST API a continuación :POST
Cuerpo : proporcione los valores en el cuerpo de la solicitud. Esta solicitud de ejemplo configura un activador existente con un tamaño de lote de 50 y especifica el ID de un usuario en ejecución.
{ "Tamaño del lote": "50", “Nombre del desarrollador”:”LeadGenerationEventTriggerConfig”, “MasterLabel”:”LeadGenerationEventTriggerConfig”, “PlatformEventConsumerId”: “01qB0000000Zcug”, “ID de usuario”: “005B00000015gt8” }
Dónde:
01qB0000000Zcug, disparador de Apex en Lead_Generation__e
005B00000015gt8, es el ID de usuario del usuario de integración
Haga clic enEjecutar .
Puede consultar y recuperar las configuraciones en su organización con SOQL. Si consulta desde Developer Console Query Editor, asegúrese de seleccionar Use Tooling API . Esta consulta de ejemplo recupera todas las configuraciones establecidas en su organización de Salesforce.
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.
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.
…
Seguridad Zero Trust para sus API con MuleSoft | Blog de desarrolladores de Salesforce
Roma no se construyó en un día… pero casi se arruinó en una noche. Eso es lo que tienen los imperios, son frágiles. Al igual que la confianza. Podemos extender aún más esta analogía a nuestra arquitectura empresarial; se necesita mucho tiempo y un gran esfuerzo para construir una organización exitosa y ganarse la confianza del cliente, pero un percance de seguridad puede reducir todos los escombros de sus esfuerzos.
En 2022, todos escuchamos sobre lafiltración del juego GTA 6justo antes de su fecha de lanzamiento. Esta filtración fue lo suficientemente grande como para poner en problemas financieros al editor del juego, y hubo especulaciones de que una persona interna, como un empleado, estaba involucrada. Entonces la pregunta es: "¿A quién debemos confiar con la seguridad?" La seguridad es tan fuerte como el eslabón más débil.
Y la respuesta es: “No confíes en nadie”, y eso es lo que nos lleva aZero Trust Security (ZTS).
ZTS es un marco arquitectónico que tiene como objetivo proteger a las organizaciones de amenazas de seguridad, ataques y violaciones de datos al cumplir con los protocolos de seguridad en cada punto de acceso.
Antes de ZTS,la seguridad basada en el perímetroera el enfoque popular. En la seguridad perimetral, autenticamos y autorizamos a la entidad solo a nivel periférico mediante firewalls, redes privadas virtuales, etc. Una vez que la entidad obtiene acceso, puede acceder a todos los recursos. El movimiento lateral no autorizado ha sido una de las principales preocupaciones en la seguridad perimetral. Por el contrario, ZTS impone autenticación y autorización en cada punto de entrada. En general, podemos aplicar ZTS a aplicaciones empresariales, aplicaciones nativas de la nube, API, etc. En esta publicación de blog, nos centraremos principalmente en implementar ZTS para API y explorar lo que MuleSoft tiene para ofrecer en lo que respecta a Zero Trust Security.
Principios básicos de ZTS
Todo el concepto de ZTS se basa en los siguientes cuatro principios básicos:
No confíe en nadie y verifique siempre: independientemente de la persona (cliente, director ejecutivo, desarrollador, etc.), autenticamos y autorizamos su acceso en cada etapa. Si hay múltiples puntos de entrada para obtener acceso a un recurso en particular, debemos aplicar la validación en cada punto de entrada. UtilizamosGestión de Identidad y Acceso(IAM) y autenticación multifactor (MFA), y aplicamos políticas de seguridad.
Mínimos privilegios y denegación predeterminada: De forma predeterminada, se denegará el acceso a todos los recursos. Una vez que la entidad está autenticada y autorizada, según la credencial, podemos otorgar acceso con los privilegios mínimos. Necesitamos asegurarnos de que estamos autorizando solo los recursos esenciales. Podemos controlar el acceso para diferentesrolesutilizando elmodelo de acceso basado en rolesy modificar los privilegios en consecuencia.
Inspección completa y visibilidad del flujo de datos: debemos asegurarnos de que haya transparencia en el flujo de datos. Debemos tener cuidado con el registro de la carga útil, ya que podría involucrar información confidencial. Si hay múltiples sistemas finales y API involucrados, deberíamos tener una visión general de 360 grados de la arquitectura del sistema y el flujo de datos. De esta forma, podemos controlar el mal uso de información sensible y la fuga de información.
Gestión de control centralizado:Para implementar fuertes medidas de seguridad, necesitamos un centro de gestión centralizado. Esto nos permitirá aplicar medidas de seguridad en todas las entidades. También nos da un control completo sobre la infraestructura de la organización desde una perspectiva de seguridad.API Manageres un lugar para dejar de administrar aplicaciones API, Mule y Non-MuleSoft. Puede administrar, proteger y gobernar aplicaciones con la ayuda de API Manager.
Implementación de seguridad de confianza cero
Es muy probable que su infraestructura existente ya tenga algunas medidas de seguridad implementadas. Para implementar ZTS, no tiene que comenzar a construir todo desde cero o reconstruir su infraestructura de seguridad existente. Todo lo que necesita hacer es planificar bien las medidas de seguridad e identificar las lagunas. Puede lograr esto adoptando un enfoque de microsegmentación o seguridad en capas.
Microsegmentación o enfoque de seguridad en capas
Esta es una técnica en la que dividimos la infraestructura en niveles o segmentos y luego aplicamos medidas de seguridad. También podemos considerarlo como "divide y vencerás", donde estamos dividiendo la gran infraestructura en fragmentos más pequeños para una mejor seguridad y control. Este enfoque nos brinda seguridad a nivel granular.
Podemos implementar los principios básicos de ZTS de la siguiente manera:
Enumere todos los activos, sistemas finales, aplicaciones, datos y puntos finales de API. Comprobar el estado del dispositivo y del sistema. Implemente la autenticación de extremo a extremo y no permita el acceso lateral.
Resuma el flujo de datos y las conexiones. Diseñe su infraestructura actual.
En función de la criticidad de la información, identificar las políticas de seguridad a aplicar en cada punto de entrada. Implemente el acceso basado en roles y políticas.
Haga cumplir la implementación de seguridad a través de un sistema de gestión central y supervise su infraestructura.
ZTS con MuleSoft
Es posible que ya esté familiarizado con lascapacidades de integraciónde MuleSoft y cómo aprovecharla conectividad dirigida por APIpara construir una infraestructura componible. Lo siguiente lo ayudará a comprender cómo implementar ZTS usando las capacidades de seguridad de MuleSoft.
Tomemos en consideración una arquitectura componible creada con conectividad dirigida por API (vea la imagen a continuación). La línea exterior punteada en rojo denota seguridad basada en el perímetro, ya que estamos aplicando seguridad en un nivel periférico. Para aplicar ZTS, aplicaremos medidas de seguridad en cada capa de la API y en todo el punto final de la API. Las líneas internas de puntos rojos en la capa de proceso indican que hemos aplicado una política de eliminación de encabezado y autenticación básica en el punto de entrada de la capa de experiencia a la capa de proceso.
¿Cómo logramos ZTS con MuleSoft?
Aplicación de políticas de seguridad listas para usar:MuleSoft ofrece varias políticas de seguridad listas para usar, desde la autenticación básica hasta OAuth y JWT. Podemos aplicar fácilmente estas políticas en nuestro nivel de puerta de enlace API utilizandoAnypoint API Manager. También podemos personalizar estas políticas para cumplir con los estándares y regulaciones de nuestra organización.
Creación de entornos seguros:podemos aplicar la protección contra amenazas en cada perímetro perimetral de forma automática medianteAnypoint Securityen una plataforma que cumpla con las normas ISO 27001, SOC 1 y 2, HIPAA, PCI DSS y GDPR.
Registro y monitoreo efectivos:podemos lograr transparencia utilizando las capacidades de registro y monitoreo de MuleSoft, y usarAPI Catalog CLIpara descubrir y catalogar nuestras API.
Gobernanza continua: utilizamosAnypoint API Governancepara identificar, validar y hacer cumplir las mejores prácticas de seguridad para las API, como OWASP Top 10, desde el diseño hasta la implementación.
Conclusión
En este blog, hemos aprendido sobre Zero Trust Security y sus principios básicos. También somos conscientes de la diferencia entre la seguridad basada en el perímetro y ZTS, y por qué ZTS es importante. Además, hemos aprendido cómo podemos implementar ZTS usando MuleSoft y las capacidades de seguridad que MuleSoft tiene para ofrecer.
Recursos
Sobre el Autor
Akshata Sawantes promotora sénior de desarrolladores en Salesforce. Es autora, bloguera y oradora, y coautora del título,MuleSoft for Salesforce Developers. Akshata es un miembro activo de la comunidad de MuleSoft y ex embajador de MuleSoft. Le encanta leer, bailar, viajar y la fotografía, y es una gran entusiasta de la comida. Síguela en Twitter y LinkedIn.
Obtenga las últimas publicaciones de blog de desarrolladores de Salesforce y episodios de podcast a través de Slack o RSS.
Administrar sus proyectos dentro de Salesforce garantiza que todos sus datos clave estén disponibles en un solo lugar, con todos los que necesitan la capacidad de acceder a ellos ya en la plataforma y familiarizados con la interfaz de usuario. Además, no es necesario que cree ni mantenga la integración con herramientas de gestión de proyectos externas de terceros. Sin embargo, si está buscando mejorar aún más su juego de gestión de proyectos en Salesforce, la mejor manera de hacerlo sería a través de la automatización. Este artículo lo guiará a través de las mejores formas de automatizar la gestión de proyectos en Salesforce.
La automatización ayuda a su organización a crear valor a través de una reducción del tiempo dedicado a realizar tareas, una reducción del riesgo relacionado con el error humano y la creación de una experiencia optimizada para sus usuarios y clientes.
Las posibilidades son infinitas cuando se utilizan herramientas de automatización de Salesforce listas para usar, como Salesforce Flow, y las aplicaciones de gestión de proyectos de Salesforce adecuadas, como Inspire Planner.
Ejemplos de cómo puede automatizar la gestión de proyectos en Salesforce
Tabla de contenido
Una vez que haya decidido automatizar la gestión de proyectos en Salesforce, la pregunta es ¿Qué automatizamos ?
A continuación se enumeran varios escenarios de automatización de la gestión de proyectos que han demostrado ahorrar tiempo y recursos a las empresas. Estos pueden darle ideas sobre lo que desea automatizar en su organización de Salesforce.
Lanzar proyectos automáticamente con un flujo de Salesforce
Es un escenario común que las empresas necesitan lanzar proyectos a partir de plantillas específicas cuando las Oportunidades pasan a la etapa Cerrado/Ganado. Hacer esto manualmente para cada oportunidad requiere una cantidad considerable de tiempo y esfuerzo. Además, también deja espacio para el error humano o para que alguien simplemente olvide o retrase un paso.
Con Inspire Planner, una aplicación de gestión de proyectos nativa de Salesforce, puede crear un flujo de Salesforce desencadenado por registro para crear automáticamente un proyecto a partir de una plantilla específica en función de diferentes criterios (por ejemplo, la etapa de oportunidad se actualiza a Cerrado/Ganado).
Este nuevo proyecto heredará de la plantilla todas sus fases y tareas, predecesores, archivos adjuntos, roles de recursos y más.
Entonces, para comenzar, su gerente de proyecto simplemente necesita actualizar la fecha de inicio de su primera tarea y asignar el equipo del proyecto (¡ambos también se pueden automatizar!).
Se puede configurar una automatización similar de Salesforce Flow para lanzar proyectos desde otras etapas de Oportunidades o para otros objetos en Salesforce, como Casos, Cuentas, Pedidos y más.
Automatice la gestión de proyectos en Salesforce con plantillas de proyectos
Si su organización entrega proyectos que siguen procesos estandarizados, puede Automatice la gestión de proyectos en Salesforce configurando plantillas de proyectos y usándolas cada vez que desee configurar un nuevo proyecto en lugar de crearlos desde cero.
Configurar plantillas de proyecto puede ser un proceso simple con la herramienta adecuada. Por ejemplo, en Inspire Planner simplemente debe marcar la casilla de verificación 'Es plantilla' al crear un nuevo proyecto para hacer una Plantilla de proyecto. Y puede crear un número ilimitado de plantillas para diferentes procesos dentro de su organización.
Las plantillas de proyecto permitirán que su software de administración de proyectos de Salesforce haga parte del trabajo más insignificante por usted, permitiéndole a usted y a su equipo concentrar sus esfuerzos en brindar un servicio de alta calidad a sus clientes.
Con Inspire Planner, sus proyectos heredarán la mayor parte de la información requerida de la plantilla, incluidas las tareas, los archivos adjuntos, la duración de las tareas, las fechas de inicio y finalización, los predecesores, los recursos asignados, la prioridad, el esfuerzo planificado, el costo presupuestado, las categorías, las notas y el diseño del proyecto. y Configuración, y más.
Automatice la gestión de proyectos en Salesforce con la asignación de tareas basada en roles
Asignar automáticamente las tareas de su proyecto a los recursos correctos es una manera fácil de automatizar la gestión de proyectos en Salesforce.
Dependiendo de la cantidad de tareas en sus proyectos, esto podría sumar una cantidad significativa del tiempo de sus gerentes de proyecto si se hace manualmente, y eso suponiendo que lo hagan bien cada vez. Si hay una herramienta a su disposición que alivia esta carga de sus gerentes de proyecto y les permite concentrarse en un trabajo más importante, ¿por qué no ponerla en práctica?
Afortunadamente, esto también es algo que Inspire Planner ofrece listo para usar. Puede predefinir qué roles serán responsables de cada tarea mientras crea sus plantillas o planes de proyecto.
Luego, simplemente necesita asignar un recurso a un rol específico, y la automatización integrada de Inspire Planner asignará inmediatamente todas las tareas de su proyecto a los miembros correctos del equipo del proyecto.
Costura de plantilla
Lanzar proyectos automáticamente desde Oportunidades basadas en plantillas es una excelente manera de automatizar la gestión de proyectos en Salesforce. Pero, ¿qué sucede cuando vendió varios productos dentro de su Oportunidad y cada producto requiere un conjunto diferente de tareas?
¿Puede automatizar dicho proceso en Salesforce dentro de un plan de proyecto en lugar de crear proyectos separados?
La buena noticia es que la respuesta es sí. Inspire Planner ofrece la funcionalidad de unión de plantillas de proyectos que le permite crear un solo proyecto a partir de una oportunidad al "unir" (combinar) diferentes plantillas relacionadas con los productos de oportunidad.
Además, puede definir una plantilla de encabezado (un conjunto de tareas que deben realizarse sin importar qué productos se seleccionaron, por ejemplo, la fase de inicio del proyecto) y definir un orden de ejecución de sus plantillas simplemente arrastrándolas a las posiciones deseadas.
Y con la configuración adicional de Salesforce, puede configurar la unión de plantillas de proyectos en Inspire Planner para trabajar con otros objetos en Salesforce en lugar de productos.
Automatice la programación de su proyecto con dependencias de tareas
Puede automatizar la Gestión de proyectos en Salesforce configurando Dependencias de tareas en el diagrama de Gantt de su proyecto. De esta manera, su proyecto y todas las tareas operarían como una unidad cohesiva en lugar de que cada tarea esté separada. Por lo tanto, actualizar cualquier tarea recalculará automáticamente todo el cronograma del proyecto, ¡sin importar cuán complejo sea su proyecto!
Inspire Planner es compatible con cuatro tipos principales de predecesores (finalización a inicio, finalización a finalización, inicio a inicio y inicio a finalización), así como múltiples dependencias de tareas. Si no está familiarizado con estos términos, un predecesor es una actividad que debe comenzar o finalizar antes de que pueda continuar una tarea sucesora, y un sucesor es una actividad que sigue a otra actividad en función de su dependencia entre sí y no necesariamente en orden cronológico. .
Además de eso, con Inspire Planner también puede agregar tiempo de adelanto o retraso a sus dependencias (por ejemplo, la tarea debe comenzar 3 días después de que finalice otra, o un día antes, etc.), e incluso funciones más avanzadas como la gestión de restricciones ( por ejemplo, una tarea debe terminar en una fecha determinada).
Una vez configuradas, los usuarios finales también pueden ver estas tareas predecesoras y sucesoras en un componente simplificado en la página de tareas. De modo que incluso si los miembros de su equipo no tienen acceso al proyecto o no están familiarizados con los diagramas de Gantt, aún pueden comprender fácilmente qué depende de ellos en este proyecto.
Automatización de Notificaciones
Otro elemento importante de la automatización de la gestión de proyectos en Salesforce son las notificaciones.
Si desea entregar sus proyectos a tiempo, deberá mantener a su equipo de proyecto actualizado sobre los próximos plazos e hitos. Para empezar, puede configurar alertas y notificaciones automáticas para las tareas del proyecto a través de Salesforce. Esto enviará a los recursos de su proyecto recordatorios por correo electrónico sobre sus tareas y también mostrará un recordatorio de notificación en Salesforce.
Por ejemplo, puede configurar notificaciones de tareas unos días antes de la fecha de vencimiento de la tarea, cuando se actualizaron las fechas de inicio/finalización de la tarea, una notificación de alerta cuando la tarea está vencida y más. Dado que Inspire Planner se integra completamente con las tareas estándar de Salesforce, algunas de estas notificaciones estarán disponibles para usted desde el primer momento.
Finalmente, puede configurar alertas en Inspire Planner para acciones como Tareas listas para comenzar. Cuando se han completado todos los predecesores, Inspire Planner marca automáticamente sus tareas como "Listo para comenzar". A continuación, puede enviar alertas a las personas asignadas a esta tarea o utilizar una vista de lista que muestre solo dichas tareas. De esta manera, su equipo de proyecto sabrá fácilmente en qué debe concentrarse a continuación.
Automatización de KPIs y Reportes
La siguiente idea para automatizar la gestión de proyectos en Salesforce es automatizar los KPI y programar la entrega de sus informes de proyectos.
Puede decidir administrar los KPI manualmente en función del estado actual de sus proyectos o automatizarlos si tiene criterios estandarizados para los KPI internamente. En cualquier caso, puedes configurar alertas para tus jefes de proyecto cuando alguno de los KPIs del proyecto pase de Verde a Ámbar o Rojo.
Al utilizar las aplicaciones de gestión de proyectos nativas de Salesforce, su equipo puede beneficiarse de los potentes informes y paneles de Salesforce. Por ejemplo, Inspire Planner ofrece una carpeta completa lista para usar con informes de proyectos, la capacidad de generar su informe de estado del proyecto con unos pocos clics y también dos paneles dinámicos para su cartera y administradores de recursos.
Salesforce luego le permite programar y suscribirse a los informes de su proyecto. De esta manera, su equipo puede recibir notificaciones sobre las métricas más importantes del proyecto sin ejecutar manualmente ni enviar informes por correo electrónico.
Una de las mejores prácticas para generar informes sobre sus proyectos es crear líneas base del proyecto en Inspire Planner. La línea de base se puede utilizar para generar informes sobre el cronograma del proyecto planificado y el rendimiento real de su proyecto. La línea de base también se puede usar para rastrear y enviar notificaciones cuando hay retrasos en el proyecto y cuando las tareas vencen. Estas notificaciones pueden llamar la atención sobre áreas del Proyecto que necesitan más atención, lo que resultará en una reducción de los retrasos.
Automatice la gestión de proyectos en Salesforce con procesos de aprobación
Los procesos de aprobación pueden ayudarlo a automatizar la gestión de proyectos en Salesforce cuando necesite obtener una aprobación para algo en su organización.
Los ejemplos típicos de procesos de aprobación en la gestión de proyectos incluyen empleados que solicitan PTO de sus gerentes, gerentes de proyecto que obtienen aprobación para cambios dentro del alcance del proyecto, aprobación de facturas y más.
Con los procesos de aprobación de Salesforce, puede definir fácilmente sus pasos de aprobación, bloquear registros, permitir la recuperación de solicitudes de aprobación, definir un aprobador, crear plantillas de notificación y más.
Para iniciar procesos de aprobación en sus proyectos en Salesforce, puede usar botones personalizados (p. ej., "Enviar para aprobación") en los que los usuarios deben hacer clic o iniciar procesos de aprobación automáticamente con un Flujo de Salesforce.
Automatizar carteras de proyectos
Las carteras de proyectos le permiten agrupar y ver un conjunto de proyectos en un único diagrama de Gantt combinado. Con Inspire Planner, puede crear un número ilimitado de Portafolios para diversas necesidades, por ejemplo, un portafolio de sus proyectos, un portafolio de proyectos para un cliente específico, etc.
Los portafolios pueden mostrar el cronograma general del proyecto, el estado general del proyecto, el porcentaje completado, los hitos del proyecto y más. Además, un proyecto puede pertenecer a varias carteras.
Con Inspire Planner, puede agregar proyectos a Portafolios o eliminarlos manualmente o con automatización a través de Salesforce Flows. Por ejemplo, cuando se completa un proyecto, puede eliminarlo automáticamente de una cartera.
Y con nuestra próxima función de carteras dinámicas con edición en línea, la gestión automática de carteras se está volviendo más fácil que nunca. Puede crear diferentes vistas de lista de Salesforce para organizar y filtrar automáticamente sus carteras de proyectos en función de varios criterios.
Calcule los niveles de prioridad de riesgos y problemas
Tener la capacidad de ver los riesgos y problemas relacionados con su proyecto significa que estos riesgos pueden mitigarse de manera oportuna durante todo el proyecto. Si busca identificar y prevenir riesgos de proyectos imprevistos, consulte nuestra guía sobre cómo reducir los riesgos de proyectos en Salesforce.
Si está buscando llevar la gestión de riesgos de su proyecto al siguiente nivel en Salesforce, puede hacerlo automatizando el cálculo de riesgos y automatizando la priorización de estos riesgos.
El registro de riesgos del proyecto es una función que ofrece Inspire Planner que le permite realizar un seguimiento de los riesgos de su proyecto y limitar sus impactos. Realiza un seguimiento tanto de los riesgos como de los problemas (los riesgos son los problemas que podrían ocurrir en el futuro y los problemas son los riesgos que han llegado a buen término y realmente sucedieron).
La Prioridad de sus riesgos se calcula automáticamente multiplicando el Impacto por la Probabilidad. De esta manera, simplemente debe asegurarse de capturar el impacto y la probabilidad de su riesgo e Inspire Planner hará el resto por usted.
Cuándo y por qué debería automatizar la gestión de proyectos en Salesforce
Si bien ahora conoce varias formas de automatizar la gestión de proyectos en Salesforce y cómo Inspire Planner puede ser potencialmente la solución que le permita hacer esto, es posible que todavía se pregunte por qué vale la pena automatizarlo.
¿Qué ganará su empresa con la automatización de la gestión de proyectos en Salesforce y qué impactos negativos mitigará? A continuación hay tres explicaciones de este valor y por qué la automatización no solo es una buena idea sino casi una necesidad.
Ahorre tiempo en tareas repetitivas
La gestión eficaz de proyectos es la diferencia entre un proyecto exitoso y uno fallido y, a menudo, lleva bastante tiempo ejecutarlo con cuidado para obtener resultados óptimos. Dado que hay una serie de tareas que se pueden realizar con su inversión en automatización de Salesforce, tiene mucho sentido liberar a su equipo para que se concentre en los problemas clave en lugar de atascarlos con tareas repetitivas manuales.
La investigación realizada por AutomationAnywhere muestra que en algunas industrias (a saber, el servicio público y la administración general) los profesionales pueden dedicar hasta 3,51 horas diarias a tareas administrativas repetitivas. ¡Estas son tareas que podrían realizarse fácilmente mediante algún tipo de automatización!
Cuando se trata de reducir el tiempo necesario para las tareas repetitivas en la gestión de proyectos, puede devolver el tiempo a su día implementando algunos de nuestros ejemplos de automatización descritos anteriormente, como plantillas de proyectos, asignación de tareas según roles de recursos y más. En última instancia, puede entregar un proyecto exitoso más rápido descargando este tipo de tareas a Salesforce.
Reducir el error humano
Si bien todos tratamos de ser completamente precisos todo el tiempo, solo somos humanos y, como tales, somos propensos a cometer errores. Salesforce, por otro lado, no es humano y no es propenso a la misma capacidad de cometer errores que los humanos. Las tareas más pequeñas pueden llamar menos la atención de un equipo de proyecto ocupado, lo que puede generar problemas mayores en el futuro debido a la naturaleza en cascada de estos errores.
Configurar su organización para automatizar su gestión de proyectos en Salesforce es la mejor manera de reducir (o eliminar efectivamente) su riesgo de error humano mientras gestiona el proyecto (suponiendo que esté configurado correctamente desde el principio, por supuesto).
Administre automáticamente varias plantillas/escenarios
Si su empresa ofrece múltiples servicios o productos diferentes, cada uno con su propio conjunto de tareas o incluso diferentes metodologías de gestión de proyectos (Waterfall vs Agile/Scrum), entonces puede encontrarse con problemas en los que un Project Manager no tiene suficiente experiencia trabajando con un tipo de producto o servicio específico y podría tener problemas para configurar el Proyecto en Salesforce.
Este problema se elimina por completo cuando su gestión de proyectos se automatiza en Salesforce utilizando varias plantillas de proyectos que sus gestores de proyectos pueden aplicar al comienzo de un proyecto. Esto no solo significa que tienen mucho menos trabajo por hacer, sino que también elimina cualquier error potencial o tareas olvidadas y brinda un grado de capacitación para los gerentes de proyecto que son nuevos en un tipo específico de proyecto.
Automatice la gestión de proyectos en Salesforce con Inspire Planner
Como puede ver, hay una cantidad insuperable de valor que se puede obtener al administrar sus proyectos dentro de Salesforce y luego aplicar capas en alguna Automatización de administración de proyectos.
Sus clientes se beneficiarán de sus esfuerzos al contar con un equipo de proyecto efectivo que pueda entregar a tiempo y garantizar que las comunicaciones sean consistentes, que los riesgos se gestionen y mitiguen, y que el equipo centre sus esfuerzos en el trabajo en lugar de las tareas administrativas.
Si está listo para automatizar la gestión de proyectos en Salesforce para su organización y reducir el trabajo manual y repetitivo, consulte Inspire Planner con nuestra prueba gratuita de 30 días hoy o solicite su demostración personal de Inspire Planner.
Este año, llevaremos el poder de la integración y la automatización a los líderes de TI en el World Tour New York el 4 de mayo de 2023. Aquí hay una guía sobre qué esperar en persona y en Salesforce+.
La integración y la automatización son cada vez más importantes, y MuleSoft está listo para brindarle todo lo que necesita saber para maximizar la eficiencia de su organización durante el World Tour New York.
Únase a los expertos en productos de Platform y MuleSoft mientras profundizan en la integración, automatización y seguridad de datos. Habrá más de 30 sesiones específicas o con expertos de MuleSoft y ofertas de productos con excelentes procedimientos e información que simplemente no querrá perderse.
Únase a nosotros en persona o en Salesforce+ para escuchar a los líderes de TI, los expertos de la comunidad de MuleSoft y los expertos de la industria de la automatización mientras exploran la próxima generación de TI.
Nunca has asistido a un evento como este.
4 temas que los líderes de TI pueden esperar del World Tour New York
El contenido de la sesión de MuleSoft cubrirá estos cuatro temas:
Conectando todos sus datos
Impulsar la eficiencia de la IA
Automatización entre sistemas
Construyendo confianza con seguridad
Aquí hay algunas sesiones imperdibles que recomendamos, y si está buscando aún más opciones, explore la programación completa y regístrese aquí . Estas sesiones serán excelentes para desarrolladores, tomadores de decisiones de TI, CIO, arquitectos, gerentes de productos y más, ¡pero todos son bienvenidos y animados a unirse!
Discurso de TI:construya la empresa de su cliente
Vea cómo puede usar Platform y MuleSoft para implementar más rápido, aumentar la eficiencia del desarrollador y ahorrar en costos de TI conectando sus datos, automatizando procesos inteligentes e implementando de manera segura.
Únase a Marla Hay, vicepresidenta de gestión de productos de Salesforce; Sarah Aerni, vicepresidenta de ciencia e ingeniería de datos de Salesforce; y Tanmay Manohar, VP de People Analytics + Workforce Planning en Paramount para esta sesión imperdible.
Hoja de ruta del producto: descubra el futuro de TI con MuleSoft
¡Explore las últimas innovaciones de productos en MuleSoft! Escuche a expertos en productos y clientes actuales para obtener una revisión detallada de la hoja de ruta de productos de MuleSoft y descubra cómo estamos transformando la TI.
Únase a los siguientes expertos en su viaje de aprendizaje:
Edgar Moran, ingeniero de software en Cisco Meraki
Alex Waddell, director de información de Adobe Care and Wellness
Jeremiah Dillon, vicepresidente sénior de marketing de MuleSoft en Salesforce
Matt Elstad, vicepresidente de desarrollo de aplicaciones en Wealth Enhancement Group
Pooja Tejwani, vicepresidenta de ingeniería de BECU
Conecte y automatice la empresa de su cliente con MuleSoft
¿Nuevo en MuleSoft? Explore por qué MuleSoft es la solución de referencia para Customer 360 y automatización de tareas. Conozca los desafíos comerciales comunes y el enfoque basado en API de MuleSoft para abordarlos.
Únase a Aridam Kumar, gerente técnico de marketing de productos en Salesforce para obtener toda la información central que necesita.
Automatización: por dónde empezar y cómo generar valor hoy
Decidir qué automatizar puede ser una tarea abrumadora. Conozca cómo Salesforce está capacitando a las empresas para desbloquear la productividad, lograr el ROI rápidamente y brindar mejores experiencias más rápido con la automatización.
Únase a Desmond Wong, Sr. PMM en Salesforce; Marcus Harris, PMM en Salesforce; y Kamil Brozek, director de servicios de valor comercial en Salesforce, para comenzar a generar valor comercial a través de la automatización.
Cree ecosistemas API más rápido en la plataforma Anypoint de MuleSoft
¡Alerta de nuevo producto! Descubra cómo el nuevo centro de experiencias de API de Anypoint, creado en Salesforce Experience Cloud, le permite crear rápidamente experiencias de API atractivas utilizando las API catalogadas en Anypoint Exchange.
¡Únase a Jing Li, director de gestión de productos de Salesforce para conocerlo todo!
Obtenga artículos de TI seleccionados solo para usted, en su bandeja de entrada
Contenido adicional en World Tour NYC 2023
¿Buscas profundizar aún más? ¡No se pierda estas charlas, ideas y presentaciones extra especiales más allá de las sesiones anteriores!
IT Exploratorium: diríjase al IT Exploratorium para descubrir la próxima generación de TI. Conéctese con expertos, únase a charlas de TI y sumérjase en la intersección de la integración y la automatización.
Pregúntele a un experto de la comunidad: ¿ Tiene curiosidad por saber cómo los expertos en productos de Platform y MuleSoft de clientes y socios implementan tácticas de integración y automatización en sus organizaciones? Dirígete al área de Deep Insights y pasa por el stand Ask a Community Expert.
Teatros Trailblazer y fogatas comunitarias: usuarios reales, casos de uso reales. Conozca los entresijos de la integración y la automatización a través de presentaciones de la Comunidad MuleSoft. ¡Vea Customer 360 en acción!
¡Estamos ansiosos por verlos a todos en el sitio o a través de Salesforce+! No se lo pierda: ¡reclame su asiento hoy!
Artículos de tendencia
6 preguntas para acelerar su camino hacia la certificación de administrador de Salesforce Lectura de 8 minutos Presentamos Trailcast, nuevo audio Trailhead Aprendizaje para capacitar a cualquier persona para mejorar sus habilidades Lectura de 3 minutos
La próxima vez que quiera hacer algo con Tableau, pero no pueda encontrar la manera con la interfaz de usuario, vaya a su confiable Postman Collection y pruebe algunos métodos a través de la API REST de Tableau.
TrailblazerDX '23 estuvo lleno de innovación y contenido para los desarrolladores. En este blog, la perspectiva de un desarrollador de Salesforce Platform y una lista de recursos de TDX.
Última actualización el 9 de abril de 2023 por Rakesh Gupta Gran idea o pregunta duradera: ¿Cómo hacer que el componente de pantalla sea de solo lectura? Objetivos: después de leer este blog, podrá: Agregar texto de solo lectura al componente de pantalla usando Display Text Agregar texto de solo lectura al componente de pantalla usando un Lightning Web personalizado
Última actualización el 7 de abril de 2023 por Rakesh Gupta Gran idea o pregunta duradera: no queremos trabajar los fines de semana o días festivos, ¡todos lo entendemos! Si es así, ¿cree que nuestros clientes o prospectos lo hacen? Si tiene dudas, intente enviar un correo electrónico a
Esta guía se publicó originalmente en Medium en 2021 y se actualizó con la orientación y los consejos más recientes, incluidas las nuevas funciones de seguridad como parte de los lanzamientos recientes y la nueva estructura de precios para las revisiones.
Última actualización el 2 de abril de 2023 por Rakesh Gupta Gran idea o pregunta duradera: ¿Cómo se programan varios correos electrónicos con Salesforce Flow? Objetivos: En este artículo, el lector aprenderá lo siguiente: Cómo usar Salesforce Flow para enviar múltiples alertas por correo electrónico usando rutas programadas y mucho más Negocios
Las API de Salesforce ahora son compatibles con las credenciales de cliente de OAuth, lo que facilita más que nunca establecer integraciones de servidor a servidor que no necesariamente necesitan el contexto del usuario.
Obtenga una mirada más detallada al rendimiento de Lightning Experience, conozca las áreas de mejora y los próximos pasos planificados en los próximos lanzamientos.