Categories
Analista de negocios de Salesforce Consultor de Salesforce Salesforce

¿Qué es la gestión de pedidos y por qué debería importarle?

En el mundo del comercio electrónico, pocas cosas superan la emoción de recibir un paquete en la puerta de casa. Para los clientes, la entrega satisfactoria marca una línea de meta anticipada. Para las empresas, el cumplimiento de los pedidos significa rentabilidad y continuidad. ¿Qué es la gestión de pedidos? Es todo lo que hace posible esta experiencia.

La gestión de pedidos es el cerebro que hay detrás de cada paso del proceso de realización de pedidos. Piense en un sistema de gestión de pedidos como el conductor de un complejo conjunto de lógica empresarial y flujos de trabajo que llevan un pedido desde el carrito hasta el cliente.

La gestión de pedidos es el cerebro detrás de cada paso del proceso de pedido y cumplimiento

Es un proceso que puede hacer o deshacer la relación con sus clientes, ya sean consumidores o compradores empresariales. Con el sistema de gestión de pedidos adecuado, puede fidelizar a sus clientes, mejorar sus flujos de ingresos y descubrir más formas de ahorrar dinero.

La gestión de pedidos es un proceso que puede marcar la diferencia

Máster en gestión de pedidos

Aprenda a agilizar sus sistemas más allá del botón Comprar para poder conectar con los clientes y fidelizarlos.

Aprenda a agilizar sus sistemas más allá del botón Comprar para poder conectar con los clientes y fidelizarlos


¿Qué es la gestión de pedidos?

Un sistema de gestión de pedidos controla todo lo que sucede después del pago, incluidos los procesos operativos posteriores, las personas, los sistemas y las asociaciones que ayudan a cumplir un pedido. Es una plataforma para gestionar pedidos, registros de clientes, cumplimiento, visibilidad de inventario, pagos y facturación, y atención al cliente. Pero los sistemas de gestión de pedidos sirven para mucho más que simplemente asegurarse de que los paquetes se entregan en los lugares correctos

Los consumidores y los compradores B2B esperan que todo el proceso de pedido funcione a la perfección, desde el pago hasta la entrega. También quieren total transparencia sobre el estado de su pedido, incluida su ubicación actual, su hora prevista de llegada y detalles sobre cualquier problema en tránsito. Si el producto no satisface sus necesidades, quieren devoluciones sin complicaciones. Un buen sistema de gestión de pedidos facilita el cumplimiento de estas expectativas

¿Qué ocurre después de la compra?

Los sistemas de gestión de pedidos solían estar relegados a la trastienda, normalmente dentro de la división de logística de una empresa. Pero eso no funciona en una economía centrada en el cliente, en la que la gestión de pedidos es fundamental para la experiencia global del cliente.

Los sistemas de gestión de pedidos suelen estar relegados a la trastienda, normalmente a la división de logística de una empresa

Todo el trabajo que las marcas realizan a lo largo del ciclo de vida de la gestión de las relaciones con los clientes (CRM) (concienciación, marketing, experiencia en el sitio web, consideración, adquisición, conversión, etc.) conduce a este momento. De hecho, la gestión del pedido es el momento más importante del intercambio de valor. Si las empresas no cumplen su parte del intercambio de valor (dinero por bienes y servicios prestados), ¿tiene realmente importancia todo lo anterior? Los sistemas de gestión de pedidos deben cumplir esa promesa de marca

Después de que un cliente haga clic en el botón Comprar, comienza un intrincado baile para llevar a cabo el pedido. Los escaparates pueden interactuar con hasta 39 sistemas diferentes para completar esta parte del recorrido del cliente. Los tipos de sistemas más comunes son los de impuestos, pagos, fraude, gestión de inventario, contabilidad, planificación de recursos empresariales (ERP) y envíos. Éstos son algunos de los pasos clave que deben incluirse en cualquier proceso eficaz de gestión de pedidos:

Los sistemas de gestión de pedidos son los siguientes

1. Obtenga una visión precisa de los conteos de inventario

Cuando se trata de gestión de inventario, una visión clara le ayuda a optimizar el producto y ahorrar dinero. Podrá evitar errores costosos como falta de existencias, exceso de existencias, errores de picking y errores de envío. Esto también aumenta las posibilidades de que pueda mantener las estanterías abastecidas y entregar los productos de forma rápida y correcta.

Cuidado con las existencias

2. Comprobar enrutamiento de pedidos

¿Pueden los clientes esperar un envío estándar o su pedido se enrutará a un almacén para su personalización? Para pedidos especiales, un equipo puede necesitar instrucciones para construir un producto personalizado a mano. El sistema de gestión de pedidos adecuado le ayudará a encaminar los pedidos de forma eficaz y rentable y a gestionar el flujo de mercancías en toda la cadena de suministro

3. Asegúrese de que su proceso de envío esté integrado

Las opciones de envío rápidas y flexibles son fundamentales para ganarse la fidelidad y la confianza de los clientes. De hecho, el 57% de los consumidores afirma que la entrega en el mismo día les hará más fieles a una marca concreta. Y los compradores B2B esperan ahora las mismas opciones: en 2020 se produjo un aumento global del 44% en los pedidos B2B en línea. Cuando sus sistemas de envío y gestión de pedidos están integrados, los datos de los pedidos se comparten de forma rápida y sencilla, lo que se traduce en una entrega más rápida para los clientes y en menores costes operativos para su empresa.

4. Entregar el producto

Una vez que los artículos han sido recogidos, empaquetados y preparados para el envío, el pago es capturado, y las mercancías están finalmente en su camino hacia el cliente. Este último paso del proceso se conoce como entrega de última milla. Con un sistema de gestión de pedidos flexible e integrado, el cumplimiento de la última milla es rápido, fiable y transparente. Incluso puede utilizar este paso para desencadenar nuevos esfuerzos de marketing. Por ejemplo, cuando un cliente recibe el nuevo sofá que ha pedido, puede enviarle un correo electrónico personalizado sugiriéndole mesas auxiliares o sillas a juego

Transforma la experiencia del cliente con una gran gestión de pedidos

Los pedidos y su tramitación constituyen el núcleo de una experiencia de compra excepcional. Los sistemas de gestión de pedidos de última generación se centran en el cliente y forman parte integral del front office. ¿Por qué? Porque los momentos que orquestan estos sistemas pueden molestar o sorprender a los clientes. Ayudan a determinar si un cliente completa una transacción y se convierte en un cliente fiel o se pasa a la competencia. A continuación, le indicamos en qué debe centrar sus esfuerzos (y realizar algunos ajustes rentables) para ofrecer una experiencia de gestión de pedidos estelar.

Sistema de gestión de pedidos

Ofrece opciones de envío/entrega flexibles

Los clientes exigen flexibilidad en el envío y la entrega: desde entregas en una hora y en fin de semana hasta recogida en tienda y entrega al día siguiente. Sea franco sobre su capacidad para satisfacer estas expectativas. Muestre claramente las opciones que ofrece en cada página de producto para que los clientes sepan lo que ofrece antes de pasar por caja.

Los clientes exigen flexibilidad en los envíos

Proporcionar información precisa de la disponibilidad del producto, incluyendo la ubicación 

No decepcione ni frustre a sus clientes con una notificación de falta de existencias después de que hayan añadido un artículo a su carrito. Para los compradores de negocios, el tiempo es dinero, y cualquier minuto que se pierda comprando mercancía no disponible es una pérdida de tiempo. Si un producto está agotado o se está agotando, indícalo en la página del producto para que los clientes estén al tanto.

Ofrece autoservicio de estado de pedidos y devoluciones

Los clientes deben poder comprobar el estado del pedido y recibir actualizaciones por mensaje de texto o correo electrónico. También deben poder cambiar los datos de envío, si es necesario. Las devoluciones también deben ser autoservicio, permitiendo a los clientes imprimir etiquetas de devolución y elegir cómo y dónde devolver los artículos. Esto les da más control sobre su experiencia y le ayuda a usted a reducir los costes asociados al servicio y la asistencia al cliente. Cada opción de autoservicio que ofrezca significa menos llamadas de asistencia y más ingresos.

Empower service agents and sales-reps

Los agentes de servicio y los representantes de ventas están en primera línea de la experiencia del cliente. Tienen que ayudar a los clientes con sus pedidos y hacer que toda la interacción sea fluida. Esto requiere las herramientas adecuadas para reducir el tiempo de gestión de llamadas, aumentar la eficiencia y ofrecer a los representantes una visibilidad completa de los pedidos. La tecnología debe ayudarles a realizar pedidos en nombre de los clientes y a efectuar cambios en el envío y la entrega de los pedidos existentes, cuando sea necesario

Comience con un sistema de gestión de pedidos

La gestión de pedidos no consiste únicamente en procesar pedidos. Integra sistemas orientados al cliente que afectan a la experiencia posterior a la compra, incluidos ERP, CRM, ventas, servicio y comercio. Los sistemas de gestión de pedidos hacen que todo esté disponible y sea accesible para todas las partes interesadas en una plataforma unificada.

La gestión de pedidos no es sólo procesar pedidos

Con un sistema de gestión de pedidos flexible e integrado, diseñado para soportar experiencias omnicanal a escala global, dispondrá de todas las herramientas que necesita para tener más éxito y hacer que los clientes vuelvan a por más. Los clientes esperan una experiencia post-compra fluida, y estas estrategias le ayudarán a conseguirlo.

Aumentar los pedidos y reducir los costes

Aprenda cómo ahorrar tiempo y aumentar los beneficios con la gestión de pedidos omnicanal.


Categories
Analista de negocios de Salesforce Enterprise Software Salesforce Tutoriales de Salesforce

5 razones por las que necesita un diccionario de datos de Salesforce

Desde el temor a las imprecisiones en los informes hasta la lucha constante contra los silos de datos y la sombra amenazante de los fallos de cumplimiento, los retos de supervisar sus datos son abundantes. Y ni siquiera empecemos con los quebraderos de cabeza financieros causados por las malas prácticas de gestión de datos.

Llevar un sistema de gestión de datos es una tarea difícil

Mantener un diccionario de datos no es sólo marcar una casilla para el gobierno de datos, se trata de desbloquear flujos de trabajo más fluidos y colaborativos, acelerar los tiempos de entrega, agilizar los procesos de ventas y minimizar (si no eliminar) el tiempo de inactividad del sistema.

Un diccionario de datos de Salesforce unificará la clasificación de datos en todas las integraciones, mantendrá la calidad de los datos y ayudará a los usuarios a cumplir las normativas y a elaborar informes. Este concepto podría ser la estrella guía que ha estado buscando.

¿Qué es un diccionario de datos?

Un diccionario de datos de Salesforce es una recopilación de los nombres, atributos y descripciones de los objetos de datos o lógica empresarial de un modelo de datos para garantizar que todos los usuarios empresariales o partes interesadas sean coherentes en la forma de referirse a estos elementos. Por ejemplo, su tipo/categoría -especialmente si contienen PII (información de identificación personal)

Un diccionario de datos es un repositorio centralizado de metadatos (si no está seguro de lo que son los metadatos, lea aquí). Es donde se documentan todos los cambios de CRM para que su equipo pueda realizar rápidamente análisis de impacto y hacer cambios futuros sin temor a roturas.

El diccionario de datos es un repositorio centralizado de metadatos

Para cualquier persona que dependa de Salesforce, asegurarse de que su org está meticulosamente documentado es primordial – tener una ventana en tiempo real a través de varios equipos no es sólo un nice-to-have, es una necesidad.

5 ventajas de un diccionario de datos de Salesforce

1. Metadatos claros en todos los equipos Metadatos claros en todos los equipos

Si pudiera hacer un seguimiento de las incontables horas dedicadas a enviar mensajes a equipos dispares preguntando sobre definiciones de metadatos y las nuevas herramientas de terceros que desean integrar con Salesforce.

A través de los innumerables mensajes, correos electrónicos y tickets de asistencia, probablemente haya pensado «tiene que haber una forma mejor». Esto no sólo es un proceso ineficiente, sino que también resulta en una falta de claridad para los campos de Salesforce y la asignación de integración existente.

Por suerte, existe una forma mejor. Y comienza con la implementación de un diccionario de datos automatizado. He aquí algunas formas en las que puede mejorar la comunicación de su equipo entre departamentos:

  • Claridad de las definiciones: Proporciona definiciones claras y concisas de los metadatos, reduciendo la necesidad de aclaraciones de ida y vuelta y garantizando que los equipos están en la misma página en lo que respecta a las estructuras y significados de los datos.
  • Diccionario de datos integrado
  • Comunicación integrada: Facilita una comunicación más fluida sobre la integración de herramientas de terceros con Salesforce al proporcionar un punto de referencia para las estructuras y relaciones de datos, lo que reduce los malentendidos y las interpretaciones erróneas.
  • Incrementa la comunicación entre los equipos de trabajo y los usuarios de Salesforce
  • Aumenta la eficacia: Lo que antes era un proceso manual en una hoja de cálculo ahora se documenta automáticamente con cada cambio que se produce en su organización. Esto asegura que su equipo confía en la documentación dentro de su diccionario de datos. Además, detecta automáticamente qué campos están empujando datos entre plataformas, lo que le permite saber dónde se está compartiendo la información más sensible de sus clientes.
  • Impulsa la incorporación: Centraliza el conocimiento de los sistemas, lo que permite a sus equipos formar a los nuevos empleados de forma más rápida y eficaz. Mediante la asignación de metadatos de Salesforce, se ha demostrado que disponer de un diccionario de datos ayuda a los equipos a incorporarse 10 veces más rápido
  • Velocidad de entrega más rápida: Con menos tiempo dedicado a la comunicación y a la ingeniería inversa de las plataformas a las que se mueven sus datos de Salesforce, usted y sus equipos disponen de más tiempo para centrarse en las tareas que tienen entre manos y ofrecer resultados.
  • Precisión de entrega más rápida

2. Comprender la accesibilidad de los campos a los datos confidenciales

Navegar por los campos de Salesforce y descifrar quién tiene acceso a datos sensibles y críticos lleva mucho tiempo. Sin embargo, es una parte fundamental de su trabajo porque no se trata sólo de desenmarañar una red de accesos.

Emprender la accesibilidad a los campos de Salesforce y descifrar quién tiene acceso a los datos confidenciales y críticos lleva mucho tiempo

La adopción de un diccionario de datos puede desmitificar la accesibilidad a los campos y reforzar la comprensión y el gobierno de los datos confidenciales por parte de tu equipo. He aquí cómo:

Control de acceso

  • Resumen de permisos: Enumera los permisos de acceso para cada campo de Salesforce, lo que le permite revisar quién tiene acceso a los datos (sensibles o no).
  • Permisos de acceso
  • Aclaración de roles: Ayuda a identificar para cada campo qué roles y perfiles pueden ver, modificar o eliminar datos.
  • Los roles y perfiles pueden ver, modificar o eliminar datos

Gestión de la conformidad

  • Cumplimiento normativo: Ayuda a garantizar que la organización cumple las leyes de protección de datos documentando la accesibilidad y el uso de los campos de datos sensibles.
  • Cumplimiento normativo
  • Rastro de auditoría: Actúa como punto de referencia para garantizar el cumplimiento de las políticas de datos internas y externas.
  • Pista de auditoría

Seguridad de datos y sistemas

  • Configuración de seguridad: Muestra la configuración de seguridad de cada campo, lo que ayuda a identificar cualquier vulnerabilidad que pudiera ser susceptible de vulnerar los datos.
  • Configuración de seguridad:
  • Mitigación de riesgos: Identifica los campos con datos confidenciales y aplica las medidas de seguridad adecuadas para evitar accesos no autorizados.
  • Mitigación de riesgos
  • Supervisión proactiva: Visualice las tendencias de los datos y los datos que se mueven entre los sistemas integrados. Junto con la supervisión de eventos de Salesforce Shield, puede prevenir, mitigar y supervisar las amenazas a los datos confidenciales.
  • Supervisión proactiva

3. Reducir la deuda técnica

Ejemplo: recibes una solicitud para crear un nuevo campo en Salesforce y cuando vas a hacerlo, te das cuenta de que ya existe – y todo el mundo lo ha estado utilizando de forma diferente durante quién sabe cuánto tiempo.

Cuando la deuda técnica se acumula, actúa como una cadena, ralentizando los procesos. Esto significa que hacer adaptaciones a los nuevos requisitos es engorroso, y puede dar lugar a más errores y vulnerabilidades del sistema.

Por eso es tan importante tomar medidas para gestionar la deuda técnica. Con un diccionario de datos, deberías tener:

  • Documentación mejorada: Una documentación completa y bien mantenida dentro del diccionario de datos sirve como guía a través del complejo panorama de las estructuras y relaciones de datos. Esto reduce la dependencia del conocimiento tribal y garantiza que todos los miembros del equipo puedan navegar por el sistema de forma eficiente.
  • Optimización de la documentación
  • Integraciones optimizadas: Al detallar los mapeos de integración existentes y las herramientas de terceros, un diccionario de datos facilita integraciones más informadas y coherentes. Esto evita la creación de integraciones redundantes o conflictivas, lo que reduce la presión sobre los recursos del sistema y mitiga la deuda técnica innecesaria.
  • Integraciones optimizadas:
  • Identificación proactiva de problemas: Un diccionario de datos permite a los equipos identificar y abordar posibles problemas y vulnerabilidades en una fase temprana del proceso de desarrollo, evitando que los pequeños problemas se conviertan en una bola de nieve que genere una deuda técnica importante. Este enfoque proactivo mantiene la integridad del sistema y evita las repercusiones de los problemas no resueltos.
  • Actualizaciones automatizadas: Un diccionario de datos garantiza que cualquier cambio o actualización en las estructuras de datos y las integraciones se refleje inmediatamente, lo que reduce el esfuerzo manual necesario para el mantenimiento y garantiza que los equipos trabajen con la información más actualizada y precisa, evitando la acumulación de deuda debido a datos obsoletos o incorrectos.

4. Evitar rupturas involuntarias

Los cambios mal gestionados en Salesforce tienen grandes consecuencias: una de ellas es alimentar con datos erróneos sus sistemas empresariales integrados, lo que puede provocar rupturas. Por ejemplo, si su equipo de Salesforce crea una regla de validación en el CRM y ese campo se está asignando a HubSpot y Salesloft, es posible que estos sistemas ya no tengan acceso para actualizar la información como se esperaba. Es una receta perfecta para un efecto dominó de impactos descendentes negativos.

La función de análisis de impacto de Sonar simplifica la gestión de cambios en Salesforce, ofreciendo un mapa completo de CRM y un eje centralizado para todo el conocimiento del sistema, todo en una plataforma fácil de usar. Además, con una visión clara de toda su integración tecnológica, los líderes de sistemas de negocio pueden:

Con la función de análisis de impacto de Sonar, se simplifica la gestión de cambios en Salesforce

  • Reducir el tiempo de inactividad y el tiempo de resolución cuando se produzcan interrupciones
  • Asegurar un funcionamiento fluido de las operaciones
  • Asegurar operaciones fluidas para sus equipos GTM

5. Confíe en la integridad de sus informes comerciales

Los informes fiables proporcionan una visión clara y basada en datos del rendimiento de la empresa, ayudando a cualquiera a identificar tendencias, oportunidades y áreas que requieren atención.

Los informes fiables proporcionan una visión clara y basada en datos del rendimiento de la empresa, ayudando a cualquiera a identificar tendencias, oportunidades y áreas que requieren atención

Un diccionario de datos (como las capacidades de Sonar) desempeña un papel fundamental en la mejora de la precisión de los informes mediante:

    • Garantizar la coherencia: Al proporcionar definiciones de datos, descripciones de campos y metadatos estandarizados, garantiza que todos los miembros del equipo tengan una comprensión clara de los elementos de datos utilizados en los informes. Esta claridad reduce el riesgo de interpretaciones erróneas durante el análisis de los datos.
  • Tome decisiones empresariales basadas en datos: la documentación dentro del diccionario de datos proporciona contexto sobre cada elemento de datos, lo que permite a los creadores de informes tomar decisiones informadas al seleccionar campos y diseñar informes.

Implemente su diccionario de datos hoy mismo

La implementación de un diccionario de datos de Salesforce permite a su equipo estandarizar los elementos de datos, garantizar la calidad de los datos y simplificar los procesos de cumplimiento y generación de informes. No espere para liberar todo el potencial de su plataforma Salesforce: un diccionario de datos permitirá a su organización tomar decisiones informadas con confianza.

Independientemente de si ya dispone de un diccionario de datos de Salesforce o está pensando en crearlo, Sonar puede ayudarle. Con la confianza de algunos de los equipos de RevOps más dinámicos, Sonar ofrece el conjunto de herramientas esencial para gestionar eficazmente el cambio en Salesforce.

En última instancia, el diccionario de datos de Sonar promueve la precisión de los datos al establecer un lenguaje común y facilitar prácticas de generación de informes bien informadas, lo que conduce a perspectivas empresariales más fiables y precisas.

Categories
Developers

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

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

Gran idea o pregunta duradera:

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

Objetivos:

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

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

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

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

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

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

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

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

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

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

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

HVS.png

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

¿Qué es la captura de datos modificados?

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2023/11/01/never-miss-a-beat-notifications-for-prospect-removal-in-sales-engagement-cadence/

Categories
Developers Salesforce Uncategorized

Preguntas de la entrevista de Salesforce CPQ, parte 2

Preguntas de la entrevista de Salesforce CPQ, parte 1

Enlace de Whatsapp para el grupo Salesforce CPQ

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

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

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

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

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

Reglas del producto

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

Hay 4 tipos de reglas de producto:

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

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

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

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

Reglas de precios

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

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

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

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

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

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

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

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

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

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

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

  • dependencia
  • exclusión

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

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

6. ¿Explicar el paquete de productos en CPQ?

Hay tres objetos clave que definen la estructura del paquete :

  • Producto
  • Opciones
  • Características

Producto

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

Opciones de producto

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

Características

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

Software

  • Software de Microsoft

Hardware

  • Ratón
  • Teclado

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

Hay tres tipos de paquetes :

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

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

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

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

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

7.¿Qué son las funciones de CPQ?

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

Las características tienen dos propósitos:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

La estructura de la plantilla de cotización incluye:

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

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

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

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

1. Crear la propia plantilla de cotización

2. Almacenamiento del logotipo necesario en Documentos

3. Creando el contenido de la plantilla

4. Creando las secciones de la plantilla

5. Creando las columnas de línea

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

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

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

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

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

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

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

.

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

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

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

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

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

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

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

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

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

C. Vaya a la pestaña Relacionados .

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

  • Producto A.
  • Producto B.

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

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

F. Haga clic en Guardar .

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

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

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

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

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

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

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

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

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

Los escenarios incluyen:

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

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

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

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

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

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

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

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

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

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

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

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

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

Guardar: la regla se evaluará al guardar.

Siempre: La regla será evaluada durante cualquier evento.

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

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

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

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

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

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

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

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

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

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

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

Cuándo utilizar restricciones de opciones

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

27. ¿Explicar los atributos de configuración?

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

Atributo de configuración

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

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

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

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

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

Así es como se descompone:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

50% Me gusta VS
50% No me gusta

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://www.sfdcamplified.com/salesforce-cpq-interview-questions-part-2/#utm_source=rss&utm_medium=rss&utm_campaign=salesforce-cpq-interview-questions-part-2

Categories
Developers

El poder de las métricas de uso mejoradas para optimizar la asignación de eventos de la plataforma

Ú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 el módulo de Trailhead .

Comprender el objeto PlatformEventUsageMetric

Hagamos una pausa aquí y familiarícese con el objeto PlatformEventUsageMetric en Salesforce.

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

  1. Asegúrese de que Visual Studio Code esté correctamente configurado y que su organización de Salesforce esté conectada a él.
  2. Modifique el paquete.xml para recuperar los metadatos relacionados con los eventos de la plataforma.
    1. Ejemplo de paquete.xml para recuperar la configuración de PlatformEvent.
      
      
      <tipos> <miembros>PlataformaEvento</miembros> <nombre>Configuración</nombre>
      </tipos>

  3. El siguiente paso es modificar PlatformEventSettings .
    1. Proceda a modificar PlatformEventSettings, cuyos valores se almacenan en el archivo PlatformEvent.settings en la carpeta de configuración .
    2. En PlatformEventSettings, establezca el campo enableEnhancedUsageMetrics en true .
    3. Guarde los cambios en el archivo PlatformEvent.settings-meta.xml .
  4. 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

  1. Haga clic en Configuración | Consola de desarrollador .
  2. En el Editor de consultas, ejecute la siguiente consulta SOQL
     SELECCIONE EventName, EventType, UsageType, Value, StartDate, EndDate FROM PlatformEventUsageMetric WHERE TimeSegment='Diario'

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2023/07/05/the-power-of-enhanced-usage-metrics-in-optimizing-platform-event-allocation-2/

Categories
Developers Tutoriales de Salesforce

Presentamos las mejoras de la beta abierta de Anypoint Code Builder ☁️

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 las mejoras de la versión beta abierta de Anypoint Code Builder | Blog de desarrolladores de Salesforce

¡Nos complace anunciar el lanzamiento en junio de la versión beta abierta de Anypoint Code Builder! Anypoint Code Builder es el IDE (Entorno de desarrollo integrado) de próxima generación de MuleSoft, para que los desarrolladores diseñen, desarrollen e implementen API e integraciones. Desde su lanzamiento Open Beta en febrero de 2023, el equipo ha estado agregando mejoras regularmente en una cadencia bimensual. Mientras que el lanzamiento de abril se centró en capacidades de IU adicionales, el lanzamiento de junio se centra en una mayor accesibilidad para los usuarios y la flexibilidad en la forma en que los usuarios pueden diseñar e implementar sus API.

Disponibilidad de Open Beta en el plano de control de la UE

Desde su lanzamiento, la versión beta abierta de Anypoint Code Builder solo ha estado disponible en el plano de control de EE. UU. Nos complace decir que esta restricción ya no existe. ¡La versión beta abierta de Anypoint Code Builder ahora está disponible para todos los usuarios en el plano de control de la UE! Esto significa que los usuarios de la UE ya no necesitarán crear nuevas cuentas de prueba en el plano de control de NA para acceder a una instancia de IDE en la nube y experimentar una latencia mucho menor a medida que diseñan y desarrollan. En el futuro, todas las versiones y mejoras futuras de Anypoint Code Builder estarán disponibles para los aviones de control de EE. UU. y la UE simultáneamente.

Entonces, ¿cómo pueden comenzar los usuarios de la UE? Simplemente haga que el administrador de su organización acepte los Términos y condiciones de la versión Beta y le otorgue permisos, luego diríjase a Anypoint Code Builder Central , donde puede crear una nueva instancia de su IDE en minutos. Y dado que es un IDE basado en la nube, seleccionaremos automáticamente el plano de control adecuado para su instancia. ¡Es fácil!

Diseño e implementación de API iterativas

Con Anypoint Code Builder, a los usuarios se les ofrecen tres recorridos principales para comenzar: diseñar especificaciones de API , implementar especificaciones de API y desarrollar integraciones . Tradicionalmente, la única forma de implementar una especificación de API era terminar por completo la fase de diseño y publicarla en nuestro mercado público, Anypoint Exchange . Sin embargo, no existe una regla que diga que el diseño y la implementación de la API deben estar aislados (después de todo, todos somos Trailblazers aquí, ¿no?). Es por eso que presentamos el diseño e implementación de API iterativas en Anypoint Code Builder. Esto le permite comenzar a diseñar la especificación de su API y luego saltar directamente a la fase de implementación para comenzar a agregar lógica empresarial antes de completar la fase de diseño. El resultado final es una experiencia optimizada que permite a los usuarios flexibilizarse entre las fases de diseño e implementación, abordando todo el proyecto en secciones en lugar de todo a la vez. Y para colmo, hemos hecho que toda esta experiencia sea perfecta al proporcionar una vista única para ambas fases directamente desde su navegador.

Se agregó soporte de interfaz de usuario para fragmentos

Cuando se lanzó por primera vez Open Beta para Anypoint Code Builder, la interfaz de usuario era de solo lectura. Los desarrolladores podían usarlo para visualizar su trabajo, pero no había forma de desarrollarlo activamente. Sin embargo, este siempre fue un plan temporal y el objetivo final es brindar a los usuarios dos opciones sólidas para la integración y el desarrollo de API: código bajo y código profesional. Durante los últimos seis meses, hemos estado trabajando para lograr esta visión agregando formas de interactuar con la interfaz de usuario. Por ejemplo, en nuestro lanzamiento de abril, introdujimos la capacidad de agregar nuevos componentes a sus flujos simplemente usando el símbolo "+".

En nuestro lanzamiento de junio, presentamos dos mejoras más en la interfaz de usuario para mejorar la experiencia de código bajo. La primera es la capacidad de seleccionar conectores directamente desde Anypoint Exchange mientras se agregan componentes. Esto proporciona a los desarrolladores una alternativa de interfaz de usuario a la paleta de comandos, al mismo tiempo que les brinda una forma más limpia de clasificar todas las versiones y operaciones del conector que están disponibles. El segundo es la capacidad de agregar fragmentos de la interfaz de usuario.

Los fragmentos son bloques de código preempaquetados que los desarrolladores pueden reutilizar en varios proyectos. Hay algunos que vienen preconstruidos con Anypoint Code Builder, pero los desarrolladores también pueden crearlos personalizados. Esto acelera el desarrollo al facilitar la replicación de tareas repetitivas. Por ejemplo, supongamos que con frecuencia necesita obtener información de contacto de una organización específica en Salesforce. La primera vez que haga esto, escribirá el XML con toda la configuración necesaria. Una vez escrito, puede empaquetar ese código en un fragmento. La próxima vez que necesite obtener información de contacto de esa organización, simplemente puede seleccionar ese fragmento de la interfaz de usuario en lugar de codificarlo todo nuevamente. A medida que los desarrolladores comienzan a crear bibliotecas de fragmentos, vemos que se trata de una herramienta increíblemente poderosa que ayudará a promover la reutilización en toda la organización.

Conclusión

El lanzamiento en junio de la versión beta abierta de Anypoint Code Builder es un hito fundamental en nuestro camino hacia la disponibilidad general. Con la expansión al plano de control de la UE, estamos entusiasmados de brindarles a más desarrolladores la oportunidad de tener en sus manos el producto. Y esperamos continuar introduciendo capacidades de interfaz de usuario adicionales junto con algunas funcionalidades de inteligencia artificial emocionantes a finales de este año. Si desea obtener una descripción general más detallada de las mejoras de junio, consulte la descripción general completa del video .

Más recursos

Sobre el Autor

Rohan Vettiankal es gerente de marketing de productos en MuleSoft, donde dirige su cartera de integración. A lo largo de su carrera, ayudó a llevar una variedad de productos al mercado, incluida una herramienta de visualización de datos basada en la web, una plataforma de infraestructura de datos local y un producto PaaS en la nube. En su tiempo libre, Rohan disfruta de actividades al aire libre como el senderismo, el snowboard y la escalada en roca. También le encanta la música y ha estado tocando el piano desde que tenía 12 años y recientemente ha estado aprendiendo guitarra. Siga a Rohan en LinkedIn .

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

Agregar a Slack Suscríbete a RSS

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2023/06/introducing-anypoint-code-builder-open-beta-enhancements.html

Categories
Developers

Configurar el tamaño de lote para el activador de eventos de plataforma

Ú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:

  1. Activador de vértice
    1. LeadGenerationEventTrigger en Lead_Generation__e
    2. Tamaño del lote: 50
    3. 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 PlatformEventUsageMetric en 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:

  1. Abra Workbench e inicie sesión con su nombre de usuario y contraseña de Trailhead Playground .
  2. Asegúrese de haber seleccionado la opción Producción para el medio ambiente .
  3. Navegue a la pestaña Utilidades y seleccione la opción REST Explorer .
  4. Selecciona las siguientes opciones:
    1. Elija un método HTTP para realizar en el URI del servicio REST API a continuación : POST
    2. URL : /services/data/v58.0/tooling/sobjects/PlatformEventSubscriberConfig
    3. 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.
      1. {
        "Tamaño del lote": "50",
        “Nombre del desarrollador”:”LeadGenerationEventTriggerConfig”,
        “MasterLabel”:”LeadGenerationEventTriggerConfig”,
        “PlatformEventConsumerId”: “01qB0000000Zcug”,
        “ID de usuario”: “005B00000015gt8”
        }
      2. Dónde:
        1. 01qB0000000Zcug, disparador de Apex en Lead_Generation__e
        2. 005B00000015gt8, es el ID de usuario del usuario de integración
    4. Haga clic en Ejecutar .
  5. 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 realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2023/04/30/configure-the-batch-size-for-platform-event-trigger-2/

Categories
Developers Tutoriales de Salesforce

Retrospectiva de un desarrollador de plataforma de TrailblazerDX '23 ☁️

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.

Retrospectiva de un desarrollador de plataforma de TrailblazerDX '23 | Blog de desarrolladores de Salesforce

TrailblazerDX '23 fue increíble, lleno de innovación y contenido para desarrolladores. Un mes después de la feria, todavía hay mucho que puedes aprender de este gran evento. En esta publicación de blog, compartiré las recomendaciones de un desarrollador de Salesforce Platform y una lista de recursos para ayudarlo a navegar por los diferentes anuncios de productos y funciones.

Principales anuncios principales

Como era de esperar de una conferencia de tecnología, la parte más esperada del programa fue el discurso principal . Hicimos una serie de anuncios clave que muestran las nuevas innovaciones de Salesforce. He seleccionado los tres temas más importantes para desarrolladores que se trataron durante el discurso principal del programa principal. ¡Sigue leyendo!

Anuncio de GPT de Einstein

Lo más destacado de TrailblazerDX '23 fue el anuncio de Einstein GPT , la inversión de Salesforce en IA generativa en toda nuestra cartera de productos. Compartimos una serie de demostraciones de cómo funciona con diferentes productos (Sales Cloud, Service Cloud, Slack y Tableau, solo por nombrar algunos), pero lo que más se destaca para los desarrolladores es el aumento de productividad potencial que brinda la capacidad de aprovechar la tecnología GPT para la generación de código.

En particular, pudimos vislumbrar cómo Einstein GPT podría ayudarnos a generar código Apex basado en un aviso en VS Code: Einstein GPT generó un método y el código de prueba relacionado. ¿Cuan genial es eso?

Este es solo el comienzo de una experiencia de desarrollador completamente nueva, sin embargo, no me malinterpreten: la IA no reemplazará a los desarrolladores. Einstein GPT ayuda a los desarrolladores a ser más productivos al sugerir fragmentos de código, pero la responsabilidad de los desarrolladores es usar el código generado como punto de partida, luego refinarlo y mantenerlo para satisfacer las necesidades comerciales.

Nube de datos

El segundo anuncio importante del discurso de apertura fue una muestra de Data Cloud (anteriormente conocida como Genie). Vimos cómo Data Cloud puede ingerir datos de múltiples fuentes, armonizar y transformar los datos y luego desencadenar acciones casi en tiempo real. Esta última parte es la más interesante para los desarrolladores: Data Cloud puede generar eventos de plataforma y desencadenar flujos basados en reglas personalizadas. Con estas capacidades, los desarrolladores pueden implementar fácilmente una lógica empresarial personalizada que se activa cuando se actualizan los datos de Customer 360.

Automatización

La automatización es una parte clave de nuestra estrategia de plataforma. Anunciamos una serie de funciones que simplificarán y ampliarán la forma en que los Trailblazers pueden automatizar con o sin código, gracias a Flow, Flow Orchestrations, MuleSoft y Slack. Estos son mis aspectos más destacados para los desarrolladores de plataformas:

  • Los componentes de pantalla reactivos (Beta a partir de Spring '23) son un cambio de juego para crear componentes web Lightning personalizados que interactúan con otros componentes de un flujo.
  • Las llamadas HTTP (Beta a partir de Spring '23) son excelentes acciones de flujo declarativo que ayudan a reducir en gran medida (si no a eliminar) la necesidad de código Apex personalizado al interactuar con sistemas y API de terceros.
  • Los flujos invocables (Beta en Summer '23) permiten a los constructores llamar a sistemas de MuleSoft y de terceros con solo clics y una configuración optimizada

¿Quiere profundizar en el contenido principal? Consulte la grabación de la conferencia magistral completa en Salesforce+ y los capítulos específicos que cubrimos anteriormente:

Recursos del producto

Mientras se transmitía y grababa el discurso principal, una buena parte de la experiencia de TrailblazerDX en persona fue navegar por las demostraciones de productos en el piso de la exposición e interactuar con los gerentes de productos y otros expertos de Salesforce.

Esta parte de la experiencia en realidad no se presta para ser compartida de forma remota, pero tengo buenas noticias: he reunido trailmixes dedicados para todas y cada una de las demostraciones presentadas en la exposición. Estos trailmixes dedicados incluyen un montón de recursos relevantes, como videos, publicaciones de blog, episodios de podcast, documentos de hoja de ruta y más.

Demostraciones de productos destacados

Herramientas/plataformas para desarrolladores y DevOps

Código

API y eventos

Móvil

Personalización y configuración de código bajo

Seguridad y privacidad

Sesiones en Salesforce+

Además del discurso de apertura principal, varias sesiones se transmitieron en vivo y se grabaron en Salesforce+ .

Aquí está la selección curada del equipo de defensa de desarrolladores de excelentes sesiones para desarrolladores:

Discurso principal de la plataforma: hoja de ruta para crear y ampliar su Customer 360
Conozca las últimas actualizaciones de la hoja de ruta de Salesforce Platform directamente de expertos en productos. Vea cómo puede ampliar su Customer 360 con automatización, DevOps y seguridad.

Apex: novedades y novedades
Aprenda de Chris Peterson y Daniel Ballinger sobre las funciones recientemente lanzadas y las próximas en la hoja de ruta de Apex.

De la idea a la producción: creación de aplicaciones escalables en Heroku
Únase a Julián Duque y Jonathan Jenkins para conocer cómo Salesforce Heroku le permite crear aplicaciones seguras y escalables utilizando lenguajes abiertos en la Plataforma Salesforce.

Simplifique la integración de API con servicios externos
Jennifer Jin y Lily Sai muestran interesantes actualizaciones de los servicios externos, lo que hace que sea más fácil que nunca realizar llamadas API de forma segura desde Salesforce, incluida la capacidad de realizar llamadas de servicios externos de forma nativa desde Apex.

Cree su primera aplicación en Salesforce
Aprenda a crear su primera aplicación de Salesforce con LeeAnne Rimel y Julie Thompson. Descubra cómo crear su modelo de datos, diseñar la seguridad de su aplicación, ajustar la UX con herramientas declarativas e implementar para sus usuarios.

Administrar lanzamientos con DevOps Center
Karen Fidelak explica cómo administrar lanzamientos con el centro DevOps. Aprenderá a administrar cambios y lanzamientos con confianza, sin necesidad de conjuntos de cambios.

Resumiendo

TrailblazerDX '23 fueron dos días llenos de gran contenido. De hecho, hubo tanta bondad que esta publicación de blog solo araña la superficie. Espero que esta retrospectiva le haya permitido ponerse al día y entusiasmarse con la próxima innovación relacionada con Einstein GPT, la nube de datos y la automatización, y que haya aprendido más sobre nuestros productos y funciones. Prepárese para más actualizaciones de desarrolladores a medida que trabajamos para el lanzamiento de Summer '23 en los próximos meses.

Sobre el Autor

Philippe Ozil es un defensor principal de desarrolladores en Salesforce, donde se enfoca en la plataforma de Salesforce. Escribe contenido técnico y habla con frecuencia en conferencias. Es un desarrollador full-stack y disfruta trabajar en proyectos DevOps, robótica y VR. Sígalo en Twitter @PhilippeOzil o consulte sus proyectos de GitHub @pozil .

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

Agregar a Slack Suscríbete a RSS

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2023/04/a-platform-developers-retrospective-of-trailblazerdx-23.html

Categories
Developers Tutoriales de Salesforce

Mejores prácticas de LWC para flujos de pantalla ☁️

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.

Mejores prácticas de LWC para flujos de pantalla | Blog de desarrolladores de Salesforce

Screen Flows, parte de Salesforce Flow , permite a los desarrolladores y administradores crear interfaces de usuario y vincularlas a los datos de Salesforce mediante herramientas de código o sin código. Los flujos de pantalla permiten a los desarrolladores usar componentes web Lightning (LWC) como elementos de flujo . Sin embargo, la creación de LWC para un flujo requiere que siga algunas prácticas recomendadas. Al hacerlo, aumenta el rendimiento de sus LWC y su componente funciona mejor dentro del motor de tiempo de ejecución de Flow.

En este blog, primero nos sumergimos en cómo funciona la administración de estado en el tiempo de ejecución de Flow y luego compartimos algunas prácticas recomendadas de administración de estado y eventos que debe seguir al crear LWC para sus flujos de pantalla.

Mejores prácticas para la gestión del estado de LWC en flujos de pantalla

El tiempo de ejecución de Flow se adhiere a los principios de diseño de gestión de estado de LWC. Funciona mejor cuando los componentes de LWC que representa no modifican sus propios atributos @api y, en su lugar, solicitan que se realice un cambio FlowAttributeChangeEvents .

Este patrón es esencial por dos razones.

  1. Los componentes que permiten a sus padres controlar sus parámetros @api se reutilizan más fácilmente porque permiten que la aplicación controle el estado en lugar de la propia lógica empresarial interna del componente.
  2. Al activar eventos de cambio de atributo, el tiempo de ejecución de Flow puede mantener una imagen precisa del estado del componente, lo que le permite controlar las interacciones entre componentes, como la visibilidad de campo condicional.

El uso de las reglas de linter de Salesforce LWC es una excelente manera de asegurarse de que su componente no modifique los parámetros @api . Configure un linter que use las reglas de linter de LWC en su entorno de desarrollo, asegurándose específicamente de que se aplique la configuración lwc/no-api-reasignments .

A continuación se muestra un ejemplo de un componente de entrada de texto simple. Demuestra cómo debe activarse un FlowAttributeChangeEvent en lugar de actualizar el parámetro @api de LWC.

Código problemático

Código compatible

Mejores prácticas para eventos LWC en flujos de pantalla

En las próximas secciones, profundizaremos en las mejores prácticas para eventos de flujo como FlowAttributeChangeEvent y FlowNavigationEvent .

Mejores prácticas de evento de cambio de atributo

Esta sección presenta una lista de FlowAttributeChangeEvent (ver documentos ) Qué hacer y qué no hacer .

  1. No modifique los atributos @api en el componente. En su lugar, active el evento FlowAttributeChangeEvents .
  2. Active el evento en los controladores de eventos o en los métodos invocados dentro de los controladores de eventos.
  3. Limite el parámetro de valor del evento a los siguientes tipos de datos:
    1. Cadena
    2. Número
    3. booleano
    4. JSON (para tipos de registros)
  4. Asegúrese de que el tipo de datos del parámetro de valor FlowAttributeChangeEvent coincida con el tipo de datos del parámetro @api de LWC.
  5. Reaccione a los cambios en @api utilizando un patrón get/set cuando corresponda. Esto también es necesario para la comunicación cruzada entre los componentes cuando se utilizan componentes de pantalla reactiva (Beta) .

El siguiente ejemplo demuestra el uso de get/set para contar las actualizaciones de un parámetro @api en lugar de simplemente incrementar un contador antes de activar un evento de cambio de atributo. Vale la pena señalar que los dos patrones a continuación son válidos pero logran resultados ligeramente diferentes.

En el escenario anterior, this.changeCounter se incrementará siempre que el usuario ingrese un cambio en la entrada de texto y siempre que el tiempo de ejecución de Flow determine que la propiedad textValue ha cambiado. Esto tendrá en cuenta la inicialización de componentes y las interacciones entre componentes cuando se utilizan componentes de pantalla reactivos .

Nota: será necesario usar una variable intermedia para generar actualizaciones desde el método set. En este ejemplo, presentamos textValueToRender para este propósito.

Veamos un ejemplo de código en el que incrementamos un contador antes de activar un evento de cambio de atributo. En este escenario, no usamos el patrón get/set .

En este caso, this.changeCounter se incrementará cada vez que el usuario ingrese un cambio en la entrada de texto.

6. Utilice parámetros @track para mantener un estado de componente local modificable.

El siguiente ejemplo muestra un selector de color que presenta al usuario un cuadro de texto de entrada y algunas muestras. Tenga en cuenta que el componente selector de color devuelve el color al flujo, por lo que solo color debe ser un parámetro @api , los miembros selectedSwatchId e inputValue son solo internos y, por lo tanto, no necesitan ningún decorador.

colorPicker.js

swatch.color === newColor); this.selectedSwatchId = foundSwatch && foundSwatch.id;
} get color() { return this.inputValue;
} handleSwatchSelected(event) { // Select get the swatch data for the clicked swatch: const selectedSwatch = this.ALL_SWATCHES.find(swatch => swatch.id === event.target.dataset.id); const changeEvent = new FlowAttributeChangeEvent(‘color’, selectedSwatch.color); this.dispatchEvent(changeEvent); } handleInputValueChange(event) { this.inputValue = event.target.value; const changeEvent = new FlowAttributeChangeEvent(‘color’, this.inputValue); this.dispatchEvent(changeEvent);
} «>

7. Utilice un método get para combinar @api para construir una variable derivada para la vista.

Saludo.js

8. Aplique la misma lógica en el método set de @api que contribuye a una variable miembro derivada. Esto es necesario para la gestión del estado de los componentes internos en escenarios complejos. Esto garantizará que un cambio realizado en cualquier atributo contribuyente hará que el valor se represente correctamente, independientemente del orden en que se establezcan los atributos.

desplegable.js

{ return option.isSelected && option.value === selectedValue; }); if (!isAlreadySelected) { const attributeChange = new FlowAttributeChangeEvent(‘value’, selectedValue); this.dispatchEvent(attributeChange); }
} computeOptions() { if (this.internalOptionLabels.length !== this.internalOptionValues.length) { return []; } return this.internalOptionLabels.map((label, index) ==> { const value = this.internalOptionValues[index]; const isSelected = this.internalValue === value; return { label, value, isSelected }; });
} «>

9. No modifique los parámetros de FlowAttributeChangeEvent después de la construcción. De forma predeterminada, las instancias de FlowAttributeChangeEvent están compuestas y burbujeadas .

10. Evite activar los eventos FlowAttributeChangeEvents y FlowNavigationXxx al mismo tiempo. La razón de esto es que puede conducir a condiciones de carrera. Nunca hay una garantía de que el componente LWC haya tenido tiempo de representar los valores actualizados en el momento en que comenzamos el proceso de navegación.

Mejores prácticas de eventos de cambio de navegación

Además del FlowAttributeChangeEvent , los LWC personalizados pueden activar eventos de navegación para moverse entre pantallas y pausar o finalizar flujos.

La intención de los eventos de navegación es permitir que los autores de LWC personalizados incluyan mecanismos de control adicionales dentro de sus componentes. Con ese fin, los eventos de navegación deben activarse al reaccionar a la interacción del usuario final.

Consulte la lista de lo que se debe y lo que no se debe hacer a continuación cuando planee usar eventos de navegación.

  1. Ejecute eventos de navegación en controladores de eventos (o en el método que invocan).
  2. No active eventos de navegación fuera de los controladores de eventos, ya que genera una mala experiencia para el usuario final.
  3. No active eventos de navegación en controladores de ciclo de vida como renderedCallback y connectedCallback .

La lógica para omitir pantallas debe descansar en los nodos de decisión de flujo y no debe determinarse durante el ciclo de vida de una pantalla. Además, la navegación en una pantalla ficticia puede provocar un rendimiento deficiente del flujo.

Conclusión

Nos encanta cuando los desarrolladores crean soluciones innovadoras con componentes web Lightning combinados con flujos. Seguir las mejores prácticas descritas en este blog garantiza que sus componentes se integren bien en el motor de tiempo de ejecución de Flow y funcionen como se espera.

Referencias

Sobre los autores

Josh Goodman es miembro principal del personal técnico con más de 7 años de experiencia como desarrollador en Salesforce. A lo largo de su mandato, Josh ha trabajado en muchas características interesantes, como agregar informes y tableros a Salesforce One móvil, llevar Wave Charting a Lightning, agregar compatibilidad con carpetas anidadas a las páginas de inicio de informes y tableros, y convertir la interfaz de usuario de Flow de Aura a LWC. . Actualmente está trabajando en nuevas y emocionantes características de tiempo de ejecución de la interfaz de usuario para Flows.

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.

Agregar a Slack Suscríbete a RSS

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2023/02/lwc-best-practices-for-screen-flows.html

Categories
Developers Discover Magazine Salesforce Tutoriales de Salesforce

Desmitificando Net Zero Cloud

A menudo veo confusión en torno a esta nube, y con el cambio de nombre y las muchas mejoras que ha tenido con respecto a los lanzamientos, pensé, ¿por qué no tratar de arrojar algo de luz?

¿Por qué yo?

Para los que no lo sepan, además de todo lo relacionado con Salesforce y Agile, mi enfoque es ayudar a las organizaciones a reducir el desperdicio. Pérdida de tiempo, esfuerzo, energía, dinero, materiales… Soy un profesional de la Economía Circular (Cambridge), Biomimicry Practitioner, escribí un libro sobre Sostenibilidad y negocios, parte de la Iniciativa de Sostenibilidad de Agile Alliance, y apoyo a mi pueblo con un ' re-wilding', siendo su representante designado en el grupo Climate Change Wiltshire.

Ahí es donde va mi corazón y mi energía: dejar el lugar mejor que como lo encontramos.

Por lo tanto, NZC se encuentra en una encrucijada clave para mí: donde las habilidades y la búsqueda se cruzan.

¿Porqué ahora?

¡Llegan los reglamentos! He aquí un breve resumen:

  • US 22 > Se requiere SEC para empresas que cotizan en bolsa
  • UE 22 > CSRD oct 22 ampliar alcance +
  • Brasil 21 > Divulgación ESG
  • India 22 > top 1000 listados para reportar sustentabilidad
  • Singapur 22 > divulgar para cotizar a cambio
  • China 22 > huella ambiental de las empresas que cotizan en bolsa
  • NZ 21 > 200 grandes instituciones financieras
  • Reino Unido > ESOS 250 em o 44mil (energía)
  • Reino Unido > empresas cotizadas +500 empleados+£500 millones de facturación Informe Riesgos relacionados con el clima y oportunidades dentro de la energía y el carbono o informe estratégico

¿Qué intenta resolver Net Zero Cloud?

En este momento, como gerente de sustentabilidad, hay un gran esfuerzo manual para recopilar, agregar, auditar y compilar datos para generar informes. Net Zero Cloud, al ser la tecnología de Salesforce, puede actuar como un habilitador para automatizar y facilitar esto.

Otra razón, relacionada con la anterior, es que como Gerente de Sostenibilidad el proceso es tan REACTIVO, lo que significa que solo sabe cómo lo ha hecho DESPUÉS del hecho, demasiado tarde para arreglarlo. Net Zero Cloud puede actuar como habilitador de información en tiempo real y para que una organización sea más proactiva.

También relacionado con la recopilación de datos, es bastante complicado procesar la mayoría de los datos en silos y complicados. Net Zero Cloud, al ser la tecnología de Salesforce, puede habilitar datos integrados, lógica empresarial y UX.

Y así como las regulaciones que están en camino como se mencionó, en el futuro esto será obligatorio y con implicaciones fiscales.

Diferencias vs otras cosas de SF

Existen algunas diferencias clave entre otros productos de Salesforce, incluso soluciones industriales, que creo que vale la pena descubrir:

1) ¡Salesforce crea sus datos!

En serio, a través de la configuración y las actualizaciones, Salesforce crea registros de datos. La razón de esto es la extracción de agencias gubernamentales clave para permitir los cálculos en equivalentes de emisiones de carbono. ( Un equivalente de dióxido de carbono o equivalente de CO2, abreviado como CO2-eq es una medida métrica utilizada para comparar las emisiones de varios gases de efecto invernadero sobre la base de su potencial de calentamiento global (GWP), al convertir cantidades de otros gases a la cantidad equivalente de dióxido de carbono con el mismo potencial de calentamiento global. )

Esencialmente, esto utiliza datos de referencia de cosas como la Agencia de Protección Ambiental de EE. UU. (EPA), la Administración de Información Energética de EE. UU. (EIA), la Agencia Internacional de Energía (IEA), el Departamento de Negocios, Energía y Estrategia Industrial del Reino Unido (BEIS), Gases de Efecto Invernadero (GHG) Protocolo, etc

2) Automatizaciones

Tiene, por ejemplo, datos relacionados con CBECS en su lugar y el generador BEI si necesita crear sus propios registros; BEI es la Intensidad Energética del Edificio.

Además de los procesos DPE (motor de procesamiento de datos) que se ejecutarán, como los cálculos de inicio para ayudar con el pronóstico de emisiones o la aplicación de tasas de inflación.

3) Multi-industria

Salesforce ya tiene múltiples 'nubes' como soluciones de la industria. Sin embargo, Net Zero Cloud cubre más de uno: contabilidad de carbono, economía circular (gestión de residuos), gestión de riesgos hídricos, DEI parcial…

Y no me sorprendería si se unieran más áreas. Dado que el capital social y el natural son áreas bastante amplias, están altamente interrelacionadas.

Una envoltura

Ok, dejémoslo así por ahora, ¿quizás el próximo paso es que cubramos la arquitectura?

¿Qué opinas? (¡Pon un comentario!)

** ¡Por supuesto que hay módulos de Trailhead en esto! >

https://trailhead.salesforce.com/modules?sort=NEWEST&products=products-net-zero-cloud

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://salesforceweek.ly/2023/02/demystifying-net-zero-cloud.html

Categories
Developers Tutoriales de Salesforce

Una experiencia de desarrollador completa en Heroku, funciones de Salesforce y AWS ☁️

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.

Una experiencia de desarrollador completa en Heroku, funciones de Salesforce y AWS | Blog de desarrolladores de Salesforce

En Salesforce, la innovación es uno de nuestros valores fundamentales. Con eso en mente, nos comprometemos a innovar en las tecnologías de la plataforma Salesforce, como Heroku y Salesforce Functions, así como a través de nuestra asociación con AWS, para unificar y mejorar la experiencia del desarrollador. En esta publicación de blog, le brindamos una descripción general de nuestras actualizaciones recientes, nuestra hoja de ruta y el poder de combinar estas tecnologías.

Convierta las aplicaciones en experiencias conectadas

Heroku es una plataforma como servicio para crear, implementar, ejecutar y administrar aplicaciones, y continúa siendo una parte esencial de la plataforma Salesforce. Para organizaciones de todo tipo, Heroku reduce los gastos continuos de DevOps y proporciona la flexibilidad para escalar bajo demanda en función de las necesidades comerciales. Para los desarrolladores y los equipos, Heroku les permite crear aplicaciones utilizando las herramientas que elijan y una experiencia de desarrollador meticulosamente diseñada. Salesforce continúa invirtiendo en Heroku y facilita su uso con otras nubes de Salesforce.

Heroku Connect , un potente servicio complementario de Heroku, es una solución de sincronización de datos que sincroniza automáticamente datos entre Heroku Postgres y una organización de Salesforce, lo que permite a los desarrolladores crear rápidamente aplicaciones escalables y elásticas que se basan en datos de Salesforce. Disminuye la carga de los desarrolladores encargados de la sincronización de datos entre aplicaciones y Salesforce. Heroku Connect también se conecta a otros servicios de Heroku (p. ej., Apache Kafka en Heroku , Heroku Data para Redis, conectores de transmisión de datos y está disponible a través del mercado de Heroku Elements ). No hay mejor solución para sincronizar datos entre Salesforce y las aplicaciones orientadas al cliente sin alcanzar los límites de la API.

Escale de forma nativa en la plataforma de Salesforce

Funciones de Salesforce ( GA Winter'22 ) proporciona un entorno informático escalable en la plataforma de Salesforce para su lógica empresarial. Escritas en los idiomas y herramientas de su elección, y estrechamente integradas con la estructura de directorios del proyecto SFDX y la CLI, las funciones de Salesforce están alojadas en una infraestructura informática elástica administrada por Salesforce y preconfiguradas para integrarse de forma segura con su organización. Las funciones de Salesforce pueden ayudarlo a superar los límites del regulador en la plataforma, específicamente los límites de CPU, memoria y Apex asíncrono (ya que la invocación asíncrona de funciones es ilimitada). Otros límites, como DML mixto y la cantidad de llamadas HTTP por solicitud, también se eliminan en Funciones. Tenga en cuenta que las operaciones y consultas DML realizadas desde una función se ejecutarán en la plataforma y deben cumplir con los límites del gobernador.

Salesforce Functions incorporó recientemente la capacidad de utilizar los servicios de datos de Heroku (Heroku Postgres, Heroku Data for Redis y Apache Kafka en Heroku), que es una de mis innovaciones favoritas. Para obtener más información, mire esta sesión de TrailblazerDX '22 o esta excelente sesión sobre eliminación de duplicados de registros de Dreamforce '22. Además, mi colega Julián Duque publicó algunos episodios increíbles de codLive sobre el tema, incluidos: codeLive: Heroku Data in Functions with Redis , codeLive: Heroku Data in Functions with Apache Kafka y codeLive: Heroku Data in Functions with Postgres .

Libere el poder de las nubes conectadas

Salesforce y AWS anunciaron su asociación ampliada en junio del año pasado, diseñada para facilitar a los clientes de todo el mundo el uso conjunto de las capacidades de Salesforce y AWS para aprovechar de forma nativa los servicios de AWS en Salesforce, y permitir que ambos desarrolladores creen y lancen soluciones personalizadas. aplicaciones y conecte datos y flujos de trabajo de forma segura en ambas plataformas.

Muchos clientes ya tienen datos en un almacén de datos en AWS. Los adaptadores de Salesforce Connect le permiten desbloquear esos datos dentro de Customer 360 sin necesidad de una integración personalizada o middleware. Por ejemplo, los adaptadores de Salesforce Connect para Amazon DynamoDB y Amazon Athena le permiten virtualizar datos de servicios de datos de AWS, como Amazon DynamoDB o Amazon S3, en objetos externos de Salesforce.

Event Relays for AWS Beta (GA) le permite conectar de forma nativa Salesforce y AWS con eventos en tiempo real, lo que acelera el desarrollo de aplicaciones multiplataforma. Event Relays también agiliza la sincronización de datos cuando los datos residen en su propia implementación de AWS.

Construye más rápido, a tu manera

Salesforce Platform proporciona un conjunto de primitivas con Heroku, Salesforce Functions y productos de asociación de AWS que lo ayudan a crear aplicaciones más rápidamente y con mayor flexibilidad. A los desarrolladores les encanta Heroku porque pueden concentrarse en crear aplicaciones y servicios, y no en mantener la infraestructura. Heroku se esfuerza por deleitar a los desarrolladores con una PaaS obstinada que agiliza el desarrollo de aplicaciones modernas y DevOps, ayudando a los clientes a acelerar la velocidad de ingeniería y la seguridad de implementación.

Entendemos que muchos clientes ya tienen datos en un almacén de datos en AWS (por ejemplo, Amazon RDS, S3 o DynamoDB). La expansión de la asociación entre Salesforce y AWS impulsará el desarrollo de integraciones sencillas entre los servicios de Salesforce y AWS. Si desea integrar los servicios de AWS existentes en Salesforce, ahora tendrá la opción de hacerlo con un conjunto simplificado de opciones de configuración. Esta asociación le permite desbloquear esos datos dentro de Customer 360 sin tener que sincronizarlos con una base de datos de Postgres en Heroku. Los servicios de datos de Heroku y Heroku Connect siguen siendo excelentes opciones para los clientes sin inversiones significativas en almacenes de datos de AWS.

Desde el punto de vista de un desarrollador, tiene un valor inmenso que Salesforce brinde una solución integral completa para construir dentro del ecosistema. Con esto en mente, lanzamos Salesforce Functions para ofrecer capacidades informáticas elásticas en la plataforma a nuestros desarrolladores. Y con la experiencia de desarrollador integrado (DX) de Salesforce, disfrutan de un acceso transparente a los datos de Salesforce y una integración más estrecha con las experiencias creadas en herramientas de bajo código.

Por otro lado, sabemos que las decisiones comerciales pueden optar por capacidades existentes sobre nuevas capacidades. Si un cliente de Salesforce tiene flujos de trabajo integrados con los servicios de AWS, el uso de Event Relays for AWS para activar esos flujos de trabajo desde Salesforce significa que no tiene que gastar valiosos recursos de desarrollador en la creación de middleware o integraciones personalizadas.

Con todas estas innovaciones implementadas, es posible que se pregunte cuándo usar una u otra, o cuándo usarlas juntas. A continuación, se incluyen algunos consejos basados en los requisitos de los casos de uso:

REQUISITO SOLUCIÓN RECOMENDADA
Cree experiencias digitales orientadas al cliente con acceso a datos de Salesforce Core y herramientas de automatización, como Salesforce Flow Heroku
Conecte datos uni o bidireccionalmente en Heroku con Salesforce Conexión Heroku
Ofrezca experiencias escalables dentro de los límites de confianza de Salesforce utilizando los idiomas estándar de la industria (235 000 llamadas adicionales por día más allá del límite de asignación diaria) Funciones de la fuerza de ventas
Acceda de forma segura a los productos de datos de Heroku, incluidos Heroku Postgres, Apache Kafka en Heroku y Heroku Data para Redis, directamente desde un entorno informático elástico. Funciones de la fuerza de ventas
Virtualice los datos de AWS en Salesforce para crear aplicaciones empresariales conscientes del cliente Adaptadores de Salesforce Connect para servicios de datos de AWS
Acceda a servicios o características existentes en AWS desde flujos de trabajo o aplicaciones de Salesforce Retransmisiones de eventos para AWS

Hoja de ruta y próximos pasos

Para concluir, echemos un vistazo a algunas funciones relacionadas que están en la hoja de ruta y que estarán disponibles próximamente (consulte nuestra declaración prospectiva ).

  • Compatibilidad con Heroku en la unificación de la CLI de Salesforce , lo que significa que los comandos de la CLI de Heroku estarán disponibles en nuestro propio ejecutable sf (¡sí!), el mismo que se usa para Funciones.
  • Nuevo plan Heroku Dynos de bajo coste . Dynos duerme después de 30 minutos sin tráfico web y solo consume horas cuando está activo, lo que brinda una solución económica.
  • Compatibilidad con más idiomas en las funciones de Salesforce. El siguiente en venir: ¡Python! Eche un vistazo a la nota clave para desarrolladores de Dreamforce '22 para verla en acción o regístrese para el programa piloto .
  • Integración de Salesforce Functions con Flow, LWC y Platform Events.
  • Compatibilidad con almacenes de datos de AWS adicionales en Salesforce Connect, como Amazon RDS.

Eche un vistazo más profundo a las hojas de ruta en el sitio de arquitectos de Salesforce y la hoja de ruta pública interactiva de Heroku en GitHub.

Si desea probar algún código, eche un vistazo a nuestras nuevas aplicaciones de muestra de combinación de cuentas y generador de PDF en GitHub, y comuníquese con su ejecutivo de cuenta si necesita una licencia de cortesía.

Como ha visto, hay una variedad de soluciones disponibles, dependiendo de su implementación actual y expansión futura, para ayudarlo a aprovechar al máximo estas tecnologías de la plataforma Salesforce. En función de sus comentarios, nos comprometemos a proporcionarle elementos primitivos en la Plataforma de Salesforce que le permitan construir rápidamente, a su manera.

Sobre los autores

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 .

Srini Nirmalgandhi es directora de marketing de productos en Salesforce y se centra en productos para desarrolladores para la plataforma Salesforce. Puede comunicarse con él 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.

Agregar a Slack Suscríbete a RSS

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2022/11/a-complete-developer-experience-across-heroku-salesforce-functions-and-aws.html

Categories
Developers

Cómo aprobar el examen de certificación de desarrollador de la plataforma Salesforce I

Última actualización el 16 de septiembre de 2022 por Rakesh Gupta

Han pasado siete años desde que aprobé el examen de Desarrollador de Plataformas I. En los últimos meses, muchas personas se pusieron en contacto conmigo para pedirme orientación y un camino para convertirme en un desarrollador de plataforma I profesional certificado.

Eso me da una idea para escribir una publicación de blog sobre este tema. Al leer desde el principio hasta el final de este artículo, tendrá una comprensión clara de cómo aprobar el examen de certificación de desarrollador de plataformas I y podrá diseñar un plan y una estrategia para hacerlo.

👉

👉 Ya que está aquí, es posible que desee consultar los siguientes artículos:

  1. Decodifique de forma creativa su recorrido como desarrollador de Salesforce
  2. Cómo aprobar el examen de certificación de desarrollador de JavaScript I de Salesforce

Entonces, ¿quién es un candidato ideal para el examen?

El examen de desarrollador de la plataforma Salesforce I está destinado a una persona que tiene experiencia en el desarrollo y la implementación de interfaces de usuario y lógica empresarial básica utilizando las capacidades programáticas de la plataforma Lightning, incluida la aplicación práctica de las habilidades y los conceptos que se indican en los objetivos del examen a continuación.

El candidato a desarrollador de la plataforma Salesforce I tiene la experiencia, las habilidades y los conocimientos que se describen a continuación:

  • Tiene experiencia con aplicaciones basadas en datos y bases de datos relacionales.
  • Tiene experiencia con lenguajes orientados a objetos como Apex, JavaScript, Java, C# y Ruby.
  • Está familiarizado con los límites del gobernador y sus implicaciones.
  • Tiene experiencia con Model View Controller (MVC) y arquitecturas basadas en componentes.
  • Conoce las capacidades de los objetos principales en el esquema de Salesforce.
  • Conoce las capacidades y los casos de uso de los campos de fórmula y los campos de resumen.
  • Sabe cuándo usar métodos declarativos versus programáticos para resolver los requisitos comerciales.
  • Puede aprovechar las capacidades declarativas relevantes de la plataforma, cuando corresponda.
  • Conoce el lenguaje de programación de Apex y puede utilizar las mejores prácticas de Apex para personalizar Salesforce.
  • Puede ampliar la plataforma Lightning mediante Apex, Visualforce y componentes Lightning básicos.
  • Puede utilizar capacidades programáticas fundamentales de la plataforma Lightning para desarrollar interfaces personalizadas para ampliar las capacidades de Salesforce y desarrollar una lógica empresarial personalizada.
  • Está familiarizado con las pruebas, la depuración y la implementación de código y conoce los entornos disponibles.
  • No se espera que un candidato para este examen administre ninguna aplicación estándar de Salesforce, desarrolle aplicaciones móviles, desarrolle y publique productos administrados en AppExchange, o realice ajustes o diseñe integraciones como llamadas, API y servicios de correo electrónico.

Después de decidir presentarse para el examen, es hora de recopilar información al respecto y considerar qué pasos tomará para aprobarlo. Una vez que tenga una línea de tiempo concreta, piense en cómo integrará un plan de estudio sólido con el resto de sus responsabilidades: equilibrio entre el trabajo y el hogar, etc. Tener una fecha concreta para estudiar lo ayudará a mantenerse motivado.

A continuación se presentan algunos detalles sobre el examen y los materiales de estudio:

  • 60 preguntas de opción múltiple/selección múltiple: 105 minutos
  • 68% es el puntaje de aprobación
  • La tarifa del examen es de $ 200 más los impuestos aplicables.
  • Tarifa de repetición: USD 100, más impuestos aplicables según lo exija la ley local
  • Guía del examen de desarrollador de plataforma I
  • Esquema del examen
    • Fundamentos del desarrollador : 23 %
    • Automatización y Lógica de Procesos : 30%
    • Interfaz de usuario: 25%
    • Pruebas, depuración e implementación : 22 %

Si su objetivo es convertirse en un desarrollador de plataforma certificado, le recomiendo comenzar con la certificación Platform App Builder . Mientras se prepara para el examen de Platform App Builder, obtendrá una sólida comprensión de los modelos de datos, la automatización declarativa y las capacidades de diseño de la interfaz de usuario.

Una vez que haya terminado con la certificación Platform App Builder, comience a mejorar sus habilidades iniciando la vía de certificación Platform Developer I.

Lo que necesita saber para suavizar su viaje

Una de las cosas que solía decir mi instructor de manejo es que uno no puede aprender a manejar sentado detrás del volante. También decía a menudo que aprender a conducir un automóvil lleva tiempo: uno no se convierte en un buen conductor de la noche a la mañana; lo aprendes practicando detrás del volante durante muchas horas. Lo mismo se aplica cuando empiezas a aprender a programar. Puede aprender las mejores prácticas viendo videos en YouTube o leyendo libros/artículos. Para convertirse en desarrollador, debe comenzar a escribir código de forma independiente.

Para obtener la certificación Platform Developer I , debe demostrar sus conocimientos, habilidades y experiencia en la creación de aplicaciones personalizadas en Lightning Platform. No hay atajo para el éxito. Lee y practica todo lo que puedas.

  1. Comencemos desde lo básico : aunque no haya escrito ningún código y desee convertirse en desarrollador de plataformas, los siguientes pasos lo ayudarán a lograr su objetivo.
    1. Pase 1-2 horas diarias escribiendo y practicando código. Es posible que desee consultar este artículo para hacerse una idea: Decodifique de forma creativa su trayectoria como desarrollador de Salesforce .
    2. Aprende a escribir algoritmos básicos o Pseudo Código . Siempre puede buscar algoritmos y código de muestra en los documentos proporcionados por Salesforce. Pero aprenderlos expandirá su mentalidad y la forma en que aborda cualquier problema.
      1. Un algoritmo no es más que una mención de pasos para resolver un problema.
      2. Aprenda la programación orientada a objetos del video de YouTube Tutorial de Java para principiantes .
      3. Si se siente abrumado por la gran cantidad de información, puede que sea el momento de dar un paso atrás y volver a centrar su atención en aprender directamente el código Apex.
  2. Comience su viaje de Apex desde el curso de David Liu. No solo mires el video. Asegúrese de practicar el ejercicio en su organización de desarrollador. Utilice este enlace para registrarse en una organización de edición para desarrolladores gratuita.
    1. Apex Academy: Técnicas fundamentales de codificación de Salesforce
    2. Apex Academy: Guía absoluta para principiantes sobre codificación en Salesforce
    3. Saber cuándo programar en Salesforce
    4. Apex Academy: El poder de SOQL
  3. Vídeos de desarrolladores de Salesforce
    1. Introducción a Salesforce y el modelado de datos: episodio 1
    2. Personalizar UX en Salesforce – Episodio 2
    3. Automatización en Salesforce – Episodio 3
    4. Componentes web Apex y Lightning en Salesforce: episodio 4
    5. Seguridad en Salesforce – Episodio 5
    6. Aprenda los conceptos básicos de SOQL
    7. Aprenda los conceptos básicos de DML :
  4. Configuración de Visual Studio Code en su Mac
  5. Productividad y herramientas para desarrolladores de Salesforce
  6. Pruebas, depuración e implementación
    1. Pruebas de Apex: conceptos básicos y afirmaciones
    2. Apex: conceptos básicos y ejecución anónima
    3. Depuración de Apex con Replay Debugger
  7. A estas alturas, tendrá una buena comprensión de SOQL y Apex. Es hora de comenzar a aprender el componente web Lightning.
  8. Aprenda el componente web Lightning
    1. Los siguientes videos del equipo de desarrolladores de Salesforce le brindarán una comprensión justa del componente web Lightning .
      1. Primeros pasos con el componente web Lightning: videos de YouTube
        1. Componentes web Lightning: episodio 1: una introducción
        2. Lightning Web Components – Episodio 2: Trabajar con datos de Salesforce
        3. Lightning Web Components – Episodio 3: Comunicación de componentes e interoperabilidad de Aura
        4. Lightning Web Components – Episodio 4: Seguridad y pruebas
      2. Cree componentes web Lightning : módulo Trailhead. Asegúrese de practicar todos los temas en su organización de desarrollador.
  9. Preparación para el examen de desarrollador de plataformas I
    1. Regístrese en el seminario web para desarrolladores 1 de la plataforma de días de certificación de Salesforce
    2. Prepárate para tu Certificación PDI
    3. Trailmix: Prepárese para su credencial de desarrollador de la plataforma Salesforce I
    4. Trail: estudio para el examen de desarrollador de plataformas I
    5. Superinsignia: Especialista en Apex
    6. Capacitación opcional dirigida por un instructor de Trailhead: Bootcamp virtual de Trailhead para desarrolladores de plataformas I

Recursos adicionales

Hay toneladas de blogs que lo ayudarán a prepararse para el examen de Desarrollador de plataforma I.

  1. Cómo estudié para el examen de desarrollador de plataforma I
  2. Referencia de SOQL y SOSL
  3. Guía para desarrolladores de Apex
  4. Disparadores y Orden de Ejecución
  5. Depuración, prueba e implementación de Apex
  6. Guía para desarrolladores de componentes web Lightning
  7. Guía para desarrolladores de eventos de plataforma

Recuerda

  1. No se preocupe demasiado por recordar la sintaxis. Olvidarás la mayor parte de todos modos.
  2. Aprende a escribir código. Concéntrese en mejorar las habilidades para resolver problemas.
    1. Comience a escribir pseudocódigo en lugar de escribir código Apex directamente. ¡Significa resolver el problema en lenguaje sencillo (pseudocódigo)! Y, solo entonces, escribir el código.
  3. Domina un buen depurador. ¡Piense en ello como resolver una novela de detectives!
  4. No olvides hacer una prueba unitaria de tu código. La mayoría de las veces, su código siempre tendrá errores.
  5. No crea que el código altamente eficiente siempre es bueno. A veces, el costo de desarrollo lo supera.
  6. Siempre cometerás errores. Esté dispuesto a aceptarlo y aprender de él.
  7. Comience a usar Visual Studio Code (o un IDE) y aprenda la mayoría de los accesos directos. La curva de aprendizaje puede ser alta. Pero una vez que se convierta en memoria muscular, tu productividad mejorará.
  8. Hágase amigo de un programador profesional y vea si pueden tomarse unos minutos para revisar su código.
  9. No te rindas, he conocido a muchos programadores autodidactas. Todos tenían una cosa en común: nunca se rindieron.

Conclusión

Si tiene una buena experiencia práctica con todos los temas anteriores, aprobar el examen será pan comido y podrá obtener la tan codiciada certificación Platform Developer I. Sin embargo, si no tiene suficiente experiencia con Apex, SOQL, Lightning Web Component y planea convertirse en un desarrollador de plataforma I. Le sugiero que dibuje un plan de 6 a 9 meses (finalice la capacitación anterior de ApexAcademy, Trailmix y dirigida por un instructor) para prepararse para ello.

Espero que encuentre útiles estos consejos y recursos. Si pones el tiempo y el esfuerzo, tendrás éxito. ¡Feliz estudio y buena suerte!

Evaluación formativa:

¡Quiero saber de ti!

¿Ha realizado el examen de desarrollador de plataforma certificado I de Salesforce? ¿Te estás preparando para el examen ahora? ¡Comparte tus consejos en los comentarios!

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2022/09/15/how-to-pass-salesforce-platform-developer-i-certification-exam-4/

Categories
Developers Tutoriales de Salesforce

Una introducción a Apex para desarrolladores de Java ☁️

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.

Introducción a Apex para desarrolladores de Java | Blog de desarrolladores de Salesforce

Si es un desarrollador de Java que explora el ecosistema de Salesforce y se pregunta qué es Apex, ¡esta publicación es para usted! Apex es el lenguaje de programación backend de la plataforma Salesforce. Apex, junto con herramientas declarativas como Flows, le permite personalizar la lógica empresarial. Apex se basa en la sintaxis de Java optimizada específicamente para los requisitos de la plataforma multiinquilino de Salesforce y ofrece una serie de funciones listas para usar, como multiinquilino, seguridad, compatibilidad con versiones anteriores y escalabilidad. En esta publicación, exploramos las funciones de Apex desde la perspectiva de un desarrollador de Java. Veremos los pasos desde el código fuente hasta el tiempo de ejecución, las diferencias de sintaxis y comportamiento, el acceso y la seguridad de los datos y, finalmente, los espacios de nombres y los paquetes. Desde el código fuente hasta el tiempo de ejecución Compile al implementar A diferencia de Java, no hay un compilador de Apex que se ejecute en su máquina. Apex solo se ejecuta en Salesforce Platform y el código se compila automáticamente en el momento de la implementación. Intentar implementar código que no compila anula la implementación. Este proceso reduce en gran medida la posibilidad de que la Plataforma aloje un código Apex "no válido". La plataforma expone un servidor de idioma que lo ayuda a validar su código fuente. Esto le permite desarrollar en un IDE local o remoto, como VS Code, con las extensiones de Salesforce o Code Builder (Beta).

Además de la compilación en el momento de la implementación, las clases e interfaces de Apex están vinculadas a las versiones de la API. Esto garantiza una sólida compatibilidad con versiones anteriores a medida que evoluciona la Plataforma. Podría lograr algo similar recompilando el código fuente de Java para diferentes versiones de tiempo de ejecución, pero el poder de Apex ejecutándose en una organización de Salesforce es que el código escrito hace una década, así como el código reciente, se ejecutan en el mismo tiempo de ejecución.

Pruebas

Al igual que con cualquier idioma, las pruebas son una parte clave del proceso de desarrollo. Sin embargo, la diferencia con el ecosistema de Salesforce es que la plataforma requiere una cobertura de código mínima del 75 % cuando se implementa en un entorno de producción. Si no se cumple este objetivo, se cancela la implementación.

Las pruebas de Apex se pueden ejecutar en cualquier momento gracias a las API de la plataforma o las herramientas para desarrolladores. La plataforma incluye su propio ejecutor de pruebas yfunciones de pruebas unitarias en forma de afirmaciones y anotaciones de Apex.

Límites del gobernador

La plataforma de Salesforce se basa en una arquitectura de múltiples inquilinos. Cuando se ejecuta el código Apex, hay una serie de límites estrictos que imponen una calidad de servicio equitativa entre todos los inquilinos. Los límites son una parte clave del tiempo de ejecución, como dice la documentación:

[…] el motor de tiempo de ejecución de Apex impone límites estrictamente, de modo que el código o los procesos de Apex fuera de control no monopolizan los recursos compartidos. Si algún código de Apex supera un límite, el gobernador asociado emite una excepción de tiempo de ejecución que no se puede manejar.

Existen diferentes tipos de límites, como el tiempo de CPU, el tamaño del almacenamiento dinámico y los límites por transacción. Asegúrese de leer la sección de límites y reguladores de ejecución de la Guía del desarrollador de Apex para obtener una descripción general de esos límites. Los límites son especialmente importantes cuando se trabaja con datos. Volveremos a esto en la sección de acceso a datos de esta publicación.

Diferencias de sintaxis y comportamiento

Si bien la sintaxis de Apex es similar a la de Java 5, existen varias diferencias sintácticas y de comportamiento.

Sintaxis insensible a mayúsculas y minúsculas

Una de las mayores sorpresas para los desarrolladores que son nuevos en Apex puede ser el hecho de que el lenguaje no distingue entre mayúsculas y minúsculas. Leer código de Apex que no tiene un estilo coherente puede resultar confuso para un desarrollador de Java. Le recomendamos que siga usando las convenciones de código Java para la clase, el método y la nomenclatura de variables cuando trabaje con Apex, incluso si esas convenciones se basan en la distinción entre mayúsculas y minúsculas.

Colecciones

En Apex, solo hay tres tipos de colección: List , Set y Map . A diferencia de Java, estos tres tipos son clases, no interfaces. Se crean instancias directamente en Apex y no hay equivalentes para implementaciones de colecciones de Java especializadas, como ArrayList , LinkedSet o HashMap .

Puede encontrar más información sobre las colecciones en la publicación de blog Mastering Apex Collections .

Herencia

Los métodos y las clases de Apex son definitivos de forma predeterminada. Esto significa que solo puede extender clases si especifica:

  • El modificador virtual en la clase padre
  • El modificador de override en los métodos secundarios que anulan un método principal

Consulte la Guía para desarrolladores de Apex para obtener más información sobre cómo ampliar una clase .

Modificadores de clase y método

El modificador static tiene algunas diferencias notables entre Java y Apex.

  • No se puede acceder a las variables de clase estática o métodos estáticos a través de instancias de clase
  • Las clases internas se comportan como una clase interna de Java estática pero no requieren la palabra clave static
  • Los métodos y variables estáticos solo se pueden declarar en una definición de clase de nivel superior, no en una clase interna

En Apex, el modificador de método predeterminado es private (no existe un equivalente para el modificador de acceso Java "predeterminado") y los métodos de interfaz no tienen modificadores (siempre son globales).

Apex introduce un par de modificadores que no existen en Java:

  • El modificador de acceso global para clases y métodos. Compartiremos más sobre este modificador en la sección "Paquetes y espacios de nombres" de esta publicación.
  • Los modificadores with sharing , without sharing y de clase de inherited sharing . Volveremos a estos modificadores en la sección "Acceso a datos y seguridad", y puede leer más sobre estos modificadores de seguridad en la Guía para desarrolladores de Apex.

Procesamiento asíncrono

Si bien Apex no expone el acceso programático a los subprocesos, existen algunos patrones y clases dedicados que le permiten ejecutar código de forma asíncrona. El módulo Apex asíncrono de Trailhead y la Guía para desarrolladores de Apex brindan una excelente descripción general y orientación sobre las diferentes opciones para el procesamiento asíncrono: métodos futuros, lotes, colas y trabajos programados.

Genéricos y anotaciones

Apex admite tipos y anotaciones genéricos para tipos de sistema; sin embargo, no puede declarar sus propios tipos y anotaciones genéricos personalizados.

Excepciones

Las clases de excepción deben extender la clase de Exception base u otra excepción definida por el usuario, y su nombre de clase termina con la palabra "excepción".

Acceso a datos y seguridad

A diferencia del código Java, que está diseñado para ejecutarse en varios servidores de aplicaciones y conectarse a diferentes tipos de bases de datos, Apex está estrechamente relacionado con la plataforma Salesforce. Esta especialización permite una gran optimización y sencillez a la hora de trabajar con datos. Apex interactúa con los datos gracias a dos lenguajes de consulta integrados y al lenguaje de manipulación de datos (DML). Apex también aplica automáticamente verificaciones de permisos para el acceso a datos.

Lenguajes de consulta de datos

La sintaxis de Apex integra dos lenguajes de consulta que son específicos de Salesforce:

  • Lenguaje de consulta de objetos de Salesforce (SOQL): un lenguaje utilizado para recuperar registros con consultas de tipo SQL
  • Lenguaje de búsqueda de objetos de Salesforce (SOSL): un lenguaje utilizado para búsquedas basadas en texto

Gracias a estas integraciones, puede recuperar datos rápidamente y asignarlos a clases con unas pocas líneas de código en lugar de decenas de líneas de Java:

<dx-code-block title language code-block="// SOQL query that retrieves accounts from the automotive industry
List accounts = [ SELECT Id, Name FROM Account WHERE Industry = ‘Automotive’
]; // SOSL query that retrieves a mixed list of accounts and contacts
// as long as any of their fields starts with "united"
List<List> results = [ FIND ‘united*’ IN ALL FIELDS RETURNING Account(Id, Name), Contact(Id, Name)
];»>

Tenga en cuenta el uso de SObject (ver documentos ) en la segunda consulta. SObject es la clase principal para todos los objetos que se pueden almacenar en la base de datos de la plataforma: objetos estándar como Account o Contact , así como cualquier objeto de base de datos personalizado definido por el usuario.

Cada vez que un administrador crea un objeto personalizado, la plataforma genera automáticamente una clase coincidente con los campos relevantes para este objeto y vuelve a compilar su base de código sin tiempo de inactividad.

Pruebe el módulo Conceptos básicos y base de datos de Apex en Trailhead para obtener más información sobre cómo Apex interactúa con los datos.

Lenguajes de manipulación de datos (DML)

Además de recuperar datos, la plataforma proporciona palabras clave que le permiten realizar operaciones DML , como insertar, actualizar o eliminar, con una cantidad mínima de código.

Las operaciones DML se incluyen de forma automática y transparente en una transacción de base de datos, que puede revertirse en caso de error.

Comprobaciones de permisos

Más allá de las funciones básicas de la base de datos, Apex también proporciona mecanismos para hacer cumplir el modelo de seguridad definido por los administradores de Salesforce para controlar qué usuarios pueden acceder o modificar objetos, registros o campos. Apex aplica estas reglas de seguridad y uso compartido al ejecutar consultas y operaciones DML.

Las reglas de uso compartido son parte del modelo de seguridad que influye en el acceso a los registros. Estas reglas se aplican en función de los modificadores de seguridad de clase ( with sharing , without sharing y inherited sharing ) y el contexto de ejecución actual (si un usuario específico o el sistema inició la ejecución). Sin embargo, estos modificadores de acceso no aplican los permisos del usuario ni la seguridad de nivel de campo (FLS).

A partir del lanzamiento de Winter '23, hay una versión beta en curso para las operaciones de base de datos en modo usuario . El modo de usuario garantiza que se respeten los permisos FLS y de objeto del usuario que ejecuta, a diferencia de cuando se ejecuta en modo de sistema (el modo predeterminado para Apex).

Espacios de nombres y paquetes

Tanto Apex como Java usan la noción de paquetes, pero estos significan cosas diferentes según el idioma. El equivalente más cercano a los paquetes de Java en Apex son los espacios de nombres , pero su uso es diferente.

Las clases de Apex se pueden aislar de otras clases gracias a los espacios de nombres, sin embargo, se aplican consideraciones especiales:

  • Un espacio de nombres está registrado en una organización de Salesforce
  • Una organización solo puede tener un espacio de nombres
  • El nombre de un espacio de nombres debe ser único en todos los clientes de Salesforce
  • No hay subespacios de nombres
  • Los espacios de nombres solo están disponibles cuando se usan con paquetes de Salesforce

No profundizaremos en los diferentes tipos de paquetes de Salesforce en aras de la brevedad, pero los paquetes actúan como un contenedor para los entregables y estos incluyen más que el código Apex. Los paquetes pueden incluir la mayoría de los tipos de metadatos, como definiciones de objetos y campos, diseños, informes y paneles, componentes de la interfaz de usuario y más. Algunos tipos de paquetes ( paquetes administrados ) se crean con un espacio de nombres.

El modificador de acceso global permite acceder a clases y métodos fuera de su espacio de nombres. Una clase pública dentro de un paquete no es visible para una organización donde está instalado el paquete.

No hay administradores de paquetes o dependencias para Apex como Maven o Gradle. Los paquetes se instalan utilizando su ID de versión, ya sea desde las API de Salesforce, herramientas como la CLI de Salesforce o AppExchange (mercado de Salesforce).

palabras de cierre

Esto concluye nuestra descripción general de Apex. Aprendió sobre los detalles de cómo desarrollar, probar, implementar y empaquetar su código fuente de Apex. Obtuvo una descripción general de las herramientas de desarrollo y las características clave del lenguaje. Usted vio lo que hace que Apex sea excepcionalmente poderoso para abordar el desafío de un entorno de nube basado en datos y de múltiples inquilinos y cómo el acoplamiento estrecho de la plataforma permite optimizaciones que Java no admitiría.

Ahora está listo para continuar su viaje como desarrollador con Apex. Te dejaremos algunos recursos para guiarte en el camino.

Recursos

Sobre el Autor

Philippe Ozil es un defensor principal de desarrolladores en Salesforce, donde se enfoca en la plataforma de Salesforce. Escribe contenido técnico y habla con frecuencia en conferencias. Es un desarrollador de pila completa y disfruta trabajar en proyectos DevOps, robótica y realidad virtual. Sígalo en Twitter @PhilippeOzil o consulte sus proyectos de GitHub @pozil .

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

Agregar a Slack Suscríbete a RSS

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2022/09/an-introduction-to-apex-for-java-developers.html

Categories
Developers Tutoriales de Salesforce

¡5 características asombrosas que los desarrolladores pueden no conocer acerca de Heroku! ☁️

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.

En el mundo actual, las aplicaciones son fundamentales para atraer a los clientes y, como resultado, existe una creciente demanda de desarrolladores en todas las industrias. Sin embargo, gran parte del tiempo de un desarrollador se dedica a trabajos no relacionados con el código, como el aprovisionamiento y la administración de servidores, la configuración del alojamiento, la administración de datos y la seguridad.

Afortunadamente, existen plataformas como Heroku que brindan la forma más rápida para que una empresa cree aplicaciones internas y orientadas al cliente. Entonces… ¿qué es Heroku? Heroku es una plataforma de aplicaciones basada en la nube que permite a las empresas crear, entregar, monitorear y escalar aplicaciones.

En esta publicación de blog, compartiremos cinco cosas sorprendentes que los desarrolladores pueden no saber sobre Heroku. En el camino, también discutiremos cómo Heroku brinda una excelente experiencia para desarrolladores y por qué es una plataforma como servicio (PaaS) ideal para desarrolladores de aplicaciones.

1) Ponga en marcha su aplicación en la nube en un instante

Crear una aplicación en Heroku es extremadamente rápido y fácil. Todo lo que necesita hacer es darle un nombre (único a nivel mundial) y elegir una región. ¡En serio, eso es todo!

Una vez que haga clic en Crear aplicación , tendrá una aplicación en la nube casi al instante. Es una de las soluciones PaaS más rápidas, lo que permite a los desarrolladores crear e implementar aplicaciones rápidamente.

Con Heroku, los desarrolladores pueden concentrarse en crear excelentes aplicaciones en lugar de preocuparse por configurar servidores o infraestructura. El proceso de implementación, configuración, escalado, ajuste y administración de aplicaciones se hace lo más simple y directo posible. También hay un nivel Gratis y Aficionado , que brinda a los desarrolladores una forma gratuita o de bajo costo de experimentar y comenzar, al tiempo que tienen la opción de escalar fácilmente a niveles de producción para uso empresarial.

Además, si tiene un repositorio público en GitHub, puede permitir fácilmente que otros desarrolladores implementen rápidamente su código en su aplicación Heroku con el aprovisionamiento con un solo clic mediante los botones de Heroku . Esto permite una configuración e implementación superrápidas de componentes, bibliotecas y aplicaciones de patrones de terceros. Por ejemplo, esta plantilla de GitHub de Introducción a Python de muestra le permite implementar rápidamente una aplicación de Python de muestra con Django, todo con solo hacer clic en un botón.

Ver la implementación en Heroku botón con un círculo rojo en la captura de pantalla a continuación.

2) Implementar automáticamente en una gran variedad de idiomas

Por lo general, los desarrolladores tienen que instalar diferentes software y componentes para que su aplicación funcione. Pero los desarrolladores que implementan en Heroku pueden desarrollar fácilmente su aplicación usando cualquiera de los ocho lenguajes admitidos oficialmente, a saber, Node.js , Ruby , Python , Java , PHP , Go , Scala y Clojure , sin tener que preocuparse por instalar o configurar la pila. .

¡Heroku hace todo esto mágicamente en nombre del desarrollador! Una vez que se implementa el código, Heroku detecta automáticamente el código utilizado en su aplicación y, posteriormente, utiliza el paquete de compilación adecuado. Tomemos, por ejemplo, Django es un marco de aplicación web de Python ampliamente utilizado por los desarrolladores en la actualidad, y a menudo se usa junto con SQLite como motor de base de datos. Como puede ver aquí, Heroku detecta automáticamente que la aplicación está ejecutando Python y la plataforma instala automáticamente todos los paquetes y dependencias apropiados.

Aquí hay otro ejemplo. Si es un desarrollador que prefiere alojar aplicaciones web dinámicas en PHP, es posible que esté familiarizado con la popular pila LAMP, que generalmente se instala y configura, e incluye un grupo de software de código abierto, como el sistema operativo Linux. sistema, servidor web Apache, base de datos MySQL para procesar PHP (por lo tanto, "LAMP").


Y como puede ver aquí, una vez que Heroku detecta el paquete de compilación que necesita, también instala automáticamente los paquetes de plataforma requeridos, como apache, php, composer, nginx, etc.

Si los desarrolladores quieren usar un lenguaje o marco diferente de los ocho admitidos oficialmente, pueden encontrar un paquete de compilación de terceros para admitirlo . Heroku permite a los desarrolladores aprovechar fácilmente la fortaleza de cualquiera de sus idiomas preferidos para crear una combinación de aplicaciones en una variedad de idiomas, o elegir el idioma que mejor se adapte a su zona de confort o requisitos únicos.

Los desarrolladores pueden aprovechar fácilmente la fortaleza de cualquiera de sus idiomas preferidos para crear una combinación de aplicaciones en una variedad de idiomas, o elegir el idioma que mejor se adapte a su zona de confort o requisitos únicos.

Con eso, los desarrolladores pueden concentrarse solo en escribir código y, cuando se implementa en Heroku, la plataforma puede detectar los detalles de la aplicación y la descripción de la dependencia. El código fuente de su aplicación, junto con el archivo de dependencia, brinda suficiente información para que la Plataforma Heroku construya su aplicación, lo que le permite producir algo que se puede ejecutar muy rápido.

3) Agregue fácilmente componentes a su aplicación

Agregar nuevas funciones y componentes a una aplicación puede llevar mucho tiempo y ser complejo. Los complementos de Heroku son componentes que amplían una aplicación con servicios adicionales, como almacenamiento de datos, supervisión, análisis, procesamiento de datos y más. Los complementos de Heroku son completamente mantenidos por un proveedor externo o por Heroku. Permiten a los desarrolladores agregar rápida y fácilmente nuevas funciones y componentes a su aplicación, para que puedan concentrarse en su propio código y lógica de aplicación sin la complejidad adicional de mantener los servicios de soporte a plena capacidad de producción.

Por ejemplo, en este caso, los desarrolladores pueden agregar fácilmente una base de datos MySQL a su aplicación simplemente buscándola en la pestaña Recursos en su Tablero de Heroku. ¡Imagínese lo fácil que es activar una aplicación y experimentar con diferentes servicios adicionales para probar nuevas ideas!

4) Sincronice a la perfección los datos de Salesforce y Heroku

Con las aplicaciones modernas, hay muchos casos en los que sería extremadamente útil utilizar los datos de Salesforce dentro de la experiencia de la aplicación. Esto se puede lograr muy fácilmente usando uno de los increíbles complementos de Heroku: Heroku Connect. Este complemento permite a los desarrolladores configurar fácilmente una sincronización de puente de datos bidireccional entre Heroku Postgres de la aplicación base de datos (que también se puede aprovisionar fácilmente como complemento de Heroku) y objetos de Salesforce. Como puede ver en este ejemplo, los desarrolladores pueden decidir fácilmente qué campos de objetos en Salesforce asignar a la base de datos de Postgres. Lo mejor de Heroku Connect es que los datos sincronizados no afectan los límites de la API de Salesforce porque Heroku es parte de la Plataforma de Salesforce.


Con los cambios de datos sincronizados bidireccionalmente entre Salesforce y Postgres, los conectores de datos de transmisión de Heroku también son otra gran herramienta que permite a los desarrolladores aprovechar Heroku para aumentar el valor de los datos a través de una arquitectura basada en eventos. Los conectores de transmisión de datos permiten que los cambios de datos en Heroku Postgres se transmitan fácilmente a otras tiendas y aplicaciones dentro e incluso fuera de Salesforce para la integración con otras fuentes de datos, como un lago de datos de Snowflake o una cola de AWS Kinesis.

Estos son solo algunos casos de uso en los que los desarrolladores están creando valor comercial con Heroku Connect y Heroku Streaming Data Connectors:

  1. Combine datos de varias organizaciones de Salesforce para habilitar ventas cruzadas/aumentadas entre organizaciones para mejorar las eficiencias internas y vender más. Heroku Connect sincroniza los datos de Oportunidades de varias organizaciones de Salesforce con una base de datos Postgres de Heroku y los replica en la organización principal o "principal", que sirve como única fuente de información para todas las oportunidades. Esto facilita el uso de funciones, como Salesforce Connect, para virtualizar los datos de oportunidades en las organizaciones secundarias o ejecutar análisis desde una organización.
  2. Aproveche millones de interacciones de clientes para impulsar la personalización en aplicaciones, conocimientos y experiencias a partir de registros de aplicaciones, secuencias de clics o cualquier fuente de eventos para ofrecer experiencias omnicanal y vender más. Los conectores de datos de transmisión y Apache Kafka para Heroku facilitan más que nunca la combinación de datos de eventos de transmisión en un solo bus de eventos y convierten los datos transaccionales en un flujo de eventos.
  3. Cree experiencias de consumo, aplicaciones, notificaciones y conocimientos receptivos en tiempo real con transmisión de datos y una arquitectura basada en eventos unificada con Customer 360 para aumentar la adquisición, el compromiso, la adopción y la retención de clientes. Aloje datos de transmisión en Apache Kafka para Heroku y use conectores de datos de transmisión para convertir datos transaccionales en una transmisión de eventos e integrar estas experiencias con su instancia de Customer 360.
  4. Conecte las aplicaciones heredadas a las experiencias de aplicaciones modernas sin tener que reescribirlas para aumentar la agilidad de TI. Utilice conectores de datos de transmisión para convertir los datos transaccionales de Heroku Postgres en un flujo de eventos e integrarlos con Customer 360.
  5. Impulse la hiperautomatización con activadores de transmisión en todo el ecosistema de aplicaciones . Imagine que su producto activa un evento en el bus de eventos (Apache Kafka en Heroku) cada vez que se registra un nuevo usuario. Este evento activaría la creación de cuentas en Salesforce, la facturación en CPQ, un recorrido de marketing en Marketing Cloud y procesos de incorporación en Service Cloud.

5) Facilite DevOps con Heroku Pipelines

DevOps es un aspecto importante del trabajo de un desarrollador porque es un enfoque de operaciones y desarrollo de software que permite un desarrollo más rápido de nuevos productos y un mantenimiento más sencillo de las implementaciones existentes. Heroku hace que DevOps sea extremadamente fácil con Heroku Pipelines .

Una canalización es un grupo de aplicaciones de Heroku que comparten la misma base de código. Cada aplicación en la canalización representa una de las siguientes etapas en un flujo de trabajo de entrega continua : desarrollo, revisión, puesta en escena y producción.

La página de descripción general de una canalización ilustra las etapas de este flujo y proporciona información sobre el estado de cada etapa. Con un vistazo, los desarrolladores pueden ver en este tablero que el entorno de prueba se ejecuta de manera diferente a la producción. Por ejemplo, los hash 95961120 y 749f1b2c son diferentes. La página de descripción general también permite a los desarrolladores promocionar fácilmente a producción con solo un clic, ¡sin causar ningún tiempo de inactividad en la aplicación!


Además, si los desarrolladores colaboran usando GitHub, pueden habilitar las aplicaciones de revisión de Heroku para mejorar aún más la experiencia de DevOps:

  1. Cuando un desarrollador crea una solicitud de extracción para realizar un cambio en el código base en GitHub, Heroku crea automáticamente una aplicación de revisión para la solicitud de extracción, lo que permite a los desarrolladores probar el cambio.
  2. Cuando se determina que el cambio está listo, se fusiona con la rama maestra de la base de código y los desarrolladores pueden optar por destruir automáticamente las aplicaciones de revisión obsoletas.
  3. La rama maestra se implementa automáticamente en la aplicación de prueba de la canalización para realizar más pruebas.
  4. Cuando se certifica que el cambio en el entorno de prueba está listo, un desarrollador promueve la aplicación de prueba a producción y la pone a disposición de los usuarios previstos.

¿Qué más puedo hacer con Heroku como desarrollador de Salesforce?

Si bien estas son mis cinco funciones favoritas de Heroku, hay muchas más cosas emocionantes que Heroku tiene para ofrecer, ¡especialmente para los desarrolladores de Salesforce! Con las funciones de Salesforce (lanzadas recientemente), los desarrolladores ahora tienen la opción de ejecutar código y ampliar la plataforma Customer 360 con una lógica empresarial escalable elásticamente personalizada. Con Salesforce Functions, los desarrolladores también tienen la opción de aprovechar fácilmente los datos de Heroku en el conjunto de servicios de datos de Heroku , que incluyen las ofertas de Postgres, Redis y Kafka de Heroku.

Los desarrolladores de Salesforce pueden crear una función para iterar fácilmente a través de los datos en Heroku Postgres, incluidos los datos administrados por Heroku Connect. Otros casos de uso incluyen la producción de mensajes en un flujo de Apache Kafka en Heroku, lo que facilita la implementación de Apache Kafka en Heroku como una capa de orquestación para microservicios en la plataforma Heroku, o compartir una cola de trabajo o caché basado en Heroku Data para Redis .

Conclusión

Heroku fue diseñado para desarrolladores, por desarrolladores. Esto significa que su interfaz de usuario y su experiencia son simples y fáciles de usar, tal como lo esperaría un desarrollador. Esperamos que al utilizar algunas de estas características menos conocidas dentro de la Plataforma Heroku, los desarrolladores puedan aumentar su productividad y crear aplicaciones atractivas que satisfagan las demandas actuales.

Sobre el Autor

Terence Lim es un evangelista de desarrolladores de Salesforce con un enfoque en el desarrollo de aplicaciones móviles y la plataforma de Salesforce. Conocido por su naturaleza altamente enérgica, le encanta trabajar con personas y nada lo emociona más que poder inspirar y empoderar a otros a través de la tecnología. Ha hablado frecuentemente en conferencias alrededor del mundo. Le encanta conocer gente nueva y aprender cosas nuevas, y tiene muchas historias increíbles de sus viajes para compartir. ¡A él también le encantaría escuchar tu historia! Echa un vistazo a sus proyectos de GitHub @terlim-sfdc.

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2022/07/5-amazing-features-that-developers-may-not-know-about-heroku.html

Categories
Developers Tutoriales de Salesforce

Cómo usar TypeScript con Salesforce – Parte 1 ☁️

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.

TypeScript (TS) ha ido aumentando en popularidad en los últimos años. ¿Sabía que puede utilizar TypeScript con Lightning Web Components (LWC) y que existen otros productos y funciones de Salesforce compatibles con TypeScript, como Salesforce Functions, Lightning Web Runtime y más?

En esta primera publicación de una serie de dos partes, cubriremos qué es TypeScript, cómo puede instalarlo y usarlo en sus proyectos, y los diferentes tipos de datos que puede crear con TypeScript. En la segunda publicación, cubriremos los diversos lugares donde puede usar TypeScript dentro del ecosistema de Salesforce.

¿Qué es TypeScript?

TypeScript es JavaScript fuertemente tipado (JS). Ofrece todas las características de JavaScript y una capa adicional en la parte superior: el sistema de tipos de TypeScript. TypeScript no puede ejecutarse por sí solo; en cambio, el código TypeScript cumple con JavaScript basado en estándares.

¿En qué se diferencia de JavaScript?

JavaScript es un lenguaje de escritura dinámica , lo que significa que debe ejecutarse para confirmar que la lógica empresarial funciona como se espera. Por ejemplo, debido a la coerción de tipo, el resultado puede ser diferente de lo que espera. TypeScript, por otro lado, ofrece funciones como escritura estática y un compilador que lo ayudan a detectar errores durante el tiempo de compilación, que de otro modo aparecerían durante el tiempo de ejecución. Esto podría incluir errores tipográficos, errores tipográficos, uso de métodos incorrectos, funciones no llamadas, errores lógicos básicos, fallas sin excepción, verificaciones nulas e indefinidas, etc. TypeScript también ofrece funciones adicionales, como genéricos, interfaces y enumeraciones, que fomentan el diseño adecuado y guían a los desarrolladores durante el desarrollo y la refactorización del código. Cubriremos algunas de estas características más adelante en esta publicación de blog.

Instalar y compilar TypeScript

El compilador de TypeScript está disponible como un paquete npm que se puede instalar en cualquiera de sus proyectos. Una vez instalado, puede comenzar a crear archivos TypeScript ( *.ts ). El compilador compila los archivos .ts en archivos .js estándar. Se puede configurar para apuntar a una versión específica de ECMAScript (ES5, ES6, etc.). Deberá agregar un nuevo script a la sección de scripts del archivo package.json para usar el compilador.

 "guiones": { ... "ts-construir": "tsc" ...
}

El tsconfig.jso n o jsconfig.json se puede usar para controlar el comportamiento de TypeScript y el compilador en su proyecto. Consulte la documentación para conocer las diversas opciones de configuración que puede usar.

Durante el proceso de compilación, la mayor parte de la información de tipo se elimina, con algunas excepciones que analizaremos más adelante en esta publicación de blog. A continuación se muestra un ejemplo que muestra el código JavaScript compilado para un código TypeScript determinado.

Sin embargo, es importante tener en cuenta que el compilador de TypeScript no modifica el comportamiento o la lógica del tiempo de ejecución de su código JavaScript.

Tome este código TypeScript por ejemplo. Contiene una función printValue que registra un valor que se le envía. El tipo del parámetro val se establece en string . Este fragmento de código arroja un error de tiempo de compilación en la línea 6 porque estamos tratando de asignar un valor booleano a una cadena.

Sin embargo, una vez compilado, así es como se ve el archivo JavaScript resultante. No se genera ningún código adicional que imponga la asignación del parámetro val solo a valores de string . Por lo tanto, la línea 6 se ejecutaría sin errores durante el tiempo de ejecución.

Quizás se pregunte: ¿cómo se generó el archivo JavaScript si hubo un error en tiempo de compilación? Este es el comportamiento predeterminado del compilador, que genera los archivos JavaScript aunque haya errores de tipo. Puede configurar el indicador --noEmitOnError (consulte los documentos ) al ejecutar el compilador para evitar que esto suceda.

Si está utilizando un editor con complementos de TypeScript como VS Code, no siempre necesita compilar sus archivos para encontrar errores de tipo. VS Code viene con compatibilidad integrada con TypeScript a través del servicio de lenguaje TypeScript , que muestra sugerencias y resalta los errores a medida que termina de escribir. Esto es de gran ayuda cuando se trata de adoptar gradualmente TypeScript en sus proyectos.

Diferentes niveles de rigor

Los proyectos de JavaScript existentes se pueden migrar de forma incremental a TypeScript, es decir, no necesita convertir todos sus archivos *.js a *.ts a la vez. Pero aún puede aprovechar el sistema de tipos de TypeScript en sus proyectos de JavaScript existentes. A continuación se muestran las cinco etapas en las que puede adoptar TypeScript, y cada etapa hace que la verificación de tipo sea más estricta.

En las primeras tres etapas, trabajará en los propios archivos de JavaScript, pero aún puede usar el compilador de TypeScript o el servicio de lenguaje TypeScript de VS Code para encontrar errores. Sin embargo, la verificación de tipos funciona de manera un poco diferente en los archivos JS. Consulta esta guía para saber más.

Para habilitar la verificación de tipos en algunos archivos JavaScript, agregue //@ts-check al principio de los archivos que desea verificar. Si desea verificar todos los archivos del proyecto, puede agregar las propiedades checkJs y allowJs al archivo tsconfig.json o pasarlas como indicadores al compilador.

En las dos primeras etapas, TypeScript intenta inferir tipos de datos en función de su uso y puntos de error. Si usa VS Code, puede ver los errores en la pestaña Problemas incluso sin ejecutar el compilador.

En la siguiente etapa, puede aplicar tipos explícitamente especificando los tipos de datos de sus variables a través de construcciones JSDoc .

 // The below JS Docs construct indicates that the variable is of type number. /** @type {number} */ sea a = 2; a = 'valor'; // Error: la cadena de tipo no se puede asignar a un número

Una vez que se sienta cómodo, puede comenzar a crear archivos TypeScript y aprovechar al máximo el sistema de tipos.

Trabajando con TypeScript

Si bien la documentación oficial de TypeScript proporciona una explicación bastante detallada, aquí hay un breve resumen de algunos conceptos importantes.

Tipos e interfaces

Puede asignar cualquiera de los tipos de datos estándar a variables, valores de entrada y salida para funciones, etc. También puede usar el tipo especial any siempre que no desee que un valor en particular cause errores de verificación de tipo.

 // Declaring a variable of type "number". let count: number; // Una función que toma un parámetro "recordId" de tipo "cadena"
// y devuelve un valor de tipo "booleano" función isValidRecordId(recordId: cadena): booleano {
devolver verdadero; }

Incluso puede combinar dos o más tipos y crear un tipo de unión . Aquí hay un ejemplo simple:

 // Una función que devuelve un valor de tipo "cadena" o "número"
función getRecordId(nombre: cadena): cadena | número { devuelve 'someid';
}

Puede crear un alias de tipo para reutilizar una definición de tipo en varios lugares.

 // Un alias de tipo "ID" para almacenar un tipo de unión
ID de tipo = cadena | número; // Declarar una variable de tipo alias "ID"
dejar someId: ID; // Una función que devuelve un valor de tipo alias "ID"
función getRecordId(nombre: cadena): ID { devuelve 'someide';
}

También puede definir tipos para objetos no primitivos como. Hay varias formas de definir los tipos de objetos (es decir, la forma de un objeto). Primero, puede definirlos en línea.

 // La estructura del parámetro "acc" se define en línea
función getAccountName(acc: {id: string, nombre: string, createdDate: Date}): string{ volver acc.nombre;
}

En segundo lugar, puede crear un alias de tipo.

 // Un alias de tipo llamado Cuenta que almacena la forma del objeto
escriba Cuenta = { identificación: cadena nombre: cadena Fecha de creación: Fecha
} función getAccountName(acc: Cuenta): cadena { ...
}

Finalmente, puedes crear una interfaz . La única diferencia entre un alias de tipo y una interfaz es que puede agregar nuevas propiedades a una interfaz pero no a un alias de tipo.

 // Una interfaz llamada Cuenta que almacena la forma del objeto
Cuenta de interfaz { identificación: cadena nombre: cadena Fecha de creación: Fecha
} // Puedes agregar nuevas propiedades a una interfaz
Cuenta de interfaz { lastModifiedDate: Fecha
} función getAccountName(acc: Cuenta): cadena { ...
}

Genéricos

Es común que cree funciones o clases que pueden trabajar con diferentes tipos de datos, pero usar any tipo para esos no garantizará la seguridad de tipos. Ahí es donde los genéricos entran en escena. Generics le permite pasar tipos como argumentos al llamar a una función o inicializar una clase, junto con sus valores.

En el siguiente ejemplo, creamos una query de función que toma una consulta SOQL como parámetro y devuelve los resultados. El tipo de los resultados obviamente se basa en el objeto que estamos consultando. Entonces, así es como se pueden usar los genéricos para asegurarse de que la función de query sea segura.

 // Primero definimos los diferentes tipos que admite la función de consulta
escriba Cuenta { identificación: cadena Nombre: cadena
} escriba Contacto { identificación: cadena Nombre: cadena Apellido: cadena
} // A continuación, definimos la función de consulta.
// Usamos el "Tipo", un tipo especial de variable que funciona con tipos en lugar de valores
// El valor de esta variable se pasa cuando se invoca la función
función consulta<Tipo>(soqlQuery: cadena): Tipo[] { ... devolver resultados;
} // Finalmente, llamamos a la función de consulta
// Pasamos la información de Tipo usando llaves angulares < >
// los resultados de la cuenta son del tipo "Cuenta"
let accountResults = consulta<Cuenta>("seleccione Id, Nombre de Cuenta"); // contactResults es del tipo "Contacto"
let contactResults = query<Contacto>("seleccione Id, FirstName, LastName from Contact");

Puede ver los genéricos en acción cuando está creando con los complementos de la CLI de Salesforce; Cubriremos esto en la Parte 2 de esta serie.

Enumeraciones

Enums es una de las características que ofrece TypeScript que no es solo para la seguridad de tipos. De forma similar a Apex, las enumeraciones permiten que un desarrollador defina un conjunto de constantes con nombre. Puede inicializar las constantes a un valor particular, o por defecto a números de incremento automático. A diferencia de otras definiciones de tipo, las enumeraciones no se eliminan del código JavaScript final durante la compilación y actúan como objetos en tiempo de ejecución. las enumeraciones const , por otro lado, se eliminan por completo durante la compilación.

 // Definición de una enumeración
// Dado que todas las constantes no están inicializadas, por defecto se incrementan automáticamente
Estado de la enumeración{ Éxito, Falla
} consola.log(Estado.Éxito); // Imprime 0
consola.log(Estado.Falla); // Imprime 1 // Definiendo otro Enum, donde inicializamos los valores
nivel de acceso enum{ Sololectura = "Sololectura", LeerEscritura = "LeerEscritura",
} consola.log(NivelAcceso.SoloLectura); // Imprime "Solo lectura"

Módulos

El concepto de módulos es el mismo tanto en JavaScript como en TypeScript. En TypeScript, también puede exportar e importar declaraciones de tipo como alias e interfaces.

 // archivo compartido.ts // Una declaración de tipo marcada con "exportar" para que pueda ser importada en otro archivo
interfaz de exportación Contacto { identificación: cadena, ¿Nombre?: cadena, Apellido: cadena
} ... // Una función marcada con "exportar" para que pueda ser importada en otro archivo
función de exportación sayHello(obj: Contacto | Cliente potencial){ return `Hola ${obj.Nombre} ${obj.Apellido}`;
}
 // archivo demo.ts // Importar la función exportada y la declaración de tipo (interfaz)
importar {Contacto, saludar} desde './shared'; // Usando la interfaz importada
let con: Contacto = {id: '1', Nombre: 'Juan', Apellido: 'Doe'}; // Usando la función importada
console.log(sayHello(con));

TypeScript también le permite declarar módulos ambientales para especificar las formas de las bibliotecas no escritas en TypeScript. Por ejemplo, aquí hay una biblioteca ( sf-libs ) escrita en JavaScript, que incluye algunas funciones.

 // sf-libs.js
función convertir a 15 dígitos (id) { volver id.substr(0,15);
} ...
exportar {convertTo15Digit};

Cuando importe esta biblioteca en un archivo TypeScript, obtendrá un error de tipo. Esto se debe a que no hay información de tipo disponible para el módulo y sus funciones.

 importar { convertTo15Digit, ... } desde "sf-libs";
// Error: No se puede encontrar el módulo "sf-libs" o sus declaraciones de tipo correspondientes.

Aquí hay un módulo ambiental TypeScript para el módulo JavaScript sf-libs . Es importante recordar que los módulos ambientales solo definen la forma del módulo y no contienen detalles de implementación.

 // sf-libs.d.ts
declarar módulo "sf-libs" { función convertTo15Digit(id: cadena): cadena; ...
}

Consulte la declaración del módulo ambiental para el módulo principal de Lightning Web Components .

Resumen

Esta publicación fue solo un vistazo de cómo puede usar y adoptar gradualmente TypeScript en sus proyectos. Puede profundizar en TypeScript utilizando los siguientes recursos:

En la segunda publicación de esta serie, repasaremos los diversos lugares donde puede usar TypeScript dentro del ecosistema de Salesforce.

Sobre el Autor

Aditya Naag Topalli es una defensora de desarrolladores líder certificada 14 veces en Salesforce. Capacita e inspira a los desarrolladores dentro y fuera del ecosistema de Salesforce a través de sus videos, seminarios web, publicaciones de blog y contribuciones de código abierto, y también habla con frecuencia en conferencias y eventos en todo el mundo. Síguelo en Twitter o LinkedIn y mira sus contribuciones en GitHub .

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2022/03/how-to-use-typescript-with-salesforce-part-1.html

Categories
Developers

Monitorear el uso de publicación y entrega de eventos de plataforma

Última actualización el 21 de marzo de 2022 por Rakesh Gupta

Gran idea o pregunta duradera:

  • ¿Cómo monitorear el consumo de Eventos de Plataforma?

Objetivos:

Después de leer este blog, podrá:

  • Comprender los eventos de la plataforma
  • Diferentes aplicaciones para monitorear los usos de eventos de la plataforma
  • Usos de eventos de la plataforma de consulta para un período de tiempo determinado

Jestilla Zetkin trabaja como administradora de sistemas en Gurukul On Cloud (GoC) . Ha recibido un requerimiento de su gerente de proyecto para proporcionar el consumo diario de los eventos de la plataforma publicados y entregados durante los últimos 90 días.

¿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 disparar y olvidar . 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 usando Apex, Flow o en un sistema externo usando CometD. Si desea obtener más información sobre el evento de plataforma, consulte el módulo de Trailhead .

Comprender el objeto PlatformEventUsageMetric

Hagamos una pausa aquí, familiarícese con el objeto PlatformEventUsageMetric en Salesforce. Contiene datos de uso para la publicación de eventos y la entrega del cliente CometD.

Los datos de uso están disponibles para las últimas 24 horas, hasta la última hora, y para el historial de uso diario. PlatformEventUsageMetric contiene métricas de uso separadas para eventos de plataforma y eventos de captura de datos modificados.

Nombre del campo
Detalles
Nombre El nombre de la métrica para la que se va a obtener el uso.

  • CHANGE_EVENTS_DELIVERED : – Número de eventos de captura de datos modificados entregados a los clientes de CometD
  • CHANGE_EVENTS_PUBLISHED : – Número de eventos de captura de datos modificados publicados
  • PLATFORM_EVENTS_DELIVERED : – Número de eventos de la plataforma entregados a los clientes de CometD
  • PLATFORM_EVENTS_PUBLISHED : – Número de eventos de plataforma publicados
Fecha de inicio La fecha y hora de inicio en UTC utilizadas para consultar las métricas de uso. La granularidad de la fecha es por hora.
Fecha final La fecha y hora de finalización en UTC utilizadas para consultar las métricas de uso. La granularidad de la fecha es por hora.
Valor El valor de uso para la métrica y el intervalo de fechas especificados.

Usaremos PlatformEventUsageMetric para obtener visibilidad sobre el uso de nuestros eventos y las tendencias de uso. Los datos de uso nos dan una idea de qué tan cerca estamos de nuestras asignaciones y cuándo se requieren más asignaciones.

Ruta a AppExchange

A menudo nos encontramos con el requisito de averiguar el consumo diario o mensual de eventos de la plataforma con análisis. Hay varias aplicaciones en AppExchange para lograrlo. Algunos de ellos se enumeran a continuación:

  1. Monitor de uso de eventos de la plataforma: comprenda el uso de eventos de la plataforma en su organización.
  2. Monitor de transmisión: controle los eventos de transmisión (PushTopic, genéricos, eventos de plataforma estándar/personalizados, CDC, etc.).

Práctica guiada (nosotros hacemos):

Para encontrar el consumo de Platform Events publicado y entregado durante los últimos 90 días, usaremos Developer Console para consultar el objeto PlatformEventUsageMetric.

Hoy es 20 de marzo de 2022, lo que significa que 90 días antes de hoy sería 20 de diciembre de 2021 .

  1. Haga clic en Configuración | Consola de desarrollador
  2. En el Editor de consultas, ejecute la siguiente consulta SOQL
    1. SELECCIONE Nombre, Fecha de inicio, Fecha de finalización, Valor
      DESDE PlatformEventUsageMetric

      DONDE Nombre EN ('PLATFORM_EVENTS_DELIVERED', 'PLATFORM_EVENTS_PUBLISHED')
      Y Fecha de inicio>=2021-12-20T00:00:00.000Z ORDENAR POR Fecha de inicio
  3. Si desea descargar los datos para compartirlos con el administrador del proyecto o el equipo ejecutivo, considere usar Visual Studio Code o Workbench .

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 realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2022/03/20/monitor-platform-event-publishing-and-delivery-usage-2/

Categories
Developers

Introducción a Salesforce Flow – Parte 81 (¿Alguna vez se preguntó qué es un flujo activado por registro por objeto – Por tipo?))

Esta es una continuación de mi último artículo Salesforce Flow Design Patterns: from Fundamentals to Mastery . En mi artículo anterior, hablé de varias prácticas recomendadas y consideraciones de diseño cuando se trata de crear un flujo eficiente. ¡Este artículo va un paso más allá y explica cómo un usuario puede crear y administrar un flujo 'Por objeto – Por tipo de registro activado'!

Un patrón de diseño de un flujo activado por registro por objeto simplemente significa tener un flujo por objeto para manejar toda la lógica empresarial en un objeto determinado.

Las ventajas de un flujo por objeto por tipo incluyen:

  • Orden de ejecución de control : cuando tiene varios flujos activados por registros en el mismo objeto, Salesforce no garantiza el orden de ejecución. El uso de un flujo activado por registro por objeto le dará esa flexibilidad.
  • Reutilización : poner lógica en SubFlow le ayudará a mejorar la reutilización. Puede llamar a un subflujo incluso desde un código Apex.
  • Reducción de la complejidad : es menos probable que alcance los límites, como la cantidad de consultas SOQL. Adherirse a la regla de un flujo por objeto también le permitirá evitar generar bucles infinitos.

La idea de Crear un flujo por objeto: por tipo proviene de las mejores prácticas y el patrón de diseño de Apex Trigger. La creación de un flujo por objeto permitirá al usuario lograr flexibilidad, crear flujos reutilizables y administrar todos los flujos para un objeto determinado en un solo lugar.

Desafortunadamente, a partir del lanzamiento de Winter'22 , no es posible crear un flujo de activación de registro con todos los eventos de activación . El flujo activado por registro solo admite los siguientes eventos:

  • Antes de insertar
  • Después del recuadro
  • Antes de la actualización
  • Después de la actualización
  • Antes de borrar

Si es así, utilicemos el marco de Un flujo activado por registro por objeto para crear el siguiente flujo activado por registro en cada objeto en lugar de crear varios flujos activados por registro después de guardar o antes de guardar en un objeto específico.

  1. Registros de activación: objectname antes de guardar
  2. Registros de activación: objectname antes de eliminar
  3. Registros de activación: objectname después de guardar

Hemos estado discutiendo sobre las mejores prácticas de Salesforce y los patrones de diseño en Salesforce Flow Design Patterns, desde los fundamentos hasta el dominio , incluso en la publicación actual del blog. Ahora es el momento de poner todo en un modelo funcional.

A continuación, se explica cómo aplicar el marco de trabajo Un flujo activado por registro por objeto en su organización:

  1. Cree un SubFlow: Account Handler , al que llamaremos desde el flujo Record-Triggered cuando sea necesario.
    1. Utilice las variables de registro para pasar los detalles de los registros de cuentas actuales y anteriores:
      1. varR_NewAccount
      2. varR_OldAccount
    2. Utilice variables booleanas para aislar la lógica para crear o actualizar el evento.
      1. varB_IsAfterInsert
      2. varB_IsAfterUpdate
      3. varB_IsBeforeDelete
  2. Cree el siguiente registro activado en un objeto determinado:
    1. Activador de registro: cuenta antes de guardar
      1. No es compatible con subflujo
    2. Activador de registro: cuenta antes de eliminar
      1. Subflujo de controlador de cuenta de llamada
    3. Activador de registro: cuenta después de guardar
      1. Subflujo de controlador de cuenta de llamada
  3. Luego use más SubFlow para manejar la lógica empresarial y llámelo desde donde sea necesario
    1. Subflujo: Crear tarea
    2. Subflujo: Creación de cuenta posterior

Subflujo: Administrador de cuentas – Flujo iniciado automáticamente

El primer paso es crear un subflujo que no sea más que un flujo iniciado automáticamente con las siguientes variables. Estas variables se utilizarán para almacenar valores actuales y anteriores del registro de una cuenta. También nos ayudará a identificar los nodos de decisión correctos:

  1. varR_NewAccount – Variable de registro
  2. varR_OldAccount – Variable de registro
  3. varB_IsAfterInsert – Variable booleana
  4. varB_IsAfterUpdate – Variable booleana
  5. varB_IsBeforeDelete – Variable booleana

varR_NewAccount

Una variable de registro se utiliza para almacenar los valores actuales del registro de una cuenta.

varR_OldAccount

Una variable de registro se utiliza para almacenar valores anteriores del registro de una cuenta.

varB_IsAfterInsert

La variable booleana se utiliza para almacenar el contexto de flujo. Pasaremos el valor a esta variable de Record-Trigger: Account After Save .

varB_IsAfterUpdate

La variable booleana se utiliza para almacenar el contexto de flujo. Pasaremos el valor a esta variable de Record-Trigger: Account After Save .

varB_BeforeDelete

La variable booleana se utiliza para almacenar el contexto de flujo. Pasaremos el valor a esta variable de Record-Trigger: Account Before Delete .

Nodo de decisión

Ahora use el elemento de decisión para identificar la ruta correcta cuando un subflujo es llamado por un flujo activado por registro:

Después de insertar nodo

Después de actualizar el nodo : –


Antes de eliminar nodo
: –

SubFlow: Administrador de cuentas

Al final, un subflujo se verá como la siguiente captura de pantalla:

Activador de registro: cuenta después de guardar

Ahora crearemos After Save Record-Triggered Flow y llamaremos Subflow: Account Handler desde allí. Asegúrese de pasar el valor correcto a las variables.

Activador de registro: cuenta antes de eliminar

Ahora crearemos Before Delete Record-Triggered Flow y llamaremos Subflow: Account Handler desde él. Asegúrese de pasar el valor correcto a las variables.

Activador de registro: cuenta antes de guardar

A partir del lanzamiento de Winter'22 , Salesforce Before-Save Flow no admitía subflujos. Siéntase libre de escribir toda la lógica en el mismo flujo. Consulte este artículo para saber cuándo usar el flujo activado por registro antes de guardar o después de guardar.

¿Que sigue?

¡Aprender a través de un caso de uso, por supuesto!

Requisito comercial : – Elise Shelley , desarrolladora líder de aplicaciones en Universal Containers (UC), recibe el requisito de crear una tarea cada vez que se crea una nueva cuenta.

Como sabe, la creación de una tarea es muy común después de que se gana o se pierde un trato. Entonces, según lo que aprendimos anteriormente, creemos un SubFlow para crear una Tarea:

Subflujo: Crear tarea : –

  1. Crear una tarea de variable de registro para almacenar los valores de la tarea
  2. Luego use el elemento Crear registros para crear una nueva tarea.

Variable de tarea de mapa : –

El siguiente paso es abrir Subflujo: Administrador de cuentas . En el nodo Después de insertar, agregue un elemento de asignación para asignar la variable de registro de tarea.

Campos de tareas del mapa : –

Ahora agregue SubFlow para crear una tarea y pase la variable {! VarRTask_Insert}.

Al final, tu Flow debería verse como la siguiente captura de pantalla:

En el futuro, forme el hábito de modificar el Administrador de cuentas cada vez que obtenga un nuevo requisito y no toque el flujo principal, es decir ( Activador de registro: Cuenta después de guardar y Activador de registro: Cuenta antes de eliminar ).

¿Tiene su propia salsa secreta Salesforce Flow? ¡Estupendo! ¡Compártelo!

Evaluación formativa:

¡Quiero saber de ti!

¿Ha realizado el examen de Diseñador de experiencia de usuario? ¿Te estás preparando para el examen ahora? ¡Comparte tus consejos en los comentarios!

Haz una publicación y etiquétame en Twitter @automationchamp usando #AutomationChampionFlow.

 Corrector de pruebas : - Munira Majmundar

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2021/12/08/one-flow-per-object-design-pattern/

Categories
Developers Tutoriales de Salesforce Uncategorized

Automatizaciones para cadencias de ventas en ventas de alta velocidad ☁️

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.

High Velocity Sales (HVS) es una solución de Sales Cloud para acelerar el proceso de ventas para los equipos de ventas internos. La configuración básica de HVS normalmente la realiza un administrador. Sin embargo, a menudo se necesita a los desarrolladores para implementar automatizaciones más avanzadas. HVS incluye varias funciones, como cadencias de ventas, puntuación de clientes potenciales de Einstein, integración de correo electrónico y marcador de ventas. En esta publicación de blog, cubriremos lo que los desarrolladores necesitan saber sobre las cadencias de ventas y también profundizaremos en cómo implementar automatizaciones comunes, con y sin código.

Antes de comenzar: si no conoce los conceptos básicos sobre HVS, mire esta demostración de 2 minutos .

Automatizar los flujos de trabajo de ventas internas con Sales Cadences

Una cadencia de ventas es una representación de un flujo de trabajo de ventas interno; guía a los representantes de ventas a través de los procesos de prospección y fomento de oportunidades de una venta. Los pasos para una cadencia de ventas se configuran con clics en Sales Cadence Builder. Por ejemplo, esta cadencia de ventas contiene una combinación de correos electrónicos y llamadas que un representante de ventas debe realizar para comunicarse con un posible cliente. Usaremos esta cadencia de ventas para los ejemplos de esta publicación de blog.

Los prospectos se pueden asignar a las cadencias de ventas. Esto se puede hacer manualmente o de forma automatizada, llamando a la acción invocable assignTargetToSalesCadence. Una vez hecho esto, el prospecto entra en la cadencia de ventas y los siguientes pasos a realizar se vuelven visibles para el representante de ventas apropiado.

Modelo de datos de cadencias de ventas

Bajo el capó, la definición de una cadencia de ventas se almacena como datos en un conjunto de nuevos sObjects:

  • ActionCadence : creado cuando usa la aplicación High Velocity Sales para crear una cadencia de ventas
  • ActionCadenceStep : representa un paso; si el paso es un paso de bifurcación, también se crean los registros ActionCadenceRul e y ActionCadenceRuleCondition
  • ActionCadenceRule : representa la lógica que utiliza un paso de rama para tomar decisiones en su cadencia de ventas
  • ActionCadenceRuleCondition : representa la lógica de un paso de bifurcación. Mientras que ActionCadenceRule representa la expresión lógica completa, ActionCadenceRuleCondition representa cada componente de la expresión. Entonces, si la expresión lógica es (A = 2) AND (B = 4), entonces las condiciones de la regla serían (A = 3), (B = 4) y la regla es la combinación de ellas con el operador AND.

Hay dos sObjects adicionales que realizan un seguimiento del paso de la cadencia de ventas en el que se encuentra un cliente potencial:

  • ActionCadenceTracker : creado cuando asigna un cliente potencial a una cadencia de ventas
  • ActionCadenceStepTracker : se crea cada vez que el cliente potencial pasa a un nuevo paso

Esos sObjects están disponibles a través de la API SOAP , lo que significa que también puede consultarlos. Por el momento, la create() no está disponible para los objetos de cadencia de ventas, sin embargo, esto está en la hoja de ruta del producto y será posible pronto. Esto significa que no puede crearlos mediante programación utilizando Apex o API. Solo puede crearlos desde Sales Cadence Builder.

Para comprender mejor el modelo de datos, echemos un vistazo a lo que sucede cuando agrega un cliente potencial a la cadencia de ventas por correo electrónico simple que vimos anteriormente.

Cuando se hace esto, se ActionCadenceStepTracker registros ActionCadenceTracker y ActionCadenceStepTracker. Luego podemos recuperar el ActionCadenceTracker creado ejecutando:

SELECT ActionCadence.Name, Target.Name, CurrentStep.StepTitle, LastCompletedStep.StepTitle, State, RelatedToId FROM ActionCadenceTracker

Esto es lo que obtendrás:

ActionCadence.Name Target.Name CurrentStep.StepTitle LastCompletedStep.Title Estado
Cadencia de correo electrónico simple Robert Janzen Correo electrónico de introducción Corriendo

Del mismo modo, podemos echar un vistazo al ActionCadenceStepTracker que se ha creado:

SELECT ActionCadenceName, Target.Name, StepTitle, DueDateTime, IsActionTaken, ActionTakenDatetime, State from ActionCadenceStepTracker

ActionCadenceName Target.Name StepTitle DueDateTime IsActionTaken IsActionTakenDateTime Estado
Cadencia de correo electrónico simple Robert Janzen Correo electrónico de introducción 2021-08-31T21: 59: 59.000 + 0000 FALSO Activo

Llamar a acciones invocables de HVS

Las automatizaciones básicas se pueden implementar mediante clics. HVS tiene la siguiente lista de acciones invocables que puede invocar desde lugares, como Flow, Process Builder, la API REST (como lo hacemos en este ejemplo ) o Apex (como lo hacemos aquí ), para implementar sus automatizaciones:

  • assignTargetToSalesCadence
  • removeTargetFromSalesCadence
  • pauseSalesCadenceTracker
  • resumeSalesCadenceTracker
  • changeSalesCadenceTargetAssignee
  • modifyCadenceTrackerAttributes
  • sendSalesCadenceEvent

Tenga en cuenta que la llamada a acciones invocables desde Apex se puede simplificar utilizando esta función de vista previa para desarrolladores en Winter '22 .

Eche un vistazo a una definición más detallada de las acciones disponibles en la guía de acciones invocables de HVS .

Trabajar con cambios en Action Cadence Tracker

Como se mencionó anteriormente, para automatizaciones más avanzadas, deberá escribir código. Un caso de uso de automatización común es poder reaccionar a los ActionCadenceTracker para ejecutar una acción en función de ciertas condiciones. Por ejemplo, cambie el estado del ActionCadenceTracker a "En funcionamiento" cuando se crea el ActionCadenceTracker por primera vez oa "" Cerrado "cuando se completa. Una limitación que existe a día de hoy es que no puede crear activadores para ActionCadenceTracker y ActionCadenceStepTracker . Sin embargo, la captura de datos modificados (CDC) se puede utilizar para crear automatización. Primero, deberá activar CDC para el objeto ActionCadenceTracker


Luego, puede escuchar eventos de CDC en Apex, creando un disparador de Apex Async . Por ejemplo, implementemos una automatización que cambia el estado de un cliente potencial a "En funcionamiento" cuando se agrega a una cadencia de ventas:

 desencadenar UpdateLeadWhenAddedToCadenceTrigger en ActionCadenceTrackerChangeEvent (después de insertar) { Establecer <Id> leadIds = new Establecer <Id> (); para (evento ActionCadenceTrackerChangeEvent: Trigger.New) { Encabezado EventBus.ChangeEventHeader = event.ChangeEventHeader; // Si se creó el rastreador (el cliente potencial se agregó a la cadencia de ventas), cambie el estado del cliente potencial a 'Trabajando' if (header.changeType == 'CREATE') { // Es posible que el Id no sea un leadId, pero en ese caso la consulta no lo devolverá leadIds.add (event.TargetId); } } Enumere <Lead> leadsToUpdate = [SELECCIONE Estado DESDE el Lead DONDE ID IN: leadIds]; para (LeadToUpdate: leadsToUpdate) { if (leadToUpdate.Status! = 'Trabajando') { leadToUpdate.Status = 'Trabajando'; } } actualizar leadsToUpdate;
}

Desafortunadamente, no es posible escuchar eventos de CDC en Flow o Process Builder. Tendrá que crear un disparador de Apex Async que transforme el evento de CDC en un evento de plataforma personalizado y luego escuchar el evento de plataforma personalizado.

Por ejemplo, digamos que el evento de plataforma personalizado se llama SalesCadenceTrackerEvent__e . Así es como implementaría el disparador CDC:

 / ** * Este disparador escucha eventos de cambio en ActionCadenceTracker y publica una plataforma * evento (SalesCadenceTrackerEvent__e) siempre que un rastreador se inicia por primera vez y cuando se * completado. A continuación, puede utilizar Flows o Process Builder para escuchar el evento de la plataforma. * /
desencadenar ActionCadenceTrackerChangeEventTrigger en ActionCadenceTrackerChangeEvent (después de insertar) { List <SalesCadenceTrackerEvent__e> cadenceEvents = new List <SalesCadenceTrackerEvent__e> (); List <String> trackerIdsToQuery = new List <String> (); para (evento ActionCadenceTrackerChangeEvent: Trigger.New) { Encabezado EventBus.ChangeEventHeader = event.ChangeEventHeader; List <String> recordIds = event.ChangeEventHeader.getRecordIds (); String trackerId = recordIds.get (0); // Si se completó Tracker, deberíamos enviar un evento if (header.changeType == 'ACTUALIZAR') { if (event.State == 'Complete') { // Los eventos de actualización no tienen toda la información que necesitamos, así que tenemos que consultar trackerIdsToQuery.add (trackerId); } } // Si se creó Tracker, deberíamos enviar un evento if (header.changeType == 'CREATE') { SalesCadenceTrackerEvent__e cadenceEvent = new SalesCadenceTrackerEvent__e (); cadenceEvent.TrackerId__c = trackerId; cadenceEvent.CadenceId__c = event.ActionCadenceId; cadenceEvent.State__c = event.State; // Esto será 'Corriendo' cadenceEvent.TargetId__c = event.TargetId; // Este será el cliente potencial, el contacto, la identificación de la cuenta de la persona cadenceEvents.add (cadenceEvent); } // Consulta la información de los rastreadores para ACTUALIZACIONES if (trackerIdsToQuery.size ()> 0) { Lista <ActionCadenceTracker> trackers = [SELECT ID, ActionCadenceId, State, TargetId de ActionCadenceTracker DONDE ID en: trackerIdsToQuery]; para (ActionCadenceTracker tracker: trackers) { SalesCadenceTrackerEvent__e cadenceEvent = new SalesCadenceTrackerEvent__e (); cadenceEvent.TrackerId__c = tracker.Id; cadenceEvent.CadenceId__c = tracker.ActionCadenceId; cadenceEvent.State__c = tracker.State; // Esto será 'Completo' cadenceEvent.TargetId__c = tracker.TargetId; // Este será el cliente potencial, el contacto, la identificación de la cuenta de la persona cadenceEvents.add (cadenceEvent); } } } // Publique los eventos para que Flow o Process Builder los escuchen EventBus.publish (cadenceEvents);
}

Tenga en cuenta que el código anterior solo lanza el evento cuando el rastreador de cadencia se crea por primera vez o cuando se completa (estado = Completo). Luego, esos SalesCadenceTrackerEvent__e recién creados se pueden detectar desde Flow o Process Builder para implementar las automatizaciones deseadas.

Aquí tienes un diagrama que representa uno de los posibles flujos en esta automatización:


Si desea obtener más información, consulte este documento que contiene instrucciones detalladas sobre cómo implementar esta automatización.

Trabajar con cambios de ActionCadenceStepTracker

Del mismo modo, si desea reaccionar a los ActionCadenceStepTracker , tendrá que usar CDC. Luego, puede escuchar los eventos de CDC desde un disparador e implementar las automatizaciones requeridas con código (como lo hacemos en este ejemplo ). Alternativamente , puede convertir el evento CDC en un evento de plataforma personalizado, al igual que hicimos con Action Cadence Tracker. A quí tiene el código para hacerlo:

 / ** * Este disparador escucha eventos de cambio en ActionCadenceStepTracker y publica una plataforma * evento (SalesCadenceStepTrackerEvent__e) siempre que un rastreador de pasos se inicia por primera vez y cuando se * completado. A continuación, puede utilizar Flows o Process Builder para escuchar el evento de la plataforma. * / desencadenar ActionCadenceStepTrackerChangeEventTrigger en ActionCadenceStepTrackerChangeEvent (después de insertar) { List <SalesCadenceStepTrackerEvent__e> cadenceEvents = new List <SalesCadenceStepTrackerEvent__e> (); List <String> stepTrackerIdsToQuery = new List <String> (); para (evento ActionCadenceStepTrackerChangeEvent: Trigger.New) { Encabezado EventBus.ChangeEventHeader = event.ChangeEventHeader; List <String> recordIds = event.ChangeEventHeader.getRecordIds (); String stepTrackerId = recordIds.get (0); // Si se completó StepTracker, deberíamos enviar un evento if (header.changeType == 'ACTUALIZAR') { if (event.State == 'Completed') { // Los eventos de actualización no tienen toda la información que necesitamos, así que tenemos que consultar stepTrackerIdsToQuery.add (stepTrackerId); } } // Si se creó StepTracker, deberíamos enviar un evento if (header.changeType == 'CREATE') { SalesCadenceStepTrackerEvent__e cadenceEvent = new SalesCadenceStepTrackerEvent__e (); cadenceEvent.StepTrackerId__c = stepTrackerId; cadenceEvent.CadenceId__c = event.ActionCadenceId; cadenceEvent.CadenceStepId__c = event.ActionCadenceStepId; cadenceEvent.State__c = event.State; // Esto será 'Activo' cadenceEvent.StepType__c = event.StepType; // Este será SendAnEmail, MakeACall, etc. cadenceEvent.TargetId__c = event.TargetId; // Este será el cliente potencial, el contacto, la identificación de la cuenta de la persona cadenceEvent.StepTitle__c = event.StepTitle; cadenceEvents.add (cadenceEvent); } } // Consulta de los rastreadores de pasos if (stepTrackerIdsToQuery.size ()> 0) { Lista <ActionCadenceStepTracker> stepTrackers = [SELECT ID, ActionCadenceId, ActionCadenceStepId, State, StepTitle, StepType, TargetId de ActionCadenceStepTracker DONDE ID en: stepTrackerIdsToQuery]; para (ActionCadenceStepTracker stepTracker: stepTrackers) { SalesCadenceStepTrackerEvent__e cadenceEvent = new SalesCadenceStepTrackerEvent__e (); cadenceEvent.StepTrackerId__c = stepTracker.Id; cadenceEvent.CadenceId__c = stepTracker.ActionCadenceId; cadenceEvent.CadenceStepId__c = stepTracker.ActionCadenceStepId; cadenceEvent.State__c = stepTracker.State; // Esto será 'Completado' cadenceEvent.StepType__c = stepTracker.StepType; // Este será SendAnEmail, MakeACall, etc. cadenceEvent.TargetId__c = stepTracker.TargetId; // Este será el cliente potencial, el contacto, la identificación de la cuenta de la persona cadenceEvent.StepTitle__c = stepTracker.StepTitle; cadenceEvents.add (cadenceEvent); } } // Publique los eventos para que Flow o Process Builder los escuchen EventBus.publish (cadenceEvents);
}

Tenga en cuenta que el código anterior solo lanza el evento cuando el rastreador de pasos de cadencia se crea por primera vez (estado = Activo) o cuando se completa (estado = Completado).

Aquí tienes otro diagrama que representa uno de los posibles flujos en esta automatización:

Eche un vistazo a este otro documento para leer instrucciones detalladas sobre cómo implementar esta automatización.

Próximos pasos

En esta publicación de blog, hemos cubierto los puntos más importantes para implementar con éxito automatizaciones para cadencias de ventas en ventas de alta velocidad.

Si desea ver más ejemplos, eche un vistazo a esta página de documentación en la que se explican algunas ideas de automatización más. También hemos subido todos los ejemplos de código a este repositorio de GitHub , para un consumo más fácil.

Finalmente, recomiendo abordar este sendero Trailhead , en el que podrá aprender los conceptos funcionales de HVS más importantes para mejorar sus implementaciones.

Sobre el Autor

Alba Rivas trabaja como defensora principal de desarrolladores en Salesforce. Se centra en los componentes web Lightning y la estrategia de adopción de Lightning. Puedes seguirla en Twitter @AlbaSFDC .

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2021/10/automations-for-sales-cadences-in-high-velocity-sales.html

Categories
Developers Tutoriales de Salesforce

Seguridad para desarrolladores de Salesforce ☁️

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.

En Salesforce, la confianza es nuestro valor número uno. Cuando cree aplicaciones en la plataforma Salesforce, tenga la seguridad de que residen en un entorno seguro.

Implementamos las mejores prácticas y estándares de seguridad de la industria en todas las capas, desde la infraestructura hasta el código de la aplicación. Brindamos múltiples opciones de configuración que le permiten implementar un modelo de seguridad de datos efectivo, de modo que los datos sean accesibles solo por usuarios autorizados.También brindamos protecciones integradas para vulnerabilidades de seguridad de aplicaciones comunes, como Cross-Site Scripting, inyección SOQL o Cross -Falsificación de solicitud de sitio. Además de todo eso, le brindamos herramientas para proteger el almacenamiento y la transmisión de secretos que puede utilizar para proteger aún más sus aplicaciones.

Sin embargo, como desarrollador de Salesforce, existen ciertos conceptos y mejores prácticas que debe conocer para evitar la filtración de datos o la creación de vulnerabilidades de seguridad de aplicaciones peligrosas. En esta publicación de blog, le brindaremos una descripción general rápida de las mejores prácticas de seguridad que debe seguir al codificar con Apex y con LWC (Nota: Visualforce y Aura están fuera del alcance de esta publicación de blog).

Hacer cumplir la seguridad de los datos para proteger sus registros

Primero, hablemos de la seguridad de los datos. La seguridad de los datos evita el acceso no autorizado. Es decir, asegura que cada usuario tenga acceso solo a los datos a los que debería tener acceso. En Salesforce, esto se implementa a través de tres capas diferentes: seguridad a nivel de objeto (también conocida como CRUD: Crear, Leer, Actualizar, Eliminar), seguridad a nivel de campo (FLS) y seguridad a nivel de registro (también conocida como Compartir).

Me gusta explicar estas tres capas con la siguiente imagen, en la que imaginamos una base de datos como si fuera una hoja de cálculo. Básicamente, cada capa controla la visibilidad de una tabla (pestaña), columna o registro en la base de datos.

Estas capas de seguridad se configuran a través de varias herramientas, como conjuntos de permisos, valores predeterminados de toda la organización o reglas de uso compartido. Si es un desarrollador en solitario o alguien de un equipo pequeño, puede configurarlos usted mismo. Pero si estás en un equipo más grande, es probable que no lo hagas. Sin embargo, en ambos casos, probablemente escribirá código. Por lo tanto, es extremadamente importante que comprenda cómo se ejecuta el código de la aplicación en lo que respecta a la seguridad de los datos y cómo hacer cumplir los diferentes mecanismos de seguridad de los datos cuando no se aplican de forma predeterminada.

Básicamente, las operaciones en Salesforce se pueden ejecutar en dos modos: modo de usuario, donde se aplica la seguridad de los datos, y modo del sistema, donde no lo está. Las operaciones a través de puntos de entrada como la interfaz de usuario estándar (páginas de registro de Salesforce estándar) y los puntos finales de API estándar se ejecutan en modo de usuario. Los componentes y servicios que se utilizan para crear interfaces de usuario también se ejecutan en modo de usuario. Estos pueden ser componentes Lightning en forma de registro o puntos finales LDS (Lightning Data Service).

Sin embargo, Apex fue diseñado para implementar la lógica empresarial. Muchas veces, los procesos comerciales necesitan acceso a todos los datos, independientemente del usuario que está ejecutando el proceso. Es por eso que decidimos hacer que Apex se ejecute en modo de sistema de forma predeterminada. Esto le brinda flexibilidad, pero al mismo tiempo, debe implementar controles de seguridad de datos cuando el proceso no requiere esos privilegios de datos.

Los puntos de entrada resaltados en la imagen son solo una parte. Puede encontrar una lista más exhaustiva en esta publicación de Stackexchange .

Para hacer cumplir la seguridad de los datos en Apex , deberá verificar los permisos de objetos, campos y niveles de registro cuando:

  • Crea, actualiza o elimina registros con operaciones DML
  • Lees registros con SOQL o SOSL

Hay diferentes formas en las que puede verificar la seguridad a nivel de campo y de objeto en Apex:

  • Usando la WITH SECURITY_ENFORCED en consultas SOQL. Esta cláusula evita la recuperación de objetos y campos a los que el usuario no tiene acceso, lanzando una excepción en su lugar:
     Public static List <Cuenta> getAccountsWithSecurityEnforcement () {
    regreso [
    SELECCIONE Nombre, Ingresos anuales, Industria
    De la cuenta
    CON SECURITY_ENFORCED
    ORDEN POR Nombre
    ];
    }
  • Uso de los métodos Schema.DescribeSObjectResult y Schema.DescribeFieldResult. Permiten una gran flexibilidad para ajustar la forma en que su código verifica la seguridad de los datos, pero también requieren más trabajo de su parte como desarrollador y ocupan más líneas de código:
 cuenta estática pública createAccountCRUDCheck () { Cuenta de cuenta; // Solo cheque CRUD if (Schema.sObjectType.Account.isCreateable ()) { acct = nueva cuenta (); acct.Name = 'ACME'; acct.AnnualRevenue = 1000000; insertar cuenta; } demás { lanzar nueva DMLException ('No hay permisos de objeto para crear una cuenta.'); } cuenta de retorno; }
 Lista estática pública <Cuenta> getAccountsFLSCheck () { // Comprobación FLS (comprobación CRUD implícita) Si ( Schema.sObjectType.Account.fields.Name.isAccessible () && Schema.sObjectType.Account.fields.AnnualRevenue.isAccessible () && Schema.sObjectType.Account.fields.Industry.isAccessible () ) { return [SELECCIONAR Nombre, Ingresos anuales, Industria DE la cuenta ORDENAR POR Nombre]; } return new List <Cuenta> (); }
 Lista estática pública <Cuenta> getAccountsStripInaccessible () { SObjectAccessDecision securityDecision = Security.stripInaccessible ( AccessType.READABLE, [SELECCIONAR Nombre, Ingresos anuales, Sector DE la cuenta ORDENAR POR Nombre] ); System.debug (securityDecision.getRecords ()); return securityDecision.getRecords (); }
 cuenta estática pública createAccountStripInaccessible () { Cuenta cuenta = nueva cuenta (); acct.Name = 'ACME'; acct.AnnualRevenue = 1000000; SObjectAccessDecision securityDecision = Security.stripInaccessible ( AccessType.CREATABLE, nueva lista <Cuenta> {cuenta} ); insertar securityDecision.getRecords (); return (Cuenta) securityDecision.getRecords () [0]; }

Hay una cuarta opción, que todavía no está disponible en general, pero en fase piloto, llamada Código Apex seguro con operaciones de base de datos en modo de usuario . Con este piloto, los métodos de la base de datos admitirán un AccessLevel que le permitirá ejecutar operaciones de la base de datos en modo de usuario. ¡Manténganse al tanto!

Bonificación: si desea ver un ejemplo de uso más avanzado de los Schema , eche un vistazo a CanTheUser en Apex Recipes. Esta clase es una biblioteca que expone métodos fáciles de leer para verificar la seguridad a nivel de campo y objeto.

Para aplicar la seguridad a nivel de registro , debe indicar una cláusula de uso compartido en la definición de la clase Apex . Una clase puede ser with sharing (impone permisos de registro), without sharing (omite intencionalmente los permisos de registro) o inherited sharing (hereda el comportamiento de verificación de seguridad de registro del código de llamada).

 público con clase de uso compartido AccountController { // Contenido de la clase
}

No especificar una cláusula de intercambio es siempre una mala práctica. Omitir la cláusula de uso compartido de una clase y usar el uso inherited sharing refuerza el comportamiento de uso compartido de la clase que llama. Sin embargo, si la clase es el punto de entrada a la transacción de Apex, el inherited sharing pasa a ser más seguro with sharing mientras que el caso omitido tiene el valor predeterminado without sharing . Además, si se omite la cláusula de uso compartido, no estará claro si se espera el comportamiento heredado o si el desarrollador simplemente se olvidó de indicarlo.

Como ha visto, las formas de verificar la seguridad a nivel de campo y de objetos son diferentes de cómo verifica la seguridad a nivel de registro. Este es un concepto erróneo común que me encantaría que los lectores recordaran: ¡ configurar una clase como para compartir no impone permisos de seguridad a nivel de campo o de objeto!

Prevención de amenazas con seguridad de aplicaciones

Seguridad de aplicaciones describe las mejores prácticas a seguir al crear aplicaciones para prevenir amenazas y vulnerabilidades comunes. Anualmente, la organización Open World-Wide Application Security Project ( OWASP ) revisa la lista OWASP Top 10. Este es un informe que describe las 10 vulnerabilidades más críticas que están afectando la seguridad de las aplicaciones web. Estas son las vulnerabilidades enumeradas en OWASP Top 10 para 2021:

A1: 2017-Inyección
A2: Autenticación rota en 2017
A3: Exposición de datos sensibles en 2017
A4: Entidades externas XML 2017 (XXE)
A5: 2017-Control de acceso roto
A6: Configuración incorrecta de seguridad en 2017
A7: XSS de secuencias de comandos entre sitios de 2017
A8: Deserialización insegura en 2017
A9: 2017: uso de componentes con vulnerabilidades conocidas
A10: Registro y monitoreo insuficientes en 2017

Afortunadamente, Salesforce cuenta con protecciones predeterminadas para la mayoría de estas vulnerabilidades, como CSP, Locker Service, Shadow DOM y muchas más. Sin embargo, hay algunos casos extremos, en los que un desarrollador puede abrir involuntariamente la puerta a algunos de ellos. Analicemos algunas de estas situaciones:

Inyección SOQL

La inyección de SQL se produce cuando los datos que no son de confianza se interpretan como parte de una consulta SQL. En Salesforce, tenemos nuestro propio lenguaje de consulta, SOQL.SOQL es similar a SQL , pero una de sus principales diferencias es que SOQL no se puede usar para modificar datos, solo para leer. Como consecuencia, SOQL es intrínsecamente más seguro contra los ataques de inyección SOQL , ya que no modificarán la base de datos. Sin embargo, un ataque de inyección SOQL puede revelar datos confidenciales que el desarrollador no esperaba exponer.

El uso de la sintaxis de consulta SOQL estática en Apex mitiga el riesgo de un ataque de inyección SOQL. Los tokens de consultas estáticas se validan en tiempo de compilación y las variables de Apex vinculadas con ":" se tratan como variables en tiempo de ejecución para garantizar que no se conviertan en elementos ejecutables en la consulta.

 Public static List <Cuenta> getFilteredAccountsStatic (String searchValue) { String likeValue = '%' + searchValue + '%'; // CONSULTA SEGURA :) regreso [ SELECCIONE Nombre, Ingresos anuales, Industria De la cuenta DONDE Nombre COMO: likeValue ORDEN POR Nombre ]; }

Sin embargo, si utiliza consultas dinámicas , es posible que se produzca una inyección SOQL. Piense en el siguiente código:

 Public static List <Cuenta> getFilteredAccountsInjection (String searchValue) { String likeValue = ''% '+ searchValue +'% ''; // ¡¡¡NO HAGAS ESTO !!! return (Lista <Cuenta>) Database.query ( 'SELECCIONAR Nombre, Ingresos anuales, Industria DE la cuenta DONDE Nombre LIKE' + likeValue + 'ORDEN POR Nombre' ); }

Si un atacante consigue pasar un valor como %' AND AnnualRevenue >= 2000000 AND Industry LIKE '% , a la searchValue , podrá recuperar todas las cuentas que AnnualRevenue> = 2000000, revelando información privada.

Para prevenir esto:

  • Utilice consultas estáticas cuando sea posible
  • Si usa consultas dinámicas, vincule los datos que no sean de confianza con ":"
 Public static List <Cuenta> getFilteredAccountsBinding (String searchValue) { String likeValue = '%' + searchValue + '%'; return (Lista <Cuenta>) Database.query ( 'SELECCIONAR Nombre, Ingresos Anuales, Industria DE Cuenta DONDE Nombre COMO: likeValue ORDENAR POR Nombre' ); }
  • Si alguna de estas opciones es posible, escape, encasille (encuentre un ejemplo aquí ) o allowlist (para permitir solo valores identificados) los datos no confiables
 Lista estática pública <Cuenta> getFilteredAccountsEscape (String searchValue) { String likeValue = ''% '+ String.escapeSingleQuotes (searchValue) +'% ''; return (Lista <Cuenta>) Database.query ( 'SELECCIONAR Nombre, Ingresos anuales, Industria DE la cuenta DONDE Nombre LIKE' + likeValue + 'ORDEN POR Nombre' ); }

Secuencias de comandos entre sitios (XSS)

Con Cross-Site Scripting (XSS) , los atacantes pueden inyectar scripts maliciosos en el navegador de la víctima. Esto sucede siempre que una aplicación incluye datos que no son de confianza en la salida que genera sin validarlos o codificarlos. XSS puede provocar el secuestro de sesiones, redireccionamientos maliciosos o simplemente desfigurar la aplicación web.

Locker Service y CSP (Content-Security Policy) son nuestras herramientas para luchar contra XSS en Salesforce. Sin embargo, a pesar de que hacen un gran trabajo, existen algunas mejores prácticas de desarrollo que deben seguirse para no disminuir su eficacia:

  • Manténgase alejado de la manipulación DOM ( lwc:dom="manual" ) cuando sea posible, y use directivas de plantilla en su lugar. ¿Por qué? porque cuando dejas que el marco manipule el DOM, Locker Service desinfecta las entradas antes de renderizar el HTML. Mientras que si lo manipula usted mismo, Locker Service no lo hace. Alternativamente, si necesita usar lwc:dom="manual" , desinfecte las entradas usted mismo. Puede hacerlo aplicando filtrado de entrada (por ejemplo, no permitir > ) o codificación de salida (por ejemplo, transformar > a &lt; ).
  • Evite las funciones de JavaScript que evalúan cadenas como código, como Eval , DOMParser.parseFromString , Document.implementation.createHTMLDocument y setTimeout / setInterval (cuando se utilizan para evaluar una cadena).
  • Evalúe adecuadamente las bibliotecas de terceros, ya que también pueden contener vulnerabilidades XSS. Puedes hacerlo manualmente o usando herramientas automáticas, como CheckMarx o Snyk.

Falsificación de solicitud entre sitios (CSRF)

La falsificación de solicitudes entre sitios (CSRF) obliga a un usuario a ejecutar acciones no deseadas en una aplicación web en la que está autenticado. Imagine que el usuario está autenticado con Salesforce. Con CSRF, un atacante malintencionado podría hacer que el usuario elimine cuentas, cambie una cantidad de oportunidad o algo mucho peor. ¡Y es posible que el usuario que haya iniciado sesión no se dé cuenta de que está ocurriendo! En algunos casos, un ataque CSRF no modifica la base de datos, como cerrar la sesión del usuario. Si bien no es inmediatamente dañino, puede ser molesto.

Salesforce cuenta con protecciones CSRF; esta protección está activada (y no puede desactivarse de forma predeterminada) en el menú Configuración. La protección envía un token con cada solicitud que el servidor valida antes de responder. Esto dificulta la vida del atacante, ya que tendría que averiguar tanto la URL como el token anti-CSRF.

Sin embargo, nuevamente, hay un caso de borde que la protección no cubre. Este es el momento exacto en el que se carga una página. La recomendación en este caso es evitar cambiar el estado de la base de datos al cargar la página. Es decir, no realice operaciones DML en la carga de Lightning Web Components ( constructor, connectedCallback, renderedCallback ).

Exposición de datos sensibles

A veces, necesita trabajar con datos confidenciales en su código, como contraseñas, claves de cifrado, tokens OAuth, información de pago, etc. Este tipo de datos nunca deben codificarse de forma rígida, sino que deben almacenarse correctamente en las aplicaciones. En Salesforce, hay varias funciones que puede utilizar para almacenar secretos de forma segura:

  • Credenciales con nombre : un tipo de metadatos que se utiliza para almacenar información sobre los puntos finales de las llamadas y que se puede hacer referencia fácilmente en Apex. Le permiten configurar la autenticación y mantener los secretos relacionados con la autenticación almacenados de forma segura en Salesforce.
  • Configuraciones personalizadas protegidas : configuraciones personalizadas que pertenecen a un paquete no son visibles en las organizaciones de los suscriptores.
  • Metadatos personalizados protegidos y Registros de metadatos personalizados protegidos : los tipos de metadatos personalizados que pertenecen a un paquete no son visibles para los suscriptores. También tiene la opción de proteger registros de metadatos personalizados individuales en lugar del tipo de metadatos personalizados.
  • Cifrado de plataforma de escudo : una función que le permite cifrar datos en reposo (en la base de datos) para requisitos de cumplimiento de seguridad más estrictos. Como desarrollador, sepa que cuando se utilizan campos encriptados de protección, existen algunas limitaciones de SOQL y SOSL.

Además, si necesita enviar información confidencial fuera de los límites de seguridad de Salesforce, puede cifrar sus datos y descifrarlos en el destino. Hay varias funciones en la clase Apex Crypto que lo ayudarán a implementar diferentes algoritmos para garantizar el secreto, la integridad, la autenticidad y el no repudio de los datos. De manera equivalente, puede encontrar bibliotecas JavaScript como CryptoJS con el mismo propósito y utilidades similares.

Próximos pasos

En esta publicación de blog, hemos cubierto algunas de las mejores prácticas de seguridad que debe seguir al desarrollar en la plataforma Salesforce. Esta no es una lista completa, ya que la seguridad es un tema importante, ¡pero es un buen punto de partida!

Para explicar estos conceptos con más profundidad, he creado una serie de videos. La serie contiene tres episodios de una hora que espero que disfruten. Mira la serie aquí:

Si quiere ponerse manos a la obra, le recomiendo que eche un vistazo a la ruta Desarrollar aplicaciones web seguras en Trailhead. Si desea consultar la documentación completa, consulte la Guía de seguridad de Salesforce .

Sobre el Autor

Alba Rivas trabaja como líder desarrolladora evangelista en Salesforce. Se centra en los componentes web Lightning y la estrategia de adopción de Lightning. Puedes seguirla en Twitter @AlbaSFDC ( http://twitter.com/AlbaSFDC ).

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2021/07/security-for-salesforce-developers.html

Categories
Developers Tutoriales de Salesforce

Ofrezca experiencias escalables sin límites mediante funciones ☁️

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.

Estamos orgullosos de lanzar Salesforce Functions Beta en nuestra versión Summer '21, y esperamos su GA en nuestra versión Winter '22.

Salesforce Functions es un nuevo servicio en la plataforma Salesforce que le permite brindar experiencias más escalables al extender los datos y los flujos de trabajo que ya tiene, haciéndolos más robustos con el poder de la computación elástica y la flexibilidad del lenguaje abierto. Ahora puede acelerar significativamente la productividad de los desarrolladores en una infraestructura de Salesforce administrada y confiable a través del acceso preautenticado y preconfigurado a los datos de Salesforce y la integración con herramientas de bajo código como Flow.

Functions permite a los desarrolladores escribir código que implemente su lógica empresarial, que luego se puede ensamblar como bloques de construcción en Flows o integrarse con Lightning Web Components. Salesforce Functions amplifica la productividad de código bajo con el poder y la flexibilidad del software personalizado, incluido el acceso a ecosistemas de lenguaje abierto de bibliotecas y paquetes.

Echemos un vistazo más profundo a lo que esto realmente significa y, a lo largo del camino, le mostraremos la experiencia actualizada de las Herramientas para desarrolladores.

Novedades de Salesforce Functions Beta

  1. Mayor rendimiento sin límites y escala elástica
    1. Cree aplicaciones de forma más rápida y sin límites para una lógica empresarial más compleja o una actividad de solicitud / tráfico intensiva en cálculo. Salesforce Functions conserva toda la seguridad y el cumplimiento que usted confía en Salesforce, por lo que ya no necesita lidiar con VPN, tokens de seguridad, Cloud IAM y toda la complejidad de bricolaje cuando sale de la plataforma Salesforce.
  2. Compatibilidad con lenguajes abiertos y framework en su proyecto SFDX, incluidos Java y Node.js
    1. Las funciones le permiten programar en lenguajes estándar de la industria, como Node.js y Java. Esto trae el poder expresivo de estos lenguajes a sus aplicaciones, así como a todo el ecosistema de herramientas, bibliotecas y desarrolladores para acelerar su tiempo de comercialización.
  3. Herramientas familiares e integración nativa de código bajo
    1. Las funciones están completamente integradas en Salesforce Developer Experience y se invocan directamente desde Apex, lo que facilita su incorporación a los flujos y la forma más sencilla de añadir lógica empresarial compleja a sus aplicaciones.
    2. Una CLI para el desarrollo
      1. La CLI de Salesforce se está mejorando con un nuevo ejecutable global, sf , que simplifica la forma de crear, administrar e implementar en Salesforce.

Caso de uso de funciones: ejecución de cargas de trabajo informáticas pesadas y de alto rendimiento

En esta publicación de blog, crearemos una función Java que procesa un conjunto de datos muy grande. Sin Funciones, sería imposible manejar un conjunto de datos tan grande en Apex, y muchos usuarios habrían tenido que implementar soluciones complejas para permanecer dentro de sus límites de Apex. Con Functions, puede superar este tipo de limitaciones computacionales. En este ejemplo, la función carga el conjunto completo de datos de seis mil registros en la memoria.

En el siguiente ejemplo, usaremos Funciones para encontrar una escuela de código más cercana a un punto geográfico específico. También iterará sobre el conjunto de datos para calcular la distancia desde un punto de origen, ordenando los resultados por distancia y luego devolviendo los que están más cerca de la ubicación proporcionada.

Esto se puede hacer en unos sencillos pasos:

  1. Escribir una función en un proyecto SFDX
  2. Ejecute y depure su función localmente para validar la lógica
  3. Implementar la función en una organización de Salesforce
  4. Integrar con código bajo: invocar la función a través de Apex

Listo: ha aprovechado las capacidades informáticas de las herramientas declarativas.

Las funciones se pueden escribir en un proyecto de Salesforce DX mediante la CLI de Salesforce o el editor de código de Visual Studio con Salesforce Extension Pack .

Para crear un proyecto con esta nueva estructura de comando usando la CLI de Salesforce, ejecute:

 $ sfdx generate: proyecto -n sfdx_functions_project

El editor de código de Visual Studio con Salesforce Extension Pack creará un proyecto con los archivos necesarios para comenzar a desarrollar para la plataforma Salesforce.

Después de crear el proyecto, podemos comenzar a escribir nuestras funciones, usando Java o JavaScript .

processlargedata función processlargedata en Java con la CLI de Salesforce:

 $ sfdx generate: function -n processlargedata -l java

O usando el Visual Studio Code SFDX: Create Function comando Crear función:

Generar una función a partir del código de Visual Studio

Esto generará un proyecto Java en la carpeta de funciones con todos los archivos necesarios para escribir su función y ejecutar pruebas localmente.

Actualicemos la función autogenerada con el caso de uso que describimos anteriormente. El código fuente completo para este proyecto en la aplicación de muestra de recetas de funciones está disponible en Github.com.

 paquete com.salesforce.functions.recipes; // ... / ** * Esta función carga un gran conjunto de datos JSON, calcula la distancia entre un cordón suministrado * y los datos, ordénelos y devuelva los resultados x más cercanos. * /
La clase pública ProcessLargeDataFunction implementa SalesforceFunction <FunctionInput, FunctionOutput> { Logger final estático privado LOGGER = LoggerFactory.getLogger (ProcessLargeDataFunction.class); Cadena final estática privada SCHOOLS_URL = "https://code.org/schools.json"; @Anular Aplicar FunctionOutput público (evento InvocationEvent <FunctionInput>, contexto de contexto) lanza Exception { // Leer parámetros de entrada // - Punto de origen doble latitudeSt = event.getData (). getLatitude (); doble longitudeSt = event.getData (). getLongitude (); // - Número de resultados para devolver int length = event.getData (). getLength (); // Leer la base de datos JSON de las escuelas en la memoria desde la URL URL url = nueva URL (SCHOOLS_URL); HttpURLConnection connection = (HttpURLConnection) url.openConnection (); connection.setRequestMethod ("OBTENER"); conexión.conectar (); Lector BufferedReader = nuevo BufferedReader (nuevo InputStreamReader (connection.getInputStream ())); // Parse Schools JSON Dataset Gson gson = nuevo Gson (); Respuesta de JsonResponse = gson.fromJson (lector, JsonResponse.class); // Calcular la distancia desde el punto de origen -> Ordenar por distancia -> Limitar resultados Lista de escuelas <Escuela> = response.getSchools (). stream () .mapa( escuela -> { school.setDistance ( distancia( latitudeSt, longitudeSt, school.getLatitude (), school.getLongitude ())); regreso a la escuela; }) .sorted (Comparator.comparingDouble (Escuela :: getDistance)) .limit (longitud) .collect (Collectors.toList ()); LOGGER.info ("Función filtrada correctamente {} escuelas", schools.size ()); return new FunctionOutput (escuelas); } // ...

Una función de Salesforce de Java recibe dos parámetros:

  • un InvocationEvent que contiene la carga útil de entrada de la función
  • el contexto , que tiene acceso a la organización de Salesforce autenticada y al SDK. (Nota: Node.js Functions contiene un 3er parámetro Logger , que se utiliza para operaciones de registro).

Esta ProcessLargeDataFunction recibe una carga útil JSON con latitude , longitude y length , y devuelve una lista de las escuelas más cercanas a ese punto de partida especificado en la carga útil de entrada. Ahora, veamos cómo podemos ejecutar esta función localmente.

Ejecutando su primera función

Una función de Salesforce se puede ejecutar localmente mediante el uso de la CLI, que es una forma útil de desarrollar y probar su función sin implementarla en una organización de Salesforce. La ejecución local también se puede integrar con una organización de Salesforce autenticada al realizar la invocación. Puede iniciar esta función localmente ejecutando:

 $ sfdx ejecutar: función: iniciar

O mediante el comando SFDX: Start Function

Iniciar una función desde Visual Studio Code

Esto creará y ejecutará la función localmente y estará lista para comenzar a recibir solicitudes de invocación.

Una función que se ejecuta localmente desde Visual Studio Code

Ahora que nuestra función se está ejecutando localmente, usaremos una carga útil JSON para invocar la función. payload.json un payload.json en la carpeta de funciones con la siguiente información:

 { "latitud": "36.169090", "longitud": "-115.140579", "longitud": 5
}

Esta información de carga útil representa el punto de origen y el número de resultados que devolverá. Será recibido por la función en el objeto InvocationEvent.

Puede invocar la función con esta carga útil de entrada desde la CLI ejecutando:

 $ sfdx ejecutar: función --url = http: // localhost: 8080 --payload=@payload.json

O puede hacer esto desde Visual Studio Code abriendo el payload.json y haciendo clic en la acción Invoke CodeLens:

Invocar una función desde Visual Studio Code con CodeLens

Ha visto cómo generar, ejecutar e invocar su primera función de Salesforce utilizando las herramientas de desarrollo de Salesforce. Ahora es el momento de conectarse a una organización de Salesforce, crear un entorno informático e implementar la función.

Implementar su primera función

Hemos podido ejecutar nuestra función localmente gracias a las herramientas de desarrollo de Salesforce, pero el poder real de las funciones de Salesforce se produce cuando se ejecutan en nuestro entorno informático sin servidor. Implementemos nuestra función en una organización de Salesforce. Para hacer eso, necesitamos crear un entorno informático y conectarlo a una organización ejecutando:

 $ sfdx env: create: compute -o connected_org_alias -a compute_env_alias

Luego, necesitamos implementar nuestro proyecto y funciones de Salesforce. La próxima sf CLI le permitirá implementar los metadatos de su proyecto junto con la función en un solo comando. Pero hasta entonces, tenemos que hacerlo usando sfdx en dos pasos:

 $ sfdx force: fuente: empujar
$ sfdx proyecto: implementar: funciones -o conectado_org_alias

Ahora que nuestro proyecto está implementado, podemos invocar la función desde Apex usando la nueva clase de Function

 functions.Function fn = functions.Function.get ('sfdx_functions_project.processlargedata');
functions.FunctionInvocation invocation = fn.invoke ('{"latitud": "36.169090", "longitud": "-115.140579", "longitud": 5}');
String jsonResponse = invocation.getResponse ();
System.debug ('Respuesta obtenida' + jsonResponse);

Activación de una función con Apex desde Developer Console

Integrando su función con herramientas low-code

Ahora que nuestra función se puede invocar a través de Apex, podemos integrarla con un componente web Flow o Lightning. FindCodeSchools.cls una clase de Apex, FindCodeSchools.cls, que invoca la función ProcessLargeData de un flujo. El código fuente completo para este proyecto en el repositorio de la aplicación de muestra de recetas de funciones está disponible en Github.com.

 público con clase compartida FindCodeSchools { @InvocableMethod (label = 'Buscar escuelas') public static List <Escuela> findSchools (List <Input> input) { Carga útil de entrada = input.get (0); // Obtener una referencia de la función ProcessLargeData functions.Function fn = functions.Function.get ( 'sfdx_functions_project.processlargedata' ); // Invocar la función ProcessLargeData functions.FunctionInvocation invocación = fn.invoke ( JSON.serialize (carga útil) ); Respuesta de cadena = invocation.getResponse (); // Serializar la respuesta en un objeto Salida salida = (Salida) JSON.deserialize (respuesta, Output.class); return output.schools; } // ...
}

Con esta clase de Apex con un @InvocableMethod , crearemos un nuevo flujo que active este método como una acción de Apex y usaremos la salida como mejor nos parezca. También puede activar la función desde un componente LWC utilizando la anotación @AuraEnabled


Invocar el método de Apex FindSchools desde un flujo

Como puede ver a continuación, integramos a la perfección el poder de las capacidades de cómputo de Salesforce Functions con la simplicidad de bajo código de Flow.

Flujo integrado con una función de Salesforce

Aprende más

Estamos emocionados de ver lo que crea con Salesforce Functions. Nomínese para la Invite Beta .

Sobre los autores

Julián Duque es un defensor de desarrolladores líder en Salesforce. Conéctese con él en Twitter @julian_duque .
Khushboo Goel es gerente sénior de marketing de productos en Salesforce. Conéctese con ella en Twitter @ kgoel31 .

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2021/06/functions-announcement.html

Categories
Developers Tutoriales de Salesforce

Patrones de comunicación entre componentes para componentes web Lightning ☁️

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.

Al crear aplicaciones con Lightning Web Components (LWC), los desarrolladores necesitan pasar información a través de los componentes para compartir el estado y volver a renderizar los componentes. En esta publicación, compartiré una descripción general de los diferentes patrones de comunicación junto con sus ventajas y casos de uso. Veremos los tres tipos de intercambios:

  1. Transmitir datos por la jerarquía de componentes.
  2. Pasar datos a la jerarquía de componentes.
  3. Pasar datos a componentes que no comparten un ancestro común.

Transmitir datos por la jerarquía de componentes

Hay tres técnicas para pasar datos de un componente principal a un componente secundario; puede utilizar una propiedad pública, un setter o un método. Como referencia, un componente secundario es un componente que se incluye en la plantilla HTML de un componente principal en el momento del diseño. En tiempo de ejecución, el componente secundario se incrustará en un árbol sub-DOM del componente principal.

Propiedades publicas

Una propiedad pública es la forma más sencilla de recibir datos en un componente hijo y requiere la menor cantidad de código. Una propiedad pública se expone aplicando el decorador @api en una propiedad de clase de un componente secundario. Esto permite que el componente principal le asigne un valor de dos formas diferentes. Ya sea a través de un atributo HTML personalizado o dinámicamente con JavaScript.

A continuación, se muestra un ejemplo de cómo un componente principal actualiza una childAttribute de un componente secundario. Observe cómo el childAttribute se convierte automáticamente a mayúsculas y minúsculas (minúsculas, separadas por guiones) cuando se establece con un atributo HTML.

Las propiedades públicas son reactivas, por lo que el componente se vuelve a renderizar cada vez que se actualiza una de sus propiedades públicas. En el lado negativo, no puede ejecutar lógica personalizada cuando el valor cambia y el componente secundario no debe asignar valores a sus propiedades públicas.

Consulte la receta de ApiProperty de nuestra aplicación de muestra LWC Recipes para ver un ejemplo de una propiedad pública.

Getters y setters públicos

Los captadores y definidores públicos se comportan exactamente como las propiedades públicas cuando se utilizan en un componente principal. Sin embargo, brindan flexibilidad adicional al componente secundario al permitirle ejecutar lógica personalizada al recuperar o actualizar un valor. Además, un componente hijo puede establecer valores utilizando sus propios establecedores.

Otra diferencia importante con las propiedades públicas es que los captadores y definidores no proporcionan persistencia desde el primer momento. Un patrón común para manejar es usar una propiedad “privada” prefijada con un guión bajo para almacenar el valor internamente en el componente secundario.

A continuación, se muestra un ejemplo de cómo un componente principal usa un childAttribute de un componente secundario y guarda su valor en una propiedad _childAttribute

Consulte la receta de ApiSetterGetter de LWC Recipes para ver un ejemplo de getters y setters públicos.

Métodos públicos

Puede llamar a métodos públicos para pasar varios valores a un componente secundario con el fin de realizar una acción como un cálculo. A diferencia de los establecedores, los métodos le permiten hacer cumplir la coherencia pasando varios parámetros a la vez.

A continuación, se muestra un ejemplo de cómo un componente principal llama a un calculate desde un componente secundario:

A diferencia de las propiedades públicas o los establecedores, los métodos no se exponen en la etiqueta HTML del componente. Solo se pueden llamar con JavaScript. Esto puede ser una limitación si necesita llamar a un método de forma reactiva (siempre que cambien algunos valores). Del mismo modo, llamar a un método no desencadenará automáticamente una nueva representación en el componente de destino. El componente solo se vuelve a renderizar si el método modifica las propiedades utilizadas en la plantilla del componente.

Los métodos admiten el procesamiento asincrónico, ya que pueden devolver cualquier tipo de valor, incluidas las promesas.

Consulte la receta de ApiMethod de LWC Recipes para ver un ejemplo de un método público.

Pasar datos a la jerarquía de componentes

Puede pasar datos de un componente secundario a un padre o antepasado con eventos . Los componentes web Lightning se basan en eventos DOM (como se define en la especificación DOM estándar) para propagar datos en la jerarquía de componentes.

A continuación, se muestra un ejemplo de cómo un componente secundario puede enviar un evento personalizado con un ID de contacto a un componente principal:

Puede configurar la propagación de un evento para que se propague a componentes ancestros que no son padres directos de un componente secundario. Para hacerlo, puede establecer el bubbles al crear el evento:

 const myEvent = new CustomEvent ('myevento', {burbujas: verdadero};

También puede detener la propagación del evento en cualquier momento con Event.stopPropagation () .

Consulte las recetas de "Hijo a padre" de LWC Recipes para ver varios ejemplos de activación y manejo de eventos.

Pasar datos a componentes que no comparten un ancestro común

A veces es necesario enviar datos a componentes que no comparten un ancestro común. Por ejemplo, es posible que deba enviar datos hacia o desde un componente alojado en una región diferente de una página Lightning o en una barra de utilidades. Este tipo de comunicación se puede lograr con el Lightning Message Service o con el módulo pubsub.

Servicio de mensajes relámpago

El Lightning Message Service (LMS) es la solución preferida para comunicarse entre componentes que no están en el mismo árbol DOM. LMS también permite la comunicación entre las tres tecnologías de interfaz de usuario de Salesforce: Lightning Web Components, Aura y Visualforce.

LMS proporciona un mecanismo de publicación / suscripción que permite el intercambio de mensajes entre componentes. En aras de la brevedad y para no duplicar la documentación, no profundizaremos en los detalles técnicos de cómo publicar y suscribirse a mensajes Lightning, pero requiere tres pasos clave:

  1. Declare un canal de mensajes utilizando el tipo de metadatos LightningMessageChannel
  2. Publique un mensaje usando la función publish() del módulo @salesforce/messageChannel
  3. Suscríbase a un mensaje utilizando la función subscribe() del módulo @salesforce/messageChannel

Consulte las recetas del "Servicio de mensajes" de LWC Recipes para ver ejemplos de cómo utilizar LMS.

módulo pubsub

El módulo pubsub debe usarse como una alternativa de último recurso en contenedores que no son compatibles con Lightning Message Service. El módulo proporciona un mecanismo de publicación / suscripción para intercambiar datos en una página web. Es una solución funcional, pero no se admite oficialmente ni se mantiene de forma activa.

En resumen: cinco funciones para tres patrones de comunicación entre componentes

Eso es un envoltorio. En esta publicación, vimos una descripción general de los tres tipos de patrones de comunicación entre componentes, junto con sus respectivos beneficios y casos de uso:

  1. Transmitir datos por la jerarquía de componentes con propiedades públicas, definidores o métodos.
  2. Pasar datos a la jerarquía de componentes con eventos.
  3. Pasar datos a componentes que no comparten un ancestro común con el servicio de mensajes Lightning o el módulo pubsub.

A continuación, se muestra un resumen de las diferentes funciones que puede utilizar para compartir datos entre componentes:

Si desea obtener más información, instale y explore nuestra aplicación de muestra LWC Recipes para ver cómo funcionan estas técnicas en pequeños fragmentos de código.

Sobre el Autor

Philippe Ozil es un promotor principal de desarrolladores en Salesforce, donde se centra en la plataforma Salesforce. Escribe contenido técnico y habla con frecuencia en conferencias. Es un desarrollador de pila completa y disfruta trabajar en DevOps, robótica y proyectos de realidad virtual. Síguelo en Twitter @PhilippeOzil o revisa sus proyectos de GitHub @pozil .

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2021/05/inter-component-communication-patterns-for-lightning-web-components.html

Categories
Developers Tutoriales de Salesforce

Aprenda MOAR con Summer '21: aspectos destacados del lanzamiento para desarrolladores ☁️

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.

Descubra todas las funciones nuevas para desarrolladores y administradores en la versión Summer ’21:

Sabemos que cada lanzamiento trae muchas características y funcionalidades nuevas interesantes, por lo que puede haber mucho que digerir. Con Learn MOAR, le ofrecemos los aspectos más destacados que desea conocer en un formato fácil de digerir con blogs, videos y más.

Es fácil comenzar con Summer ’21

  1. ¡Sumérjase en las mezclas de sendas con aspectos destacados de la versión clave para administradores, desarrolladores o ambos!
  2. Siga los blogs de Salesforce Developer y Salesforce Admin mientras publicamos publicaciones diarias que destacan todas las excelentes funciones nuevas en la versión Summer ’21.
  3. Regístrese para Release Readiness Live el 21 de mayo para conocer las nuevas funciones de los expertos en productos y ver demostraciones interesantes.

Siga y complete un trailmix de Learn MOAR Summer ’21 para desarrolladores o administradores antes del 31 de julio de 2021 para obtener una insignia de la comunidad especial y participar para tener la oportunidad de ganar 1 de 5 cupones de certificación Trailhead de $ 200 USD.

¡Ha llegado el verano del 21!

Para aquellos de ustedes que han seguido el video , el podcast y la publicación del blog al respecto, estarán encantados de saber que los finalizadores de transacciones de Apex están llegando oficialmente como una función de GA en su organización en esta versión. Esta característica agrega una característica muy necesaria de procesamiento de trabajo de fin de asíncrono a su Apex en cola. Imagine poder registrar con elegancia lo que salió mal en una transacción fallida, o incluso mejor: enviar a Parker Harris un mensaje de texto confeti cada vez que su proceso de conversión masiva de clientes potenciales se complete con éxito.

Eche un vistazo a las notas de la versión y, sin duda, encontrará nuevas funciones que lo harán pensar. Uno que me llamó la atención fue uno de los componentes web Lightning nuevos y modificados . Hay un nuevo componente llamado lightning-quick-action-panel . Esté atento a una próxima publicación sobre cómo usar eso con las nuevas acciones rápidas de componentes web Lightning.

Es posible que haya notado una mención de la disponibilidad beta de Salesforce Functions. Las funciones de Salesforce permiten a los desarrolladores crear lógica empresarial más allá de los límites estándar de Apex. Estén atentos para más noticias sobre eso.

#AprendeMOAR y comparte

Esta semana, les traemos una tonelada de excelente contenido para desarrolladores sobre el lanzamiento de Summer ’21, así que busque las publicaciones diarias del blog Learn MOAR a continuación.

Mejoras en los servicios externos

Retirada de la versión de API

Creación de marcas en sitios web en Experience Cloud

No se olvide de compartir lo que le gusta del lanzamiento de Summer ’21 con el hashtag #LearnMOAR y regístrese para Release Readiness Live que se llevará a cabo el 21 de mayo.

Sobre el Autor

Peter Chittum es un defensor de los desarrolladores de Salesforce. Ha trabajado en software empresarial durante más de 20 años y ha sido desarrollador de Salesforce desde 2010. Vive en Inglaterra y en su tiempo libre pasa tiempo con su familia, monta en bicicleta de montaña y toca guitarras y ukeleles de manera regular.

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2021/05/learn-moar-with-summer-21-release-highlights-for-developers.html

Categories
Salesforce

5 ideas simples de flujo de Salesforce con gran impacto

Salesforce Flow es una característica extremadamente poderosa, la más poderosa dentro del arsenal de cualquier administrador de Salesforce. Es una herramienta de configuración de apuntar y hacer clic que otorga a los administradores la capacidad de integrar lógica empresarial compleja en Salesforce sin tener que escribir una sola línea de código.

Ejemplo de flujo de SalesforceEjemplo de flujo de Salesforce

En este artículo, analizaremos cinco ideas diferentes de Salesforce Flow que pueden crearse en un período de tiempo muy corto y pueden usarse para beneficiar dramáticamente a su organización de Salesforce. Se recomienda encarecidamente como práctica recomendada que lo cree en un entorno de pruebas o una organización de desarrolladores en lugar de en producción. Crear cualquier cosa directamente en Producción puede causar problemas si no tiene cuidado.

Idea n. ° 1: Flujo de Salesforce para estandarizar la denominación de oportunidades

Requisito : las oportunidades se están creando con todo tipo de convenciones de nomenclatura diferentes, y usted, como administrador, tiene la tarea de limpiarlas y mantenerlas alineadas en el futuro.

Solución : puede crear un flujo de Salesforce que toma el nombre de la cuenta , el campo Tipo y el campo Etapa de la oportunidad y los une para crear una convención de nomenclatura para todas las oportunidades en el futuro.

En primer lugar, deberá crear un nuevo flujo de Salesforce activado por registros que se ejecute cada vez que se crea o actualiza el registro, y se ejecuta antes de la transacción.

Flujo de Salesforce para estandarizar la denominación de oportunidades Paso 1Flujo de Salesforce para estandarizar la denominación de oportunidades Paso 1

A continuación, debe crear un nuevo recurso. Esta será una fórmula llamada oppNameFormula, y la fórmula en sí será:

{! $ Record.Account.Name} & ”-” & TEXT ({! $ Record.Type}) & ”-” &
TEXTO ({! $ Record.StageName})

Consulte a continuación el recurso de fórmulas completo.

Flujo de Salesforce para estandarizar la denominación de oportunidades Paso 2Flujo de Salesforce para estandarizar la denominación de oportunidades Paso 2

Nota : La fórmula asume que SIEMPRE habrá un valor asociado de Cuenta, Tipo y Nombre de etapa en la Oportunidad. Es posible que deba usar reglas de validación para hacer cumplir esto, o usar la lógica IF para adaptarse a los casos extremos en los que estos valores no se completan.

Por último, debe asignar la oppNameFormula al campo Nombre de oportunidad. Simplemente arrastre un elemento de Asignación y complételo de la siguiente manera.

Flujo de Salesforce para estandarizar la denominación de oportunidades Paso 3Flujo de Salesforce para estandarizar la denominación de oportunidades Paso 3

Guarde su flujo de Salesforce para la denominación automática de oportunidades y actívelo. Para probar este flujo de Salesforce, cree un nuevo registro de oportunidad y asegúrese de que los campos Cuenta, Tipo y Etapa estén completos. Al crear su registro, asegúrese de que el valor de Nombre esté establecido en algo que no se alinee con la convención de nomenclatura cuando lo cree. Una vez que haya guardado el registro, el nombre debería haberse actualizado para alinearse con la convención de nomenclatura.

Salesforce Flow para estandarizar la denominación de oportunidadesSalesforce Flow para estandarizar la denominación de oportunidades

Este tipo de flujo de Salesforce se puede utilizar en cualquier objeto dentro de Salesforce, según el tipo de nombre que desee dar a esos registros. Todos los casos pueden tener un campo de asunto uniforme, los registros de campaña pueden nombrarse automáticamente en función de dónde se encuentran en una jerarquía, etc.

Idea n. ° 2: Flujo de Salesforce para crear rápidamente un registro de contacto infantil

Requisito : los miembros del equipo de servicio reciben llamadas telefónicas de empresas de clientes existentes, pero las personas que llaman a menudo no se registran en Salesforce. Algunos miembros del equipo crean nuevos clientes potenciales , algunos toman notas escritas a mano y se olvidan de ingresarlas en el sistema, y algunos registran las notas contra un contacto diferente en la misma cuenta, todo porque lleva demasiado tiempo crear un nuevo registro de contacto sobre la marcha.

Solución : Bríndeles un flujo de pantalla que facilite la creación de registros de contactos sobre la marcha.

Cree un nuevo flujo de pantalla y coloque un elemento de pantalla en él. Agregue 4 campos como se muestra a continuación.

Flujo de Salesforce para crear rápidamente un registro de contacto secundario Paso 1Flujo de Salesforce para crear rápidamente un registro de contacto secundario Paso 1

A continuación, debe obtener el ID del registro de la cuenta desde el que iniciará Salesforce Flow. Para hacer esto, desea crear un nuevo recurso y llamarlo recordId . Asegúrese de permitir la entrada. Vea la captura de pantalla a continuación para obtener más información.

Flujo de Salesforce para crear rápidamente un registro de contacto secundario Paso 2Flujo de Salesforce para crear rápidamente un registro de contacto secundario Paso 2

Una vez que haya guardado el recurso recordId , es hora de insertar su registro. Agregue un elemento Crear registros en el lienzo después de su elemento Pantalla y configure la sección Campos en 'Usar recursos separados y valores literales'. Aquí es donde mapeará el recordId al campo de búsqueda (en este caso, el campo AccountId) y mapeará los valores de la pantalla a los campos en su nuevo registro. Vea el ejemplo a continuación.

Flujo de Salesforce para crear rápidamente un registro de contacto secundario Paso 3Flujo de Salesforce para crear rápidamente un registro de contacto secundario Paso 3

¡Eso es! Puede agregar una pantalla para que el usuario sepa que se creó su registro, o usar una acción personalizada para redirigir a su usuario a su registro recién creado, ¡pero a veces es mejor mantenerlo simple!

Ahora todo lo que queda es crear una Acción en el objeto Cuenta que llame a este Flujo para crear un registro de contacto secundario, ¡y listo! El ID de registro se pasará automáticamente a la variable recordId.

Idea n. ° 3: flujo de Salesforce para redireccionar para registrar una acción personalizada

Requisito : Salesforce Flow crea un nuevo registro y desea redirigir a sus usuarios al registro recién creado en lugar de enviarlos de vuelta a la página desde la que llamaron Salesforce Flow.

Solución : cree un componente Lightning simple que redirija a sus usuarios a un registro basado en Id y pase el Id de registro recién creado al componente.

Esta es un poco más técnica, pero es una solución simple que puede tener un gran impacto en sus flujos de Salesforce. Crearemos un componente Lightning personalizado, pero el marcado es copiar y pegar, ¡así que no hay nada demasiado aterrador!

Lo primero que deberá hacer es abrir Developer Console y crear un nuevo Componente Lightning.

Flujo de Salesforce para redireccionar para registrar una acción personalizadaFlujo de Salesforce para redireccionar para registrar una acción personalizada

Llamamos al nuestro 'Flow_openRecord' porque encaja con nuestra convención de nomenclatura existente, pero el nombre no importa demasiado. Haga clic en Enviar y no marque ninguna de las casillas de Configuración de componentes.

Dentro de su componente Lightning, deberá hacer clic en cada uno de los siguientes para crear los archivos: Componente, Diseño y Controlador.

En el archivo de componentes, reemplace el contenido con lo siguiente:

<aura: component implements = ”force: lightningQuickAction,
lightning: availableForFlowActions ”>

<aura: atributo name = ”recordId” type = ”String” />

</ aura: componente>

Guarde su archivo de componente. Abra el archivo de diseño y reemplace el contenido con lo siguiente:

<diseño: componente>

<diseño: nombre de atributo = ”recordId” label = ”ID de registro” />

</ diseño: componente>

Guarde su archivo de diseño. Abra el archivo del controlador y reemplácelo con lo siguiente:

({invoke: function (componente, evento, ayudante) {

// Obtener el atributo de ID de registro

var record = component.get (“v.recordId”);

// Obtén el evento Lightning que abre un registro en una nueva pestaña

var redirect = $ A.get ("e.force: navigateToSObject");

// Pasar el ID de registro al evento

redirect.setParams ({

"RecordId": registro

});

// Abre el registro

redirect.fire ();

}})

Guarde su archivo de controlador, ¡y listo! ¡Sí, así de fácil!

Para usar su nueva acción personalizada, deberá arrastrar un elemento de acción a un flujo de pantalla y buscar el nombre de su componente (una vez más, llamamos al nuestro 'Flow_openRecord'). Especifique el ID de registro al que desea navegar, ¡y listo!

Flujo de Salesforce para redireccionar para registrar una acción personalizadaFlujo de Salesforce para redireccionar para registrar una acción personalizada

Idea n. ° 4: Flujo de Salesforce para crear proyectos automáticamente a partir de oportunidades

Requisito : es un escenario común que las empresas necesitan crear un Proyecto (por ejemplo, para la incorporación de clientes) a partir de una plantilla cuando una Oportunidad está configurada como Cerrada ganada. Esto requiere una cantidad considerable de tiempo y esfuerzo manual para cada oportunidad ganada. Hacer todo esto manualmente también deja un margen significativo para el error humano o para que alguien simplemente olvide o retrase un paso.

Solución : es probable que su empresa utilice Inspire Planner , una de las aplicaciones nativas de gestión de proyectos más populares para Salesforce. Ahora vamos a crear un flujo de Salesforce que crea automáticamente un nuevo proyecto a partir de una plantilla específica cuando la oportunidad está configurada como Cerrada ganada. Este nuevo Proyecto incluirá todas las tareas, predecesores, documentos, roles de recursos y más de la Plantilla.

En primer lugar, queremos especificar la Plantilla de proyecto que se generará para la Oportunidad después de que haya progresado a Cerrada ganada. Para hacer esto, agregaremos un nuevo campo de búsqueda de Plantilla de proyecto en el Objeto de oportunidad. Este será un campo de búsqueda para el objeto Proyecto.

Salesforce Flow para crear proyectos automáticamente a partir de oportunidades en Inspire PlannerSalesforce Flow para crear proyectos automáticamente a partir de oportunidades en Inspire Planner

Para asegurarnos de que solo permitimos proyectos con plantilla en el campo de búsqueda, también agregaremos Criterios de filtro de búsqueda al campo. Esto garantiza que el usuario no pueda agregar accidentalmente un proyecto sin plantilla en el campo por accidente.

Agregar criterios de filtro de búsqueda mientras se crean automáticamente proyectos a partir de oportunidades en Inspire PlannerAgregar criterios de filtro de búsqueda mientras se crean automáticamente proyectos a partir de oportunidades en Inspire Planner

Finalmente, querrá agregar una regla de validación para asegurarse de que se agregue una plantilla de proyecto antes de marcar la oportunidad como ganada. Hay algunas formas de hacer esto, deberá definirlo correctamente dentro de su organización, pero la siguiente captura de pantalla muestra una forma sencilla de hacerlo.

Regla de validación para crear proyectos automáticamente a partir de oportunidades en Inspire PlannerRegla de validación para crear proyectos automáticamente a partir de oportunidades en Inspire Planner

Ahora que tiene configurado el campo Plantilla de proyecto y está listo para comenzar, es hora de automatizar la creación del proyecto en Inspire Planner . Para hacer esto, usaremos un flujo de Salesforce activado por registros. Una vez más, hay varias formas de hacer esto, pero crearemos un único flujo de Salesforce para manejar la operación.

Navegue a Flujos en Configuración. Cree un nuevo flujo de Salesforce, seleccione Flujo activado por registro y seleccione Diseño automático. A continuación, haga clic en el elemento Iniciar para configurarlo para oportunidades en las que la etapa se ha cambiado a Cerrada ganada.

Salesforce Flow para crear proyectos automáticamente a partir de oportunidades en Inspire PlannerSalesforce Flow para crear proyectos automáticamente a partir de oportunidades en Inspire Planner

No olvide marcar 'Solo cuando un registro se actualiza para cumplir con los requisitos de condición'; esto garantizará que solo se active cuando se actualice la Etapa de oportunidad, no cada vez que se edite posteriormente.

A continuación, haga clic en el icono + debajo del elemento de inicio y agregue un elemento de creación de registros. Configúrelo como se muestra a continuación.

Salesforce Flow para crear proyectos automáticamente a partir de oportunidades en Inspire PlannerSalesforce Flow para crear proyectos automáticamente a partir de oportunidades en Inspire Planner

Lo que estamos haciendo en este paso es decir que queremos crear un nuevo proyecto de Inspire Planner con el mismo nombre que su registro de oportunidad, y le estamos dando un valor de plantilla de proyecto del campo de plantilla de proyecto que creó en su oportunidad. A partir de ahí, Inspire Planner verá el valor de un proyecto recién creado y lo desarrollará con todas las tareas de la plantilla, predecesores predefinidos, documentos adjuntos, roles de recursos asignados, esfuerzo asignado y más. ¡Con buena pinta!

¡Eso es! Este flujo de Salesforce es muy rápido y fácil de crear, pero le ahorrará mucho tiempo a su equipo. Esta es solo una de las formas en que Salesforce Flow se puede utilizar para automatizar los procesos comerciales dentro de Salesforce e Inspire Planner .

Flujo simple activado por registros para crear proyectos a partir de oportunidadesFlujo simple activado por registros para crear proyectos a partir de oportunidades

Idea n. ° 5: migrar Process Builder a Salesforce Flow

Requisito : su organización tiene muchos procesos y muchos flujos. Desea tener un lugar para ver todas sus automatizaciones declarativas cuando llega el momento de depurar, en lugar de tener que pasar por dos herramientas diferentes y dos menús diferentes.

Solución : reconstruya manualmente sus procesos como flujos de Salesforce. Esto asegurará que haya un solo lugar para buscar todas sus automatizaciones declarativas.

Es probable que esté siguiendo las mejores prácticas dentro de Process Builder y tenga un solo proceso para cada objeto. También es probable que haya notado que Salesforce Flow hereda y supera muchas de las funciones que tiene Process Builder.

Esta idea es una que debe tomar con un grano de sal y solo aplicar después de evaluar cuidadosamente su organización y los impactos que puede tener la reconstrucción de todo en Salesforce Flow. El resultado final es que tendrá una herramienta para usar para cualquier automatización declarativa y un solo lugar para buscar cuando haya un problema (excluyendo los problemas de Apex).
Salesforce ha mejorado Flow cada vez más en versiones recientes, incluida la adición de funciones que antes eran exclusivas de Process Builder. Lea este artículo para ver 10 de las nuevas funciones de Salesforce Flow que se agregan solo en la versión Spring '21 .

Resumen

Estas son solo algunas de las formas en que Salesforce Flows se pueden utilizar para mejorar rápida y eficazmente su organización de Salesforce. Con solo unos pocos clics en una interfaz simple, un administrador de Salesforce puede alinear el sistema con las prioridades de la empresa.

Salesforce Flow es la herramienta declarativa más poderosa que tiene un administrador. Si está comenzando su viaje de administrador y aún está aprendiendo las cuerdas, asegúrese de invertir algo de tiempo en aprender cómo construir Salesforce Flows correctamente, no se arrepentirá.


Sobre el Autor

Tim Combridge es un ingeniero de soluciones entusiasta de Salesforce certificado 9 veces con pasión por todo lo relacionado con Salesforce y le encanta compartir su pasión con los demás.


Aplicación de gestión de proyectos Inspire Planner Salesforce Aplicación de gestión de proyectos Inspire Planner Salesforce

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://inspireplanner.com/blog/salesforce-flow-ideas-with-big-impact/

Categories
Developers Enterprise Software Tutoriales de Salesforce

Aprender MOAR con Spring ’21: La nueva función SOQL FIELDS() es GA

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.

Una forma familiar y productiva de explorar la forma de sus datos

Para muchos de nosotros, la semántica SQL y la exploración de datos van de la mano. Tanto si tiene experiencia en trabajar directamente con bases de datos como si ha desarrollado experiencia utilizando SOQL, el lenguaje de consulta propio de Salesforce, la capacidad de escribir una consulta y obtener datos de ella es inmensamente valiosa. Por eso nos complace presentar una nueva y sencilla forma de explorar los datos de sus objetos de Salesforce: la función SOQL FIELDS()

La función FIELDS() permite a los autores de sentencias SOQL designar una agrupación predefinida de columnas que se devolverán automáticamente en el conjunto de registros resultante. FIELDS() proporciona una forma de aprovechar las construcciones existentes de la plataforma que desvincula la gestión de datos de la lógica empresarial en las integraciones y ayuda a reducir el esfuerzo que supone administrar el modelo de objetos de una org.

Ahora, cualquiera que escriba una consulta puede emplear simplemente una cláusula «SELECT FIELDS(ALL)» para consultar todos los campos, estándar o personalizados, de un objeto. Al igual que «SELECT *» proporciona al lenguaje SQL una forma sencilla de recuperar datos de todas las columnas de una tabla, la función FIELDS() de SOQL ofrece a cualquiera, ya sea un desarrollador, un administrador o un usuario final curioso, una forma escalable y segura de explorar todos los campos de un objeto.

Consulta más datos con menos código

Antes, consultar datos con una lista de campos en un objeto podía ser un proceso algo complicado. Tenías que escribir una consulta muy detallada si necesitabas un gran número de campos en tu resultado, y si no conocías todos los campos de un objeto, tenías que entender primero la forma de ese objeto y escribir tu consulta después. Con SOQL FIELDS(), ahora tienes un camino sencillo para sumergirte en tus datos para extraer información valiosa y explorar el contenido de los datos de un objeto.

Como ejemplo, digamos que usted trabaja en una empresa que produce vehículos eléctricos, y necesita extraer datos de un objeto personalizado «Vehicles__c» que un compañero de equipo ha construido en Salesforce. Antes de SOQL FIELDS(), podría haber tenido que preguntar a ese compañero de equipo por la forma de ese objeto, explorar sus campos en el Gestor de objetos antes de escribir su consulta, o realizar una llamada a describe(). Y si querías obtener datos de casi todos los campos de ese objeto, tendrías que escribir una consulta SOQL bastante larga para que funcionara. Ahora, hay un camino más fácil. Con sólo una llamada a la API simplemente construida como:

sfdx force:data:soql:query -q "SELECT FIELDS(ALL) FROM Vehicle__c LIMIT 5" -u DevHub

puedes consultar todos los campos del objeto personalizado «Vehículo». No necesitas molestar a un compañero de equipo o desplazarte por el Gestor de objetos – la función SOQL FIELDS() te permite entrar directamente. Y si quiere ser más preciso, como mezclar la Función FIELDS() en una consulta sobre un objeto estándar, también tiene esa flexibilidad:

SELECT Nombre, Id, FIELDS(CUSTOM) FROM Cuenta LIMIT 25

Con esta consulta, puedes sacar todos los campos personalizados del objeto Cuenta junto a algunos campos estándar como Nombre o Id. Asimismo, podrías emplear:

<código>SELECCIONAR SUSCRIPCIÓN__c, CAMPOS(ESTÁNDAR) DE LA CUENTA</código>

Para coger fácilmente los datos de un campo personalizado «Suscripción» en el objeto Cuenta, junto con todos los campos estándar que hay también. En cualquier caso, está escribiendo menos código para obtener más claridad en torno a sus datos.

Como puede ver, FIELDS() es una función conveniente que puede simplificar los casos de uso de exploración de datos. La función también puede acelerar las integraciones de plataformas promoviendo el acoplamiento suelto entre el código que escriben los desarrolladores y los casos de uso a mano, al tiempo que mejora la capacidad de mantenimiento del software. Por ejemplo, la representación de datos para un modelo de objetos dinámico y en constante cambio puede dar lugar a iteraciones continuas de las consultas subyacentes o a viajes adicionales al servidor para realizar una llamada de descripción que garantice que no se deja ningún campo. La función FIELDS() es consciente de las agrupaciones de columnas limitadas y no limitadas para ayudar a salvaguardar el rendimiento. Un despliegue bien diseñado de FIELDS() optimizará los recursos necesarios para recuperar los datos con los implicados en el procesamiento y el trabajo con los resultados con el fin de soportar mejor el caso de uso dado.

Conseguir que las consultas SOQL sean sencillas, escalables y seguras

La función FIELDS() es la última mejora del lenguaje SOQL, y un fantástico complemento a otros cambios recientes que puede haber pasado por alto, todos los cuales hacen que el acceso a los datos de Salesforce sea más fácil y potente que nunca. En primer lugar, hemos actualizado recientemente los límites de caracteres de SOQL de 25K caracteres a 100K caracteres, lo que permite a los autores de consultas ser más completos con sus operaciones de consulta. Con los nuevos límites de caracteres y FIELDS(), continuamos reforzando nuestra práctica de reducir la fricción al operar con datos en la plataforma Salesforce, al tiempo que le permitimos hacer más cosas con menos código, llamadas o caracteres, de lo que hablamos el año pasado en nuestra sesión de la API de TDX20.

También hemos introducido recientemente el SOQL Query Builder, un nuevo plug-in de VS Code ahora en Beta que facilita la escritura y ejecución de consultas directamente desde VS Code. Para los desarrolladores, esto significa menos cambio de herramientas y contextos en su trabajo, y para muchos administradores o usuarios empresariales, indica una barrera de entrada más baja para trabajar intuitivamente con sus datos de Salesforce. Como el SOQL Query Builder está en fase beta, sólo estamos empezando a rascar la superficie de las formas más fáciles de trabajar con sus datos, pero agradecemos sus comentarios y le animamos a prestar atención a algunas cosas interesantes que están sucediendo en este espacio.

Por último, pero no menos importante, la función FIELDS() es extensible y segura. Aunque su naturaleza es similar a la de «SELECT *» mencionada anteriormente, observará los estándares de seguridad de Salesforce, como la aplicación de la seguridad a nivel de campo dentro de sus operaciones de API de consulta, que garantizan que los usuarios sólo vean resultados que respeten sus privilegios de acceso a los datos. También estamos diseñando FIELDS() como una operación de consulta que se ampliará para admitir nuevos casos de uso en el futuro, por lo que si la perspectiva de formas más intuitivas de aprovechar las agrupaciones predefinidas (o incluso los conjuntos) de campos en la plataforma le entusiasma, entonces querrá estar atento a este espacio y seguir recibiendo comentarios

La función SOQL FIELDS() está generalmente disponible a partir de la versión Spring ’21. Para obtener información de uso específica y consideraciones de rendimiento, consulte el tema FIELDS() dentro de la Guía del desarrollador de SOQL.

Sobre el autor

Kris Harrison es directora de gestión de productos para API, SOQL y servicios externos en Salesforce.

Complete el curso Learn MOAR Spring ’21 trailmix for Admins or Developers antes del 31 de marzo de 2021 para obtener una insignia especial de la comunidad y participar para tener la oportunidad de ganar 1 de los 5 vales de certificación Trailhead de 200 USD. Consulte las reglas oficiales a continuación.

Comparte lo que te gusta del lanzamiento de primavera ’21 con el hashtag #LearnMOAR. Además, no olvide inscribirse en Release Readiness Live que tendrá lugar el 29 de enero de 2020.

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2021/01/new-soql-fields-function-is-ga.html