Categories
Developers Tutoriales de Salesforce

Creación de prompts potentes para Einstein for Developers ☁️

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.

El artículo trata sobre cómo escribir instrucciones eficaces para Einstein for Developers, un asistente de codificación de IA para lenguajes específicos de Salesforce. Explica que la estructuración adecuada de las instrucciones es crucial para la generación precisa de código y proporciona consejos para escribir instrucciones eficaces. El artículo también destaca la importancia de fundamentar la solicitud con metadatos orgánicos y proporcionar detalles de contexto adicionales. Incluye ejemplos y capturas de pantalla para ilustrar el proceso. El artículo concluye mencionando las futuras mejoras de Einstein for Developers y anima a los usuarios a enviar sus comentarios.

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2024/02/writing-effective-prompts-for-einstein-for-developers.html

Categories
Developers Tutoriales de Salesforce

Desbloquee la inteligencia artificial para su código Apex con ApexGuru ☁️

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.

Obtenga información impulsada por IA para su código Apex con ApexGuru | Salesforce Developers Blog

<dx-traffic-labeler internal-ips="^40.136.179.(19[2-9]|2([0-4][0-9]|5[0-5]))|(204.14.236|136.146.154).(([0-9]|[1-9][0-9])|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$,^104.161.24(6|7).(([0-9]|[1-9][0-9])|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$,^85.222.13(4|5).(([0-9]|[1-9][0-9])|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$,^104.161.24(2|3).(([0-9]|[1-9][0-9])|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$,^54.(148.249.104|214.85.193)$,^13.110.5(4|5).(([0-9]|[1-9][0-9])|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$,^66.203.11(4|5).(([0-9]|[1-9][0-9])|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$,^202.95.77.(6[4-9]|[7-8][0-9]|9[0-5])$,^(13.250.175.119|52.220.254.0)$,^221.133.209.1(2(8|9)|[

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2024/02/get-ai-powered-insights-for-your-apex-code-with-apexguru.html

Categories
AppExchange Developers Tutoriales de Salesforce

Mejore los conocimientos de los usuarios con interacciones personalizadas para AppExchange App Analytics ☁️

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.

Los socios ISV ahora pueden utilizar interacciones personalizadas para AppExchange App Analytics para obtener una mejor comprensión de cómo los clientes utilizan los paquetes gestionados. Esta nueva función, disponible como parte de la versión Spring ’24, permite a los socios instrumentar completamente sus paquetes gestionados en Apex para registrar las interacciones de usuario que les interesan.

Para configurar interacciones personalizadas, los socios pueden utilizar el nuevo método Apex «logCustomInteraction» proporcionado por el espacio de nombres y la clase IsvPartners.AppAnalytics. Este método requiere una etiqueta de interacción, que debe ser un valor Apex enum definido como parte del paquete gestionado. Los socios también pueden utilizar opcionalmente identificadores Apex o UUID para agrupar interacciones que pertenezcan a un mismo grupo.

Una vez configuradas las interacciones personalizadas, los socios pueden instrumentar su código Apex añadiendo llamadas al método «logCustomInteraction» en los puntos adecuados de su código. Es importante tener en cuenta que hay un límite de 50 interacciones por solicitud de usuario, por lo que los socios deben evitar llamar al método dentro de un bucle.

Los datos de interacción personalizada registrados pueden analizarse descargando el registro de uso del paquete y buscando registros con un log_record_type de «CustomInteraction» y un custom_entity_type de «CustomInteractionLabel». La columna custom_entity contiene la etiqueta de interacción personalizada definida en el enum de Apex. Los datos incluyen información como la marca de tiempo, detalles de la organización, detalles del usuario y la ubicación en Apex donde se registró la interacción.

En general, las interacciones personalizadas proporcionan a los socios ISV información valiosa sobre cómo utilizan los clientes sus paquetes gestionados. Los socios pueden utilizar estos datos para tomar decisiones informadas sobre la hoja de ruta, identificar a los clientes en riesgo y mejorar la experiencia del usuario.

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2024/02/get-better-user-insights-with-custom-interactions-for-appexchange-app-analytics.html

Categories
Developers

El escudo de la seguridad: Evitar las descargas de datos con la clasificación de datos

Gran idea o pregunta permanente: Cómo evitar la descarga de datos críticos a través de informes?

Objetivos:

Después de leer este blog, serás capaz de:

  • Entender la clasificación de datos
  • Configurar la clasificación de datos para campos
  • Entender la Seguridad de las Transacciones
  • Crear una política de seguridad de transacciones
  • Implementar la seguridad mejorada de las transacciones de Apex
  • Implementar la seguridad mejorada de las transacciones de Apex
  • Y mucho más

Benjamin Moore trabaja como arquitecto de Salesforce en Gurukul On Cloud (GoC). GoC ha adquirido recientemente el producto complementario Event Monitoring de Salesforce. Desea realizar las siguientes tareas:

  1. Defina la clasificación de datos para el campo Correo electrónico en Contacto con estas especificaciones:
      1. Propietario de datos: Rakesh Gupta
      2. Uso del campo: Activo
      3. Nivel de sensibilidad de los datos: Restringido
      4. Categorizar el cumplimiento como:
        1. PII (Información de identificación personal)
        2. HIPAA (Ley de portabilidad y responsabilidad de los seguros de salud)
        3. PII (Información de identificación personal)
        4. GDP (Política de protección de datos)
        5. GDPR (Reglamento general de protección de datos)
        6. PCI (Norma de seguridad de los datos del sector de las tarjetas de pago)
        7. COPIA (Ley de protección de datos)
        8. CCPA (Ley de Privacidad del Consumidor de California)

    <li

  2. Utilice la clasificación de datos anterior para evitar que los usuarios añadan (y descarguen) el campo Correo electrónico al informe.
  3. Asegúrese de que el administrador del sistema (Rakesh Gupta) recibe notificaciones sobre estas acciones, tanto a través de correo electrónico como de notificaciones in-app.

Las empresas crean muchos datos cada día, y mantenerlos a salvo de robos o acciones dañinas se está convirtiendo en algo muy complicado. Algunos de estos datos son tan importantes que, si se roban o quedan expuestos, podrían causar grandes problemas a la empresa y a sus clientes. Este tipo de datos necesita una fuerte protección. Pero también hay datos que se pueden compartir abiertamente sin causar ningún problema.

<p

Saber qué datos necesitan la máxima protección y cuáles no es fundamental para mitigar los riesgos y cumplir las normativas estatales, federales y del sector. Además, le ayuda a elaborar un buen plan para mantener a salvo todos los tipos de datos con el nivel de seguridad adecuado.

Cómo proteger los datos de forma segura

En términos sencillos, la clasificación de datos es un proceso que le ayuda a identificar qué tipos de datos tiene y cómo los está utilizando, incluyendo quién necesita acceder a ellos y cuánto tiempo necesita conservarlos. Se trata de un paso fundamental en el plan de gobierno de datos de cualquier empresa, o estrategia para gestionar y proteger los datos y hacer que estén disponibles en toda la organización.

<p

Beneficios de la clasificación de datos

Las organizaciones que no aplican la clasificación de datos se exponen a elevados riesgos de robo de datos e incumplimiento de la normativa. Implementar una clasificación de datos sólida es una parte clave de la elaboración de un plan que proteja sus datos de forma inteligente, en función de su nivel de riesgo, y que garantice el cumplimiento de las normas. He aquí cómo la clasificación de datos puede ser ventajosa:

  1. Seguridad de los datos: Como primer paso de cualquier plan de seguridad, la clasificación de datos ayuda a informar sobre casi todos los aspectos de la seguridad de los datos, incluida la autenticación, la autorización, el cifrado, las copias de seguridad, etc.
  2. Seguridad de los datos
  3. Seguridad de los datos
  4. Seguir las normas: La clasificación de datos le ayudará a garantizar el cumplimiento de las normas de seguridad de la información, como SOC 2, ISO 270001 y PCI, así como de normativas como HIPAA, GDPR y CCPA.
  5. Cumplimiento de normas
  6. Respuesta a incidentes: si se produce una fuga de datos u otro problema de seguridad, sabrá exactamente qué tipo de datos están afectados. Esto le ahorra una enorme cantidad de estrés, así como daños a la reputación y financieros, y ayuda a cualquier investigación.
  7. Respuesta a incidentes
  8. Control de acceso: ayuda a establecer controles de acceso claros, de modo que sólo las personas autorizadas puedan acceder a determinados datos, reduciendo así la posibilidad de amenazas internas.
  9. Control de acceso
  10. Gestión del ciclo de vida de los datos: saber qué datos tiene y su importancia puede orientar las decisiones sobre cuánto tiempo conservarlos y cuándo eliminarlos de forma segura.

Campos de metadatos de clasificación de datos

Salesforce le permite definir la clasificación de datos para cualquier campo de objeto estándar o personalizado. El marco de clasificación de datos de Salesforce proporciona cuatro campos distintos para ayudar a organizar y definir los datos de su organización:

Campo Descripción
Categorización de conformidad Las leyes, definiciones o normativas de cumplimiento que están relacionadas con los datos del campo. Valores por defecto:

  • CCPA-Ley de privacidad del consumidor de California
  • COPPA-Ley de protección de la privacidad infantil en línea
  • GDPR-Reglamento general de protección de datos
  • HIPAA-Ley de portabilidad y responsabilidad de los seguros de salud
  • PCIP-IPC
  • PCI-Industria de tarjetas de pago
  • PersonalInfo-Información personal. Para uso con la función de gestión de información personal mejorada. Sólo disponible si están habilitadas las funciones Gestión de información personal mejorada y Experiencias digitales.
  • Información personal
  • PII-Información de identificación personal

El campo corresponde al campo ComplianceGroup de la API FieldDefinition Tooling.

Propietario de los datos La persona o grupo asociado a este campo. El propietario de los datos comprende la importancia de los datos del campo para su empresa y podría ser responsable de determinar el nivel mínimo de sensibilidad de los datos.El campo corresponde al campo BusinessOwnerId en la FieldDefinition API de herramientas.
Nivel de sensibilidad de los datos La sensibilidad de los datos contenidos en este campo. Valores por defecto:

  • Público-Disponible para que el público lo vea pero no lo modifique.
  • Interno-Disponible para los empleados y contratistas de la empresa. Estos datos no deben compartirse públicamente, pero pueden compartirse con clientes, socios y otros bajo un acuerdo de no divulgación (NDA).
  • Confidencial
  • Confidencial: disponible para un grupo aprobado de empleados y contratistas. Estos datos no están restringidos por la ley, la normativa o un acuerdo maestro de servicios (MSA) de la empresa. Se pueden compartir con clientes, socios y otros bajo un NDA.
  • Restringida: disponible sólo para un grupo aprobado de empleados y contratistas. Es probable que estos datos estén restringidos por la ley, la normativa, un NDA o un MSA de la empresa.
  • Disponible sólo para un grupo aprobado de empleados y contratistas
  • MissionCritical-Disponible sólo para un pequeño grupo de empleados y contratistas aprobados. Los terceros a los que se dé acceso podrían estar sujetos a requisitos contractuales más estrictos. Estos datos casi siempre están restringidos por la ley, la normativa, un NDA o un MSA de la empresa.

El campo corresponde al campo SecurityClassification de la API FieldDefinition Tooling API y la API FieldSecurityClassification SOAP API.

Uso del campo Rastrea si el campo está en uso. Valores por defecto:

  • Activo-En uso y visible.
  • DeprecateCandidate-Planeado para ser obsoleto y ya no está en uso.
  • DeprecateCandidate-Planificado para ser obsoleto y ya no está en uso
  • Oculto-No visible y posiblemente planificado para ser obsoleto. Utilícelo con precaución.

El campo se corresponde con el campo BusinessStatus de la API de herramientas FieldDefinition&nbsp.

Definir los valores de clasificación de datos

En Salesforce, los campos pueden tener diferentes Valores de clasificación de datos para ayudar a las organizaciones a cumplir con las políticas de privacidad, las normativas y para garantizar que los datos confidenciales se gestionan correctamente. Cuando se trata de un campo de correo electrónico, normalmente contiene información personal que se puede utilizar para identificar a un individuo, como una dirección de correo electrónico personal o de trabajo.

Clasificación de datos

Aquí están los Valores de clasificación de datos para un campo de correo electrónico en Contacto, basados en el requisito de negocio especificado:

  1. Haga clic en Configurar.
  2. En el Administrador de objetos, escriba Contacto y seleccione Contacto.
  3. Seleccione Campos & Relaciones. Seleccione el campo Correo electrónico y haga clic en Editar.
  4. Definir campos y relaciones
  5. define los valores como se muestra a continuación:<img decoding=»async» data-attachment-id=»60857″ data-permalink=»https://automationchampion.com/2023/11/14/the-shield-of-security-preventing-data-downloads-with-data-classification/define-data-classification-in-salesforce/» data-orig-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/Define-Data-Classification-in-Salesforce.png?fit=816%2C475&ssl=1″ data-orig-size=»816,475″ data-comments-opened=»1″ data-image-meta=»{«aperture»:»0″,»credit»:»»,»camera»:»»,»caption»:»»,»created_timestamp»:»0″,»copyright»:»»,»focal_length»:»0″,»iso»:»0″,»shutter_speed»:»0″,»title»:»»,»orientation»:»0″}» data-image-title=»Defina la clasificación de datos en Salesforce» data-image-description data-image-caption data-medium-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/Defina la clasificación de datos en Salesforce.png?fit=300%2C175&ssl=1″ data-large-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/Define-Data-Classification-in-Salesforce.png?fit=640%2C373&ssl=1″ class=»aligncenter wp-image-60857 size-full» src=»https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos.png» alt width=»640″ height=»373″ srcset=»https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-5.png 816w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-6.png 300w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-7.png 150w, https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/Define-Data-Classification-in-Salesforce.png?resize=768%2C447&ssl=1 768w» sizes=»(max-width: 640px) 100vw, 640px»
  6. Haga clic en Guardar.

La implantación de la seguridad en las transacciones permite a las organizaciones establecer protocolos para mitigar las amenazas a la seguridad. Al funcionar de forma sincrónica, los usuarios pueden responder instantáneamente a los riesgos potenciales. Las posibles respuestas incluyen Bloquear el acceso, aplicar la autenticación multifactor o emitir Notificaciones.

Antes de configurar estos protocolos, es crucial comprender los tipos de eventos que se pueden supervisar, los criterios para aplicar políticas y los escenarios típicos en los que se aplican estas medidas. Para una comprensión en profundidad, considere explorar Supervisión de eventos de Salesforce: bajo el capó.

La seguridad de transacciones forma parte de la supervisión de eventos. Incluye las siguientes funciones:

<p data-selectable-paragraph

  1. Define políticas de seguridad de transacciones utilizando el constructor de condiciones declarativo o Apex.
  2. Diseñe políticas de seguridad personalizadas específicas para cada caso de uso para responder a las amenazas internas y evitar que sus datos salgan de los límites de su organización.
  3. Configure notificaciones para responder proactivamente a las alertas con código personalizado.
  4. Configure notificaciones para responder proactivamente a las alertas con código personalizado

Diferencia entre el creador de condiciones y las políticas basadas en Apex

Condition Builder es una función de Setup que permite crear políticas mediante clics, sin necesidad de escribir código. Con Condition Builder, puede seleccionar campos específicos de ciertos objetos para vigilar las actividades de los clientes. Las acciones de su política dependen de cómo interactúen los usuarios con estos campos, razón por la cual se conocen como condiciones.

<p

Este ejemplo implementa una política que se activa cuando alguien añade un campo a una Vista de lista con un nombre que contiene Correo electrónico.

<img decoding=»async» data-attachment-id=»60919″ data-permalink=»https://automationchampion.com/2023/11/14/the-shield-of-security-preventing-data-downloads-with-data-classification/transaction-security-policy-condition-builder/» data-orig-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/Transaction-Security-Policy-Condition-Builder.png?fit=1361%2C711&ssl=1″ data-orig-size=»1361,711″ data-comments-opened=»1″ data-image-meta=»{«aperture»:»0″,»credit»:»»,»camera»:»»,»caption»:»»,»created_timestamp»:»0″,»copyright»:»»,»focal_length»:»0″,»iso»:»0″,»shutter_speed»:»0″,»title»:»0″,»orientation»:»0″}» data-image-title=»Política de seguridad de las transacciones – Condition Builder» data-image-description data-image-caption data-medium-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/Transaction-Security-Policy-Condition-Builder.png?fit=300%2C157&ssl=1″ data-large-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/Transaction-Security-Policy-Condition-Builder.png?fit=640%2C334&ssl=1″ class=»aligncenter wp-image-60919 size-full» src=»https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-1.png» alt width=»640″ height=»334″ srcset=»https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-8.png 1361w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-9.png 300w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-10.png 1024w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-11.png 150w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-12.png 768w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-13.png

Sin embargo, las opciones de condiciones en Condition Builder son limitadas. Son sólo una parte de todos los campos posibles en los objetos de eventos y dependen del tipo de objeto con el que estés tratando. Por otro lado, si haces una política usando código Apex, puedes usar cualquier campo de los objetos de evento.

Condiciones

Por ejemplo, si quieres definir una política de seguridad de transacciones utilizando Clasificación de Datos, la única opción es utilizar código Apex.

Definir la política de seguridad de transacciones utilizando Apex

Ahora toca resolver los casos de uso de negocio #2 y #3. Ya hemos definido la Clasificación de Datos para el Correo Electrónico del Contacto como se mencionó anteriormente (Definir los Valores de Clasificación de Datos).

Definir la Política de Seguridad de la Transacción

Antes de continuar, debería familiarizarse con los siguientes objetos en Salesforce.

Nombre del objeto Descripción
InformeEvento Realiza un seguimiento de cuándo se ejecutan los informes en su org. Puede utilizar ReportEvent en una política de seguridad de transacciones. ReportEvent es un objeto grande que almacena los datos de eventos de ReportEventStream.
FieldDefinition Representa un campo estándar o personalizado, proporcionando acceso basado en filas a los metadatos del campo. Contrasta FieldDefinition con EntityParticle, que representa cada elemento de un campo que se puede presentar en una interfaz de usuario. FieldDefinition tiene paridad con el tipo de metadatos Field.

Siga los pasos que se indican a continuación para crear una clase Apex y una política de seguridad de transacciones para abordar el caso de uso empresarial dado.

Paso 1: Crear una clase Apex que implemente la interfaz TxnSecurity.EventCondition

  1. Crea una Clase Apex, ReportSecurityEvaluator, utiliza para evaluar la seguridad de los datos en los informes. Implementa la interfaz TxnSecurity.EventCondition, que forma parte del marco de seguridad de transacciones de Salesforce. La clase contiene métodos para evaluar si un informe accede a datos confidenciales basándose en niveles de clasificación de datos predefinidos.
    clase global ReportSecurityEvaluator implements TxnSecurity.EventCondition { public boolean evaluate(SObject event) { switch on evento { cuando ReportEvent reportEvent { if (reportEvent.QueriedEntities.contains('Contacto')) { return hasRestrictedColumn(reportEvent.ColumnHeaders); } return false; } when null { return false; } cuando else { return false; } } } private boolean hasRestrictedColumn(String ColumnHeaders) { Map<String, String> fieldToSecurityLevel = getFieldSecurityMap(); List<String> columnNames = parseColumnHeaders(ColumnHeaders); for (String nombreColumna : nombresColumna) { String securityLevel = fieldToSecurityLevel.get(columnName); if ('Restricted'.equalsIgnoreCase(securityLevel)) { return true; } } return false; } private Map<String, String> getFieldSecurityMap() { Map<String, String> securityMap = new Map<String, String>(); Lista<FieldDefinition> fieldDefinitions = [ SELECT SecurityClassification, QualifiedApiName FROM FieldDefinition WHERE EntityDefinition.QualifiedApiName = 'Contacto']; for (FieldDefinition fieldDefinition : fieldDefinitions) { if (fieldDefinition.SecurityClassification != null) { securityMap.put(fieldDefinition.QualifiedApiName, fieldDefinition.SecurityClassification); } } return securityMap; } private List<String> parseColumnHeaders(String columnHeadersCSV) { List<String> sanitizedColumnNames = new List<String>(); try { Integer closingBracketIndex = columnHeadersCSV.indexOf(']'); if (closingBracketIndex != -1) { columnHeadersCSV = columnHeadersCSV.substring(0, closingBracketIndex + 1); } String cleanHeaders = columnHeadersCSV.trim().replaceAll('[|]', ''); List<String> columnHeaders = cleanHeaders.split(',s?'); for (String header : columnHeaders) { Integer lastDotIndex = encabezado.lastIndexOf('.'); String columnName = lastDotIndex != -1 ? header.substring(lastDotIndex + 1) : header; sanitizedColumnNames.add(columnName.toLowerCase().capitalize()); } } catch (Exception e) { return new List<String>(); } return sanitizedColumnNames; }
    }

Paso 2: Crear una política de seguridad de transacciones mejorada que utilice Apex

  1. Haga clic en Configuración.
  2. En el cuadro Búsqueda rápida, escriba Seguridad de transacciones.
  3. Seguridad de transacciones
  4. Seleccione Políticas de seguridad de transacciones, y, a continuación, haga clic en el botón Nuevo.
  5. Seleccione Apex y, a continuación, haga clic en Siguiente.<img loading=»lazy» decoding=»async» data-attachment-id=»60930″ data-permalink=»https://automationchampion.com/2023/11/14/the-shield-of-security-preventing-data-downloads-with-data-classification/create-an-enhanced-transaction-security-policy-that-uses-apex/» data-orig-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/Create-an-Enhanced-Transaction-Security-Policy-That-Uses-Apex.png?fit=879%2C607&ssl=1″ data-orig-size=»879,607″ data-comments-opened=»1″ data-image-meta=»{«apertura»:»0″,»crédito»:»»,»cámara»:»0″,»caption»:»»,»created_timestamp»:»0″,»copyright»:»»,»focal_length»:»0″,»iso»:»0″,»shutter_speed»:»0″,»title»:»0″,»orientation»:»0″}» data-image-title=»Cree una política de seguridad de transacciones mejorada que utilice Apex» data-image-description data-image-caption data-medium-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/Create-an-Enhanced-Transaction-Security-Policy-That-Uses-Apex.png?fit=300%2C207&ssl=1″ data-large-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/Create-an-Enhanced-Transaction-Security-Policy-That-Uses-Apex.png?fit=640%2C442&ssl=1″ class=»aligncenter wp-image-60930 size-full» src=»https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-2.png» alt width=»640″ height=»442″ srcset=»https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-14.png 879w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-15.png 300w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-16.png 150w, https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/Create-an-En
  6. Seleccione los siguientes datos
    1. Evento: InformeEvento
    2. Clase Apex: ReportSecurityEvaluator<img loading=»lazy» decoding=»async» data-attachment-id=»60933″ data-permalink=»https://automationchampion.com/2023/11/14/the-shield-of-security-preventing-data-downloads-with-data-classification/what-triggers-this-policy/» data-orig-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-triggers-this-policy.png?fit=1148%2C683&ssl=1″ data-orig-size=»1148,683″ data-comments-opened=»1″ data-image-meta=»{«aperture»:»0″,»credit»:»»,»camera»:»»,»caption»:»»,»created_timestamp»:»0″,»copyright»:»»,»focal_length»:»0″,»iso»:»0″,»shutter_speed»:»0″,»title»:»»,»orientation»:»0″}» data-image-title=»¿Qué activa esta política?» data-image-description data-image-caption data-medium-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-triggers-this-policy.png?fit=300%2C178&ssl=1″ data-large-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-triggers-this-policy.png?fit=640%2C381&ssl=1″ class=»aligncenter wp-image-60933 size-full» src=»https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-3.png» alt width=»640″ height=»381″ srcset=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-triggers-this-policy.png?w=1148&ssl=1 1148w, https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-triggers-this-policy.png?resize=300%2C178&ssl=1 300w, https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-triggers-this-policy.png?resize=1024%2C609&ssl=1 1024w, https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-triggers-this-policy.png?resize=150%2C89&ssl=1 150w, https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-triggers-this-policy.png?resize=768%2C457&ssl=1 768w»
  7. Haga clic en Siguiente.
  8. Seleccione la acción que realiza la política cuando se activa.
    1. Acción: Bloquear
    2. Mensaje de bloqueo: Mensaje de bloqueo predeterminado
    3. Notificación:
      1. Notificación por correo electrónico
      2. Notificación en la aplicación
    4. Recipiente: Rakesh Gupta
    5. Contenido de la notificación de correo electrónico: Contenido predeterminado del correo electrónico
    6. Nombre: Alguien intentó descargar un informe con campos restringidos.
    7. Estado: Activado 
      1. <img loading=»lazy» decoding=»async» data-attachment-id=»60934″ data-permalink=»https://automationchampion.com/2023/11/14/the-shield-of-security-preventing-data-downloads-with-data-classification/what-actions-do-you-want-to-take-when-the-policy-is-triggered/» data-orig-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-actions-do-you-want-to-take-when-the-policy-is-triggered-.png?fit=1178%2C847&ssl=1″ data-orig-size=»1178,847″ data-comments-opened=»1″ data-image-meta=»{«aperture»:»0″,»credit»:»»,»camera»:»»,»caption»:»»,»created_timestamp»:»0″,»copyright»:»»,»focal_length»:»0″,»iso»:»0″,»shutter_speed»:»0″,»title»:»»,»orientation»:»0″}» data-image-title=»¿Qué acciones desea realizar cuando se active la política?» data-image-description data-image-caption data-medium-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-actions-do-you-want-to-take-when-the-policy-is-triggered-.png?fit=300%2C216&ssl=1″ data-large-file=»https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-actions-do-you-want-to-take-when-the-policy-is-triggered-.png?fit=640%2C460&ssl=1″ class=»aligncenter wp-image-60934 size-full» src=»https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-4.png» alt width=»640″ height=»460″ srcset=»https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-17.png 1178w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-18.png 300w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-19.png 1024w, https://discover.egafutura.com/wp-content/uploads/2023/11/el-escudo-de-la-seguridad-evitar-las-descargas-de-datos-con-la-clasificacion-de-datos-20.png 150w, https://i0.wp.com/automationchampion.com/wp-content/uploads/2023/11/What-actions
  9. Haga clic en Finalizar.

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2023/11/14/the-shield-of-security-preventing-data-downloads-with-data-classification/

Categories
Developers Salesforce

Uso de prueba de flujo versus clase de prueba para flujo en Salesforce

Introducción de la prueba de flujo

Anteriormente, si queríamos probar el flujo, necesitábamos escribir una clase de prueba de Apex para el flujo. Con la versión Summer '22, Salesforce introdujo un marco de prueba para flujos activados por registros para automatizar las pruebas de flujos. Ahora podemos dejar que Salesforce pruebe el flujo, asegurarnos de que los resultados cumplan con las expectativas y resaltar cuando no lo sean. Ahora podemos crear y ejecutar pruebas dentro del propio generador de flujo, de forma declarativa sin escribir ningún código.

Cómo funciona

Establecer detalles de prueba, desencadenante y ruta

Proporciona una etiqueta de prueba de flujo y una descripción de la prueba. Establezca el activador de prueba en Creado/actualizado según el escenario. La ruta de la prueba está configurada para Ejecutar inmediatamente.

imagen.png Establecer registro de activación inicial/actualizado

Usando la función de búsqueda, podemos buscar el registro para usarlo como plantilla inicial. Tras la selección del registro, los campos se completan a partir del registro seleccionado. La prueba hereda los valores de campo del registro seleccionado. Sin embargo, podemos modificar los valores de estos campos antes de finalizar la prueba. La prueba no está vinculada a este registro pero contiene y utiliza sus valores de campo.

imagen.png Establecer afirmaciones

La aserción es una forma de comparar el resultado real con el resultado previsto. Si coinciden, entonces la afirmación se evalúa como verdadera. De lo contrario, la afirmación falla. Escriba las siguientes afirmaciones para garantizar que se cumplan los criterios de entrada de registros para el flujo y se logre el resultado esperado.

imagen.png Ejecutar prueba y ver detalles

Haga clic en el botón "Ver pruebas", seleccione el menú desplegable de la prueba de flujo que queremos ejecutar y seleccione Ejecutar prueba y ver detalles.

imagen.png La prueba de flujo se ejecuta y resalta el camino que tomó la prueba. Si necesitamos probar el flujo, simplemente podemos ejecutar la prueba. Ya no es necesario configurar los datos de prueba mediante programación. ¡Esto aumenta la eficiencia de las pruebas! Si necesitamos realizar una mejora en este flujo en el futuro, necesitaremos actualizar el registro de prueba asociado en consecuencia.

imagen.png Beneficios

  1. Fácil y cómodo de usar: podemos crear registros de prueba a través de la interfaz de usuario y ponerlos a prueba.
  2. Tiempo y esfuerzo: reduce el tiempo y el esfuerzo necesarios, ya que no necesitamos escribir código, solo crear registros desde la interfaz de usuario y realizar afirmaciones.
  3. No afectará la cobertura del código existente a nivel de clase: si migramos cualquier funcionalidad del activador al flujo, la lógica subyacente del activador/clase también se limpia manualmente como parte de este ejercicio. Esto no reducirá la cobertura del código de la clase ya que la lógica se elimina por completo.
  4. Cobertura de la prueba de flujo: el porcentaje de cobertura no se captura en la prueba de flujo como podemos hacerlo a través de la clase Apex. Más bien es capaz de cubrir nodos. Una vez seleccionamos “Ejecutar prueba y ver detalles”. La ruta resaltada en amarillo representará la cobertura real del flujo desde el principio hasta el final del nodo.

imagen.png

imagen.png

imagen.png Desventaja

  1. Solo puede crear pruebas de flujo para crear, actualizar o crear/actualizar flujos activados por registros. Aún no se admite la eliminación de flujos activados por registros. – Solo para el escenario de eliminación de registros podemos escribir una clase de prueba
  2. Puede afectar la cobertura general: dado que la cobertura de prueba general se calcula en función de la cobertura de prueba de todas las clases combinadas (promedio), si migramos cualquier característica que tenga una cobertura de prueba más alta en la clase ápice relevante, podría reducir el porcentaje de cobertura general del código. (Como actualmente solo nos estamos enfocando en migrar el activador relacionado con la cuenta para fluir, solo se ve afectada 1 clase de prueba, por lo que no hay cambios significativos en la cobertura del código Apex).
  3. Las pruebas de flujo no admiten rutas de flujo que se ejecuten de forma asincrónica. Sin embargo, no tenemos flujo asíncrono en nuestra organización. Estamos creando flujos para cubrir escenarios que se ejecutan sincrónicamente.

Recomendación

  • Podemos comenzar a dar pasos para pasar a la prueba de flujo a medida que Salesforce realiza mejoras continuas en el flujo, por lo que en versiones futuras, podemos esperar que la prueba de flujo incluya más mejoras y reduzca las limitaciones.
  • Podemos comenzar escribiendo una prueba de flujo para las actualizaciones rápidas de campos (antes) de los flujos de activación de registros.
  • Mejorar la cobertura de prueba de las clases que tienen menos cobertura para que podamos usar la prueba de flujo.

Preguntas más frecuentes

¿Cuál es el porcentaje de cobertura para implementar Flow?

En relación con las pruebas de Apex, las pruebas de flujo no se consideran parte de la cobertura de pruebas como en el 75%+ para el despliegue de productos.

¿Brindan cobertura de código como lo hace la clase de prueba? Si no, ¿debemos pensar en eliminar el flujo de la cobertura de prueba?

Sí, cubren resaltando nodo por nodo.

¿Puede confirmar si la prueba de flujo permite ejecutar pruebas masivas?

No, no admite pruebas de registros masivos. En la mayoría de los escenarios relacionados con desencadenantes, hemos creado un registro individual en la clase de prueba y verificamos los escenarios de prueba. Si reemplazamos esos desencadenantes con flujos, no habrá una gran diferencia en los casos de prueba.

¿La prueba de flujo admite la asincronía?

Las pruebas de flujo no admiten rutas de flujo que se ejecuten de forma asincrónica. Sin embargo, no tenemos flujo asíncrono en nuestra organización. Estamos creando flujos para cubrir escenarios que se ejecutan sincrónicamente.

¿Cuál es el rendimiento de las pruebas de flujo en comparación con las clases de prueba?

No veo ninguna documentación oficial, pero creo que la prueba de flujo será más rápida en comparación con la clase de prueba porque cuando ejecutamos una prueba creará una instancia de la clase y llamará a métodos individuales. Podemos ejecutar casos de prueba individuales utilizando una prueba de flujo, pero no es posible ejecutar un solo método individual desde la clase de prueba, lo que lleva mucho tiempo.

Referencia

Prueba de flujo (beta)

Consideraciones para probar el flujo

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/use-of-flow-test-vs-test-class-for-flow-in-salesforce/#utm_source=rss&utm_medium=rss&utm_campaign=use-of-flow-test-vs-test-class-for-flow-in-salesforce

Categories
Developers Tutoriales de Salesforce

Creación de aplicaciones impulsadas por IA con LLM y Einstein ☁️

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.

La IA generativa es la tecnología más transformadora desde Internet y revoluciona la forma en que creamos e interactuamos con la información. Para los desarrolladores, esto plantea nuevas preguntas: desde la práctica «¿Cómo puedo crear aplicaciones impulsadas por IA con modelos de lenguaje grandes (LLM)?» Más profundamente, “¿Cómo cambiará la IA generativa la naturaleza de las aplicaciones? ” Exploramos estas dos preguntas en esta publicación de blog.

¿Cómo creo aplicaciones impulsadas por IA con LLM?

Comencemos con la primera pregunta: «¿Cómo creo aplicaciones con LLM?» y explore tres opciones que comúnmente se consideran:

  1. Entrena tu propio modelo
  2. Personaliza un modelo de código abierto
  3. Utilice modelos existentes a través de API

Entrena tu propio modelo

Entrenar su propio modelo le brinda control total sobre los datos de los que aprende su modelo. Por ejemplo, puede entrenar un modelo con datos específicos de su industria. Un modelo entrenado con datos de un dominio específico generalmente será más preciso que un modelo de propósito general para casos de uso centrados en ese dominio. Si bien entrenar su propio modelo ofrece más control y precisión, puede que no siempre sea el mejor enfoque. Aquí hay algunas cosas para considerar:

  1. Tiempo y recursos: formar su propio LLM desde cero puede llevar semanas o incluso meses. Como punto de referencia, aunque es probable que su modelo sea mucho más pequeño, el modelo GPT-3 de OpenAI tardó 1,5 millones de horas de GPU en entrenarse.
  2. Experiencia: para entrenar su modelo, también necesitará un equipo de ingenieros especializados en aprendizaje automático (ML) y procesamiento del lenguaje natural (NLP).
  3. Seguridad de los datos: el poder de los LLM hace que sea tentador crear modelos que aprendan de todos sus datos, pero esto no siempre es lo correcto desde el punto de vista de la seguridad de los datos. Puede haber tensión entre la forma en que aprenden los LLM y la forma en que se implementan las políticas de seguridad de datos en su empresa. Los LLM aprenden de grandes cantidades de datos. ¡Cuantos más datos mejor! Sin embargo, con seguridad a nivel de campo (FLS) y permisos estrictos, las políticas de seguridad de datos corporativas a menudo se basan en el principio de privilegio mínimo: los usuarios solo deben tener acceso a los datos que necesitan para realizar su trabajo específico. ¡Cuantos menos datos mejor! Por lo tanto, un modelo formado con todos los datos disponibles de los clientes y puesto a disposición de todos en su empresa puede no ser una buena idea y violar las políticas de seguridad de datos de su empresa. Sin embargo, un modelo entrenado en especificaciones de productos y resoluciones de tickets de soporte anteriores puede ayudar a los agentes a resolver tickets nuevos sin comprometer la seguridad de los datos.

Personaliza un modelo de código abierto

Personalizar un modelo de código abierto normalmente lleva menos tiempo y es menos costoso que entrenar su propio modelo desde cero. Sin embargo, aún necesita un equipo de ingenieros especializados en aprendizaje automático (ML) y procesamiento del lenguaje natural (NLP). Dependiendo del caso de uso, es posible que aún experimentes la tensión de seguridad de los datos descrita anteriormente.

Utilice modelos existentes a través de API

Utilizar modelos existentes a través de API es la forma más sencilla de crear aplicaciones con LLM. Esta es también la opción más utilizada en este momento. Sin embargo, estos modelos no se han entrenado con los datos contextuales o privados de su empresa y, por lo tanto, el resultado que producen puede ser demasiado genérico para ser útil.

En esta publicación de blog, exploramos diferentes técnicas para agregar datos contextuales o privados de la empresa a través del mensaje. Debido a que el mensaje se crea dinámicamente en nombre del usuario, solo incluye datos a los que el usuario tiene acceso, lo que aborda la tensión de seguridad de los datos descrita anteriormente. Es posible que le preocupe pasar datos privados a una API de terceros, pero existen técnicas para abordar esa preocupación y también las describimos en esta publicación de blog.

Creación de aplicaciones impulsadas por IA utilizando modelos existentes a través de API

Llamada API básica

Los principales proveedores de modelos como OpenAPI , Anthropic , Google , Hugging Face y Cohere ofrecen API para trabajar con sus modelos. En la implementación más básica, su aplicación captura un mensaje del usuario, lo pasa como parte de la llamada API y muestra el resultado generado al usuario.

Por ejemplo, así es como se vería la llamada API usando la API OpenAI:

Esta opción puede funcionar para casos de uso simples que solo requieren un resultado general basado en conocimientos generales. Por ejemplo, » Escribe un haiku sobre el invierno» o «Escribe una declaración SQL de muestra con una unión externa». Pero si necesita una respuesta que se adapte a su propio contexto o a los datos privados de su empresa, es probable que el resultado generado sea demasiado genérico para ser útil.

Por ejemplo, digamos que un usuario ingresa el siguiente mensaje:

Escriba un correo electrónico de presentación para el director ejecutivo de Acme.

El correo electrónico generado no sería personalizado ni relevante porque el modelo no sabe nada sobre su relación con Acme y los negocios que ha hecho con ellos.

Puesta a tierra del LLM

Para que la respuesta sea más relevante y contextual, el usuario puede fundamentar el LLM con información adicional. Por ejemplo, pueden ingresar el siguiente mensaje:

Usted es John Smith, representante de cuentas de Northern Trail Outfitters.
Escriba un correo electrónico de presentación a Lisa Martinez, directora ejecutiva de ACME.
Aquí hay una lista de los últimos tres pedidos que Acme realizó a Northern Trail Outfitters:
Colección Verano 2023: $375,286
Colección Primavera 2023: $402,255
Colección Invierno 2022: $357,542

Esto permite que el LLM genere un resultado mucho más relevante. Sin embargo, este enfoque plantea dos problemas:

  1. El usuario debe ingresar mucha información de conexión a tierra manualmente. Por lo tanto, la calidad del resultado depende en gran medida de la calidad de la pregunta ingresada por el usuario.
  2. Está pasando información confidencial al proveedor del modelo donde potencialmente podría persistir o usarse para entrenar aún más el modelo, lo que significa que sus datos privados podrían aparecer en la respuesta generada por el modelo de otra persona.

Construcción rápida y puesta a tierra dinámica.

Para abordar la primera limitación anterior, puede construir el mensaje mediante programación. El usuario ingresa una cantidad mínima de información o simplemente hace clic en un botón en la aplicación y luego usted crea el mensaje mediante programación agregando datos relevantes. Por ejemplo, en respuesta a un clic en el botón “Escribir correo electrónico de introducción”, podría:

  1. Llame a un servicio para obtener información sobre el usuario.
  2. Llame a un servicio para obtener información sobre el contacto.
  3. Llame a un servicio para obtener la lista de oportunidades recientes.
  4. Construya el mensaje utilizando la información obtenida de los servicios de datos anteriores.

Así es como podrían verse estos pasos de construcción rápidos en Apex:

El principal inconveniente de este enfoque es que requiere un código personalizado para cada mensaje para poder realizar la sencilla tarea de fusionar datos dinámicos en texto estático.

Plantillas de aviso

Para facilitar la construcción del mensaje, podemos usar plantillas: un patrón de desarrollo de software bien conocido que se usa comúnmente para fusionar datos dinámicos en documentos estáticos. Con una plantilla, escribe un archivo de solicitud utilizando marcadores de posición que se reemplazan dinámicamente con datos dinámicos en tiempo de ejecución.

Así es como se vería el ejemplo de Apex anterior usando un lenguaje de plantilla genérico:

Eres {{ user.Name }}, {{user.Title}} en {{ user.CompanyName }}
Escriba un correo electrónico de presentación a {{ contact.Name }}, {{contact.Title}} en {{ contact.Account.Name }}
Estas son las oportunidades de {{contact.Account.Name}}:
{{#oportunidades}}
{{Nombre}}: {{Cantidad}}

{{/oportunidades}}

Las plantillas de mensajes no solo son útiles para crear mensajes mediante programación, sino que también se pueden utilizar como base para herramientas gráficas que admiten la creación de mensajes en un entorno de arrastrar y soltar.

Estudio rápido

Por eso creamos Prompt Studio, un nuevo creador de Salesforce que facilita la creación de indicaciones. Le permite crear plantillas de mensajes en un entorno gráfico y vincular campos de marcador de posición a datos dinámicos disponibles a través de datos de páginas de registro, un flujo, una nube de datos, una llamada de Apex o una llamada API. Una vez creada, se puede utilizar una plantilla de solicitud en diferentes lugares para consultar el modelo, incluidas las páginas de registro y el código Apex.

Capa de confianza de Einstein

Prompt Builder le permite definir mensajes basados dinámicamente en un entorno gráfico. Pero, ¿cómo se envía ese mensaje de forma segura a un proveedor de LLM?

Puede enviar el mensaje directamente a la API del proveedor de LLM, pero hay una serie de preguntas a considerar con ese enfoque:

  • ¿Qué pasa con los problemas de cumplimiento y privacidad si pasa datos de información de identificación personal (PII) en el mensaje? ¿El proveedor del modelo podría conservar los datos de PII o incluso utilizarlos para entrenar aún más el modelo?
  • ¿Cómo se evitan las alucinaciones, la toxicidad y los sesgos en los resultados generados por los LLM?
  • ¿Cómo se rastrea y registra los pasos de creación de mensajes con fines de auditoría?

Si utiliza la API del proveedor de LLM directamente, tendrá que escribir un código personalizado para responder a estas preguntas. Hay muchas cosas a considerar y puede resultar difícil hacerlo bien para todos los casos de uso.

Ingrese a la capa de confianza de Einstein. Einstein Trust Layer le permite enviar solicitudes a LLM de forma confiable, abordando las inquietudes mencionadas anteriormente.

Así es como funciona:

  1. En lugar de realizar llamadas API directas, utiliza LLM Gateway para acceder al modelo. LLM Gateway admite diferentes proveedores de modelos y abstrae las diferencias entre ellos. Incluso puedes conectar tu propio modelo.
  2. Antes de enviar la solicitud al proveedor del modelo, pasa por una serie de pasos que incluyen el enmascaramiento de datos que reemplaza los datos PII con datos falsos para garantizar la privacidad y el cumplimiento de los datos.
  3. Para proteger aún más sus datos, Salesforce tiene acuerdos de retención cero con proveedores de modelos, lo que significa que los proveedores de modelos no persistirán ni entrenarán más sus modelos con datos enviados desde Salesforce.
  4. Cuando se recibe el resultado del modelo, pasa por otra serie de pasos, incluido el desenmascaramiento, la detección de toxicidad y el registro de seguimiento de auditoría. Demasking restaura los datos reales que fueron reemplazados por datos falsos por motivos de privacidad. La detección de toxicidad comprueba si hay contenido dañino u ofensivo en el resultado. El registro de seguimiento de auditoría registra todo el proceso con fines de auditoría.

De cara al futuro: creación de aplicaciones de una forma totalmente nueva

Ahora echemos un vistazo a lo que viene y abordemos la segunda pregunta planteada al principio de este artículo: ¿Cómo cambiará la IA generativa la naturaleza de las aplicaciones?

Encadenamiento rápido

La lógica involucrada en la creación de un mensaje a veces puede volverse compleja. Puede implicar múltiples llamadas a API o servicios de datos, como en el ejemplo de conexión a tierra dinámica anterior. Responder a la pregunta de un solo usuario puede incluso implicar varias llamadas al LLM. Esto se llama encadenamiento rápido. Considere el siguiente ejemplo:

Para construir el mensaje:

  1. Realizamos una primera llamada API o servicio de datos para obtener datos contextuales de la empresa
  2. Los datos que regresan de la primera llamada al servicio de datos se usan para crear un primer mensaje que usamos para consultar el LLM.
  3. La salida del LLM se utiliza como entrada para una segunda llamada de servicio de datos.
  4. Los datos que regresan de la segunda llamada al servicio de datos se utilizan para crear un segundo mensaje cuya respuesta se envía al usuario.

Las posibilidades de combinar llamadas de servicios de datos y llamadas de LLM para generar un resultado son infinitas.

Orquestación de IA

El enfoque descrito hasta ahora funciona bien, pero a medida que estos flujos de trabajo se vuelven más complejos, podemos ver la necesidad de alguna forma de orquestación. Como desarrollador, luego crearía una serie de bloques de construcción que realizan tareas granulares: recuperar datos sobre un cliente, actualizar un registro, realizar alguna lógica computacional, etc. Estos bloques de construcción se pueden orquestar o remezclar de diferentes maneras usando un herramienta de orquestación. Esto se podría hacer usando una herramienta de orquestación tradicional que le permita definir qué bloques de construcción usar, en qué orden y cuándo (con diferentes ramas «si»). Pero, ¿qué pasaría si la orquestación en sí estuviera impulsada por IA con un orquestador que pudiera razonar y elegir qué bloques de construcción usar y cómo componerlos para realizar una tarea específica? La orquestación impulsada por IA es un nuevo paradigma poderoso que tiene el potencial de revolucionar la forma en que interactuamos con los sistemas de IA y creamos aplicaciones.

El siguiente diagrama describe este nuevo paradigma de bloques de construcción orquestado por IA a un alto nivel.

En este diagrama, las acciones son los componentes básicos descritos anteriormente. Podrían ser acciones invocables de Apex, API de MuleSoft o indicaciones. Algunas acciones fundamentales están disponibles de forma predeterminada y otras serán desarrolladas por los desarrolladores. Esto también crea una oportunidad para un mercado de acciones creado por desarrolladores y socios.

El planificador es el orquestador impulsado por IA. Cuando la solicitud se pasa al tiempo de ejecución de la orquestación, el planificador elige (crea un plan para) qué acciones usar y cómo componerlas para responder mejor a la solicitud del usuario.

La orquestación de IA es un área activa de investigación en Salesforce y en la industria en su conjunto.

Resumen

El uso de modelos existentes a través de API es una forma común de crear aplicaciones impulsadas por IA con LLM. Con este enfoque, es necesario basar el modelo en datos privados o contextuales de la empresa para obtener resultados más relevantes y útiles. En lugar de pedirle al usuario que ingrese una gran cantidad de información básica manualmente, puede crear el mensaje mediante programación llamando a servicios de datos y agregando datos contextuales al mensaje. Prompt Studio es un nuevo creador de Salesforce que facilita la creación de mensajes al permitirle crear plantillas de mensajes en un entorno gráfico y vincular campos de marcador de posición a datos dinámicos. Einstein Trust Layer le permite enviar mensajes a las API de los proveedores de LLM de forma confiable, abordando problemas de privacidad, sesgos y toxicidad de los datos. La orquestación impulsada por la IA es un paradigma emergente que podría cambiar la forma en que interactuamos con los sistemas de IA y creamos aplicaciones.

Sobre el Autor

Christophe Coenraets es vicepresidente senior de Trailblazer Enablement en Salesforce. Es un desarrollador de corazón con más de 25 años de experiencia en la creación de aplicaciones empresariales, habilitando audiencias técnicas y asesorando a organizaciones de TI.

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

Añadir a holgura Suscríbete a RSS

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/08/building-ai-powered-apps-with-llms-and-einstein.html

Categories
Developers Tutoriales de Salesforce

Einstein GPT para desarrolladores: ahora en versión piloto ☁️

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.

Einstein GPT para desarrolladores: ahora en fase piloto | Blog de desarrolladores de Salesforce

La IA generativa es una tecnología transformadora que aumenta la productividad de los desarrolladores, acelera el desarrollo de aplicaciones de software y reduce la barrera para que cualquiera aprenda a programar. En el TrailblazerDX de este año, anunciamos Einstein GPT para desarrolladores , la solución de inteligencia artificial generativa de Salesforce que libera la productividad de los desarrolladores y les permite desarrollar Salesforce más rápido . Hoy, estamos encantados de anunciar que Einstein GPT para desarrolladores ahora está en piloto cerrado.

Creado específicamente para lenguajes y marcos de Salesforce, Einstein GPT para desarrolladores puede generar código Apex utilizando lenguaje natural. El soporte para LWC llegará pronto. Nuestro objetivo es que esté disponible en Beta abierta en Dreamforce 23 , para que todos puedan tener acceso a la herramienta. En este blog, exploraremos cómo comenzar con Einstein GPT para el desarrollo de Apex y cómo su potencial puede revolucionar su proceso de desarrollo.

Einstein GPT para desarrolladores frente a otras herramientas de codificación de IA

Las herramientas de codificación de IA generativa disponibles en la actualidad se entrenan principalmente en lenguajes públicos, como Java, Python y otros, así como en código disponible públicamente. Dado que los lenguajes específicos de Salesforce, como Apex y LWC, son propietarios, estas herramientas a menudo carecen de la capacitación necesaria para brindar recomendaciones precisas.

Además, las herramientas de codificación de IA son tan poderosas como el contexto que se les proporciona. Dado que estas herramientas de codificación públicas carecen del contexto de Salesforce de su organización, como los metadatos, las recomendaciones pueden ser inexactas o insuficientes para satisfacer sus necesidades. Por último, el uso de herramientas de inteligencia artificial disponibles públicamente expone su código privado más allá del límite de confianza de Salesforce y podría hacerlo público, una posible vulnerabilidad de seguridad.

Con Einstein GPT para desarrolladores, utilizamos CodeGen , nuestro propio modelo de código abierto para la síntesis de programas. Hospedamos CodeGen dentro del límite de confianza de Salesforce y lo hemos capacitado en lenguajes específicos de Salesforce como Apex y LWC. Con una base dinámica incorporada al proceso de generación de código, Einstein GPT enriquece sus recomendaciones utilizando sus metadatos y código. Nuestra capa de confianza de IA dentro de Einstein GPT garantiza que sus datos y código permanezcan seguros dentro de Salesforce y nunca se almacenen externamente.

Comience con Einstein GPT para desarrolladores

Einstein GPT para desarrolladores se encuentra actualmente en una fase piloto cerrada. Nuestro plan es que esté disponible en Open Beta para Dreamforce 2023. Una vez que su organización esté habilitada para esta herramienta, puede instalar la extensión Einstein GPT en su VS Code Desktop usando un archivo VSIX compartido. Einstein GPT también estará disponible en Code Builder , nuestro IDE basado en web, que se espera que esté disponible de forma general en octubre. ¡Estén atentos a las actualizaciones!

Para utilizar la herramienta Einstein GPT para desarrolladores de forma eficaz:

  1. Abra su VS Code, vaya a Archivo > Abrir carpeta en el menú y abra un proyecto de Salesforce DX existente o configure un nuevo proyecto.
  2. Para trabajar con Einstein GPT para desarrolladores, ejecute el comando SFDX: Autorizar una organización para conectarse a una organización sandbox o a una organización borrador de Salesforce. Podrá utilizar Einstein GPT para desarrolladores dentro de este entorno.

Si está utilizando organizaciones borrador, active Einstein GPT para desarrolladores habilitando la función adicional de organización borrador. Simplemente edite y guarde el archivo config/project-scratch-def.json en su proyecto DX y agregue la función EinsteinGPTForDevelopers a su lista de funciones existente.

Por ejemplo:

Finalmente, puede comenzar a generar código Apex escribiendo un mensaje mediante el comando Paleta de comandos: SFDX: generar código con Einstein GPT (ver captura de pantalla a continuación) . Tenga en cuenta que debe estar dentro de un archivo Apex ( .cls ) para que aparezca el comando.

A continuación se muestra un mensaje de ejemplo:

Quiero crear una clase de Apex. Llamémoslo OpportunityQuerySelector. Cree un método llamado getSumOfOpportunityRecords que recupere la cantidad de registros de oportunidades vinculados a un registro de cuenta específico. El método debe aceptar accountId como parámetro. Siga las mejores prácticas de seguridad y asegúrese de que el código se ejecute en el modo de usuario.

Y luego el resultado se muestra a continuación.

Si bien el código generado anteriormente no requirió muchas ediciones, es posible que necesite personalizar la salida generada por Einstein GPT según sus necesidades durante el desarrollo. El panel Einstein GPT: Historial y comentarios dentro del IDE le permite compartir comentarios sobre el resultado generado. ¡Estos comentarios son imprescindibles para ayudarnos a capacitar a nuestro LLM y mejorar su resultado! Estamos emocionados de escuchar sus comentarios.

Transformando el proceso de desarrollo

Recién estamos comenzando con la IA generativa para transformar su flujo de trabajo de desarrollo. Mira lo que viene pronto:

  • Compatibilidad con Lightning Web Component (LWC): genere código LWC basado en el procesamiento del lenguaje natural (NLP)
  • Finalización predictiva de código en línea: complete automáticamente la siguiente línea de código sugerida con metadatos contextuales del proyecto.
  • Verificación del rendimiento del código: escanee el código Apex y corrija errores de tiempo de ejecución durante el proceso de desarrollo
  • Asistencia conversacional: Pídale a Einstein que genere código contextual y documentación, explique el código o resuelva problemas complejos.

Conclusión

A medida que Einstein GPT para desarrolladores amplíe sus capacidades para admitir LWC, proporcionar finalización de código inteligente y brindar asistencia conversacional, podrá desarrollar la plataforma Salesforce más rápido que nunca. Nuestro objetivo es que esté disponible en Beta abierta en Dreamforce 2023 , para que todos puedan tener acceso a la herramienta. ¡Únase a nosotros en Dreamforce '23 para jugar y profundizar en Einstein GPT para desarrolladores!

Recursos adicionales

Sobre el Autor

Mohith Shrivastava es desarrollador defensor en Salesforce con una década de experiencia en la creación de productos a escala empresarial en la plataforma Salesforce. Mohith se encuentra actualmente entre los principales contribuyentes de Salesforce Stack Exchange, un foro de desarrolladores donde los desarrolladores de Salesforce pueden hacer preguntas y compartir conocimientos. Puedes seguirlo a través de LinkedIn .

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

Añadir a holgura Suscríbete a RSS

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/08/einstein-gpt-for-developers-now-in-pilot.html

Categories
Developers Tutoriales de Salesforce

Liberando el poder de Apex en Salesforce Data Cloud — 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.

Libere el poder de Apex en Salesforce Data Cloud — Parte 1 | Blog de desarrolladores de Salesforce

Trailblazer.me estará fuera de línea por mantenimiento programado a partir del 21 de julio de 2023 a las 6 p. m. (hora del Pacífico) hasta el 22 de julio de 2023 mientras transformamos Trailblazer.me en la nueva cuenta de Trailblazer. Durante este tiempo de inactividad, no podrá iniciar sesión en ninguna aplicación relacionada, incluidas Ayuda y capacitación, AppExchange, Trailhead y Trailblazer Community, y más.

Salesforce Data Cloud permite a los desarrolladores aprovechar el poder de los grandes datos para las empresas. Al utilizar Data Cloud, los clientes pueden consolidar los datos de clientes de múltiples sistemas en una única instancia de Salesforce, creando una vista unificada de los datos en toda la empresa. Estos datos se pueden utilizar para análisis, aprendizaje automático y acciones automatizadas. En este primer blog de nuestra serie de dos partes, exploraremos diferentes utilidades de Apex para consultar datos en Data Cloud y brindaremos orientación sobre cómo utilizarlas de manera efectiva.

Apex ofrece una variedad de utilidades para Data Cloud. Por ejemplo, permite que los desarrolladores construyan con Lightning Web Components para personalizar las experiencias de usuario estándar de Data Cloud, o que los ISV construyan su propio código para automatizar operaciones específicas de Data Cloud, como la resolución de identidades, la creación y ejecución de conocimientos calculados de Data Cloud o la segmentación.

Objetos de Salesforce Data Cloud frente a objetos estándar/personalizados

Antes de analizar cómo consultar datos de Data Cloud, comprendamos un poco acerca de los objetos de Salesforce Data Cloud y cómo difieren con respecto a los objetos estándar/personalizados de Salesforce Platform.

Salesforce Data Cloud tiene un modelo de datos canónico que incluye objetos de lago de datos (DLO) y objetos de modelo de datos (DMO). Puede leer acerca de cómo estos objetos se asignan entre sí y sus propósitos en la documentación de ayuda.

Los objetos de Data Cloud pueden ingerir y almacenar volúmenes de datos mucho más grandes (en la magnitud de miles de millones de registros) en comparación con los objetos estándar y personalizados regulares en la Plataforma de Salesforce. Los objetos estándar/personalizados están diseñados para casos de uso transaccional y no son adecuados para almacenar y procesar big data. Por otro lado, los objetos de Data Cloud agregan capacidades similares a las de un lago de datos .

Otra distinción clave es que los objetos de Data Cloud no admiten disparadores Synchronous Apex. Sin embargo, aún puede lograr la automatización de procesos suscribiéndose a Change Data Capture (CDC) y utilizando Flows o Apex. Lo que es común entre los objetos de la nube de datos y los objetos de la plataforma es que están construidos sobre la misma base impulsada por metadatos, lo que hace posible el uso de características de la plataforma, como Salesforce Flow, Apex y Platform Events.

Cómo consultar datos de Data Cloud en Apex

Antes de profundizar en algún código, exploremos un ejemplo de caso de uso de una aplicación de nube de datos.

Ejemplo de caso de uso y supuestos

Para nuestros ejemplos de código en esta publicación de blog, supongamos que estamos trabajando para una empresa ficticia llamada Solar Circles que captura datos de todos sus paneles solares instalados en Data Cloud. Cada mes, se generan decenas de millones de puntos de datos a partir de estos paneles. Al tener estos datos en Data Cloud, Solar Circles obtiene la capacidad de realizar análisis, utilizar técnicas de aprendizaje automático y obtener información procesable de los datos.

El código de Apex en esta publicación asume una condición importante: la nube de datos está habilitada y el código de Apex se ejecuta en la organización de la nube de datos y no en las organizaciones de Salesforce que están conectadas a la organización de la nube de datos.

Consultar datos de Data Cloud usando SQL

Para acceder a datos de objetos de Data Cloud (DLO o DMO), utilice la clase CdpQuery (ver documentos ) en Apex. Esta clase está disponible en el espacio de nombres ConnectApi (ver documentos ).

A continuación se muestra un fragmento de código de ejemplo que muestra cómo acceder a los datos de un objeto de nube de datos mediante una instrucción SQL.

<dx-code-block title language="apex" code-block="@AuraEnabled(cacheable=true)
public static void getSolarPanelData(String customerId) { List<Map> returnData = new List<Map>(); // Create input for query operation ConnectApi.CdpQueryInput queryInput = new ConnectApi.CdpQueryInput(); queryInput.sql = ‘SELECT * ‘ + ‘FROM Solar_Panel_Events_solar_panel_F4C03__dlm ‘ + ‘WHERE CustomerId__c = » + customerId + » ‘ + ‘ORDER BY date_time__c DESC LIMIT 50’; // Execute SQL ConnectApi.CdpQueryOutputV2 response = ConnectApi.CdpQuery.queryAnsiSqlV2( queryInput ); Map responseMetadata = new Map(); responseMetadata = response.metadata; // Parse response System.debug( ‘Number of rows in the result data set ‘ + response.rowCount ); System.debug(‘Next batch ID ‘ + response.nextBatchId); System.debug(‘Query Metadata’ + responseMetadata); for (ConnectApi.CdpQueryV2Row resultRow : response.data) { for (Object result : resultRow.rowData) { system.debug(result); } } «>

En el ejemplo anterior, estamos recuperando datos para un componente LWC personalizado en una página Lightning de caso de objeto estándar para un agente de servicio. El componente muestra datos de dispositivos recientes provenientes de los paneles instalados en el sitio del cliente.

Aspectos destacados del código

  • El método toma un parámetro customerId , lo que indica que recupera los datos del panel solar para un cliente específico
  • Se crea una instancia de ConnectApi.CdpQueryInput llamada queryInput para definir la operación de consulta.
  • La propiedad queryInput.sql se establece con una consulta SQL que selecciona todos los campos del objeto de datos Solar_Panel_Events_solar_panel_F4C03__dlm , filtrado por CustomerId__c
  • La consulta se ejecuta mediante ConnectApi.CdpQuery.queryAnsiSqlV2(queryInput) , que devuelve un objeto ConnectApi.CdpQueryOutputV2 denominado response
  • El response.metadata se asigna a responseMetadata , que almacena los metadatos de la respuesta de la consulta.

Consideraciones importantes

  • Apex tiene un límite de CPU de 10 segundos para transacciones sincrónicas. Data Cloud puede contener miles de millones de filas de datos. Al recuperar datos en Apex desde Data Cloud, asegúrese de agregar suficientes filtros y proporcionar contexto (como el recordId con el que está trabajando) para limitar la cantidad de filas y evitar alcanzar el límite de CPU de 10 segundos.
  • Si está recuperando una gran cantidad de datos, use Queueable Apex para ejecutar el proceso de forma asincrónica y aproveche el límite de CPU de 60 segundos.
  • Recomendamos usar queryAnsiSqlV2 (consulte los documentos ) en lugar de queryAnsiSql para aprovechar las solicitudes posteriores y los tamaños de respuesta más grandes para casos de uso en los que necesita extraer grandes volúmenes de datos.
  • Use nextBatchAnsiSqlV2(nextBatchId) (ver documentos ) para proporcionar batchId de la respuesta anterior para recuperar el siguiente conjunto de resultados.
  • También puede usar SOQL en lugar de SQL, pero asegúrese de obtener su SOQL usando el Explorador de datos , ya que hay funciones de SOQL que pueden no ser aplicables a los objetos de Data Cloud.

Cómo buscar información de perfil

Antes de analizar cómo buscar información de perfil de Data Cloud en Apex, debemos comprender qué es un perfil unificado.

Perfil unificado y resolución de identidad

Supongamos que Solar Circles, nuestro fabricante ficticio de paneles solares, tiene datos sobre un cliente llamado Martha en varios sistemas. Cada sistema tiene información diferente sobre ella, como diferentes direcciones de correo electrónico. Estos datos únicos se denominan puntos de contacto . Los clientes como Martha están representados por múltiples registros de contacto y perfiles específicos del sistema en varios sistemas. Esto es necesario para que cada nube y producto funcione de forma independiente, pero puede crear silos de datos.

Data Cloud proporciona una función de resolución de identidad para resolver este problema. Mediante el uso de reglas de identidad , el sistema crea perfiles individuales unificados que se pueden usar para segmentación y activaciones en varios otros sistemas.

Buscar información de perfil de Data Cloud

A continuación se muestra un código Apex de utilidad de ejemplo que busca información de perfil. Tenga en cuenta que se utiliza el método queryProfileApi de la clase ConnectApi.CdpQuery .

<dx-code-block title language="apex" code-block=" @AuraEnabled public static List getProfileData( String dataModelName, String childDataModelName, String searchKey, String customerName ) { ConnectApi.CdpQueryOutput response = ConnectApi.CdpQuery.queryProfileApi( dataModelName, // Name of the data model object, for example, UnifiedIndividual__dlm customerName, // Value of the primary or secondary key field, for example, John. If unspecified, defaults to the value of the primary key field. childDataModelName, // Name of the child data model object, for example, UnifiedContactPointEmail__dlm. searchKey, // If a field other than the primary key is used, name of the key field, for example, FirstName__c null, // Comma-separated list of equality expressions within square brackets null, // Comma-separated list of child object field names that you want to include in the result 100, // Number of items to return. null, // Number of rows to skip before returning results. null // Sort order for the result set, ); return response.data; } «>

Aquí hay un fragmento de código de ejemplo que invoca el código de utilidad anterior al pasar los parámetros.

<dx-code-block title language="apex" code-block=" List response = DataCloudUtils.getProfileData( ‘UnifiedIndividual__dlm’, ‘UnifiedContactPointEmail__dlm’, ‘ssot__FirstName__c’, ‘Martha’ ); «>

El código busca la información de perfil del cliente Martha en el objeto de modelo de datos UnifiedIndividual__dlm .

Aspectos destacados del código

  • El método utiliza ConnectApi.CdpQuery.queryProfileApi() para ejecutar la consulta de datos de perfil en la nube de datos
  • Los parámetros de consulta incluyen los nombres del objeto del modelo de datos ( dataModelName ), el objeto del modelo de datos secundario ( childDataModelName ), el campo de clave de búsqueda ( searchKey ) y el nombre del cliente ( customerName )
  • Se pueden proporcionar parámetros opcionales adicionales, como expresiones de igualdad, nombres de campos de objetos secundarios, la cantidad de elementos para devolver, la cantidad de filas para omitir y el orden de clasificación para el conjunto de resultados.
  • La respuesta de la consulta se almacena en un objeto ConnectApi.CdpQueryOutput llamado response
  • El método devuelve response.data , que representa los datos recuperados de la consulta

Importante consideración

  • Vuelva a verificar los nombres de campo y objeto antes de usarlos en el código de Apex, ya que, de lo contrario, el método puede generar excepciones y errores internos del servidor.

¿Cómo consultar datos de conocimientos calculados?

Los conocimientos calculados le permiten definir y calcular métricas multidimensionales en todo su estado digital en Data Cloud. Data Cloud genera información calculada al escribir SQL , de manera declarativa usando Insights Builder o usando Apex.

Streaming vs insights calculados

Hay dos tipos de información en Data Cloud: transmisión e información calculada.

Los conocimientos calculados son funciones que pueden calcular métricas en datos históricos. Se procesan en lotes. Por ejemplo, en nuestra aplicación Solar Circles, podemos tener una visión calculada que mide la potencia total generada por los paneles agrupados por cada cliente.

La información de transmisión se genera casi en tiempo real mediante el análisis del flujo continuo de datos entrantes. Estos conocimientos permiten la activación inmediata de acciones en los sistemas posteriores. Por ejemplo, la información de transmisión se puede utilizar para identificar a los clientes cuyos paneles solares generan una potencia mínima. Al aprovechar una acción de datos en la transmisión de conocimientos, podemos crear de manera proactiva un caso para dichos clientes en Salesforce Service Cloud.

Consultar datos a partir de una perspectiva calculada

Para consultar datos de las perspectivas calculadas, use el método queryCalculatedInsights de la clase CdpQuery . A continuación se muestra un fragmento de código de ejemplo que muestra cómo consultar datos de una perspectiva calculada conocida.

Aspectos destacados del código

  • El método queryCalculatedInsights de ConnectApi.CdpQuery se usa para recuperar información calculada de Data Cloud.
  • El primer parámetro es el nombre de API de la información calculada, que debe terminar con __cio . Por ejemplo, <calculted insight api name> podría reemplazarse por totalpowergenerated__cio .
  • Los siguientes parámetros especifican dimensiones y medidas. Una dimensión representa un campo o atributo en el que se basa la información, mientras que una medida representa la métrica calculada. Proporcionar null para estos parámetros incluye todas las dimensiones y medidas disponibles.
  • Se puede especificar el orden de clasificación para el conjunto de resultados, pero en este fragmento de código, se establece en null .
  • Los parámetros opcionales adicionales incluyen filtrar el conjunto de resultados a un ámbito o tipo más específico y especificar la cantidad de elementos que se devolverán y la cantidad de filas que se omitirán antes de devolver los resultados.
  • Los datos resultantes se almacenan en un objeto ConnectApi.CdpQueryOutput denominado response .

Importante consideración

  • Asegúrese de proporcionar el nombre de API correcto para la información. Un nombre de API incorrecto da como resultado un error del sistema.

Conclusión

En esta publicación de blog, brindamos una descripción general de cómo puede aprovechar el poder de Salesforce Data Cloud y Apex para aprovechar los grandes datos para las empresas. Los ejemplos de código y los puntos destacados demuestran enfoques prácticos para acceder y consultar datos de objetos de Data Cloud.

La publicación también destaca las mejores prácticas y las limitaciones que se deben tener en cuenta al trabajar con Data Cloud y Apex, como administrar los límites de la CPU, utilizar el procesamiento asincrónico para grandes conjuntos de datos y garantizar la denominación correcta de la API para los conocimientos calculados.

En la siguiente parte de la serie, profundizaremos en las clases de Apex como CdpCalculatedInsight (consulte los documentos ), CdpIdentityResolution (consulte los documentos ) y CdpSegment (consulte los documentos ) que se pueden usar para administrar información calculada, crear reglas de resolución de identidad y segmentación en Data Cloud mediante Apex.

Referencias adicionales

Sobre el Autor

Mohith Shrivastava es promotor de desarrollo en Salesforce con una década de experiencia en la creación de productos a escala empresarial en la plataforma de Salesforce. Actualmente se está enfocando en las herramientas para desarrolladores de Salesforce, Flow, Apex y Lightning Web Components en Salesforce. Mohith se encuentra actualmente entre los principales contribuyentes en Salesforce Stack Exchange, un foro de desarrolladores donde los desarrolladores de Salesforce pueden hacer preguntas y compartir conocimientos. Puedes seguirlo a través de su Twitter @msrivastav13 .

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

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/07/unlocking-the-power-of-apex-in-salesforce-data-cloud-part-1.html

Categories
Developers

Incrustar flujos de pantalla en el componente web Lightning

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

Gran idea o pregunta duradera:

  • ¿Cómo incrusta un flujo de pantalla dentro de un componente web Lightning?

Objetivos:

Después de leer este blog, podrá:

  • Incruste el flujo de pantalla dentro de un componente web Lightning
  • Aplicar representación condicional en el componente web Lightning
  • Use uiRecordApi para obtener el valor del campo del registro sin usar la clase de Apex
  • y mucho más

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

  1. Pasar datos del componente web Lightning al flujo de pantalla
  2. Uso del componente web Lightning para mostrar un banner de alerta

Janel Parrish trabaja como desarrollador junior en Gurukul on Cloud (GoC). Se le ha encomendado un requisito comercial para desarrollar un componente LWC con las siguientes funcionalidades:

  1. Debería mostrar un flujo de pantalla llamado 'parterFlow' cuando el tipo de cuenta es 'Socio tecnológico'.
  2. Debería presentar un flujo de pantalla llamado 'customerFlow' cuando el tipo de cuenta es 'Cliente – Directo'.
  3. El componente LWC debe diseñarse con la capacidad de incorporarse en la página de registro de rayos de la cuenta.

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

Utilizaremos el componente lightning-flow para incrustar un flujo de pantalla en el componente lightning web. Para crear un flujo en el componente Lightning Web, establezca el atributo flowApiName del componente Lightning-Flow en el nombre de flujo que desea usar. El componente incluye botones de navegación (Atrás, Siguiente, Pausa y Finalizar) para que los usuarios naveguen dentro del flujo.

También usaremos un adaptador de cable uiRecordApi que nos permite interactuar con registros de Salesforce desde los componentes del componente web lightning sin escribir código Apex. Esta API le permite realizar operaciones como recuperar los datos de un registro o los detalles del diseño, crear, eliminar o actualizar un registro, etc. Estos son algunos de los métodos clave proporcionados por uiRecordApi :

  1. getRecord : este método le permite obtener datos de registro.
  2. getRecordCreateDefaults : este método proporciona los valores predeterminados que utiliza Salesforce al crear un nuevo registro.
  3. getRecordUi : obtiene los detalles de diseño de un registro, como qué campos se muestran, cómo se muestran, etc.
  4. createRecord : este método le permite crear un nuevo registro.
  5. deleteRecord – Le permite eliminar un registro.
  6. updateRecord : te permite actualizar un registro existente.

En el archivo de configuración XML, usaremos lightning__RecordPage como destino para permitir que el componente web de iluminación se use en una página de registro en Lightning App Builder.

Práctica guiada (nosotros hacemos):

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

  1. Cree un ScreenFlow (customerFlow) para manejar la solicitud del cliente
    1. Definir propiedades de flujo para el flujo de pantalla
    2. Agregue una variable de texto para almacenar el nombre de la cuenta
    3. Agregue una pantalla para mostrar el nombre de la cuenta desde una variable de texto
  2. Cree un ScreenFlow (partnerFlow) para manejar la solicitud del cliente
    1. Definir propiedades de flujo para el flujo de pantalla
    2. Agregue una variable de texto para almacenar el nombre de la cuenta
    3. Agregue una pantalla para mostrar el nombre de la cuenta desde una variable de texto
  3. Cree un componente web relámpago para mostrar los diferentes flujos de pantalla según el tipo de cuenta

Paso 1.1: Definir propiedades de flujo (customerFlow)

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

Paso 1.2: agregue una variable de texto al nombre de la cuenta de la tienda

  1. En Caja de herramientas , seleccione Administrador y, a continuación, haga clic en Nuevo recurso para almacenar el nombre de la cuenta.
  2. Ingrese la siguiente información :
    1. Tipo de recurso : Variable
    2. Nombre de API : nombre de cuenta
    3. Tipo de datos : Texto
    4. Valor predeterminado : {!$GlobalConstant.EmptyString}
    5. Comprobar disponible para entrada
    6. Comprobar disponible para la salida
  3. Haga clic en Listo.

Paso 1.3: agregue una pantalla para mostrar el nombre de la cuenta desde la variable de texto

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

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

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

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

Paso 2.1: Definir propiedades de flujo (partnerFlow)

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

Paso 2.2: agregue una variable de texto al nombre de la cuenta de la tienda

  1. En Caja de herramientas , seleccione Administrador y, a continuación, haga clic en Nuevo recurso para almacenar el nombre de la cuenta.
  2. Ingrese la siguiente información :
    1. Tipo de recurso : Variable
    2. Nombre de API : nombre de cuenta
    3. Tipo de datos : Texto
    4. Valor predeterminado : {!$GlobalConstant.EmptyString}
    5. Comprobar disponible para entrada
    6. Comprobar disponible para la salida
  3. Haga clic en Listo.

Paso 2.3: agregue una pantalla para mostrar el nombre de la cuenta desde la variable de texto

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

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

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

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

Paso 3: cree un componente web Lightning para mostrar los diferentes flujos de pantalla según el tipo de cuenta

Debajo de la plantilla de componente web lightning, se muestra una tarjeta Lightning titulada Iniciar pedido . Dependiendo de si la propiedad isPartner o isCustomer es verdadera, se iniciará y mostrará el Lightning Flow correspondiente ("rakeshistomMVP__partnerFlow" o "rakeshistomMVP__customerFlow").

embedFlowToLWC.html

Utilizaremos el componente lightning-flow para incrustar un flujo de pantalla en el componente lightning web. Desglosemos el código:

  • En LWC, el archivo HTML de cada componente debe envolverse con una etiqueta <plantilla> .
  • <template if:true={isPartner}> y <template if:true={isCustomer}> : estas son plantillas condicionales que muestran contenido en función de la veracidad de las propiedades isPartner e isCustomer , respectivamente. El contenido dentro de estas plantillas solo se representará si la condición correspondiente es verdadera.

<plantilla> <div class="slds-m-alrededor_medio"> <lightning-card title="Iniciar pedido" icon-name="estándar:pedidos"> <div class="slds-m-alrededor_medio"> <template if:true={esSocio}> <lightning-flow onstatuschange={handleStatusChange} flow-api-name="rakeshistomMVP__partnerFlow" flow-input-variables={inputVariables}></lightning-flow> </plantilla> <template if:true={esCliente}> <lightning-flow onstatuschange={handleStatusChange} flow-api-name="rakeshistomMVP__customerFlow" flow-input-variables={inputVariables}></lightning-flow> </plantilla> </div> </tarjeta-relámpago> </div>
</plantilla>
embedFlowToLWC.js

Este código JavaScript de muestra usa el decorador @api para crear propiedades públicas. Por ejemplo, recordId es una propiedad reactiva pública que contiene el ID de la página de registro. Mientras que el decorador @wire lee los datos de Salesforce. getRecord es una función del módulo lightning/uiRecordApi que recupera un registro. accountType y accountName se importan del esquema de Salesforce.

  • Las declaraciones de importación se utilizan para importar los módulos y las dependencias necesarios. LightningElement es el componente básico para crear componentes web Lightning.
  • account({ error, data }) es una función que maneja la respuesta de la llamada getRecord . Si hay un error, asigna el error a this.error . Si se devuelven datos, establece this.accountName en el nombre de la cuenta y establece isPartner o isCustomer en verdadero según el tipo de cuenta.
  • get inputVariables() es un método captador que devuelve una matriz de objetos, que representa variables de entrada para un flujo. En este caso, devuelve el nombre de la cuenta.

import { LightningElement, api, wire } de 'lwc';
importar { getRecord } desde 'lightning/uiRecordApi';
importar tipo de cuenta desde '@salesforce/schema/Account.Type';
importar nombre de cuenta desde '@salesforce/schema/Account.Name'; exportar la clase predeterminada FlowLauncher extiende LightningElement { @api recordId; nombre de la cuenta; esSocio = falso; esCliente = falso; @wire(getRecord, { recordId: '$recordId', campos: [nombre de cuenta, tipo de cuenta] }) cuenta ({ error, datos }) { si (error) { this.error = error; } más si (datos) { this.accountName = data.fields.Name.value; if(data.fields.Type.value === 'Socio tecnológico') { this.isPartner = verdadero; this.isCustomer = false; } else if(data.fields.Type.value === 'Cliente - Directo') { this.isCustomer = true; this.isPartner = false; } } } obtener variables de entrada () { devolver [ { nombre: 'nombre de cuenta', tipo: 'Cadena', valor: este.nombreDeCuenta } ]; } handleStatusChange(evento) { if(evento.detalle.estado === 'FINALIZADO') { //Acción después de que un flujo haya terminado } }
}
embedFlowToLWC.js-meta.xml

El elemento isExposed se establece en verdadero, lo que hace que el componente esté disponible para su uso en herramientas como Lightning App Builder o Flow Builder.

El elemento de objetivos se usa para especificar dónde se puede usar su componente. En este caso, la etiqueta lightning__RecordPage significa que este componente está diseñado para usarse en una página de registro en Lightning App Builder.



<?versión xml=”1.0″ codificación=”UTF-8″?>
<LightningComponentBundle xmlns=”http://soap.sforce.com/2006/04/metadata”>
<apiVersion>58.0</apiVersion>
<isExposed>verdadero</isExposed>
<target>relámpago__RecordPage</target>
</objetivos>
</LightningComponentBundle>

Prueba de concepto

Evaluación formativa:

¡Quiero saber de ti!

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

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2023/07/19/embed-screen-flows-in-lightning-web-component-3/

Categories
Developers Tutoriales de Salesforce

Comenzando con Acciones Externas ☁️

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 las acciones externas | Blog de desarrolladores de Salesforce

Tuve excelentes conversaciones con clientes y socios en Connections este año, así como a través de la comunidad Trailblazer de MC Account Engagement , con respecto a las acciones externas de Account Engagement . Seguía surgiendo una pregunta: "¿Cómo empiezo con las acciones externas?" En esta publicación, aprenderá qué son las acciones externas, cómo configurarlas y cómo probarlas. Además, sintonice una próxima sesión de codeLive el 20 de julio a las 10 a. m. PT , donde realizaré una demostración de codificación en vivo para mostrarle cómo crear una acción externa y responder sus preguntas.

¿Qué son las Acciones Externas?

Las acciones externas son una parte clave deMarketing App Extensions , ya que proporcionan una forma de desencadenar una acción en un sistema externo. El otro componente es Actividades externas, que proporciona una forma de activar la automatización de la participación de la cuenta en función de un evento de participación que ocurre en un sistema externo. Piense en ello como las dos caras de una moneda, las acciones se activan, las actividades se activan. Combinadas, forman una aplicación de extensibilidad de automatización para un servicio, por lo que puede tener una extensión de aplicación de marketing por SMS, por ejemplo.

Por este motivo, las acciones externas se empaquetan en una extensión de aplicación de marketing. En el momento de escribir este artículo, las actividades externas aún no se pueden empaquetar, pero eventualmente también se empaquetarán en la extensión de la aplicación de marketing.

Si desea conectar una aplicación de terceros para automatizar la ejecución de una acción de prospecto en ese sistema, entonces esta es definitivamente la función para usted. En esta publicación, profundizaremos en el lado de la acción externa de las extensiones de aplicaciones de marketing.

¿Cuáles son algunos buenos casos de uso para las acciones externas?

Bueno, si me preguntan, ¡diría absolutamente todo! Puede que estés pensando: “¡Claro, todo el mundo dice eso!”. Sin embargo, las posibilidades que desbloquean las acciones externas son realmente amplias. Si alguna vez ha dicho: "Me gustaría que cuando un prospecto llegue a este paso, yo pudiera <insertar deseo aquí>", entonces deseaba una acción externa.

Puede usar una acción externa para registrarse en un seminario web de Zoom desde Account Engagement (consulte el ejemplo en GitHub ). También puede usar una acción externa para enviar un mensaje SMS a través de Twilio, que presentamos en una publicación de blog anterior . Incluso puedes usar acciones externas con webhooks; Usé la función de captura de webhook de Zapier para crear una acción externa que usaba un cliente potencial como desencadenante de un Zap.

¿Qué constituye una acción externa?

Una acción externa consta de una acción invocable de Apex, metadatos de la extensión de la aplicación de marketing, metadatos de una acción externa y una forma de gestionar la autenticación. Los metadatos para las extensiones de la aplicación de marketing y las actividades externas conectan la acción invocable con la participación de la cuenta. Los componentes que se usarán para la autenticación pueden variar según el tipo de autenticación que admita el servicio. Como OAUTH 2.0 es bastante común, el componente que uso más es un proveedor de autorización y Credenciales con nombre . Las credenciales con nombre también facilitan la administración de la autenticación en mi código, y el sistema hace la mayor parte del trabajo.

¿Qué habilidades necesito para trabajar con Acciones Externas?

Con una gran flexibilidad viene la complejidad, por lo que necesitará algunas habilidades en ciertas áreas para construir con éxito una acción externa. Los siguientes son temas clave de los que necesitará una comprensión básica antes de abordar su propia acción externa.

SLDC de Salesforce

Comprender el ciclo de vida del desarrollo de Salesforce es muy importante para tener éxito en general. Recomiendo aprender Visual Studio y el proceso de implementación de la CLI. No se necesita maestría, solo lo básico para poder empezar. Trailhead ofrece una ruta para ayudarlo a configurar su espacio de trabajo .

Documentación de la API REST

El patrón del que hablamos en este artículo se basa en las API REST JSON. Para comprender lo que es posible y recopilar las entradas pertinentes para una acción externa, debe poder leer una especificación API. Consulte las especificaciones de la API de Account Engagement y Twilio .

Implementación de Apex y Apex

Apex Invocable Actions es mi forma preferida de codificar mis acciones externas, ya que me permite la mayor flexibilidad y control. Recomendaría, como mínimo, familiarizarse con la compilación y la implementación de código Apex mediante el proyecto Quick Start: Apex de Trailhead. Para obtener más información, encontré útil el trailmix de Apex Basics . No necesita convertirse en un experto, pero al menos debe estar lo suficientemente informado como para poder leer el código de la aplicación de referencia .

Flujo de Salesforce (opcional)

No necesita conocer Salesforce Flow para aprender Acciones externas. Sin embargo, es una herramienta de prueba muy poderosa para sus acciones externas, lo que facilita la creación de una interfaz de usuario para controlar las entradas durante la prueba. Si está familiarizado con Engagement Studio, Flow será bastante fácil ya que tiene muchos de los mismos conceptos. Utilicé la ruta Crear flujos con Flow Builder para ponerme al día. Otro beneficio de aprender Salesforce Flow es que abre la puerta a la creación de todo tipo de automatización de procesos comerciales.

¿Cómo debo configurar mi entorno de desarrollador?

Es importante configurar sus entornos de desarrollador y contar con las herramientas adecuadas antes de comenzar con las acciones externas. Yo uso las siguientes herramientas.

  • Postman : utilizo Postman para explorar una nueva API, por lo que puedo aprender a realizar una solicitud y responder de forma sencilla. Postman también proporciona una manera fácil de generar ejemplos.
  • CLI de Visual Studio + Salesforce — Uso Visual Studio para codificar mi acción invocable y la implemento en mi organización de desarrollador. La mayoría de las veces, es simplemente copiar y pegar un ejemplo anterior y editarlo para mi nuevo caso de uso.
  • Entorno de desarrollador/sandbox : este es un entorno seguro para construir, desarrollar y empaquetar sus acciones externas. Tenga en cuenta que, en el momento de escribir este artículo, solo admitimos paquetes de primera generación (1GP) , por lo tanto, no configure su organización de desarrollador como Dev Hub.
  • Salesforce Flow : personalmente me gusta usar ScreenFlows para probar una acción invocable. Es bueno poder controlar completamente la entrada antes de conectarla a acciones externas y programas ES.
  • Consola de desarrollador de Salesforce : esto le permite ver rápidamente el código o ver los registros de sus pruebas de flujo de pantalla.

Patrón básico para llamadas API REST con acciones externas

Si bien puede codificar acciones externas de muchas maneras, existe un patrón básico que recomiendo al realizar llamadas a la API REST.

Las dos etiquetas que debe recordar son InvocableVariable , que define las entradas y salidas de la acción invocable, e InvocableMethod , que es el método a llamar al ejecutar la acción invocable. Puede ver cómo se aplican en el siguiente código de ejemplo.

Normalmente creo dos clases, una para la entrada y otra para la solicitud de API. Separar mi código en dos clases facilita jsonificar la carga útil. Mi clase de entrada contiene todos los campos de variables invocables que la acción invocable necesita en la entrada. Mi solicitud de API contiene los campos de la solicitud JSON.

InvocableMethod construirá la carga útil a partir de la entrada, la convertirá a JSON y luego la agregará a la solicitud HTTP. A continuación, configura el resto de la solicitud HTTP agregando la URL, los encabezados y el método. Finalmente, realiza la llamada a la API y comprueba si el resultado es correcto o, de lo contrario, genera un error útil para diagnosticar un problema.

Consideración importante: el marco de acción externa espera que se devuelva un error si hay una falla en lugar de detectar el error y luego devolver el éxito. Si se devuelve un error, se informará en la tabla de errores.

Poniendo a prueba tus acciones externas

De vez en cuando, mientras crea una acción externa, encontrará errores. Cuanto más pueda probar sobre la marcha, más fácil será descubrir dónde radica el problema. Es por eso que recomiendo agregar un paso de prueba para probar en Salesforce Flow antes de probar en Engagement Studio. Elimina la configuración de la acción externa de la imagen, por lo que si la verifica aquí, pero no funciona en Engagement Studio, sabrá que el problema radica en la configuración de la acción externa.

Las pruebas lo ayudan a identificar errores, pero determinar la causa raíz y corregirlos es otra cosa. A continuación se presentan algunas de las técnicas que utilizo para diagnosticar las causas fundamentales.

  • Consola de desarrollador de Salesforce : utilizo la consola de desarrollo para ejecutar mis casos de prueba y confirmar la cobertura de mi código. Durante las pruebas exploratorias en Flow, mantengo abierta mi consola de desarrollo, por lo que genera registros para usar en la investigación de errores.
  • Rastreos de registro de Salesforce : si el error ocurre durante mi prueba de Engagement Studio, coloco un rastreo de usuario en el usuario de integración B2BMA, para poder ver mis registros de Apex y diagnosticar el problema más a fondo. Tenga cuidado, podría terminar con una gran cantidad de datos. El Usuario de Integración B2BMA es el usuario que ejecuta acciones externas.
  • Errores de acción externa de compromiso de cuenta : la tabla proporciona cualquier error devuelto por la acción externa que resultó en una falla. Es útil ver lo que sucedió durante una ejecución de ES.

SUGERENCIA: si tiene una cuenta de Gmail, puede usar un "+" para crear varios registros con su dirección de correo electrónico. Por ejemplo, puedo registrar tanto "ejemplo@ejemplo.com" como "ejemplo+usuario2@ejemplo.com" como prospecto, y cualquier correo enviado a esas direcciones iría al buzón de correo de ejemplo@ejemplo.com. Por ejemplo, usé esto para probar el ejemplo de registro de Zoom porque no quería que el correo electrónico registrado rebotara.

Errores comunes

Los errores van a suceder, así es la vida. Me he encontrado con algunos escenarios que me han hecho casi tirarme de los pelos.

El primero es garantizar que la acción exterior sea activa. Si la acción no aparece en Engagement Studio, es probable que esta sea la causa. Recuerde, debe activar tanto la extensión de la aplicación de marketing como la acción externa, además de asignarla a esa unidad comercial.

El siguiente es asegurarse de que su clase de Apex esté activa. La mayoría de las veces ya estará marcado como activo, es el estado predeterminado cuando creas una nueva clase. Es exactamente por eso que es fácil pasarlo por alto.

Otro es buscar extensiones de aplicaciones de marketing al empaquetar. No puedo decirte cuántas veces busco acciones externas, solo para tener un momento de confusión antes de recordar.

Finalmente, si su acción externa no funciona, pero no ve errores, verifique que la acción invocable fue diseñada para generar un error en caso de falla.

Lo anterior no es de ninguna manera exhaustivo, y es probable que encuentre sus propias alegrías. Sin embargo, recomiendo compartirlos con la comunidad si encuentra algunos buenos.

¿Que estas esperando? ¡Empiece hoy!

Ahora sabe casi todo lo que hago sobre las acciones externas, desde cómo funciona la función hasta los errores comunes. Recuerde que Acciones externas es su herramienta siempre que se encuentre diciendo: "Me gustaría hacer algo cuando el cliente potencial haga esto", y lo ayudará a automatizar esa acción.

Entonces, configure su entorno de desarrollador, revise la aplicación de referencia y comience a construir su acción externa hoy. El 20 de julio a las 10 a. m. (hora del Pacífico) , realizaremos una sesión de CodeLive en nuestro canal de YouTube para desarrolladores de Salesforce , así que únase y síganos mientras construimos una extensión de la aplicación de marketing de Twilio.

Recursos

Sobre el Autor

Christopher Cornett es gerente sénior de productos en Salesforce, responsable de la experiencia del desarrollador de Account Engagement. Ha trabajado para Salesforce durante más de cuatro años y tiene más de 13 años de experiencia en gestión de productos, trabajando principalmente en plataformas que van desde la atribución de big data hasta el fraude. Christopher ha ayudado a ofrecer API V5 y extensiones de aplicaciones de marketing, ayudando a los clientes a crear integraciones personalizadas para que su pila de marketing funcione para ellos. Le apasiona la experiencia del desarrollador y le encanta jugar con todas las excelentes funciones para ver qué es posible.

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/07/getting-started-with-external-actions.html

Categories
Developers Tutoriales de Salesforce

Sube de nivel tus habilidades Apex ☁️

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

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

Subiendo de nivel tus habilidades de Apex | Blog de desarrolladores de Salesforce

Apex es una habilidad única que los desarrolladores deben dominar al crear soluciones personalizadas con Salesforce. Hay algunos conceptos básicos que son esenciales. Ciertas cosas, como la sintaxis y el flujo de control, son como aprender cualquier otro idioma. Otras cosas, como operaciones masivas, límites reguladores y disparadores, son particulares de Apex y cómo se implementa en la Plataforma de Salesforce. Una vez que tenga una idea de estas características y modismos clave, ¿a dónde va después?

En esta publicación, aprenderá sobre algunas características de Apex que son críticas para cualquier desarrollador de Apex que busque mejorar más allá de lo básico, junto con dónde puede ir para aprender sobre ellas.

Nota: Siempre que sea posible, los ejemplos de código en esta publicación se toman directamente o se adaptan de la aplicación de muestra Recetas de Apex o la Guía para desarrolladores de Apex. Ver las referencias al final del artículo.

En estos días, si desea un proceso automatizado o una interfaz de usuario similar a un asistente, Flow siempre debe ser una opción que considere. El alcance, la flexibilidad y la madurez de Flow han crecido enormemente. Aún así, es raro que los problemas comerciales complejos se puedan resolver sin ningún tipo de código.

Introduzca Apex invocable.

La anotación @InvocableMethod se usa para definir métodos llamados por Flow. Y @InvocableVariable muestra los parámetros para que Flow pase datos a su código Apex. ¿Por qué llamaría a Apex desde Flow? Quizás la lógica de su flujo se está volviendo demasiado compleja. Tal vez su automatización necesite realizar una operación que no sea accesible para Flow. En casos como estos, Apex puede ser su amigo.

Aquí hay una ilustración básica del uso de la anotación @InvocableMethod :

<dx-code-block title language="java" code-block="public class AccountQueryAction {   @InvocableMethod(label='Get Account Names' description='Returns the list of account names corresponding to the specified account IDs.' category='Account')   public static List getAccountNames(List ids) {     List accountNames = new List();     List accounts = [SELECT Name FROM Account WHERE Id in :ids];     for (Account account : accounts) {       accountNames.add(account.Name);     }     return accountNames;   } }»>

Este ejemplo de la Guía para desarrolladores de Apex ilustra cómo la anotación marca esto como un método que Flow puede invocar. Tenga en cuenta que la anotación también define detalles como una etiqueta y una descripción que determinan lo que se muestra al usuario de Flow Builder.

Un efecto secundario importante de las anotaciones de @Invocable… del que pocas personas hablan es que esto muestra automáticamente su Apex al punto final de la API <INSTANCEURL>/data/<VERSION>/actions/custom/apex .

Otra cosa útil que puede hacer al invocar Apex desde su flujo es acceder a los diferentes tipos de Apex asíncrono. Lo que trae a colación la siguiente característica de Apex que se debe abordar.

La ejecución asíncrona desacopla una acción que queremos realizar del contexto de ejecución actual. Siguiendo las mejores prácticas actuales, existen tres formas de ejecutar Apex de forma asincrónica: en cola, programable y por lotes. Aunque técnicamente el bus de eventos es asíncrono, lo omitiremos por el momento.

Si solo necesita activar un poco de código para ejecutarlo de forma asincrónica, la opción en cola es la herramienta de referencia. Si tiene varias tareas asincrónicas, queueable las ejecuta de manera determinista en orden. Debido a que están en cola en orden, también puede encadenar una llamada asíncrona de otra. Y Apex en cola admite entradas de objetos o tipos primitivos.

Apex programado funciona tal como lo esperaría: ejecute algún código de Apex en un horario. Batch Apex está optimizado para trabajar con conjuntos de datos muy grandes. Para utilizar Apex asíncrono, debe crear una clase de Apex que implemente una interfaz específica: Queueable , Schedulable o Batchable , respectivamente.

Nota: algunos desarrolladores pueden estar familiarizados con la anotación @Future para hacer que un solo método sea asincrónico, también conocido como "métodos futuros". Los métodos futuros, aunque rápidos y fáciles, tienen limitaciones que los hacen menos útiles. No hay nada que pueda hacer con un método futuro que no se pueda hacer mejor con una clase en cola. Por este motivo, no recomendamos implementaciones de producción con métodos futuros.

Por lo tanto, echemos un vistazo a un ejemplo de una clase de Apex que se puede poner en cola.

<dx-code-block title language="Java" code-block="public with sharing class QueueableRecipes implements Queueable { public static void execute(QueueableContext qc) { List accounts = [ SELECT Id, Description FROM Account LIMIT 1000 ]; for (Account acct : accounts) { acct.Description += ‘ Edited by Queueable class’; } try { update accounts; } catch (DmlException dmle) { System.debug( LoggingLevel.INFO, ‘real life use cases should do more than just logging the error: ‘ + dmle.getMessage() ); } }
} «>

Todas las interfaces asíncronas de Apex tienen un método execute() que debe implementarse como se muestra arriba. Para ejecutar su clase Queueable , debe ponerla en cola.

Si bien no se muestra en este ejemplo de la aplicación de muestra Recetas de Apex, para pasar datos a su cola, anule el constructor con los parámetros que necesita.

El término "Apex dinámico" es un poco inapropiado. O, al menos, podría malinterpretarse como que Apex de alguna manera funciona como un lenguaje de programación dinámico. Esto no es a lo que se refiere (por ejemplo, no hay Apex
función eval !).

Dynamic Apex es un código que se adapta a diferentes tipos de SObject ( Account , Contact , My_Custom_Object__c , etc.) en tiempo de ejecución. Esto se hace abstrayendo referencias específicas de SObject. La clave es usar la superclase SObject cuando se trabaja con datos. También utilizará las funciones de "descripción" de Apex para detectar con qué objetos y campos está trabajando y qué puede hacer con ellos (por ejemplo, si este usuario puede consultar este objeto).

Esta es una habilidad esencial para los desarrolladores de ISV. A menudo, creará una aplicación que debe adaptarse al entorno local del cliente que instala su aplicación. Esto significa que su código necesita detectar, describir y adaptar su comportamiento dependiendo de datos conocidos o incluso desconocidos.

Aunque es esencial para un desarrollador de ISV, también es importante para cualquier persona que quiera escribir código más reutilizable.

Tome este ejemplo de consulta muy básico:

<dx-code-block title language="Java" code-block="List accts = [SELECT Id, Name, Website FROM Account];»>

Esto funcionará todo el día consultando los datos de la cuenta. Pero, ¿y si queremos construir una consulta para cualquier SObject?

Para convertir esto en un Apex "dinámico", necesitamos abstraer las referencias de campo y SObject específicas. Y tal vez lo incluiríamos en un método que permitiera a otro desarrollador pasarlos. También podríamos verificar para asegurarnos de que el usuario tenga los permisos de objeto para realizar la operación que estamos a punto de intentar.

<dx-code-block title language="Java" code-block="public static List executeDynamicQuery(Schema.DescribeSObjectResult obj, List fields){ // Create a result-set list List resultRecords; if (obj.isQueryable()){ // Set up a query string String queryTemplate = ‘SELECT {0} FROM {1}’; List queryDetails = new List{String.join(fields, ‘, ‘), obj.getName()}; String queryString = String.format(queryTemplate, queryDetails); // Run your query resultRecords = Database.query(queryString); } return resultRecords; } «>

Lo anterior construye una consulta para un SObject que se pasa al método y una lista arbitraria de campos. Utiliza el objeto DescribeSObjectResult para detectar la capacidad de consulta e inferir el nombre de la API de SObject al construir y ejecutar la consulta. A continuación, debe invocarlo.

Así es como podríamos hacer eso con los objetos Cuenta y Contacto, respectivamente:

<dx-code-block title language="Java" code-block="List accountRecords = DynamicApexClass.dynamicQuery(Account.SObjectType.getDescribe(), new List{‘Id’,’Name’,’Website’}); List contactRecords = DynamicApexClass.dynamicQuery(Contact.SObjectType.getDescribe(), new List{‘Id’,’FirstName’,’LastName’}); «>

Este ejemplo no aborda algunos riesgos de SOQL dinámico, como la inyección de SOQL. Por lo tanto, asegúrese de leer sobre Apex dinámico. Aprender a escribir Apex seguro hará que sea menos probable que implemente código vulnerable en su organización (o la de un cliente). El enlace de variables en sus consultas SOQL es una herramienta clave para proteger su Apex dinámico de ser explotado. El método escapeSingleQuotes() es otra herramienta más antigua que también puede encontrar. El modo de usuario también es clave para garantizar que cualquier acción realizada tenga que cumplir con todas y cada una de las restricciones del usuario que la ejecuta.

Para obtener un ejemplo más completo y seguro de Apex dinámico, consulte la receta de Apex del método invocable en la aplicación de ejemplo Recetas de Apex. Esa acción invocable funciona con el objeto Cuenta o Tarea.

Con Salesforce, hay algunas formas de realizar la integración sin código. Específicamente, si solo necesita una aplicación o servicio de cliente para obtener datos de Salesforce, hay muchas API que se muestran automáticamente sin ningún tipo de codificación en el lado de Salesforce. Incluso se ajustan a su esquema personalizado. Si está integrando su organización a un sistema externo compatible con OData, puede usar Salesforce Connect y objetos externos (nuevamente, no se requiere código).

Pero a veces, es posible que deba llamar desde su organización a un servicio externo. O tal vez desee mostrar un punto final personalizado que agrupe más complejidad que una de las API estándar. Nuevamente, Apex contiene funciones que admiten tanto la aparición de nuevas API personalizadas como la llamada a servicios web.

Al pensar en API personalizadas, en estos días, la mayoría de los desarrolladores pensarían en API REST. Puede crear una API REST personalizada en Salesforce Platform creando una clase de Apex que se anota con la anotación @RestResource . Parte del trabajo de la anotación es definir también el nombre del recurso. Todas las API REST personalizadas basadas en Apex se encuentran en <INSTANCEURL>/services/apexrest/ .

Para definir los comportamientos que necesita admitir, hay una serie de anotaciones de métodos que corresponden a verbos HTTP, como @HttpGet y @HttpPost . La clase RestContext contiene un conjunto de elementos de acceso para obtener el estado de la solicitud HTTP entrante y la respuesta saliente que devuelve. A continuación, se muestra un ejemplo de un extremo REST básico que aparece en el método HTTP GET. Tenga en cuenta cómo se utilizan las anotaciones.

<dx-code-block title language="Java" code-block="@RestResource(urlmapping='/integration-service/*')
global inherited sharing class CustomRestEndpointRecipes( … @HttpGet global static String getRecordsToReturn() { RestResponse response = RestContext.response; try { List accounts = [ SELECT Id, Name, Phone, Website FROM Account WITH USER_MODE ]; response.statusCode = 200; String serializedAccounts = JSON.serialize(accounts); return serializedAccounts; } catch (QueryException qe) { System.debug( LoggingLevel.INFO, ‘Failed to query a list of Accounts. Error is: ‘ + qe.getMessage() ); response.statusCode = 400; return qe.getMessage(); } }
} «>

Si su requisito es crear un servicio SOAP, también hay un conjunto de características para admitir ese protocolo.

Fuera del código real, necesitará una sesión autorizada para acceder a cualquier servicio web que cree. Pero si ya tiene un cliente autorizado, la solicitud es solo otra llamada al punto final personalizado que defina.

La llamada a un punto final REST externo se realiza a través de un conjunto de clases. La clase HttpRequest le permite definir los parámetros de cómo se comportará su solicitud (punto final, verbo HTTP, encabezados, etc.). La solicitud se realiza a través del método estático Http.request() . Esto devuelve un objeto HttpResponse que le proporciona los datos devueltos o el error si la solicitud falla.

Nota: Las clases HttpRequest y HttpResponse son las mismas para las llamadas REST y los servicios REST personalizados.

Se requiere cierta configuración para su texto destacado. Específicamente, deberá configurar una credencial con nombre en la mayoría de los casos. Esta configuración le permite descargar el protocolo de enlace de autenticación de su código. Aunque, si está llamando a un servicio anónimo no autenticado, también puede optar por usar una configuración de sitio remoto más simple.

= 200 && response.getStatusCode()

El ejemplo anterior hace una llamada simple a un punto final. Tenga en cuenta que no se utilizan las opciones para establecer encabezados ni usar una credencial con nombre, ya que esta solicitud es para una API simple que no requiere autenticación.

La transmisión de eventos es una herramienta valiosa para crear arquitecturas débilmente acopladas en aplicaciones complejas. La plataforma de Salesforce implementa la transmisión de eventos a través de dos características principales: eventos de plataforma y captura de datos modificados. La columna vertebral de estas funciones es el bus de eventos.

De la Guía para desarrolladores de eventos de plataforma, el bus de eventos es "Un servicio de entrega y almacenamiento de eventos de múltiples inquilinos y múltiples nubes basado en un modelo de publicación-suscripción". Tanto su organización como los sistemas externos pueden publicar y suscribirse a eventos. Por supuesto, es clave que si publicas un mensaje, algo debe haberse suscrito para que suceda cualquier otra cosa.

Los eventos de plataforma representan los datos que pasan a través del bus de eventos. Los eventos se procesan en el orden en que se reciben. Una forma de pensar en ellos es como un SObject efímero que se almacena temporalmente en el bus de eventos en su camino hacia su destino. De hecho, los metadatos de un evento se almacenan en el mismo lugar de su proyecto que sus SObjects. Puede distinguir los eventos de plataforma personalizados de los SObjects por su sufijo __e (por ejemplo Order_Complete__e ).

Una vez que completa un evento con sus datos, el método EventBus.publish() es similar a una llamada DML en su SObject normal. Tenga en cuenta el código a continuación que publica un evento.

En Apex, se suscribe a un evento creando un disparador asíncrono para él. Pero los disparadores asíncronos son diferentes de la operación DML transaccional estándar de un disparador normal. Por esta razón, debe tener en cuenta algunas diferencias. Con disparadores asíncronos, el tamaño del lote es diferente. Necesitas configurar tu usuario de ejecución. Las operaciones de activación de eventos también se pueden volver a intentar. Asegúrese de conocer estas diferencias a medida que comience a implementar activadores de eventos de plataforma. Tenga en cuenta el disparador a continuación.

A diferencia de los disparadores DML típicos, los disparadores de eventos de plataforma solo admiten el contexto after insert . Tampoco existe una acción explícita para suscribir un disparador a un evento de plataforma. Una vez que el activador se implementa en su organización, se suscribe automáticamente.

Además de Apex, los eventos de la plataforma pueden activarse y suscribirse mediante sistemas externos y Flow. Son clave en las integraciones débilmente acopladas. Como tal, es raro que Apex active y se suscriba al mismo evento.

Hemos cubierto mucho. Pero de ninguna manera esto es todo lo que necesita saber como desarrollador de Apex. Los elementos cubiertos se basan en algunas características bastante comunes. Pero es posible que deba aprender otras funciones de Apex según los requisitos de su proyecto. Aquí hay algunos otros elementos que debe tener en cuenta.

Caché de plataforma : si proviene de otras plataformas de programación, estará familiarizado con la noción de una variable estática o global persistente en todas las transacciones. Pero en Apex, las estáticas se limitan a la transacción. La memoria caché de la plataforma es una característica de Apex que permite la persistencia de datos en memoria entre transacciones. Si encuentra un retraso en el rendimiento relacionado con la recuperación de datos, la memoria caché de la plataforma puede ayudar.

Marcos de activación : no es una característica del lenguaje, sino bibliotecas que facilitan el uso de activadores. Estos proyectos creados por la comunidad abstraen el código de activación repetitivo que a menudo necesita escribir. Al usar un marco de activación, debería permitirle concentrarse solo en la lógica que debe abordarse. Para algo más que un disparador trivial, se recomienda encarecidamente adoptar un marco. Y conozco a algunos que argumentarían que debería considerar un marco incluso para ese disparador trivial. Pero este no es el lugar para debatir el tiempo de valor frente a la optimización prematura. Hay una implementación muy simple de esto en la aplicación Apex Recipes .

SOSL : el lenguaje de búsqueda de objetos de Salesforce ( SOSL ) es el primo subestimado de SOQL. SOSL permite consultas basadas en texto no deterministas. Es muy eficiente para encontrar datos de texto en comparación con la búsqueda de campos de texto con SOQL y comodines. Admite la búsqueda de varios SObjects simultáneamente y contiene funciones para filtrar de forma determinista los resultados de la búsqueda. Si tiene consultas SOQL de texto que son lentas, definitivamente consulte esta herramienta.

AuraEnabled : para mostrar el código Apex personalizado en sus componentes web Lightning (LWC), esta anotación es clave. Es muy probable que ya esté usando este si comenzó su viaje de Salesforce creando LWC. Pero si aún no lo ha usado, búsquelo en cualquier proyecto que involucre una interfaz de usuario personalizada. ¿Por qué "Aura" habilitado si es para LWC? Bueno, esta anotación se creó inicialmente para admitir el predecesor de LWC, el marco Aura. Tenía sentido no reinventar una nueva anotación cuando la existente funcionaría igual de bien para LWC.

Cada viaje para aprender un nuevo lenguaje de programación tiene algunas características clave que todos deben conocer. La sintaxis básica, el control de flujo y el modelo de ejecución de la plataforma son fundamentales para comprender. Pero una vez que tenga esos conceptos básicos, trabajar en funciones más avanzadas es clave para aumentar su conjunto de habilidades. Las acciones invocables, el Apex asíncrono, el Apex "dinámico", la integración y el bus de eventos son funciones que probablemente utilizará a medida que avanza. Al familiarizarse con estos ahora, no solo se preparará para abordar proyectos en el futuro, sino que también podrá tomar mejores decisiones de solución.

Si cree que está listo para aprender, los senderos para desarrolladores intermedios y avanzados en Trailhead pueden ayudarlo a encaminarse con todos estos temas y más.

Aplicación de muestra Apex Recipes en Github

Guía para desarrolladores de Apex

Guía de referencia de idiomas de Apex

Centro de desarrolladores de Apex

Peter Chittum ha trabajado en software empresarial y habilitación para desarrolladores durante más de 20 años. Pasó los últimos 12 años ayudando a miles de desarrolladores a tener éxito en la plataforma de Salesforce, y más recientemente lideró el equipo de promotores de desarrolladores en Salesforce. Pasa su tiempo libre con su familia, anda en bicicleta de montaña, cocina y toca música. Sígalo en Twitter (@pchittum), LinkedIn (en/PeterChittum) o BlueSky Social (@pchittum.bsky.social).

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

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/05/leveling-up-your-apex-skills.html

Categories
Developers

Acceda dinámicamente a etiquetas personalizadas en Apex

Última actualización el 23 de mayo de 2023 por Rakesh Gupta

Gran idea o pregunta duradera:

  • ¿Cómo acceder dinámicamente a la etiqueta personalizada en Apex?

Objetivos:

Después de leer este blog, podrá:

  • Acceda a la etiqueta personalizada en Apex dinámicamente
  • Acceda a la etiqueta personalizada en Apex de forma dinámica para un idioma
  • y mucho más

Ben Halpern es un desarrollador Jr. de Salesforce en Gurukul On Cloud (GoC) . Ben está escribiendo código Apex para una historia de usuario que requiere obtener la siguiente etiqueta personalizada en alemán e hindi.

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

Después del lanzamiento de S ummer'23 , puede usar el método System.Label.get(namespace, label, language) para obtener una etiqueta personalizada, especificando opcionalmente un idioma . La función ahora permite la resolución dinámica de nombres de etiquetas en tiempo de ejecución, incluida la anulación del idioma actual del usuario si existe una traducción para el idioma solicitado.

También puede comprobar si existe una traducción para una etiqueta y un idioma en un espacio de nombres mediante Label.translationExists(namespace, label, language) . No puede acceder a las etiquetas que están protegidas en un espacio de nombres diferente.

Práctica guiada (nosotros hacemos):

Hay 3 pasos para resolver el requisito comercial de Ben usando Apex y Custom Label . Debemos:

  1. Configuración del banco de trabajo de traducción
  2. Crear etiquetas personalizadas
  3. Script de Apex para acceder dinámicamente a etiquetas personalizadas

Paso 1: configurar el banco de trabajo de traducción

Este paso es opcional; sin embargo, debemos asegurarnos de que el banco de trabajo de traducción esté configurado correctamente para los requisitos actuales. Lea este artículo de ayuda para obtener instrucciones paso a paso.

Asegúrese de agregar idiomas para la traducción, asignar traductores para cada idioma y activar o desactivar las traducciones de un idioma. Agregaré mi cuenta de usuario a hindi y alemán para el caso de uso comercial actual.

Paso 2: crea etiquetas personalizadas

  1. Haga clic en Configuración .
  2. En el cuadro Búsqueda rápida, escriba Etiquetas personalizadas .
  3. Seleccione Etiquetas personalizadas y luego haga clic en Nueva etiqueta personalizada .
    1. Cree la etiqueta personalizada como se muestra en la siguiente captura de pantalla:
  4. Haga clic en Ejecutar .

Paso 2: Script de Apex para acceder dinámicamente a etiquetas personalizadas

  1. Haga clic en Configuración | Consola de desarrollador .  
  2. Usaré la herramienta Ejecutar Apex anónimo en Developer Console para ejecutar el código Apex.
    1. Un bloque anónimo es un código Apex que no se almacena en los metadatos, pero se puede compilar y ejecutar. Los bloques anónimos se ejecutan como el usuario actual y pueden fallar al compilarse si el código viola los permisos de objeto y de nivel de campo del usuario.
  3. Para abrir la ventana Ejecutar anónimo, haga clic en Depurar | Abra la ventana Ejecutar anónimo .
     String choiceInEnglish = System.Label.get('rakeshistomMVP','PreferredFoodChoice','');
    system.debug('Valor original-'+choiceInEnglish); String choiceInHindi = System.Label.get('rakeshistomMVP','PreferredFoodChoice','hi');
    system.debug('Hindi Value-'+choiceInHindi); String choiceInGerman = System.Label.get('rakeshistomMVP','PreferredFoodChoice','de');
    system.debug('Valor alemán-'+elecciónEnAlemán);

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2023/05/23/dynamically-access-custom-labels-in-apex-2/

Categories
Developers Tutoriales de Salesforce

Escriba Apex simplificado y seguro con las actualizaciones de Spring '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.

Escriba Apex simplificado y seguro con las actualizaciones de Spring '23 | Blog de desarrolladores de Salesforce

La versión Spring '23 de Salesforce Platform, disponible en general a partir del 13 de febrero, agregó algunas actualizaciones fantásticas al lenguaje de Apex. Hemos implementado algunas de las actualizaciones de Spring '23 en la aplicación de ejemplo Apex-Recipes , lo que ha simplificado significativamente la base de código existente.

En esta publicación de blog, revisaremos las actualizaciones en Spring '23 para Apex con ejemplos de código. Estas actualizaciones ayudan a los desarrolladores a crear aplicaciones más seguras para sus organizaciones.

1. Operaciones de base de datos en modo usuario

Apex, de forma predeterminada, se ejecuta en modo Sistema con permisos elevados, lo que significa que los desarrolladores pueden pasar por alto los controles de seguridad sin darse cuenta al escribir código.

Antes de continuar, revisemos rápidamente los controles de seguridad que los administradores de Salesforce pueden colocar para garantizar que los usuarios solo puedan acceder y manipular los datos para los que están autorizados a ver o editar. Las viñetas a continuación resumen diferentes mecanismos para aplicar un modelo de seguridad detallado para sus datos de Salesforce.

  • CRUD significa "Crear, Leer, Actualizar y Eliminar", las cuatro operaciones básicas que un usuario puede realizar en un registro en Salesforce
  • FLS significa "Seguridad de nivel de campo", que determina qué campos dentro de un registro que un usuario puede ver o editar
  • El uso compartido de registros permite al administrador configurar reglas sobre quién puede ver o editar un registro en función de varios criterios.

Con las operaciones de base de datos en modo usuario , los desarrolladores pueden optar por ejecutar Apex en el contexto del usuario, lo que garantiza que se apliquen las reglas CRUD/FLS y de uso compartido del usuario configuradas. Veamos esto en acción con ejemplos de código detallados.

Aplicar CRUD/FLS y reglas de uso compartido para SOQL estático

Puede indicar el modo de operación usando la palabra clave WITH USER_MODE para el modo de usuario y WITH SYSTEM_MODE para el modo de sistema en su consulta SOQL. Vea el ejemplo a continuación.

<dx-code-block title language code-block="List accounts = [SELECT Name, ShippingCity, ShippingStreet FROM Account WITH USER_MODE];»>

En el ejemplo anterior, al usar la palabra clave WITH USER_MODE , la consulta respeta estas restricciones de seguridad:

  • Permisos de lectura en el objeto Cuenta (configurado para Perfil/Conjunto de permisos) para el usuario
  • Permisos de campo (FLS) para Nombre, Calle de envío y Ciudad de envío para el usuario
  • Configuración de nivel de registro (como valores predeterminados de toda la organización y reglas de colaboración) para el objeto Cuenta para el usuario

El WITH USER_MODE la palabra clave también es compatible con agregar SOQL para hacer cumplir CRUD/FLS y reglas de uso compartido de registros.

<dx-code-block title language code-block="List groupedResults = [SELECT SUM(AMOUNT) total FROM Opportunity WHERE AccountId = :accountId WITH USER_MODE];»>

En el ejemplo anterior, al usar la palabra clave WITH USER_MODE , la consulta respeta estas restricciones de seguridad:

  • Permisos de lectura en el objeto Oportunidad para el usuario
  • Permisos de campo (FLS) para Amount y AccountId (sí, incluso los campos utilizados en la cláusula SOQL WHERE se verifican para FLS) para el usuario
  • Acceso a nivel de registro (como valores predeterminados de toda la organización y reglas de colaboración) en el objeto Oportunidad para el usuario

Para obtener más ejemplos, consulte la clase SOQLRecipes de la aplicación apex-recipes.

Aplicar CRUD/FLS y reglas de uso compartido para SOQL dinámico

Los nuevos métodos Database (ver documentos ) ahora admiten un parámetro AccessLevel que le permite ejecutar operaciones de base de datos en modo de usuario en lugar de en el modo de sistema predeterminado. Veamos un código de ejemplo para ejecutar un SOQL dinámico en el modo de usuario.

<dx-code-block title language code-block="String query = 'SELECT ID, Name FROM Account LIMIT 1';
List lstAccounts = Database.query(query, AccessLevel.USER_MODE);»>

En el ejemplo anterior, el modo de usuario se aplicará de manera similar al ejemplo de SOQL estático que vimos en la sección anterior.

Para obtener más ejemplos, consulte la clase DynamicSOQLRecipes de apex-recipes. Hemos actualizado todos los métodos de la clase para usar el parámetro AccessLevel .

Hacer cumplir CRUD/FLS y reglas de uso compartido para SOSL

WITH USER_MODE o WITH SYSTEM_MODE también son compatibles con declaraciones SOSL (Lenguaje de búsqueda de objetos de Salesforce).

Veamos un ejemplo de una instrucción SOSL estática.

<dx-code-block title language code-block="String keyword = 'Alaska';
List<List> searchResults = [ FIND :keyword IN Name FIELDS RETURNING Account(Name), Contact(LastName, Account.Name) WITH USER_MODE ];»>

En el ejemplo anterior, al usar la palabra clave WITH USER_MODE , la consulta respeta estas restricciones de seguridad:

  • Permisos de lectura en los objetos Cuenta y Contacto para el usuario
  • Permisos de campo (FLS) para el campo Nombre en Cuenta y campo Apellido en Contacto para el usuario
  • Acceso a nivel de registro (como valores predeterminados de toda la organización y reglas de colaboración) en los objetos Cuenta y Contacto para el usuario

Para Dynamic SOSL, los nuevos métodos Search (ver documentos ) también admiten el parámetro AccessLevel similar a los nuevos métodos Database . A continuación se muestra un ejemplo de cómo usar el parámetro AccessLevel para ejecutar SOSL en el contexto de los usuarios.

<dx-code-block title language code-block="String query = 'FIND 'Edge*' IN ALL FIELDS RETURNING Account(ID,Name), Contact, Lead'; List<List> searchResults = Search.query(query, AccessLevel.USER_MODE);»>

Hacer cumplir CRUD/FLS y reglas de uso compartido para DML

Las operaciones de la base de datos pueden especificar el modo de usuario o sistema utilizando las palabras clave as user o as system .

El siguiente es un código de ejemplo que ejecuta DML en el modo de usuario aplicando CRUD/FLS y reglas de uso compartido.

Para Dynamic DML, los desarrolladores pueden utilizar el parámetro AccessLevel para ejecutar operaciones de base de datos en el modo de usuario o en el modo de sistema.

Echemos un vistazo a un ejemplo de la aplicación apex-recipes para ver cómo puede diseñar métodos para que sean genéricos, de modo que el consumidor del método pueda decidir ejecutar el código en el modo de usuario o de sistema.

El fragmento de código siguiente muestra cómo invocar este método en el modo de usuario.

El siguiente fragmento de código muestra cómo invocar este método en el modo de sistema.

Para obtener más ejemplos, consulte la clase DMLRecipes de la aplicación apex-recipes.

Consideraciones importantes

  1. Las operaciones de la base de datos en modo usuario generan excepciones de seguridad si se encuentra una infracción CRUD/FLS. Si tiene un requisito para evitar excepciones y aún aplicar la seguridad, use el método Security.stripInaccessible() (consulte los documentos ). Consulte la clase StripInaccessibleRecipes (ver documentos ) de la aplicación apex-recipes para ver ejemplos de código.
  2. Si usa la palabra clave WITH SECURITY_ENFORCED en sus declaraciones SOQL para hacer cumplir CRUD/FLS, ahora le recomendamos que use la palabra clave WITH USER_MODE en su lugar debido a las siguientes razones:
    1. La consulta SOQL que usa la palabra clave WITH USER_MODE admite muchas innovaciones nuevas, como reglas de restricción, reglas de alcance y cualquier otra operación de seguridad para el acceso a datos y CRUD/FLS, que la plataforma puede agregar en el futuro, por lo que es una especie de prueba del futuro
    2. La consulta SOQL que usa la palabra clave WITH USER_MODE maneja casos de uso de seguridad complejos mucho mejor. Por ejemplo, WITH USER_MODE es compatible con SOSL y consultas polimórficas .
    3. Las declaraciones SOQL que usan la palabra clave WITH USER_MODE manejan CRUD/FLS para los campos usados en la cláusula where y order by o campos usados en la consulta de relación o búsqueda polimórfica
    4. Las consultas SOQL que utilizan la palabra clave WITH USER_MODE funcionan mucho mejor en comparación con el uso WITH SECURITY_ENFORCED
  3. El modo de usuario anula la configuración de nivel de clase para la consulta SOQL o DML escrita en modo de usuario. Exploremos esto con el siguiente código de ejemplo.

<dx-code-block title language code-block="public without sharing ExampleCls { public static List getAccount() { String query = ‘SELECT Id FROM Account Limit 1’; return Database.query(query, AccessLevel.USER_MODE); } }»>

En el ejemplo anterior, aunque la clase Apex está configurada para ejecutarse en el contexto del sistema (sin la palabra clave compartida), la consulta SOQL se ejecuta en el modo de usuario, lo que refuerza la seguridad. El modo de usuario para la operación (SOQL/SOSL o DML) anula el uso compartido a nivel de clase.

2. Pasar dinámicamente variables de vinculación a consultas SOQL

Spring '23 agregó nuevos métodos como Database.queryWithBinds , Database.getQueryLocatorWithBinds y Database.countQueryWithBinds .

Estos métodos proporcionan los siguientes beneficios:

  • Anteriormente, si los desarrolladores usaban variables de vinculación en SOQL dinámico (usando el método Database.query ) que están fuera de contexto, la consulta no podía resolver las variables. Con queryWithBinds , las variables de vinculación de la consulta se resuelven directamente desde un parámetro Map con una clave en lugar de variables de código de Apex.
  • Con Database.queryWithBinds , los ataques de inyección SOQL se evitan automáticamente.

Echemos un vistazo a un ejemplo de código para comprender el segundo punto con más profundidad.

<dx-code-block title language code-block="public static List simpleBindingSoqlQuery(Map bindParams) { String query = ‘SELECT Id, Name ‘ + ‘FROM Account ‘ + ‘WHERE name = :name’; return Database.queryWithBinds( query, bindParams, AccessLevel.USER_MODE );
}»>

El código anterior ejecuta un SOQL dinámico en el modo de usuario. El método acepta un parámetro Map y se puede llamar usando el código a continuación.

<dx-code-block title language code-block="String accountName = 'Codey And Co';
Map nameBind = new Map{‘name’ => accountName};
List accounts = simpleBindingSoqlQuery(nameBind);
System.debug(accounts);»>

Tenga en cuenta que no es necesario que nos aseguremos de que el nombre de la variable esté en el mismo ámbito de método que la consulta dinámica. Además, no es necesario usar el método String.escapeSingleQuotes para el valor en la variable name cuando se usa queryWithBinds .

Para obtener más ejemplos de código, consulte esta solicitud de incorporación de cambios en nuestro repositorio de GitHub apex-recipes.

3. Especifique un retraso en la programación de trabajos en cola

Otra característica importante que lanzamos en Spring '23 es la capacidad de especificar demoras para trabajos programados que se pueden poner en cola.

Puede ser beneficioso ajustar el tiempo antes de que se ejecute el trabajo en cola en los siguientes casos de uso:

  • Si el sistema externo tiene una velocidad limitada y puede sobrecargarse con trabajos en cola encadenados que realizan llamadas rápidas
  • Al sondear los resultados, y ejecutar demasiado rápido puede provocar el uso desperdiciado de los límites diarios de Apex asíncrono

Usa el método System.enqueue(queueable, delay) (ver docs ) para especificar retrasos. Los retrasos pueden variar de cero a 10 minutos. Veamos un ejemplo para comprender mejor esta función.

El ejemplo anterior agrega un trabajo para la ejecución asincrónica retrasada al pasar una instancia de la implementación de su clase de la interfaz Queueable para la ejecución. Hay un retraso mínimo de cinco minutos antes de que se ejecute el trabajo.

Especificar un retraso predeterminado en toda la organización en la programación de trabajos en cola

Actualmente, si tiene un trabajo en cola de Apex, utiliza el tiempo estándar en cola sin demoras adicionales. Los administradores pueden definir un retraso predeterminado en toda la organización para todos los trabajos en cola que no especifican retraso usando
System.enqueue(queueable, delay) . Este es principalmente un mecanismo para manejar trabajos fuera de control que podrían estar ejecutándose demasiado rápido.

Importante consideración

Cuando establece el retraso en 0 (cero), el trabajo en cola se ejecuta lo más rápido posible. Con trabajos en cola encadenados, implemente un mecanismo para ralentizar o detener el trabajo si es necesario. Sin un mecanismo a prueba de fallas de este tipo, puede alcanzar rápidamente el límite de Apex asíncrono diario.

También hay una próxima función Beta en la versión Summer '23 (planificada para estar disponible el 10 de junio de 2023 en todas las organizaciones) que permite a los desarrolladores controlar la profundidad de los trabajos en cola encadenados.

4. Obtenga el SObject de origen de una instancia DescribeFieldResult usando el nuevo método getSObjectType

El método getSObjectType (ver documentos ) en el objeto DescribeFieldResult (ver documentos ) es un método de mejora de la calidad de vida del desarrollador que se implementó en Spring '23.

Anteriormente, los desarrolladores tenían que hackear y escribir código adicional para obtener el objeto de origen de la información del esquema de campos obtenida a través de la descripción del campo. Puede consultar las soluciones anteriores a través de esta publicación de stackexchange .

A continuación se muestra un ejemplo de código de cómo usar el nuevo método getSObjectType .

Con el método getSObjectType , los desarrolladores ya no tienen que pasar el nombre del objeto como una cadena. Consulte un ejemplo más completo en las notas de la versión de Spring '23.

Actualizaciones de herramientas

Hemos actualizado el servidor de idioma de Apex para admitir las últimas adiciones de sintaxis, como insert as user, insert as system y mucho más. Y ahora admitimos las últimas adiciones de sintaxis en el lanzamiento reciente de las Extensiones de Salesforce para VSCode .

También quiero agradecer a Dang Mai por actualizar el complemento más bonito para Apex (usado para formatear el código Apex automáticamente) para admitir todas las palabras clave introducidas para las operaciones de la base de datos en modo usuario.

Conclusión

En conclusión, la versión Spring '23 de Salesforce incluye varias actualizaciones. Mediante el uso de estas nuevas funciones, los desarrolladores pueden crear aplicaciones más eficaces y seguras para sus organizaciones.

Los equipos de productos de Apex no se detienen ahí y hay más innovaciones en la hoja de ruta. Puede obtener una vista previa de lo que viene para Apex en Summer '23 (nuestro próximo lanzamiento) en la vista previa de las notas de la versión . También recomiendo ver la grabación de la sesión TrailblazerDX '23, Apex: What's New and What's Coming , para aprender más sobre lo que se está cocinando.

Referencias adicionales

Sobre el Autor

Mohith Shrivastava es promotor de desarrollo en Salesforce con una década de experiencia en la creación de productos a escala empresarial en la plataforma de Salesforce. Actualmente se está enfocando en las herramientas para desarrolladores de Salesforce, Flow, Apex y Lightning Web Components en Salesforce. Mohith se encuentra actualmente entre los principales contribuyentes en Salesforce Stack Exchange, un foro de desarrolladores donde los desarrolladores de Salesforce pueden hacer preguntas y compartir conocimientos. Puedes seguirlo a través de su Twitter @msrivastav13 .

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

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/05/write-simplified-and-secure-apex-with-spring-23-updates.html

Categories
Developers

Generar código de barras y código QR en Salesforce

Última actualización el 12 de mayo de 2023 por Rakesh Gupta

Gran idea o pregunta duradera:

  • ¿Cómo generar código de barras y código QR en Salesforce?

Objetivos:

Después de leer este blog, podrá:

  • Comprender la diferencia entre código de barras y código QR
  • Beneficios de usar Código de Barras y Código QR
  • Genere un código de barras y muéstrelo en un campo
  • Cargar el código de barras en el archivo de Salesforce y asociarlo con el producto
  • y mucho más

Jestilla Zetkin trabaja como arquitecta de Salesforce en Gurukul On Cloud (GoC) . Mientras trabajaba en la implementación de Sales Cloud, obtuvo el requisito de generar códigos de barras. A continuación se detalla el requisito:

  1. Generar un código de barras para el código del producto
  2. Mostrar el código de barras en la página de detalles del producto
  3. Adjunte automáticamente el código de barras a la lista relacionada con el archivo en el producto.

¿Qué son el código de barras y el código QR?

Un código de barras y un código QR son tipos de códigos legibles por máquina que se utilizan para almacenar y recuperar información.

Un código de barras es una imagen cuadrada o rectangular compuesta de líneas paralelas negras y espacios en blanco. Se utiliza en tiendas para rastrear el inventario de productos, en hospitales para rastrear registros de pacientes y en el rastreo de equipaje de aerolíneas, etc.

Un código de respuesta rápida, también conocido como código QR, es un tipo de código de barras que incluye detalles legibles por máquina sobre el elemento al que está adjunto. Se utiliza para compartir datos como videos, fotos, URL web, contactos, etc.

La distinción principal entre un código de barras y un código QR es que un código de barras solo puede almacenar datos en una dimensión, mientras que un código QR puede almacenar datos en dos dimensiones.

¿Beneficios de usar código de barras y código QR?

El código de barras y el código QR brindan varias ventajas en el proceso de ventas, incluida una precisión mejorada, disponibilidad de fecha inmediata, implicaciones de bajo costo y mejor control de inventario. Beneficios de usar códigos de barras y códigos QR:

  1. Entrada de datos eficiente : los códigos de barras y los códigos QR eliminan la necesidad de la entrada manual de datos, lo que reduce los errores y aumenta la eficiencia.
  2. Gestión de inventario : ayudan a agilizar el seguimiento y la gestión del inventario al proporcionar información precisa y en tiempo real.
  3. Transacciones más rápidas : escanear códigos de barras y códigos QR acelera las transacciones en el punto de venta, lo que reduce los tiempos de espera.
  4. Fácil implementación : los códigos de barras y los códigos QR se pueden generar e imprimir fácilmente, y su escaneo se puede realizar con teléfonos inteligentes estándar o escáneres dedicados.
  5. Oportunidades de marketing mejoradas : los códigos QR, en particular, se pueden usar para atraer a los clientes con contenido interactivo, promociones y anuncios.

¿Cómo generar código de barras y código QR?

Para generar un código de barras, puede utilizar varios generadores de códigos de barras en línea o bibliotecas de programación que ofrecen funcionalidades de creación de códigos de barras.

En este artículo usaremos la API de código de barras bwip-js . La API en línea de bwip-js está alojada en una instancia Amazon AWS EC2 mediante una aplicación node.js. Puede usar esta API para generar dinámicamente imágenes de códigos de barras desde cualquier lugar de la web. La imagen devuelta está en formato PNG. No hay cargos por usar esta API y no pude encontrar ningún límite de uso.

Los dos parámetros requeridos son el tipo de código de barras y el valor a codificar. También puede agregar parámetros adicionales para rotar (permite rotar la imagen a una de las cuatro orientaciones ortogonales) e incluir texto .

Práctica guiada (nosotros hacemos):

Realice los pasos a continuación para generar un código de barras para el código del producto:

Paso 1: cree un campo de fórmula personalizada en el producto para generar y mostrar un código de barras

Ahora generaremos la imagen del código de barras usando un generador de código de barras bwip-js y mostraremos la imagen en un campo de fórmula usando la etiqueta de imagen.

  1. Haga clic en Configuración .
  2. En el Administrador de objetos, escriba Producto .
  3. Seleccione Campos y relaciones , luego haga clic en Nuevo .
  4. Seleccione Fórmula como Tipo de datos, luego haga clic en Siguiente.
  5. Ingrese la etiqueta del campo : código de barras (código del producto) y haga clic en la tecla de tabulación, se completará el nombre del campo .
    1. Tipo de devolución de fórmula : Texto
  6. Haga clic en el botón Siguiente .
    1. URL de la fórmula : IMAGEN(“ https://bwipjs-api.metafloor.com/?bcid=code39&text=”+ ProductCode +”&scale=2&rotate=N&includetext&backgroundcolor=ffffff”,”Barcode”)
  7. Establezca la seguridad a nivel de campo para los perfiles .
  8. Agregue este campo a Diseño de página .
  9. Haga clic en Guardar .

Paso 2: asociar la imagen del código de barras al archivo de Salesforce

Ahora ya sabe cómo generar la imagen del código de barras sin ningún código. El siguiente paso es cargar la imagen del código de barras en el archivo de Salesforce para generar o imprimir un PDF.

  1. La imagen devuelta de la API de código de barras bwip-js está en formato PNG. Necesitamos un código apex para recuperar el cuerpo de esta solicitud como un blob.
     Solicitud HttpRequest = new HttpRequest();
    solicitud.setEndpoint(r.imagenURL);
    solicitud.setMethod('GET');
    Enlace Http = nuevo Http();
    Respuesta HttpResponse = vinculante. enviar (solicitud);
    Imagen de blob = respuesta.getBodyAsBlob();

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://automationchampion.com/2023/05/11/generate-barcode-and-qr-code-in-salesforce-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
AppExchange Developers Tutoriales de Salesforce

Prepare su aplicación para pasar la revisión de seguridad de AppExchange ☁️

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

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

Prepare su aplicación para pasar la revisión de seguridad de AppExchange | Blog de desarrolladores de Salesforce

Esta guía se publicó originalmente en Medium a principios de 2021 y se actualizó con la orientación y los consejos más recientes, incluidas nuevas funciones de seguridad como parte de los lanzamientos recientes y una nueva estructura de precios para las revisiones .

Ha creado su aplicación, funciona muy bien y ahora está listo para lanzarla al mundo. Pero antes de que pueda publicar su creación en AppExchange , su aplicación debe pasar una revisión de seguridad. En Salesforce, nada es más importante que la confianza de nuestros clientes. El proceso de revisión de seguridad está aquí para validar que se puede confiar en su aplicación con los datos del cliente.

En esta publicación de blog, brindaremos orientación sobre el proceso de revisión de seguridad de AppExchange para arquitectos, desarrolladores, evaluadores, propietarios de productos y cualquier otra persona involucrada en el desarrollo o envío de un paquete determinado.

Enlaces rápidos:

  1. Descripción general
  2. preguntas frecuentes
  3. Problemas comunes y antipatrones
  4. Estampación
  5. Estrategia de presentación
  6. Conclusión

Este artículo incluye una colección de las mejores prácticas de desarrollo seguro y una lista de verificación de los errores comunes encontrados durante la revisión de seguridad (SR) de AppExchange. Puede ahorrar tiempo antes de su revisión de seguridad asegurándose de evitar estos problemas comunes. No es una lista exhaustiva, y el campo de la seguridad está en constante evolución. Para evitar la duplicación, vincularemos a la fuente autorizada para un tema determinado.

Comencemos abordando algunas preguntas frecuentes sobre el proceso de revisión de seguridad.

¿Por qué mi paquete pasó el escaneo inicial y no la revisión de seguridad más profunda?

La revisión de seguridad es un proceso complejo de varias capas que involucra varias herramientas y especialistas en seguridad. Las herramientas de verificación de código automatizadas iniciales brindan una evaluación de alto nivel de su código, pero no pueden encontrar todas las vulnerabilidades de seguridad encontradas durante una revisión manual, ya que este es un campo en constante evolución y requiere experiencia humana.

¿Qué hizo que nuestro paquete fallara en la revisión?

La persona que envió la revisión debería haber recibido un correo electrónico con un archivo adjunto que detalla qué causó que la revisión fallara. Comuníquese con su administrador de cuentas de socios (PAM) si no tiene acceso a este correo electrónico/informe.

He corregido todos los resultados de la revisión de seguridad, ¡pero ahora he vuelto a fallar!

El informe de revisión de seguridad no es una lista de verificación exhaustiva de las cosas que se deben corregir, especialmente si hay una gran cantidad de problemas con un envío. Enumera las clases de vulnerabilidades encontradas en su aplicación, pero no todas las instancias en las que ocurren. La función de la revisión de seguridad es validar que su paquete cumpla con las mejores prácticas de seguridad actuales, que no tenga vulnerabilidades conocidas y que, en general, sea seguro promocionarlo a AppExchange, donde la confianza es nuestra prioridad número 1. La revisión de seguridad no está ahí para encontrar todos los problemas de seguridad por usted, esto es algo que debe integrarse en su proceso de desarrollo y revisarse periódicamente.

Envié mi paquete para revisión, ¿cuándo se revisará?

Hay un par de pasos para esto: una vez que lo envía, el paquete está sujeto a algunas comprobaciones iniciales antes de que se coloque en la cola de SR más grande. Esto detecta cualquier error de envío importante, como la versión incorrecta del paquete enviado, y brinda una respuesta rápida de que el paquete debe volver a enviarse. Una vez pasada esta etapa, pasa a la cola principal de SR. Debido al proceso laborioso de realizar la revisión de seguridad, hay un tiempo de espera de seis a nueve semanas. Consulte la documentación para obtener la información más reciente sobre la longitud de las colas.

¡Lanzamos mañana/la próxima semana y necesitamos que se revise ahora!

El proceso de revisión de seguridad lleva tiempo y debe tenerlo en cuenta en su ciclo de desarrollo y lanzamiento. En circunstancias excepcionales, se puede dar prioridad a una revisión en particular, pero recuerde que esto realmente significa excepcional y aún requiere que un revisor de seguridad esté disponible, lo que podría demorar varios días (¡nuestras revisiones son exhaustivas!). Comuníquese con su administrador de cuentas de socios si necesita ayuda.

Nuestro paquete no pasó la revisión de seguridad y lo hemos vuelto a enviar. ¿Podemos saltarnos la cola?

Cuando envía una nueva prueba, ya tiene un probador asignado, lo que, en cierto modo, se salta el tiempo de cola y va directamente a la cola de su probador.

¡Nuestro paquete ha fallado varias veces!

Hay varias razones por las que esto podría suceder:

  1. Se corrigieron algunos problemas, pero no todos . Recuerde, no destacamos todo, así que verifique su código para ver todas las instancias de un problema.
  2. Nuevo código, nuevos problemas : ¿se ha agregado un nuevo código que presenta problemas adicionales?
  3. Malentendido de los problemas planteados : esto significa que los problemas no se solucionan correctamente.
  4. Mal diseño de seguridad : ¿hay instancias en las que su código es inseguro por diseño? Puede requerir re-arquitectura.
  5. ¿Ha revisado minuciosamente la solución usted mismo? El propósito de la revisión de seguridad es confirmar que la solución se diseñó teniendo en cuenta la seguridad, no la van a asegurar por usted.

Cada aplicación es única, pero la mayoría de las fallas de revisión de seguridad se dividen en algunas categorías. Esta sección los detalla y proporciona enlaces a la documentación para ayudarlo a evitar estos problemas.

CRUD, FLS

  1. Objeto (CRUD) y Seguridad de nivel de campo (FLS) : se configuran en perfiles y conjuntos de permisos y se pueden usar para restringir el acceso a objetos estándar y personalizados y campos individuales. Los desarrolladores de Salesforce deben diseñar sus aplicaciones para hacer cumplir la configuración CRUD y FLS de la organización en objetos estándar y personalizados, y degradar correctamente si se ha restringido el acceso de un usuario. Algunos casos de uso en los que podría ser aceptable omitir CRUD/FLS son: creación de resúmenes acumulativos o agregados que no expongan directamente los datos, modificación de objetos o campos personalizados como registros o metadatos del sistema que no deberían ser accesibles directamente para el usuario a través de CRUD/FLS, y casos en los que otorgar acceso directo al objeto personalizado crea un modelo de seguridad menos seguro. Asegúrese de documentar estos casos de uso como parte de su presentación. Para obtener más información, consulte la documentación de CRUD y FLS en los documentos para desarrolladores de Salesforce.
  2. Reforzar la seguridad a nivel de campo y de objeto en Apex : el método Security.stripInaccessible para la protección de datos a nivel de campo y de objeto ya está disponible de forma general. Utilice el método stripInaccessible para eliminar los campos a los que el usuario actual no puede acceder desde los resultados de consultas y subconsultas. Utilice el método para eliminar campos inaccesibles de sObjects antes de una operación DML para evitar excepciones. Además, use el método stripInaccessible para desinfectar los sObjects que se han deserializado de una fuente que no es de confianza.
    Dónde: este cambio se aplica a Lightning Experience y Salesforce Classic en las ediciones Enterprise, Performance, Unlimited y Developer.
    Cómo: el método stripInaccesible verifica los registros de origen en busca de campos que no cumplan con la verificación de seguridad a nivel de campo y objeto para el usuario actual y crea una lista de devolución de sObjects. La lista de devolución es idéntica a los registros de origen, excepto que se eliminan los campos inaccesibles para el usuario actual.
  3. Seguridad contra rayos — Debido a que el código Lightning comparte el mismo origen que el código creado por Salesforce, se imponen mayores restricciones al código Lightning de terceros. Estas restricciones se aplican mediante Lightning Locker y una Política de seguridad de contenido especial. También hay un escrutinio adicional en la revisión de seguridad de AppExchange.
  4. Recursos externos : todo lo que interactúa con el paquete y el usuario es un objetivo para la revisión de seguridad. Es importante que el equipo de seguridad de Salesforce revise cada paquete de extensión. Incluso los paquetes pequeños pueden presentar vulnerabilidades de seguridad.
  5. Para obtener más información, consulte: Utilice las mejoras de seguridad de Apex para reducir el tiempo de desarrollo .
  6. Código Apex seguro con operaciones de base de datos en modo de usuario : los nuevos métodos Database y Search admiten un parámetro accessLevel que le permite ejecutar operaciones de base de datos y búsqueda en modo de usuario en lugar de en el modo de sistema predeterminado. Esta función, ahora disponible de forma general, incluye algunos cambios desde la última versión. El código de Apex se ejecuta en modo de sistema de forma predeterminada, lo que significa que se ejecuta con permisos sustancialmente elevados sobre el usuario que ejecuta el código. Esta función se introdujo en Spring '23.
  7. Para organizaciones de segmentación por código anteriores a Spring '23, WITH SECURITY_ENFORCED es el nivel de acceso a usar.
  8. Para las organizaciones de orientación de código posteriores a Spring '23, WITH USER_MODE es el nivel de acceso a usar.
  9. Selección del modo de uso compartido correcto: use las palabras clave de uso compartido WITH SHARING o WITHOUT SHARING en una clase para especificar si se deben aplicar las reglas de uso compartido. Incluya siempre estos últimos en los informes de falsos positivos. Utilice la palabra clave compartida heredada en una clase para ejecutar la clase en el modo compartido de la clase que la llamó.
  10. El uso compartido heredado es un tema avanzado y requiere una consideración adicional. Debido a que el modo de uso compartido se determina en el tiempo de ejecución, debe tener sumo cuidado para asegurarse de que su código de Apex sea seguro para ejecutarse tanto con el modo de uso compartido como sin el modo de uso compartido.

Puntos finales inseguros

  1. Utilice siempre HTTPS cuando se conecte a puntos finales externos para insertar o extraer datos en Salesforce como parte de su aplicación. Cualquier atacante de la red puede acceder a los datos enviados a través de HTTP en texto claro y representa una amenaza para el usuario. Encuentre más información en la Guía de codificación segura .
  2. Todos los servicios web externos a los que se hace referencia se someterán a pruebas de penetración, así que asegúrese de que estén configurados correctamente. Un problema común es cuando un servicio externo se implementa en producción en modo de depuración, lo que hace que divulgue información (seguimiento de la pila, etc.) si la prueba de penetración logra bloquearlo al enviar datos con formato incorrecto.

SOQL

  1. Evite problemas de rendimiento comunes, como consultas SOQL, en bucles FOR anidados.
  2. Evite los ataques de inyección de SOQL desinfectando las entradas y adoptando un estilo de programación defensivo.

Estilo CSS

  1. CSS para LWC s debe estar en el CSS del componente, no en línea.
  2. El CSS en línea está fuertemente desaconsejado y restringido por el modelo de seguridad de contenido .
  3. Si su CSS rompe otro componente, fallará la revisión.
  4. No use .THIS, fijo, absoluto o flotante en CSS. Los componentes están destinados a ser modulares y ejecutarse en páginas con otros.
    1. Puede agregar una documentación de falso positivo para esto, pero debe estar bien justificada.
  5. CSS también puede ser un vector de ataque, por lo que es importante prestar atención a esto. Consulte los siguientes recursos:
    1. https://css-tricks.com/css-security-vulnerability/
    2. https://www.netsparker.com/blog/web-security/private-data-stolen-exploiting-css-injection/

JavaScript

  1. Hay numerosas recomendaciones de JavaScript a lo largo de este documento, por lo que evitaremos repetirlas aquí. Una cosa adicional a considerar es verificar las versiones heredadas de las bibliotecas, especialmente jQuery. Las versiones heredadas con vulnerabilidades conocidas harán que falle la revisión, y esto es fácil de resolver antes de tiempo. Además, vale la pena mencionar de nuevo retire.js , que se puede ejecutar como una tarea de compilación o como una extensión del navegador.
  2. Las versiones heredadas de JavaScript que se incluyen con los paquetes son uno de los problemas más comunes y más fáciles de evitar que causan fallas; asegúrese siempre de estar usando la versión más reciente.

Política de seguridad de contenido

La descripción general de la política de seguridad de contenido es un excelente recurso sobre cómo Lightning Framework utiliza la política de seguridad de contenido (CSP) para imponer restricciones al contenido. El objetivo principal es ayudar a prevenir las secuencias de comandos entre sitios ( XSS ) y otros ataques de inyección de código.

Los navegadores web siguen las reglas de CSP especificadas en los encabezados de las páginas web para bloquear las solicitudes a servidores desconocidos de recursos, incluidos scripts, imágenes y otros datos. Las directivas de CSP también se aplican a JavaScript del lado del cliente, por ejemplo, restringiendo JavaScript en línea en HTML.

Tantos problemas vuelven a los puntos planteados en esa página, que tiene sentido replicar los puntos principales aquí:

  1. Solo se puede hacer referencia a las bibliotecas de JavaScript desde su organización : todas las bibliotecas de JavaScript externas deben cargarse en su organización como recursos estáticos. La directiva script-src 'self' requiere que la fuente del script se llame desde el mismo origen. Para obtener más información, consulte Uso de bibliotecas de JavaScript externas .
  2. Los recursos deben estar ubicados en su organización de manera predeterminada : las directivas font-src , img-src , media-src , frame-src , style-src y connect-src están configuradas en 'self' . Como resultado, los recursos como fuentes, imágenes, videos, contenido de marcos, CSS y scripts deben estar ubicados en la organización de forma predeterminada. Puede cambiar las directivas de CSP para permitir el acceso a recursos de terceros agregando Sitios de confianza de CSP. Para obtener más información, consulte Crear sitios de confianza de CSP para acceder a API de terceros .
  3. Conexiones HTTPS para recursos : todas las referencias a fuentes externas, imágenes, marcos y CSS deben usar una URL HTTPS. Este requisito se aplica tanto si el recurso se encuentra en su organización como si se accede a él a través de un sitio de confianza de CSP.
  4. URL de blob no permitidas en iframes : la directiva frame-src no permite el esquema blob:. Esta restricción evita que un atacante inyecte contenido arbitrario en un iframe en un intento de secuestro de clics. Use un enlace regular a una URL de blob y abra el contenido en una nueva pestaña o ventana en lugar de usar un iframe.
  5. JavaScript en línea no permitido : las etiquetas de script no se pueden usar para cargar JavaScript y los controladores de eventos no pueden usar JavaScript en línea. La fuente insegura en línea para la directiva script-src no está permitida. Por ejemplo, se evita este intento de usar un controlador de eventos para ejecutar un script en línea: <button onclick = " doSomething () "></button> .

vulnerabilidades comunes

  1. Script entre sitios (XSS) — Los ataques de Cross-Site Scripting son un tipo de problema de inyección, en el que se inyectan scripts maliciosos en sitios web de confianza y benignos. Los ataques de secuencias de comandos en sitios cruzados (XSS) ocurren cuando un atacante utiliza una aplicación web para enviar código malicioso, generalmente en forma de secuencia de comandos del lado del navegador, a un usuario final diferente. Las fallas que permiten que estos ataques tengan éxito están bastante extendidas y ocurren en cualquier lugar donde una aplicación web use la entrada de un usuario en la salida que genera sin validarla ni codificarla. Un atacante puede usar XSS para enviar un script malicioso a un usuario desprevenido. El navegador del usuario final no tiene forma de saber que no se debe confiar en el script y lo ejecutará. Debido a que cree que la secuencia de comandos proviene de una fuente confiable, la secuencia de comandos maliciosa puede acceder a cualquier cookie, token de sesión u otra información confidencial retenida por su navegador y utilizada con ese sitio. Estos scripts pueden incluso reescribir el contenido de la página HTML. Los ataques XSS almacenados son persistentes y ocurren como resultado de que la aplicación web almacene información maliciosa y luego la presente a los usuarios. Para obtener más información, consulte lawiki de OWASP .
  2. Falsificación de solicitud entre sitios (CSRF) : CSRF es un ataque que obliga a un usuario final a ejecutar acciones no deseadas en una aplicación web en la que está autenticado actualmente. Con un poco de ayuda de ingeniería social (como enviar un enlace por correo electrónico/chat), un atacante puede obligar a los usuarios de una aplicación web a ejecutar acciones de su elección. Un exploit CSRF exitoso puede comprometer los datos del usuario final y realizar acciones de cambio de estado en estos datos sin el conocimiento del usuario. Si el usuario final objetivo es la cuenta de administrador, esto puede comprometer toda la aplicación web. El uso de encabezados personalizados (incluidos métodos como PUT) para protegerse de CSRF no es un enfoque perfecto. Todavía necesita implementar el token CSRF como una medida de seguridad en profundidad.
  3. Manejo de cookies de sesión inseguro : todas las cookies de sesión deben configurarse a través de conexiones HTTPS con el indicador SEGURO. Estas cookies deben invalidarse al cerrar la sesión, y las ID de sesión almacenadas en dichas cookies deben ser aleatorias con suficiente entropía, para evitar que un atacante las adivine con una probabilidad razonable de éxito. Los valores de las cookies nunca deben reutilizarse y deben ser únicos por usuario, por sesión. Los datos confidenciales del usuario no deben almacenarse en la cookie.

Consideraciones de código

  1. Código comentado : se permiten comentarios en pequeños fragmentos y muestras, pero las funciones y clases completas que están comentadas deben eliminarse.
  2. Documentación de prueba incompleta: es importante que la documentación sea lo más completa posible, incluida la documentación de sus respuestas a los falsos positivos . Esto ayuda al revisor a comprender por qué puede estar haciendo algo de una manera particular que normalmente no sería la mejor práctica, y comprender qué acciones ha tomado para mitigar cualquier problema de seguridad.
  3. Versiones de software no seguras: Cuando se descubren nuevas vulnerabilidades en el software, es importante aplicar parches y actualizaciones a una versión del software para la que se corrige la vulnerabilidad. Los atacantes pueden crear ataques para vulnerabilidades reveladas muy rápidamente, por lo que los parches de seguridad deben implementarse tan pronto como estén disponibles. Nota: Si cree que se trata de un falso positivo, envíe un documento de falso positivo en la próxima prueba con sus motivos.
  4. Secretos en código: no almacene secretos en código. Use configuraciones personalizadas protegidas , metadatos personalizados o credenciales con nombre, según corresponda.
  5. Almacenamiento de datos confidenciales — Este es un recurso brillante sobre cómo trabajar de forma segura con datos confidenciales. Si su aplicación copia y almacena datos confidenciales que se originaron en Salesforce.com, debe tomar precauciones adicionales. Salesforce.com se toma muy en serio las amenazas a los datos que se originaron en su sitio, y una violación o pérdida de datos podría poner en peligro su relación con Salesforce si es un socio. Asegúrese de seguir las mejores prácticas de la industria para el almacenamiento seguro en su plataforma de desarrollo. Nunca almacene contraseñas de Salesforce fuera de la plataforma.
  6. Acceso al sistema externo, exfiltración de ID de sesión: la postura de seguridad sobre el uso de ID de sesión se ha endurecido significativamente en los últimos años. Específicamente, enviar el ID de sesión a un sistema externo a través de la API dará como resultado una falla automática en el futuro. Las alternativas sugeridas son usar un usuario de integración dedicado u OAuth como alternativas modernas. Borrador de orientación (se requiere iniciar sesión en la Comunidad de socios ).
  7. Eco de contraseña : almacenar información confidencial en el código fuente de su aplicación rara vez es una buena práctica, ya que cualquiera que tenga acceso al código fuente puede ver los secretos en texto claro.

Fuga de información

La fuga de información implica la revelación inadvertida de datos del sistema o la información de depuración que ayuda a un adversario a aprender sobre el sistema y formar un plan de ataque. Se produce una fuga de información cuando los datos del sistema o la información de depuración abandonan el programa a través de un flujo de salida o una función de registro.

  1. Información confidencial en la depuración: revelar información en las declaraciones de depuración puede ayudar a revelar posibles vectores de ataque a un atacante. Las declaraciones de depuración pueden ser invaluables para diagnosticar problemas en la funcionalidad de una aplicación, pero no deben divulgar públicamente información confidencial o demasiado detallada (esto incluye PII, contraseñas, claves y seguimientos de pila como mensajes de error, entre otras cosas).
  2. Información confidencial en la URL: no olvide que uno de los medios de transferencia de datos más simples es la propia URL. La información confidencial que se pasa a través del método GET (HTTP GET Query String) a la aplicación web puede provocar una fuga de datos y exponer la aplicación de varias maneras. La URL completa a menudo se almacena "tal cual" en el servidor en registros de texto claro que pueden no almacenarse de forma segura, el personal puede verlos y un tercero puede comprometerlos. Los motores de búsqueda indexan las URL que almacenan información confidencial sin darse cuenta. Almacenamiento de rutas URL completas en el historial del navegador local, caché del navegador, marcadores y marcadores sincronizados entre dispositivos. La información de URL se envía a aplicaciones web de terceros a través del encabezado de referencia. Los secretos a largo plazo, como nombre de usuario/contraseña, tokens de acceso de larga duración y tokens de API, no deben enviarse en URL.
  3. Configuración TLS/SSL: debido a las restricciones de exportación históricas de la criptografía de alto grado, los servidores web heredados y nuevos a menudo pueden y están configurados para manejar opciones criptográficas débiles. Incluso si normalmente se usan e instalan cifrados de alto grado, se podría usar alguna configuración incorrecta del servidor para forzar el uso de un cifrado más débil para obtener acceso al supuesto canal de comunicación seguro. El servidor no debe admitir cifrados, como SSL v2/SSL v3/TLS v1.0/TLS v1.1, o cifrados que utilicen un cifrado NULL o que tengan longitudes de clave débiles. TLS 1.0 y 1.1 han sido declarados al final de su vida útil por la mayoría de los sistemas y ya no deben usarse. Consulte: Pruebas de SSL-TLS . Actualmente, Salesforce requiere TLS 1.2 o superior.

Me gustaría hablar con el revisor.

Esto se puede arreglar, generalmente, con un mínimo de tres semanas de anticipación ya que el servicio es popular. Los revisores de seguridad tienen horario de oficina y los equipos pueden programar una sesión con ellos para analizar los resultados de una revisión. Si su paquete ha fallado un par de veces, puede valer la pena programar una cita justo después de la próxima revisión para hablar con un ingeniero de seguridad. Reserve su sesión de horario de oficina a través del Portal de seguridad para socios .

Falsos positivos

Hay momentos en los que tiene una razón legítima para hacer algo de cierta manera y ha tomado medidas para garantizar la seguridad de los datos. Estas instancias deben estar claramente marcadas en el código y deben proporcionarse comentarios para evitar falsos positivos . Sin embargo, si encuentra que tiene muchas excepciones en su código, es posible que deba considerar si su código sigue un antipatrón y necesita una nueva arquitectura.

La seguridad es un estado de ánimo, no una casilla de verificación

El propósito de la revisión de seguridad es validar que ha tomado todas las precauciones necesarias. Muchos socios tienen su primer paquete que no pasa la revisión de seguridad la primera vez, y hacen que su prioridad sea que esto no vuelva a suceder, por lo que revisan agresivamente el código de todos sus paquetes y dependencias, como servicios web externos. Esto es beneficioso para todos: hace que el proceso de revisión de seguridad sea más rápido y el socio es proactivo con respecto a la seguridad: este es el objetivo final .

Hay muchas herramientas disponibles, cada una con su propio enfoque. Úselos para ayudar en el análisis de seguridad, pero recuerde que la seguridad es una mentalidad y un proceso arquitectónico explícito. Si bien las herramientas pueden detectar patrones particulares, antipatrones y otros problemas, nunca tendrán la comprensión completa de lo que la solución está tratando de hacer o la mentalidad de un revisor humano. Aquí hay más información sobre algunas de estas herramientas:

  1. Analizador de código de Salesforce (Anteriormente Escáner CLI de Salesforce): esta es una herramienta desarrollada internamente para el análisis estático del código fuente. Es útil usar esto como parte de su proceso de desarrollo en curso. Consulte publicaciones de blog anteriores sobre esta herramienta como referencia:
    1. Desarrolle un código aún más seguro con Salesforce Code Analyzer.
    2. Mejore la calidad de su código con el escáner CLI de Salesforce
  2. Chimera : este es un servicio de escaneo en tiempo de ejecución basado en la nube que se puede usar para escanear sitios web de terceros. Tenga en cuenta que Chimera es solo para sitios web de su propiedad o en los que puede cargar un token.
  3. Escáner de código fuente (Checkmarx) — Source Code Scanner le permite programar escaneos, descargar informes de escaneos, buscar todos los escaneos para su organización y administrar los créditos de escaneo para sus organizaciones. Para obtener más información, consulte las preguntas frecuentes de Checkmarx .
  4. ZAP : Zed Attack Proxy es un escáner web de código abierto de OWASP.org y se puede usar para escanear sitios web de terceros.
  5. Vulnerabilidades y exposiciones comunes : CVE® es un diccionario de vulnerabilidades y exposiciones de seguridad cibernética divulgadas públicamente cuya búsqueda es gratuita.
  6. Retire.js — Hay una gran cantidad de bibliotecas de JavaScript para usar en la web y en las aplicaciones de Node.js. Esto simplifica enormemente las cosas, pero debemos mantenernos actualizados sobre las correcciones de seguridad. El "Uso de componentes con vulnerabilidades conocidas" ahora forma parte del OWASP Top 10 y las bibliotecas inseguras pueden representar un gran riesgo para su aplicación web. El objetivo de Retire.js es ayudarte a detectar el uso de versiones con vulnerabilidades conocidas.
  7. Base de datos nacional de vulnerabilidades : NVD es el repositorio del gobierno de EE. UU. de datos de gestión de vulnerabilidades basados en estándares representados mediante el Protocolo de automatización de contenido de seguridad (SCAP).

¿Cómo presento una revisión de seguridad?

Usted envía su paquete para su revisión a través de la Comunidad de socios . Antes de hacerlo, consulte la guía de ISVforce para obtener la orientación más reciente y asegúrese de leer toda la información en este artículo.

Modelo de precios por revisión

Tenga en cuenta que, a partir del 16 de marzo de 2023, las tarifas de revisión de seguridad pasarán a ser un modelo por intento.

  • Se elimina la tarifa de revisión inicial de $2,550.
  • Se elimina la cuota anual de $150.
  • La tarifa de revisión de seguridad es de $999 por intento para aplicaciones pagas.

¿Qué pasa con las aplicaciones gratuitas? ¿Aquí también se aplicará la nueva tarifa?

En el momento de escribir este artículo, el estado de las aplicaciones gratuitas es el siguiente:

No habrá tarifas por revisiones de seguridad para soluciones gratuitas mientras trabajamos para redefinir la política.

Sin embargo, consulte la página de actualizaciones de tarifas y la discusión para obtener la información más reciente.

Versiones de paquetes

Envíe una versión puntual (p. ej., 16.7→16.8, etc.), no una versión de parche (16.7. 1234 ). El escáner de seguridad en el portal de socios está diseñado para funcionar solo con versiones principales y secundarias (Mayor.Minor). Las versiones de parches (Major.Minor.PATCH) no son compatibles y se filtran deliberadamente de la lista de paquetes disponibles. La mayoría de los problemas que encuentran los socios cuando su paquete no está visible en el escáner de seguridad se resuelven creando una nueva versión Major.Minor (p. ej., 16.7→16.8).

Envío de paquetes múltiples

Al enviar una solución que consta de varios paquetes, es importante ser explícito en el caso de los paquetes incluidos en la organización y su relación entre ellos.

Por ejemplo:
xx = paquete base
yy – depende de xx
zz depende de xx + yy

Solo los paquetes directamente relacionados con el envío de revisión de seguridad deben estar en la organización; de lo contrario, se rechazará el envío.

Tras el envío: comprobaciones previas a la cola

Una vez que se ha enviado un paquete, entra en un estado de cola previa donde se realizan comprobaciones para confirmar la validez del envío. Es posible que estos pasos tarden unos días en comprobarse manualmente antes de que el paquete pase a la cola oficial de SR.

  1. Paquete(s) enviado(s) correcto(s) : el paquete debe administrarse. No se permiten paquetes beta, no administrados o desbloqueados.
  2. No se enviaron otros paquetes : si hay paquetes adicionales (consulte Envío de paquetes múltiples ), proporcione una explicación detallada sobre la dependencia del paquete.
  3. El acceso a la organización de prueba está validado : 2FA/MFA debe estar deshabilitado, para que el equipo de prueba pueda iniciar sesión para probar. Del mismo modo, para una aplicación web o un sitio remoto, asegúrese de proporcionar las credenciales de trabajo.

El proceso de revisión de seguridad está diseñado para validar que ha tomado buenas decisiones sobre la higiene de los datos y ha considerado una seguridad por diseño en su aplicación. Cuanto más piense en la seguridad por diseño, más fácil será el proceso de envío. Esta publicación le brinda una ventaja sobre las cosas que debe hacer y evitar hacer para que su revisión sea un proceso lo más fluido posible.

Recursos

Sobre el Autor

Jonathan McNamee es un evangelista técnico con sede en el Reino Unido en Salesforce, que ayuda a los socios ISV a aprovechar al máximo su inversión en la plataforma de Salesforce. Tiene 20 años de experiencia en el desarrollo de soluciones de tecnología web para empresas de todos los tamaños en una variedad de industrias y ha estado trabajando en el ecosistema de Salesforce desde 2020. Sus intereses incluyen la escalabilidad, la eficiencia y la resiliencia de los sistemas. Síguelo 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/04/prepare-your-app-to-pass-the-appexchange-security-review.html

Categories
Developers Tutoriales de Salesforce

Einstein GPT 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.

Einstein GPT para desarrolladores de Salesforce | Blog de desarrolladores de Salesforce

A medida que la tecnología continúa evolucionando, también lo hace la forma en que escribimos y analizamos el código. Un desarrollo emocionante en los últimos años ha sido el uso de inteligencia artificial generativa (IA generativa) para la generación y el análisis de código. Estos avances tienen el potencial de hacer que el desarrollo de software sea más rápido, más eficiente y más preciso. En esta publicación de blog, veremos cómo Salesforce AI Research impulsa Einstein GPT para desarrolladores y discutiremos cómo sus avances cambiarán el panorama del desarrollo de software con Salesforce.

IA generativa para código (Apex)

La generación de código es una técnica utilizada para facilitar o automatizar el proceso de escritura de código. Esencialmente, implica el uso de algoritmos de aprendizaje automático (ML) para analizar grandes cantidades de código existente y luego generar código nuevo basado en ese análisis.

Esto es particularmente útil para tareas repetitivas, como la creación de código repetitivo o la implementación de algoritmos de uso común. Uno de los mayores beneficios de la generación de código es que puede ahorrar mucho tiempo a los desarrolladores. En lugar de escribir cada línea de código desde cero, pueden usar herramientas impulsadas por IA para generar grandes porciones de código automáticamente. Esto no solo acelera el proceso de desarrollo, sino que también reduce el riesgo de error humano.

La generación de código tiene muchos beneficios, que incluyen:

  1. Coherencia y estandarización : la automatización de la creación de elementos de código repetitivos ayuda a garantizar la coherencia y la estandarización en la base de código
  2. Creación rápida de prototipos : la generación de código generativo puede acelerar el proceso de creación de prototipos mediante la creación rápida de código repetitivo
  3. Complejidad de código reducida : la generación de código generativo simplifica el código al automatizar la creación de patrones y estructuras comunes, lo que hace que las bases de código sean más escalables y fáciles de mantener.

Einstein GPT proporcionará a los desarrolladores de Salesforce esos beneficios como parte de la experiencia IDE en VS Code y Code Builder. Al usar la entrada de lenguaje natural dentro de su IDE, podrá tener un código creado para usted, según los requisitos que especifique.

Los algoritmos de aprendizaje automático que impulsan la experiencia se entrenan en modelos internos y se enriquecen con los mejores patrones de código de su clase proporcionados por Salesforce.

Análisis de Apex estático y dinámico con Scale Center

Otra área en la que la IA está logrando avances significativos es en el análisis de código. A medida que los proyectos de software se vuelven cada vez más complejos, se vuelve más difícil para los humanos analizar y comprender con precisión todo el código involucrado. Aquí es donde estamos agregando una nueva capacidad (en piloto este año) para el análisis de Apex como parte de Scale Center . Con esta capacidad, puede analizar de forma rápida y precisa grandes cantidades de código Apex, identificando posibles errores, ineficiencias en el tiempo de ejecución y otros problemas.

Esto ahorrará a los desarrolladores y organizaciones una cantidad significativa de tiempo y esfuerzo, ya que ya no necesitarán revisar manualmente cada línea de código para identificar posibles problemas. Uno de los mayores beneficios de esta nueva capacidad es que puede identificar problemas potenciales que los humanos podrían pasar por alto, en el momento de la compilación y en el tiempo de ejecución.

El análisis de código impulsado por IA y la generación de código van de la mano. Los patrones en su base de código a través del análisis estático y dinámico se retroalimentarán a los mecanismos de generación de código y viceversa.

Conclusión

Las herramientas de generación de código y análisis de código impulsadas por IA están cambiando la forma en que escribimos y analizamos el código. Y esos son solo los primeros pasos. La generación de pruebas automatizadas, las explicaciones de códigos inteligentes y más son solo algunos de los campos en los que esos avances cambiarán la forma en que trabajamos. Consulte nuestra página de destino de Einstein GPT para obtener más información. Futuro, aquí vamos: ¡no puedo esperar a ver qué viene después!

Sobre el Autor

René Winkelmeyer lidera como director sénior, relaciones con desarrolladores, esfuerzos entre nubes en Salesforce. Su equipo se enfoca en MuleSoft, Marketing, Comercio y desarrollos de próxima generación. En su tiempo libre, puede encontrarlo todavía codificando en GitHub @muenzpraeger .

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/03/einstein-gpt-for-salesforce-developers.html

Categories
Developers Tutoriales de Salesforce

Mejore la disponibilidad en su organización ☁️

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

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

Mejore la disponibilidad en su organización | Blog de desarrolladores de Salesforce

Piense en un momento en el que su solución no funcionó como se esperaba. Tal vez sus usuarios experimentaron un rendimiento deficiente al actualizar un registro que tenía numerosos activadores de Apex, o una integración con la API REST de Salesforce se vio abrumada por un gran volumen de llamadas debido a un evento. Estas experiencias pueden ser desde inconvenientes menores hasta una interrupción total del servicio para sus usuarios. La buena noticia: a menudo, estos incidentes de disponibilidad limitada se pueden prevenir pensando en el futuro y codificando de manera eficiente con la disponibilidad y la resiliencia como prioridad.

¿Qué es la disponibilidad?

La disponibilidad es el porcentaje de tiempo que un servicio maneja con éxito las solicitudes. Salesforce mide y rastrea este porcentaje para asegurarse de que nuestros servidores y servicios estén altamente disponibles para cada cliente.

Si bien la disponibilidad del servidor y del servicio es fundamental para Salesforce, la disponibilidad experimentada por el cliente lo es aún más, lo que se relaciona directamente con la forma en que los usuarios experimentan Salesforce. Por ejemplo, ¿pueden los usuarios iniciar sesión en su organización y actualizar registros de forma rápida y confiable? ¿Se actualizan los datos a través de las API de manera eficiente y sin errores?

La disponibilidad experimentada por el cliente es difícil de medir, ya que cada organización, usuario y empresa es única. La experiencia de un usuario puede variar mucho según muchos factores, como el código Apex y el diseño del componente Lightning, la región geográfica y la conexión de red. A pesar de la variabilidad de estos factores, Salesforce considera que la disponibilidad es una prioridad principal como parte de nuestro valor central de confianza.

¿Por qué debería importarme la disponibilidad?

La disponibilidad, o la falta de ella, afecta a todos: a usted, a sus usuarios ya su empresa. Una organización de alta disponibilidad significa que sus usuarios pueden continuar con sus responsabilidades mientras respaldan el crecimiento de su empresa. Una organización que se desempeña de manera deficiente o poco confiable crea frustraciones y, en casos extremos, podría afectar financieramente o en la reputación de su empresa.

Como desarrollador, la forma en que codifica su solución de Salesforce tiene un impacto directo en la experiencia de sus usuarios. Es importante que su código no solo satisfaga los requisitos funcionales y comerciales, sino que sus usuarios puedan interactuar con confianza y ejecutar el código que escribió, siempre que lo necesiten.

¿Qué antipatrones de disponibilidad común debo evitar?

Como desarrollador, esté atento a estos antipatrones comunes y haga preguntas críticas para evitarlos.

Anti-patrón #1: Diseños de integración frágiles

Si bien es fácil concentrarse en el "camino feliz" de una integración y codificar algo simple, ¿cómo resiste su integración las excepciones o la presión? Aquí hay algunas preguntas comunes para hacer antes de codificar una integración:

  • ¿Cuál es el volumen esperado de datos que pasarán por la integración y a qué velocidad? La API REST de Salesforce puede insertar o actualizar 200 registros a la vez. Realizar una llamada a la API para actualizar 200 registros es mucho más rápido y utiliza mucha menos capacidad del servidor que tener 200 llamadas a la API para actualizar un registro cada una.
  • ¿Puede su integración cambiar entre REST y Bulk API según el volumen y la velocidad de los datos que ingresan?
  • ¿Qué sucede si la lógica de validación, activación o Flujo cambia en Salesforce en el futuro y luego rechaza la actualización del registro en la API?
  • ¿Qué pasa si Salesforce está fuera de servicio por mantenimiento? ¿Puede la integración retener llamadas API pendientes y reprocesarlas cuando Salesforce está disponible? ¿Puede el backlog manejar eficientemente el alto volumen de transacciones?
  • ¿Cómo se manejan los errores inesperados? ¿Se registran y notifican los errores de la API de Salesforce para que su equipo los investigue?

Aborde estas preguntas desde el principio en el diseño de la integración y garantice una integración más confiable, resistente y adaptable durante situaciones imprevistas.

Antipatrón n.º 2: falta de visibilidad lógica de Apex en su "marco de activación"

Es fantástico que tantos desarrolladores estén adoptando el concepto de un marco de activación para modularizar y administrar fácilmente la lógica de Apex. Sin embargo, hemos visto que este tipo de framework también puede ser un arma de doble filo, por ejemplo:

  • Múltiples equipos de desarrollo están trabajando en la lógica de Apex que recurre al disparador antes/después del mismo objeto. Sin embargo, los equipos no tienen visibilidad del trabajo de los otros equipos. Como resultado, la lógica de Apex combinada consume una mayor parte de los límites de Apex y supera los límites del regulador.
  • Organizaciones que tienen lógica repartida entre flujos, Process Builders, flujos de trabajo y código Apex. Esto consume una cantidad significativa de la capacidad del servidor cuando se ejecuta y puede causar conflictos lógicos e infracciones del límite del gobernador, sin mencionar una pesadilla de mantenimiento con una deuda tecnológica considerable.

Para evitar conflictos, haga las siguientes preguntas cada vez que usted o su equipo planeen agregar nueva lógica o procesos a su marco de activación:

  • ¿Qué otra lógica se ejecutará junto con lo que estoy a punto de codificar? ¿Cuánto de los límites del gobernador están consumiendo ya y cuánto puedo usar?
  • ¿Se puede combinar mi lógica con otra lógica? Por ejemplo, ¿podemos compartir consultas SOQL existentes y agregar uno o dos campos más a la consulta? ¿Se pueden agrupar las actualizaciones de campos de registro en otra lógica que tenga declaraciones DML existentes?
  • ¿Agregarán otros desarrolladores o administradores más lógica a la organización, con o sin disparadores o flujos? ¿Cómo nos coordinamos para que la lógica adicional no entre en conflicto con lo que hago?
  • ¿Puedo hacer más con menos? Guardar una consulta SOQL o una declaración DML puede no parecer mucho. Sin embargo, si su organización tiene miles de transacciones en una hora, puede guardar miles de consultas a la base de datos y liberar capacidad del servidor, lo que significa que es menos probable que su organización experimente una degradación del rendimiento.

Antipatrón n.º 3: Despliegue no estructurado durante las horas pico

La mayoría de los incidentes de disponibilidad ocurren cuando se realizan cambios en la configuración de su organización en producción. Puede pensar que se deben a cambios no probados. Sin embargo, el problema más común causado por la implementación proviene de los trabajos en segundo plano que se ejecutan debido a un cambio de metadatos. Por ejemplo:

  • El cambio de campos personalizados en objetos con millones de registros hace que toda la tabla de la base de datos se active en esos registros en segundo plano.
  • La implementación de código nuevo invalida el código de Apex compilado existente y activa un trabajo en segundo plano en la recompilación de Apex.

Estos trabajos en segundo plano también consumen capacidad del servidor que podría usarse para atender las interacciones de los usuarios y las llamadas a la API. Cuando se ejecutan durante las horas de trabajo pico de su organización, aumenta el riesgo de sobrecargar el servidor y perjudicar la experiencia de sus usuarios.

Este problema se puede agravar aún más con los cambios de metadatos no estructurados, como cambiar manualmente un campo personalizado a través de la interfaz de usuario de configuración y luego pasar a realizar otro cambio manual en un campo personalizado diferente.

La próxima vez que planee implementar código, considere cómo puede hacerlo de manera más eficiente y formule las siguientes preguntas:

  • ¿Cuál es el mejor momento para implementar código que minimice el riesgo de interrupción del usuario?
  • ¿Cómo puedo agrupar todos mis cambios para implementarlos al mismo tiempo? (Sugerencia: ¡ Salesforce DX y DevOps Center !)
  • ¿Hay también otras implementaciones de otros equipos? ¿Podemos trabajar para implementar de manera eficiente sin entrar en conflicto entre nosotros?

Antipatrón n.° 4: falta de registros o alertas de depuración significativos

Al desarrollar una solución de Salesforce, está atendiendo las necesidades de los usuarios comerciales, los administradores y el equipo de operaciones de TI. Están ejecutando y administrando su organización, y es fundamental que sepan cómo funciona la organización y cuándo responder si se producen errores. Necesitan visibilidad de cualquier lógica compleja que introduzca en la organización. La mejor manera de proporcionar eso es a través del registro de depuración y garantizar que las alertas de error lleguen a ellos.

Hágase estas preguntas para dar a sus administradores y personal de operaciones de TI visibilidad de las operaciones de su código:

  • ¿Cómo pueden saber si mi código funciona como se espera y cuánto utilizan los usuarios?
  • ¿Qué tipo de errores pueden ocurrir en mi código? ¿Cómo puedo alertar de esos errores a los administradores y al equipo de operaciones de TI de manera efectiva?
  • Si quieren clasificar y diagnosticar problemas potenciales, ¿cómo pueden ver cómo se ejecuta mi código sin abrumarlos con cada línea de código?

Anti-patrón #5: Mentalidad de “Arreglarlo primero” durante emergencias

Los desarrolladores a menudo reciben un aviso cuando una organización encuentra un problema que impide que los usuarios realicen funciones comerciales clave. Por lo general, se enfocan en "solucionar el problema" para devolver el servicio a los usuarios. Sin embargo, durante un incidente de disponibilidad de emergencia, esto puede ser perjudicial.

Durante un incidente, el orden de prioridad de las operaciones debe ser minimizar el impacto comercial, recuperar las operaciones del sistema y luego encontrar y corregir la causa raíz.

Cuando se le pida que analice un problema durante un incidente, pregúntese:

  • ¿Cómo se ven afectados los usuarios por el incidente en este momento? ¿Cómo puedo minimizar rápidamente su impacto?
  • ¿El incidente es causado por un cambio reciente? En caso afirmativo, ¿puedo revertir el cambio?
  • ¿Cómo permito que los administradores y el equipo de operaciones de TI evalúen el incidente? ¿Pueden recopilar detalles valiosos sobre el incidente, de modo que pueda abordar directamente el problema y poner las operaciones en línea?

No olvide realizar una autopsia después de un incidente para investigar la causa raíz y solucionar el problema. Esto debería suceder después de que se solucione un incidente.

Más sugerencias para mejorar la disponibilidad en su organización

Es un curso intensivo sobre cómo usted, como desarrollador y su código, pueden mejorar la disponibilidad de su organización. No esperamos que se convierta en un experto de inmediato, pero puede comenzar a mejorar la disponibilidad hoy:

  • Tener curiosidad acerca de su organización y su diseño. Si ve una ineficiencia existente, agréguela al trabajo pendiente para investigar.
  • Haciendo preguntas. Si se le asignan requisitos para el código, pero implicaría soluciones que podrían crear problemas de escalabilidad en el futuro, sea proactivo al señalar los posibles riesgos de disponibilidad durante la revisión del diseño para asegurarse de que estén cubiertos mientras escribe su código.
  • Manténgase actualizado sobre las mejores prácticas utilizando la Ayuda de Salesforce y el sitio web de desarrolladores de Salesforce . Si no puede encontrar una respuesta, consulte Trailblazer Community .
  • Seguir aprendiendo. Utilice Trailhead para mantenerse actualizado y familiarizarse con lo último y lo mejor que sale de Salesforce.

Tenemos varios recursos para ayudarlo en el camino. Consulte Disponibilidad de Salesforce , un nuevo sitio web lanzado para ayudarlo a mejorar la disponibilidad de su implementación. Además, la nuevaAyuda y capacitación sobre disponibilidad cubre las mejores prácticas de disponibilidad con más detalle. También estamos trabajando en estrecha colaboración con Well-Architected para garantizar que estos conceptos estén bien integrados en un marco único para que todos los profesionales de Salesforce los sigan. Esté atento a medida que implementamos más herramientas y recursos para ayudar a mejorar la disponibilidad en el futuro cercano.

Sobre el Autor

Jsun Pe es director de gestión de productos en servicios de ingeniería de disponibilidad e infraestructura en Salesforce, y se enfoca en permitir que los clientes de Salesforce construyan soluciones de Salesforce resistentes y de alta disponibilidad. Desde que comenzó en el ecosistema de Salesforce en 2009, fue testigo del crecimiento de la Plataforma de Salesforce mientras obtenía su credencial de Arquitecto técnico certificado de Salesforce. Jsun ayudó a desarrollar prácticas técnicas para los principales socios de consultoría en Australia y Nueva Zelanda, luego se unió a Salesforce en 2016. Durante este tiempo, descubrió su interés en las consideraciones de arquitectura avanzada en el rendimiento y la disponibilidad de la plataforma, lo que finalmente lo llevó a su puesto actual.

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/03/improve-availability-in-your-org.html

Categories
Developers Tutoriales de Salesforce

Ahora en Pilot: adaptador de cable GraphQL para LWC ☁️

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.

ahora en piloto: adaptador de cable GraphQL para LWC | Blog de desarrolladores de Salesforce

En Salesforce, estamos comprometidos a invertir en GraphQL como parte integral de nuestra plataforma flexible y componible. Anteriormente, compartimos que la API de Salesforce GraphQL estaba disponible para el público en general (GA). Ahora, nos complace anunciar el lanzamiento piloto del adaptador de cable GraphQL de Salesforce en nuestro lanzamiento de Spring '23. En este artículo, exploraremos los beneficios del adaptador de cable GraphQL y cómo facilita el acceso a los datos de Salesforce desde Lightning Web Components (LWC).

Este nuevo adaptador permitirá a los desarrolladores de LWC consultar datos de Salesforce de forma nativa utilizando un lenguaje de consulta estándar de la industria con predicados enriquecidos para filtrar, agrupar, agregar y ordenar. Un desarrollador podrá usar el adaptador de cable GraphQL para crear componentes web y aplicaciones móviles fuera de línea con LWC. Consulte la documentación del desarrollador para conocer las funciones disponibles actualmente.

A partir de ahora, la pila de Salesforce GraphQL consta, desde el backend hasta el servidor:

  1. una API de GraphQL que expone los datos disponibles a través de la API de la interfaz de usuario (UI),
  2. el adaptador de cable GraphQL que interactúa con la API de GraphQL para obtener datos, y
  3. aplicaciones web y móviles creadas con LWC. Tenga en cuenta que la API de GraphQL integrará más API de Salesforce más adelante.

Caso de uso del cliente: creación de un tablero con adaptador de cable GraphQL

Para ilustrar los beneficios del adaptador de cable GraphQL, veamos un caso de uso del tablero de soporte al cliente. Imagine un desarrollador que quiere crear un panel que permita al equipo de soporte clasificar rápidamente los casos entrantes en función de un conjunto de criterios y tomar las medidas adecuadas. Bajo el capó, esto requiere obtener múltiples tipos de registros que están conectados entre sí junto con campos específicos para mostrar.

Hay algunas formas diferentes en que el autor de estos componentes de la interfaz de usuario podría recuperar los datos necesarios:

  1. Mediante el uso de adaptadores de cable de estilo REST existentes, como el obsoleto getListUi para recuperar ID de registros y getRecords para recuperar datos de registros. Si bien estos adaptadores de cable pueden recuperar los datos necesarios, esta es una solución incómoda que requerirá múltiples viajes de ida y vuelta al servidor. Además, alguien en la organización deberá crear y mantener una vista de lista que identifique los registros que se mostrarán en esta interfaz de usuario.
  2. Llamando a un método de Apex para devolver parte o toda la información, y utilizando adaptadores de cable de estilo REST existentes para recuperar los datos restantes. Apex permite al desarrollador expresar exactamente la consulta SOQL que debe ejecutarse, pero los datos de registro resultantes serán opacos para la capa de almacenamiento en caché de Lightning Data Service (LDS) en el cliente. Si el método de Apex se puede almacenar en caché, el cliente tendrá varias copias del mismo registro en caché, sin forma de garantizar la coherencia entre esas copias. Los datos de registro recuperados mediante adaptadores de cable de estilo REST no tendrán este problema, pero requerirán viajes de ida y vuelta adicionales al servidor. Al igual que con la vista de lista en (1), existe el desafío adicional de crear y mantener el código Apex para mantenerlo sincronizado con el componente.
  3. Al usar GraphQL, el autor del componente puede expresar con precisión tanto la consulta que se ejecutará como los datos que se recuperarán para cada registro en una sola llamada al servidor. Debido a que GraphQL está fuertemente tipado y descrito por un esquema formal, LDS puede comprender la forma del resultado, almacenarlo en caché de manera efectiva y brindar garantías de consistencia en todos los componentes representados en el cliente.

Los beneficios del adaptador de cable GraphQL

El adaptador de cable GraphQL proporciona varios beneficios que facilitan a los desarrolladores el acceso a los datos de Salesforce en los LWC:

  • Capacidad de consulta nativa para LWC: consulte los datos de Salesforce utilizando el lenguaje de consulta estándar de la industria con predicados enriquecidos. Los desarrolladores ahora pueden consultar datos de Salesforce de manera fácil y eficiente en sus LWC, sin necesidad de utilizar Apex para manejar las consultas de datos.
  • Un solo punto final y agregación de datos: obtiene un punto final para todos sus recursos, y los datos se pueden agregar a través de múltiples recursos. Menos solicitudes más específicas lo ayudan a optimizar el rendimiento de su aplicación.
  • Mejor experiencia de desarrollador: GraphQL permite una mejor experiencia de desarrollador con expresiones enriquecidas, una vista completa de los datos y experiencias extensibles.
  • Lógica de obtención de datos distribuida y modular: los fragmentos de GraphQL permiten una separación clara de la lógica de la aplicación y la presentación. Los componentes que obtienen datos y los componentes que generan datos se pueden escribir y probar de forma independiente, sin superposición de responsabilidades. Esto también hace que los componentes sean más reutilizables.
  • Almacenamiento en caché compartido incorporado por LDS: los datos de GraphQL están fuertemente tipados y descritos por un esquema formal. LDS aprovecha esta profunda comprensión de los datos para almacenarlos en caché de manera más eficaz y eficiente y para brindar garantías de consistencia que abarcan tanto los resultados de GraphQL como los que no son de GraphQL. LDS puede, por ejemplo, combinar y reutilizar datos de solicitudes anteriores de GraphQL y adaptadores de cable que no sean de GraphQL para satisfacer solicitudes posteriores sin solicitar datos del servidor, lo que mejora el rendimiento de la aplicación más allá de las ganancias de la agregación de datos de GraphQL.
  • Permisos de usuario y seguridad: Al igual que con REST, cuando se ejecuta una consulta, GraphQL respeta los permisos de seguridad de nivel de campo, permisos de organización y CRUD de usuario.
  • Compatibilidad con dispositivos móviles sin conexión: en entornos habilitados para dispositivos móviles sin conexión, las consultas de GraphQL se pueden evaluar con datos almacenados en caché localmente, lo que permite que los componentes utilicen consultas de GraphQL sin conexión. Esta capacidad es importante para nuestros clientes que operan funciones de misión crítica en condiciones de baja o nula conectividad, como áreas rurales, subterráneas y sitios de desastres. Las consultas sin conexión reflejan los cambios de borrador (creaciones y actualizaciones de registros) que aún no se han replicado en el servidor. Estos entornos de tiempo de ejecución también admiten el uso de consultas GraphQL para preparar la caché de datos local en preparación para el modo fuera de línea.

Los beneficios anteriores se suman a las funciones estándar de GraphQL, como predicados de consulta, parametrización en tiempo de ejecución mediante variables, fragmentos, alias y paginación.

Empezando

Para unirse a la prueba piloto y probar este adaptador en su entorno de pruebas o en su organización de preproducción, comuníquese con su representante de cuenta y pídale que lo nomine para la prueba piloto del adaptador de cable GraphQL.

Consulte las guías para desarrolladores:

Cómo usarlo

Usar el adaptador de cable GraphQL es fácil y directo. Solo necesita actualizar su organización a la versión más reciente de Salesforce (versión Spring '23). Así es como puede comenzar:

  1. Valida tu consulta. Utilice las herramientas de Altair , GraphiQL o Postman (con las API de Salesforce) para validar su consulta. Estos clientes le permiten iterar rápidamente en su consulta y garantizar que recupere exactamente la información que necesita su componente .
  2. Importe el adaptador. Importe el adaptador de cable GraphQL de Salesforce ( graphql ) y la función de plantilla etiquetada ( gql ) en el código de su LWC. gql identifica las consultas de GraphQL dentro del código fuente de su componente para que el marco pueda manejarlas correctamente. graphql es el adaptador de cable utilizado para recuperar los resultados de su consulta GraphQL.
  3. Invoque su consulta. Utilice el adaptador de cable graphql importado para evaluar la consulta de GraphQL y obtener los datos que necesita. Los datos se recuperan automáticamente y se devuelven a su componente. Los datos se pueden volver a emitir a su componente si LDS observa cambios en los resultados anteriores.

Consulte este proyecto pionero sobre cómo crear e implementar un componente web Lightning.

Próximos pasos

Recordatorio: Salesforce es una empresa que cotiza en bolsa y los clientes deben basar sus decisiones de compra en los productos y servicios que están disponibles actualmente.

Estamos comprometidos a continuar invirtiendo en GraphQL y el adaptador de cable GraphQL. Esto es lo que puede esperar en los próximos lanzamientos (se aplica la declaración prospectiva):

Verano '23:

  • Adaptador de cable GraphQL (Beta)
  • Compatibilidad con consultas agregadas en la API de GraphQL

Invierno 24 y más allá:

  • Adaptador de cable GraphQL (GA)
  • Compatibilidad con mutaciones en la API de GraphQL (piloto)
  • Consultas persistentes

Únase a nosotros en TrailblazerDX

Únase a nosotros en TrailblazerDX , el evento para desarrolladores de Salesforce del año. Puede obtener más información sobre GraphQL, LWC y otras ofertas de tecnología y productos de Salesforce, y conocer a las personas que los crearon.

Vea estas sesiones y stands en TrailblazerDX:

  • Discurso principal : Khushwant Singh demostrará cómo construir el negocio de su cliente con LWC y GraphQL.
  • Sesión de trabajo: potencie sus LWC con GraphQL. Suvda Myagmar y Stephen Carraway exhibirán las ofertas de Salesforce GraphQL.
  • Stand de LWC en Platform Park: Conozca a nuestros gerentes de producto y desarrolladores y vea la demostración.

Sobre los autores

Suvda Myagmar es directora de gestión de productos en Salesforce, apasionada por las plataformas de datos e IA. Le encantan las carreras largas mientras escucha audiolibros.

Mike Burr es un desarrollador de software principal en Salesforce con más años de experiencia en la creación de API de acceso a datos de los que le gustaría admitir. En su tiempo libre, incursiona en la automatización del hogar y ayuda a la banda de música de la escuela secundaria local.

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/now-in-pilot-graphql-wire-adapter-for-lwc.html

Categories
Developers Tutoriales de Salesforce

Mejore el rendimiento del código con el analizador de código 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.

Mejore el rendimiento del código con Salesforce Code Analyzer | Blog de desarrolladores de Salesforce

En octubre de 2022, compartimos noticias emocionantes sobre el lanzamiento de la versión 3.x de Salesforce Code Analyzer , nuestro escáner de código gratuito que reúne varios motores de análisis de código de fuente abierta bajo una experiencia unificada de Salesforce CLI. En particular, profundizamos en Salesforce Graph Engine , que utiliza análisis de flujo de datos para detectar vulnerabilidades de seguridad avanzadas en el código. Hoy, compartiremos cómo, con nuestro lanzamiento de la versión 3.9, estamos evolucionando Graph Engine con nuevas reglas para ayudarlo a mejorar el rendimiento de su código. Entonces, ¡siéntese, relájese y prepárese para acelerar su código!

Nuevas reglas de rendimiento en la versión 3.9

Con Code Analyzer versión 3.9, presentamos una nueva regla de rendimiento, UnimplementedTypeRule , que detecta si tiene código Apex sin usar en su solución. Específicamente, detecta interfaces no utilizadas y clases abstractas. Complementa otra regla que presentamos en la versión 3.8, UnusedMethodRule que detecta métodos no utilizados. Puede usar estas dos reglas para eliminar el código no utilizado y hacer que su código sea más pequeño, más eficiente y, por lo tanto, más eficaz (pero hablaremos de eso más adelante).

Agregamos estas nuevas reglas a Salesforce Graph Engine. Como repaso rápido, Graph Engine generalmente escanea el código utilizando un enfoque basado en rutas usando algo que llamamos "análisis de flujo de datos" (DFA). Con este enfoque, Graph Engine consume todo el código fuente simultáneamente y asimila esta información para producir una mejor comprensión de lo que sucede en el código. Este enfoque basado en rutas es bastante diferente del árbol de sintaxis abstracta (AST), un enfoque de análisis estático utilizado por todos los demás motores en Code Analyzer, como PMD y ESLint.

Sin embargo, estas reglas son especiales. En lugar de seguir un enfoque basado en rutas, utilizamos la comprensión holística de Graph Engine de cómo se estructura el código y la información de dependencia adicional. Este enfoque basado en gráficos aún usa análisis estático, pero es más efectivo que un enfoque basado en AST puro para detectar si esas interfaces, clases abstractas y métodos se están usando o no, mientras se mantiene un gran rendimiento.

Dado que este enfoque basado en gráficos es mucho más rápido que un enfoque basado en rutas, agregamos estas reglas al comando scanner:run en lugar de scanner:run:dfa utilizado por otras reglas de Graph Engine.

Cómo afecta el código no utilizado al rendimiento de su solución

Cuando su código Apex se implementa en una organización de Salesforce, se compila y está disponible para ser invocado para su ejecución directa o indirectamente a través de múltiples puntos de entrada. Llamamos a estos puntos de entrada "fuentes" en Graph Engine. Hay muchos tipos diferentes de puntos de entrada, pero los ejemplos incluyen código Apex invocado desde llamadas API o código Apex invocado desde interacciones de usuarios con componentes Lightning.

Es importante destacar que todo el código de Apex se compila, independientemente de si hay alguna fuente que lo invoque. Si con el tiempo está agregando funcionalidad adicional continuamente, es probable que parte de su código se encuentre en su organización (o en las organizaciones de sus clientes si es un socio de AppExchange) sin siquiera ejecutarse. Esto es especialmente relevante si tiene una solución anterior que diferentes desarrolladores han creado gradualmente a lo largo de los años y no ha tenido la oportunidad de realizar una refactorización significativa.

Ahora, recuerde que Salesforce es multiinquilino y, por lo tanto, varios clientes se ejecutan en la misma instancia de Salesforce y, lo que es más importante, comparten la potencia informática, el uso de la memoria y los subprocesos para ejecutar Apex dentro de esa instancia en particular. Si bien contamos con medidas de seguridad para optimizar la forma en que asignamos y distribuimos los recursos entre los clientes, se recomienda tener un código más pequeño y eficiente.

Hay ventajas adicionales. Tener menos código significa:

  • Es menos probable que alcance los límites del regulador en el tamaño de los caracteres del código Apex
  • Implementar metadatos, instalar y actualizar paquetes es más rápido
  • Es mucho más fácil para usted mantener el código, incluso no necesita tantas pruebas unitarias.
  • El tiempo de compilación de Apex es más corto, lo que acelera el desarrollo y la implementación

Además de las reglas de rendimiento, si aprovecha las diversas reglas de calidad de código disponibles en Code Analyzer a través de PMD, también puede hacer que su código sea más legible e identificar oportunidades para la refactorización de código.

Instale la última versión de Code Analyzer

Comience a usar estas nuevas reglas de rendimiento en Code Analyzer de inmediato.

Asegúrese de actualizar a la última versión de la CLI de Salesforce:

Y, si aún no lo ha hecho, instale el complemento Salesforce Code Analyzer:

Si ya había instalado Code Analyzer anteriormente, simplemente ejecute sfdx update para asegurarse de que tiene la última versión. ¡Eso es todo!

Limpiemos el código no utilizado

Para comenzar, instale nuestra aplicación de muestra.

Clone la rama dev del repositorio de Code Analyzer.

A continuación, abra el directorio de muestra, donde encontrará un proyecto para una aplicación que funcione.

Tenga en cuenta que FlsHelperClass.cls contiene un método denominado verifyCreateablePositiveStyle .

Ahora, observe UnusedInterface.cls , que contiene la interfaz pública UnusedInterface .

No usamos verifyCreateablePositiveStyle en ningún lugar dentro de nuestra aplicación de muestra, y tampoco hay implementaciones de UnusedInterface .

Ahora ejecute Code Analyzer en el directorio del proyecto.

Tenga en cuenta que necesitamos usar --engine sfge y proporcionar --projectdir para ejecutar estas reglas con Graph Engine.

Esto generará una salida en formato CSV donde verá dos infracciones informadas por Code Analyzer.

"UnusedMethodRule","Method verifyCreateablePositiveStyle in class FlsHelperClass is never invoked"

y

"UnimplementedTypeRule","Extend, implement, or delete interface UnusedInterface"

Si elimina verifyCreateablePositiveStyle y UnusedInterface, y vuelve a ejecutar Code Analyzer:

Usted obtiene:

Executed engines: sfge. No rule violations found.

¡Eso es todo! Limpiaste el código en nuestra aplicación de muestra. Esto significa que si tuviera que implementar este código en una organización de Salesforce, solo compilaríamos el código que realmente se necesita y, por lo tanto, mejoraría el rendimiento de su solución. ¡Felicidades!

Pruébelo en su propio código y lea más sobre Code Analyzer y Graph Engine en nuestra documentación .

Conclusión

El equipo de Salesforce Code Analyzer mejora constantemente Code Analyzer. Nos encantaría escuchar sus comentarios y solicitudes de funciones .

Recursos

Sobre los autores

Josh Feingold es ingeniero sénior con casi siete años de experiencia en Salesforce. Comenzó contribuyendo al éxito de CPQ Salesforce como una solución de configuración, precio y cotización escalable y de alto rendimiento. Ahora, como parte del equipo de análisis de código de Salesforce, ha dirigido su mirada hacia la comunidad de clientes y socios de Salesforce, trabajando para brindarles las herramientas para escribir código seguro, eficaz y mantenible.

John Belo es director de gestión de productos para la plataforma ISV y se centra en Salesforce Code Analyzer, AppExchange App Analytics, así como en otras áreas dentro de Packaging. Ha estado en Salesforce durante más de siete años y siempre ha sido parte del equipo de AppExchange. Comenzó liderando un equipo de evangelistas técnicos de ISV en EMEA y ahora es parte del equipo de administración de productos de AppExchange, con la intención de ayudar a los ISV a tener el mayor éxito posible.

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/boost-code-performance-with-salesforce-code-analyzer.html

Categories
Developers Tutoriales de Salesforce

Dé forma al futuro de la construcción y el desarrollo en 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.

Dé forma al futuro de la construcción y el desarrollo en Salesforce | Blog de desarrolladores de Salesforce

¡Nuestra encuesta global, El estado de la construcción y el desarrollo en Salesforce , ya está disponible! Esta es su oportunidad de ayudarnos a comprender mejor cómo crea y desarrolla Salesforce, para que podamos mejorar su experiencia.

Las encuestas de desarrolladores anteriores nos han dado una gran perspectiva sobre quiénes son los desarrolladores de Salesforce ycómo los desarrolladores aprenden y utilizan Salesforce , y hemos podido realizar mejoras informadas a partir de estas perspectivas. Por ejemplo, aprendimos que nuestra comunidad de desarrolladores realmente ama y se involucra con los videos de nuestros defensores de desarrolladores, especialmente en plataformas como YouTube. En particular, prefieren contenido de video corto que les ayude a resolver desafíos complicados. Con base en estos dos datos útiles, creamos una lista de reproducción completa de YouTube en nuestro canal llamada Developer Quick Takes , que demuestra soluciones inteligentes en videos breves de nuestros promotores de desarrolladores.

Ahora abierto a todos, no solo a los desarrolladores.

En el pasado, nuestra encuesta se centró únicamente en los desarrolladores, pero ahora damos la bienvenida a cualquiera que cree y desarrolle en el ecosistema de Salesforce para que participe . A medida que ha crecido nuestra cartera de productos, la comunidad que crea usándolos también ha crecido con ella. En un esfuerzo por incluir esta evolución y crecimiento, hemos decidido abrir la encuesta en nuestras comunidades para incluir administradores, desarrolladores, arquitectos, analistas y más. Esta encuesta cubre productos de todo el ecosistema de Salesforce, incluidos Heroku, Slack, Tableau, MuleSoft y muchos otros. Ya sea que use generadores de código bajo de Salesforce todos los días, escriba código Apex de vez en cuando o cree el ecosistema de Salesforce de alguna otra manera, ¡queremos saber de usted!

Deja que se escuche tu voz

En Salesforce Research & Insights, brindamos información para ayudar a nuestros equipos de productos a impulsar experiencias excepcionales de productos y clientes, creadas de manera inclusiva y ética, en toda la cartera de Salesforce Customer 360. Hacemos esto escuchando a nuestros clientes, por eso sus respuestas a esta encuesta son tan importantes para nosotros.

Usaremos sus comentarios para informar las mejoras del producto y el futuro de la construcción y el desarrollo en Salesforce. Además, como lo hemos hecho en el pasado, compartiremos algunas de las ideas clave con usted.

¡Haz la encuesta ahora!

No espere: la encuesta cierra a las 4:00 p. m. (hora del Pacífico) el 10 de marzo de 2023.

Gracias por ayudarnos a mejorar la forma en que construyes y desarrollas en la plataforma.

Sobre el Autor

Nathan Khuu es investigador de personal en el equipo de Salesforce Research & Insights.

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/01/shape-the-future-of-building-and-developing-on-salesforce.html

Categories
Developers Tutoriales de Salesforce

La guía para desarrolladores 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.

La guía para desarrolladores de TrailblazerDX '23 | Blog de desarrolladores de Salesforce

¡Toda la comunidad volverá a reunirse el 7 y 8 de marzo en San Francisco y en Salesforce+ para TrailblazerDX 2023! Únase a nosotros y descubra nuevas formas de lograr el éxito ahora con Salesforce.

Durante estos dos días emocionantes, estamos desdibujando las líneas entre el aprendizaje y la diversión al reunir a administradores, desarrolladores, arquitectos, socios, empresarios y líderes de TI para sumergirse en una experiencia de aprendizaje de clase mundial. Explorarán cómo crear aplicaciones en Customer 360, integrarlas con MuleSoft, conectarse con Slack y potenciar el análisis con Tableau.

¿Emocionado? ¡Usted debería ser! Aquí, compartimos todo lo que le espera en TDX este año, ya sea que asista en persona o lo vea en Salesforce+ . Hemos elaborado esta práctica guía para que aproveche al máximo su experiencia TDX.

Mejora tus habilidades y conéctate

¿La mejor parte de TrailblazerDX? Es una oportunidad para que aprendas, te conectes, te diviertas y retribuyas. Es la capacidad de tener una conversación rápida en el pasillo después de una sesión que fue alucinantemente increíble. Son las risas durante un almuerzo rápido con nuevos amigos. Y es la oportunidad de preguntar personalmente a oradores y expertos de Salesforce sobre una pregunta que lo tiene perplejo.

¡A continuación se muestra solo un adelanto de lo que encontrará en TrailblazerDX '23!

Aprende: Habrá Más de 200 sesiones técnicas, demostraciones de productos, talleres dirigidos por expertos y aprendizaje práctico: perfecto para crear con clics, código o ambos. ¡También puede esperar más de 1000 oportunidades de certificación!
Conéctese: más de 25 000 Trailblazers se reunirán en línea y en persona para compartir mejores prácticas, consejos y trucos, y más.
Diviértete: espera reuniones comunitarias, diversión y juegos, además de una fiesta épica de celebración de Trailblazer.
Retribuya: Incluso encontrará oportunidades de voluntariado, intercambio de conocimientos y tutoría. Deja la comunidad un poco mejor de lo que la encontraste.

Ahora, entremos en las cosas buenas. Estos son algunos aspectos destacados de la sesión en TrailblazerDX '23.

TrailblazerDX Main Keynote + Fiel al núcleo

Las cosas más importantes a tener en cuenta este año son TrailblazerDX Main Show Keynote y True to the Core.

El Keynote es su oportunidad de unirse a la presidenta y directora de marketing de Salesforce, Sarah Franklin, junto con otros líderes sénior del ecosistema, para aprender cómo los desarrolladores, administradores, arquitectos y socios pueden unirse para usar las últimas innovaciones en la plataforma Customer 360, MuleSoft, Slack, y Tableau para innovar, automatizar y escalar.

Si lo va a seguir desde su casa, vea el discurso de apertura completo mientras se transmite en vivo en Salesforce+. Asegúrese de ver el discurso de apertura en vivo con la interpretación del lenguaje de señas americano (ASL).

Fiel al núcleo

Únase a Parker Harris, los directores de productos de Salesforce, MuleSoft, Slack y Tableau, así como los gerentes de productos, en un foro de preguntas y respuestas sobre nuestra hoja de ruta de productos. Los oradores incluyen:

  • Sarah Franklin, directora de marketing, Salesforce
  • Francois Ajenstat, director de productos, Tableau
  • Patrick Stokes, vicepresidente ejecutivo y gerente general, plataforma de Salesforce
  • Stephen Hsu, vicepresidente sénior de gestión de productos, MuleSoft
  • Steve Wood, vicepresidente sénior de gestión de productos, Slack

Si está mirando desde su casa, mire True to the Core mientras se transmite en vivo en Salesforce+.

Sesiones técnicas para todos los asistentes

Tenemos más de 200 sesiones programadas para usted en TDX este año que abarcan todo nuestro ecosistema. Para los desarrolladores, habrá 15 sesiones de trabajo y 23 sesiones de teatro. Y lo escuchamos: hay muchas sesiones excelentes a las que asistir, por lo que repetiremos una parte de las sesiones para asegurarnos de que las más populares se realicen más de una vez.

Las sesiones de trabajo son inmersiones profundas de 40 minutos en el contenido, y las sesiones de teatro son charlas de 20 minutos que se llevarán a cabo en todo el espacio del evento. ¡Estas son solo algunas de las sesiones de desarrolladores más esperadas!

Sesión Altavoces) Que esperar Breakout o Teatro
Patrones y mejores prácticas de Apex en 2023 Mohith Shrivastava La creación de aplicaciones de nivel empresarial con Apex exige que los desarrolladores comprendan los patrones y las mejores prácticas empresariales. Únase a nosotros para aprender a escribir código Apex escalable, eficiente y seguro. Fugarse
Cree LWC dinámicos con Salesforce GraphQL Suvda Myagmar Aprenda a desarrollar componentes contra modelos de datos complejos utilizando la API de la interfaz de usuario para acceder a Salesforce GraphQL y obtenga una vista previa del acceso nativo próximamente. Fugarse
Prácticas recomendadas del IDE de Salesforce para VS Code y Code Builder Ananya Jha Aprenda sugerencias, técnicas avanzadas y mejores prácticas para llevar sus habilidades de IDE de Salesforce al siguiente nivel cuando trabaje con VS Code y Code Builder. Fugarse
Acelere DevOps con DevOps Center y la CLI de Salesforce Pooja Reddivari y Karen Fidelak Únase a nosotros para explorar los flujos de trabajo de DevOps que aprovechan DevOps Center y la CLI de Salesforce, lo que permite a los desarrolladores de código bajo y pro-código participar en un viaje de DevOps colaborativo y simplificado. Fugarse
Conecte datos y flujos de trabajo entre Salesforce y AWS ross belmont Descubra cómo la asociación de Salesforce y AWS lo hace más productivo con nuevas capacidades en Salesforce Connect y Event Relay. ¡Escriba menos código de integración, entregue valor más rápido! Fugarse
Conozca a los desarrolladores de la plataforma Salesforce Stephan Chandler-García y Chris Peterson Únase al equipo de liderazgo técnico de Salesforce para una sesión abierta de preguntas y respuestas sobre la plataforma de Salesforce. Este es el lugar para hacer preguntas a las personas que lo construyen y escuchar las opiniones de otros desarrolladores. Fugarse
Desbloquee el poder de la CLI de Salesforce Pooja Reddivari Conozca las funciones más recientes de la CLI de Salesforce y cómo simplifican su ciclo de vida de desarrollo. Teatro
Funciones de Salesforce para Python André Sayre Aprenda a crear e implementar funciones de Salesforce escritas en Python. Teatro
Genio para desarrolladores 101 Aditya Naag Topalli Descubra qué significa Genie para los desarrolladores, cómo se exponen los artefactos de Genie como metadatos de plataforma familiares y cómo puede interactuar con los datos de Genie mediante LWC, Apex, Flows, API y SDK. Teatro
Explore los lenguajes de programación de Marketing Cloud danielle larregui Aprenda los lenguajes de programación disponibles en Marketing Cloud Platform y cómo usarlos, incluidos AMPscript, SSJS, GTL, SQL y más. Teatro
Flow y Apex: prácticas recomendadas de automatización para desarrolladores Satya Sekhar Chegondi Aprenda patrones de automatización y mejores prácticas que combinan Flow, Apex y Lightning Web Components para maximizar la productividad y el control. Teatro
Cree integraciones en tiempo real con eventos y la API Pub Sub tyson leer Conozca cómo algunos de nuestros clientes más exitosos utilizan los eventos de Salesforce para potenciar sus integraciones más complejas y sólidas, así como lo que funcionó para ellos y lo que debe tener en cuenta. Teatro

Sesiones de la comunidad Trailblazer

¡Aprende de Trailblazers como tú! Nuestros Trailblazers tienen el conocimiento, las habilidades y la experiencia para ayudarlo a tener éxito. Venga a TDX '23 Community Cove, donde puede inspirarse con las mejores prácticas en Community Campfire u obtener una excelente descripción general de un proyecto técnico en el Trailblazer Theatre. Busque presentaciones de 20 minutos y paneles de 45 minutos sobre temas técnicos y soluciones en todo nuestro ecosistema, creados por miembros de la comunidad.

Otro contenido imperdible, ¡y mucho MOAR!

En TrailblazerDX '23 hay un montón de contenido increíble de código bajo y código esperándote. Consulte algunas de las sesiones de administración o sesiones de arquitecto para diversificar su experiencia de aprendizaje de TDX.

Estamos muy emocionados de reunir a nuestras diversas comunidades técnicas en una sola conferencia. No importa con qué tecnología de Salesforce trabaje, ¡todos pueden mejorar sus habilidades en TrailblazerDX '23! En este punto, simplemente hemos arañado la superficie del evento. No mencionamos que MuleSoft, Slack y Tableau tendrán sus propias áreas de exposición, para que los desarrolladores de Salesforce puedan sumergirse en el conocimiento del producto.

Y si no puede estar allí en persona, lo tenemos: el contenido seleccionado se transmitirá en Salesforce+ . ¡Este año, Salesforce+ tendrá una experiencia de transmisión EN VIVO! Así es, para ambos días habrá dos canales y 15 horas de transmisión en vivo completamente gratis.

Además de la experiencia en vivo, este año estarán disponibles más de 50 sesiones a pedido repletas de contenido y momentos exclusivos.

lo que puedes hacer ahora

TrailblazerDX siempre ha sido una de nuestras conferencias más populares. Nos encanta que los administradores, arquitectos y desarrolladores de todo el mundo puedan reunirse para compartir sus experiencias, aprender e interactuar entre ellos. Estamos muy emocionados de reunir a nuestras diversas comunidades técnicas en una sola conferencia de desarrolladores.

Independientemente de la tecnología del ecosistema de Salesforce que pueda aplicarse a su trabajo o función, podrá mejorar sus habilidades en TDX '23. Y lo más importante, puedes hacer nuevas conexiones con grandes personas de todo el mundo.

  1. Regístrese ahora si aún no lo ha hecho.
  2. Echa un vistazo a todas las sesiones que hemos planeado.
  3. Esté atento al Creador de agenda oficial (¡próximamente!) para comenzar a construir su experiencia TDX '23.
  4. Esté atento al lanzamiento de Road to TrailblazerDX Quest el 1 de febrero, donde puede desbloquear una insignia exclusiva de la comunidad e ingresar para tener la oportunidad de ganar* uno de los 10 vales de certificación de Salesforce, o una de las 20 codiciadas sudaderas con capucha de Trailblazer. *Se aplican las reglas oficiales. Consulte la página de Trailhead Quests para obtener todos los detalles.
  5. ¿Quiere acelerar su camino hacia la certificación después de TDX? Regístrese en TrailblazerDX Bootcamp del 9 al 11 de marzo y disfrute de tres días de aprendizaje inmersivo dirigido por expertos. Sumérgete en las sesiones técnicas, aprende con tu comunidad y mejora tu carrera.
  6. Envíenos un tweet a @SalesforceDevs y cuéntenos qué es lo que más le emociona.

Sobre el Autor

Kaitlin Benz es especialista sénior en desarrollo de marketing en Salesforce. Lo que más le apasiona es la narración de historias, los podcasts y la comida vegana. Encuéntrala en Twitter @Kaitlin_Benz.

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/01/the-developers-guide-to-trailblazerdx-23.html

Categories
Developers Tutoriales de Salesforce

Resumen de 2022: nuevas funciones para desarrolladores del año pasado ☁️

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.

2022 en revisión: nuevas funciones para desarrolladores del año pasado | Blog de desarrolladores de Salesforce

Para reflexionar sobre el año pasado, revisé las notas de la versión y pedí a nuestros defensores de desarrolladores su opinión sobre algunas de las mejores características de 2022. Eche un segundo vistazo a estas mejoras para ver cómo pueden mejorar su vida como desarrollador que trabaja con la plataforma de Salesforce! NOTA: En aras de la transparencia, los criterios para nuestras funciones principales incluyen: tenía que lanzarse como Generalmente Disponible (GA) en 2022 (sin funciones Beta o Piloto), y tenía que ser de alguna manera una función orientada al desarrollador (Somos bastante generosos con este). Nuevas API siguiendo estándares abiertos Durante el año pasado, se lanzaron la API Pub/Sub y la API GraphQL. Estas nuevas API presentan a los equipos de desarrollo más flexibilidad y productividad al integrarse con Salesforce. También representan un mayor avance en la adopción de estándares de la industria en el desarrollo de Salesforce. API de publicación/suscripción En el pasado, la integración basada en eventos con Salesforce requería dominar diferentes API y técnicas. La publicación, la suscripción y la introspección se realizaron utilizando diferentes API y tecnologías. Al publicar un evento, tenía que seleccionar una de varias API. Su aplicación de cliente se suscribió usando alguna biblioteca basada en el protocolo CometD. Y si querías hacer una introspección del esquema de eventos, había una API REST especial para llamar. Cambiar a la API de Pub/Sub basada en gRPC significa que necesitará una comprensión mucho menos explícita de todas estas piezas del panorama de la API de Salesforce. Al usar la biblioteca/lenguaje de gRPC de su elección, tendrá acceso a todos estos servicios basados en eventos a través de un conjunto común de interfaces. API GraphQL Desde su presentación al mundo en 2015, GraphQL ha cambiado la forma en que los desarrolladores crean aplicaciones web y móviles. Facturándose a sí mismo como una alternativa a las API REST tradicionales, su enfoque de punto final único, solicitud única para muchos datos diferentes es muy popular. Si es un desarrollador experimentado en el ecosistema de Salesforce y ha visto esto y se ha preguntado: "¿No es una especie de consulta SOQL?", tiene razón… y está equivocado. En su estado actual, dada la existencia de SOQL complejo, existe una gran cantidad de superposición con la API de GraphQL, particularmente con respecto a la consulta de múltiples objetos. Pero dos características que aún están en camino son la compatibilidad con mutaciones y el adaptador de cable GraphQL API LWC. Actualmente, para realizar una consulta ad hoc de datos en LWC, se requiere una clase de Apex. Tener soporte de consultas a través del adaptador de cable API GraphQL directamente en LWC eliminará una pieza adicional de complejidad para recuperar datos en su código LWC. Y las mutaciones (la capacidad de modificar y eliminar datos) significarán que el uso de la API de GraphQL tiene el potencial de simplificar en gran medida las aplicaciones web y móviles que se conectan con Salesforce. ¡Esté atento a que estas características lleguen pronto!

La marcha continua hacia los estándares abiertos

Hay otro gran beneficio en la introducción de estas dos API desde el punto de vista de la dotación de personal para los proyectos de integración de Salesforce. El uso de lenguajes y protocolos estándar de la industria amplía la accesibilidad de Salesforce Platform a más desarrolladores. Como desarrollador que ya conoce gRPC o GraphQL, estas API le facilitarán más que nunca la preparación para trabajar con Salesforce.

Más información sobre las nuevas API de Pub/Sub y GraphQL

Lightning Web Security: como Locker, solo que mejor

Cuando lanzamos Lightning Components en 2014, la promesa de elementos de interfaz de usuario personalizados sin el dolor de un iFrame hizo que todos los desarrolladores de Visualforce se emocionaran. Luego, la seguridad del producto de Salesforce nos trajo a todos de vuelta a la Tierra con la realidad de lo que significaría para cada desarrollador (el nuestro, el suyo, el de su proveedor de aplicaciones de AppExchange) tener acceso libre y gratuito a cada elemento DOM en la interfaz de usuario de Salesforce. Y así nació el servicio Locker .

[Atribución: Ananomyx, CC BY-SA 4.0 <https://creativecommons.org/licenses/by-sa/4.0>, vía Wikimedia Commons]

Desde entonces, los desarrolladores han aprendido a trabajar con él, a su alrededor, y a aprovechar al máximo la creación de interfaces de usuario personalizadas. Pero los equipos de producto e ingeniería de UI se dispusieron a encontrar una mejor manera. De esa manera es Lightning Web Security (LWS).

Anteriormente, el desafío era la falta de funciones del navegador. Aparte de un iFrame, no había una forma nativa de aislar un elemento de la interfaz de usuario y evitar que se viera comprometido por otro código en el DOM. Una de las iniciativas más emocionantes en la historia reciente de Salesforce es nuestra participación activa en el proceso de estándares web y nuestra estrecha asociación con proyectos y proveedores de navegadores. A través de este enfoque cooperativo, Salesforce influye en las nuevas funciones que se introducen en los estándares web y, finalmente, en los navegadores que admiten el desarrollo con Salesforce. La propuesta de ShadowRealm es una de esas características. Agrega un objeto global, virtualizado y en espacio aislado que constituye la base de LWS.

LWS hace uso de esta función de sandboxing nativa. Esto significa que puede equilibrar mejor la seguridad con la usabilidad, el rendimiento y la integración entre los componentes de la interfaz de usuario. LWS promete brindar más flexibilidad a su trabajo de LWC a través de más bibliotecas JS disponibles. También puede haber beneficios de rendimiento para LWS sobre Locker Service.

Para habilitar LWS, vaya a Configuración > Configuración de sesión en su organización. En la mayoría de los casos, no debería requerir cambios en su código, pero esto no está garantizado (ya sea que el código sea suyo o de las aplicaciones de AppExchange). Asegúrese de habilitarlo y probarlo en un espacio aislado antes de habilitarlo en producción.

Más información sobre LWS

Ganancias de paridad de características de LWC a Aura

Lanzar una ventana modal usando LWC y hacer que su LWC muestre un flujo de pantalla han sido dos elementos importantes en el camino para lograr que Lightning Web Components tenga paridad de características con Aura.

Desde el momento en que se lanzó LWC, los desarrolladores han estado preguntando cuándo habría un LWC que proporcionara las funciones modal y popover al estilo del componente <lightning:overlayLibrary/> Aura. Bueno, no espere más: ahora puede crear componentes que se pueden usar como superposiciones modales haciendo que su módulo LWC importe y amplíe la clase JavaScript LightningModal . Esta es una característica muy nueva recién lanzada en Winter '23.

Aquí hay un ejemplo de un componente modal que usa la clase LightningModal :

Si bien Flow ha tenido una gran cantidad de características nuevas en Winter 23, quiero mencionar el componente base lightning-flow , que le permite mostrar un Flujo de pantalla de LWC. De ahora en adelante, cuando un flujo de pantalla sea la mejor manera de resolver ese problema, puede hacer que funcione en LWC.

Las publicaciones de blog para lightning-modal y para incrustar flujo en LWC acaban de publicarse en diciembre, por lo que no dedicaré mucho tiempo a repetirlas. Pero baste decir que tener estas características integradas en LWC hará que la vida de cada desarrollador sea mucho más fácil.

Más información sobre estas mejoras de LWC

La clase de afirmación

Soy un ávido ciclista de montaña. La primera vez que usé una tija de sillín con cuentagotas ajustable operada a distancia (generalmente conocida como tija con cuentagotas), cambió fundamentalmente la forma en que montaba mi bicicleta y cuánto disfrutaba al ir cuesta abajo. Moverse entre una buena altura de pedaleo y poder tener mi asiento fuera del camino de mi trasero y piernas fue la respuesta a un problema que no sabía que tenía. La clase Assert Apex es un poco así.


¿Quién sabía que tener tres métodos de afirmación completos era limitante? Quiero decir, ¿qué más necesita, sino poder hacer assert(Boolean) , assertEquals(Any, Any) , y assertNotEquals(Any, Any) ?

Resulta bastante.

La clase Assert le brinda un montón de azúcar sintáctico en forma de evaluaciones condicionales nuevas y más específicas que un desarrollador puede usar al probar su código Apex. Digamos que necesita verificar que una variable sea de un tipo específico. Eso está cubierto. ¿Quieres comprobar si hay un valor nulo? Eso también está cubierto.

Y ya no tendrá que razonar sobre cómo hacer que su condición de afirmación resulte con un valor booleano específico, ya que cada forma de evaluación viene con un método que busca una comparación true y una comparación false . Por ejemplo, verificar que la instancia sea de un tipo específico se puede hacer con isInstanceOfType() o isNotInstanceOfType() .

Como compartimos contigo en una publicación de blog reciente, puedes ver la diferencia entre las dos formas de probar un resultado.

Aquí hay un ejemplo del antiguo método System.assert() :

Y aquí hay un ejemplo con Assert.isInstanceOfType() :

Tener la intención de la prueba en el nombre del método que está utilizando para la prueba hace que las cosas sean aún más claras.

Incluso hay un método llamado fail() , que lanza una excepción de aserción sin tener que usar la técnica did-they-mean-to-do- assertEquals(false) .

Y al igual que con los métodos del sistema anteriores, cada método está sobrecargado con una firma de método que le permite escribir su propio mensaje personalizado cuando falla la afirmación.

Con todo esto, le resultará más fácil escribir pruebas de Apex y razonar sobre las pruebas de Apex que encuentra en su base de código existente.

Así que sí, tal vez no necesites la clase Assert en el sentido más puro de la palabra… tal vez yo tampoco necesitaba mi cuentagotas. Pero todos seremos más felices con ellos.

Más información sobre la clase Assert

Centro DevOps

Una buena gestión y gobierno del ciclo de vida del software puede marcar una gran diferencia entre el éxito de los proyectos y la eficiencia de los equipos. Con la combinación única de código y sin código de Salesforce, querrá una herramienta diseñada para el trabajo.

DevOps Center se diseñó teniendo en cuenta esta amplia gama de personalizaciones de aplicaciones. También atiende a una gama igual de amplia de niveles de habilidad. Ya sea que solo se trate de construir en el menú Configuración o que haya dominado la línea de comando (o cualquier otra cosa), DevOps Center es para usted.

DevOps Center está diseñado para llevar el ecosistema de Salesforce más allá de los conjuntos de cambios. Ofrece integración con GitHub, canalizaciones, integración con organizaciones de desarrollo (como sandboxes y organizaciones borrador) y muchas otras funciones. Por lo tanto, no importa cuál sea la composición de su equipo, puede razonar sobre cómo crea e implementa funciones para Salesforce.

Más información sobre DevOps Center

Menciones honoríficas

Obviamente, lanzamos demasiadas funciones en 2022 para resumirlas todas en una breve publicación de blog. Y mis selecciones se basan en mis propias impresiones y en cómo uso Salesforce. Mientras el equipo discutía qué funciones se lanzaron el año pasado, surgieron otras. Los siguientes son algunos que debería considerar investigar si aún no lo ha hecho.

Conclusión

Cada año bendice a los desarrolladores de Salesforce con nuevas funciones y desarrollos en la plataforma. El lanzamiento regular de nuevas funciones es una de las cosas que atrae a muchos desarrolladores para trabajar con Salesforce. ¿Y usted? ¿Cuáles son tus características favoritas de 2022? Si desea compartir, asegúrese de anunciarlo en las redes sociales y mencionarnos en Twitter o LinkedIn .

Sobre el Autor

Peter es un defensor de los desarrolladores y se ha centrado en la habilitación de desarrolladores durante 20 años. Dirige el equipo de defensores de desarrolladores de Salesforce Platform en América del Norte y EMEA. Encuéntralo en Twitter: @pchittum.

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/01/2022-in-review-new-developer-features-from-the-past-year.html

Categories
Developers Tutoriales de Salesforce

Comience a crear aplicaciones de Salesforce ahora con un nuevo proyecto de Trailhead ☁️

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.

Comience a crear aplicaciones de Salesforce ahora con un nuevo proyecto de Trailhead | Blog de desarrolladores de Salesforce

Los desarrolladores valoran y confían en Salesforce Platform porque simplifica el proceso de creación de soluciones empresariales seguras. Al utilizar las herramientas y los servicios integrados de la plataforma para la automatización, la integración y más, los desarrolladores pueden lograr el éxito comercial más rápido. Los desarrolladores de Salesforce abordan problemas comerciales complejos escribiendo código y utilizando herramientas sin código que ofrecen funciones simples rápidamente. Las herramientas sin código de la plataforma reducen la necesidad de que los desarrolladores escriban código repetitivo, para que puedan concentrarse en escribir código para funciones de mayor valor.

Para iniciar su viaje de desarrollo de Salesforce, hemos creado un nuevo Proyecto Trailhead: Comience con el desarrollo de Salesforce . Este blog le presenta el proyecto y proporciona una descripción general de lo que puede esperar de él.

Además de Salesforce Platform, el ecosistema más amplio de tecnologías de Salesforce incluye Heroku, MuleSoft, Marketing Cloud, Tableau, Slack y otros. El proyecto Trailhead del que hablaremos aquí está diseñado específicamente para desarrolladores que estén interesados en comenzar con Salesforce Platform.

requisitos previos

El único requisito previo para este proyecto es crear una cuenta en Trailhead , nuestra plataforma de aprendizaje en línea gratuita y divertida. Una vez que llegue a Trailhead, haga clic en el proyecto Comenzar con el desarrollo de Salesforce y siga las instrucciones del proyecto.

Si tiene experiencia previa en ingeniería de software, puede encontrar las instrucciones paso a paso fáciles de navegar. Sin embargo, los estudiantes sin experiencia en programación también deberían poder completar este proyecto.

Panorama de herramientas para desarrolladores de Salesforce

La plataforma Salesforce permite a los equipos de desarrollo elegir la herramienta adecuada para el trabajo adecuado. La combinación de herramientas sin código con código escrito hace que los desarrolladores sean más productivos y acelera el desarrollo.

Herramientas sin código: las herramientas sin código vienen listas para usar dentro del entorno de Salesforce. Los desarrolladores usan estas herramientas para crear modelos de datos de aplicaciones (Schema Builder), configurar la seguridad de los datos, escribir automatización sin código y mucho más.

Herramientas de código : como cualquier otra tecnología de desarrollo de software, los desarrolladores de Salesforce Platform utilizan herramientas de línea de comandos y un IDE. La CLI de Salesforce es la herramienta de línea de comandos que ejecuta comandos en organizaciones de Salesforce y funciona con archivos de origen en su máquina local. El paquete de extensión de Salesforce para Visual Studio Code contiene funciones que agilizan aún más el desarrollo y brindan una experiencia IDE.

Su primer paso hacia el desarrollo de Salesforce es aprender a instalar estas herramientas. La primera unidad del proyecto, Prepárese para desarrollar , está diseñada para ayudarlo a configurar el entorno de desarrollo y prepararse para crear aplicaciones.

El poder de menos código

Las aplicaciones modernas suelen necesitar una interfaz de usuario intuitiva, API para integrarse con otros sistemas y procesos, y una seguridad robusta, todo lo cual requiere un código complejo. La buena noticia es que Salesforce Platform proporciona herramientas integradas para ayudarlo a incorporar estas funciones en sus aplicaciones sin necesidad de escribir y mantener una gran cantidad de código.

La segunda unidad del proyecto, Crear un modelo de datos mediante clics , le presenta herramientas sin código para crear modelos de datos y también proporciona una descripción general de algunas de las capacidades listas para usar de la plataforma Salesforce.

Ampliación de los servicios listos para usar y las capacidades de la plataforma

Los desarrolladores pueden personalizar la plataforma Salesforce para resolver problemas comerciales complejos. Una de las formas en que pueden hacerlo es escribiendo código para ampliar las capacidades de las herramientas sin código de la plataforma.

JavaScript y Apex son los dos lenguajes más destacados en Salesforce Platform para escribir personalizaciones. Apex es el lenguaje de back-end más ampliamente adoptado en el ecosistema de Salesforce, y JavaScript se utiliza para el desarrollo de front-end que aparece a través de Lightning Web Components.

Escribiendo lógica de negocios en Apex

El lenguaje de programación de Apex está optimizado para ejecutarse en el entorno multiusuario de Salesforce. Está fuertemente tipado y orientado a objetos, y permite a los desarrolladores automatizar procesos comerciales de back-end complejos cuando se necesita código.

Apex se integra con la capa de persistencia de datos de Salesforce y tiene soporte integrado para trabajar con datos de Salesforce, lo que permite a los desarrolladores ser más productivos. Y además de eso, Apex fomenta automáticamente las buenas prácticas de codificación al hacer cumplir los límites del regulador y los requisitos de prueba .

Los desarrolladores de Salesforce necesitan conocer Apex, ya que les permite ampliar la funcionalidad lista para usar proporcionada por la Plataforma de Salesforce. La tercera unidad del proyecto, Write Business Login in Apex , cubre cómo escribir y probar el código Apex.

Personalización de la interfaz de usuario de Salesforce con componentes web Lightning

Los componentes web Lightning son elementos HTML personalizados que utilizan los estándares de los componentes web y están creados con HTML y JavaScript moderno. Un componente web Lightning (LWC) se ejecuta en el navegador de forma nativa y permite a los desarrolladores crear nuevas aplicaciones o personalizar la interfaz de usuario lista para usar de las aplicaciones existentes.

Saber cómo trabajar con LWC es una habilidad de desarrollo clave de Salesforce, ya que le permite crear experiencias personalizadas en la plataforma de Salesforce. La última y última unidad, Crear un componente de interfaz de usuario reutilizable con componentes web Lightning , lo guiará paso a paso a través del proceso de creación de un componente web Lightning.

¿Qué más puedes aprender?

Además del proyecto Trailhead que se analiza en este blog, tiene la oportunidad de aprender habilidades de desarrollo aún más importantes en Trailhead . Algunos que recomendamos incluyen:

Flujo de fuerza de ventas

Salesforce Flow le permite automatizar los procesos comerciales con poca o ninguna codificación, lo que le permite ahorrar tiempo y recursos. Puede interactuar con Apex y LWC. Por ejemplo, como desarrollador, puede escribir clases de Apex que Flow puede invocar. También puede crear una interfaz de usuario de flujo personalizada usando LWC, o tener su flujo alojado en la página en un LWC. Al combinar Flows, Apex y LWC, puede crear rápidamente soluciones que agreguen valor comercial.

Funciones de la fuerza de ventas

Para el código de escala elástica, puede utilizar Funciones de Salesforce . Estas unidades de código de funciones como servicio (FaaS) le permiten ampliar Salesforce utilizando lenguajes de código abierto como Java, JavaScript y Python. Las funciones de Salesforce también le permiten conectarse fácilmente a servicios de bases de datos administrados en Heroku. Escalar su aplicación Salesforce con código nunca ha sido tan fácil.

Cliente 360

La plataforma de Salesforce permite el éxito inmediato al trabajar sin problemas con Salesforce Customer 360 y proporcionar beneficios rápidos de tiempo de valor de código bajo. Sin embargo, las habilidades de desarrollador también son útiles cuando se trabaja con gran parte del panorama tecnológico de Salesforce. Esto incluye la creación de experiencias y recorridos personalizados con Marketing Cloud, la creación y el escalado de escaparates y sitios web de comercio electrónico con Commerce Cloud , la visualización de análisis basados en datos con Tableau o la creación de aplicaciones conectadas con Slack .

Conclusión

El proyecto Trailhead, Primeros pasos con el desarrollo de Salesforce , le brinda una descripción general de lo que es ser un desarrollador que trabaja con las capacidades de la plataforma Salesforce. Pero esto es sólo el comienzo. Cada una de las unidades dentro del proyecto tiene enlaces a otros recursos para brindarle una comprensión más profunda.

Finalmente, si te quedas atascado, recuerda que no estás solo. El grupo de desarrolladores de Salesforce en Trailblazer Community es donde puede colaborar, conectarse en red, crear conexiones y aprender con otros desarrolladores a nivel mundial.

Recursos

Comience con el desarrollo de Salesforce

Sobre el Autor

Mohith Shrivastava es promotor de desarrollo en Salesforce con una década de experiencia en la creación de productos a escala empresarial en la plataforma de Salesforce. Actualmente se está enfocando en las herramientas para desarrolladores de Salesforce, Apex y Lightning Web Components en Salesforce. Mohith se encuentra actualmente entre los principales contribuyentes en Salesforce Stackexchange, 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/2022/11/get-started-building-salesforce-apps-now-with-a-new-trailhead-project.html