Categories
Developers Tutoriales de Salesforce

Por qué los desarrolladores deberían dar prioridad al conector PostgreSQL de Heroku para Data Cloud ☁️

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 analiza la importancia del Conector PostgreSQL de Heroku para Data Cloud para los desarrolladores. Explica cómo el conector permite a los desarrolladores conectar fácilmente una base de datos Postgres a Data Cloud, permitiendo la ingestión de datos, el mapeo y la sincronización entre una base de datos Postgres de Heroku y el lago de datos de Data Cloud. El artículo también proporciona una visión general de Heroku, Heroku Postgres y Salesforce Data Cloud, destacando las ventajas de utilizar Heroku con Data Cloud. Analiza los casos de uso y las consideraciones a tener en cuenta antes de empezar a utilizar el conector Heroku Postgres. El artículo concluye animando a los lectores a explorar la hoja de ruta pública de Heroku y proporcionando recursos para obtener más información.

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/06/heroku-postgres-connector-for-data-cloud.html

Categories
Developers Tutoriales de Salesforce

Introducción a los agentes autónomos ☁️

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 los agentes autónomos | Blog de desarrolladores de Salesforce

El panorama de la IA está cambiando a un ritmo tan rápido que las tecnologías futuristas como la IA autónoma ya están mucho más cerca de lo que piensas. Esto se debe a la forma en que los grandes modelos de lenguaje (LLM) están comenzando a incorporarse en casi todas las formas en que interactúa con las aplicaciones. Para los desarrolladores, esto supone un cambio en la forma en que abordamos la creación de aplicaciones, desde las formas en que las reunimos hasta la creación con una UX conversacional completamente nueva.

En esta publicación de blog, veremos cómo los agentes autónomos incorporan la IA a la forma en que funcionan las aplicaciones y, al mismo tiempo, nos acercan a un mundo autónomo.

¿Qué son los agentes autónomos?

En nuestro panorama tecnológico, los agentes son sistemas avanzados que aprovechan el poder de los modelos lingüísticos para razonar y tomar decisiones. Lo que los diferencia de otro bot o marco es el hecho de que los agentes pueden realizar tareas en su nombre utilizando herramientas y memoria.

Las herramientas son extensiones de las capacidades de un modelo de lenguaje, que cierran brechas en su conocimiento y le permiten interactuar con fuentes de datos externas o recursos computacionales. Con estas herramientas, un modelo de lenguaje puede obtener datos en tiempo real, ejecutar tareas y utilizar los resultados para informar sus acciones posteriores. Por ejemplo, si un modelo de lenguaje conoce información solo hasta una fecha determinada, las herramientas pueden proporcionarle información más actualizada de la web, bases de datos u otras fuentes externas.

La memoria proporciona a los agentes la capacidad de recordar interacciones pasadas, lo que puede ser esencial para la continuidad de las tareas y el aprendizaje de acciones anteriores. Esta memoria puede ser de corta duración, centrándose en interacciones recientes, o de largo plazo, recordando eventos o patrones pasados importantes que son relevantes para situaciones actuales.

Juntos, estos elementos transforman un modelo de lenguaje en un agente que no sólo puede comprender y generar texto, sino también actuar sobre esa comprensión en contextos del mundo real. Dichos agentes pueden ejecutar soluciones de forma autónoma para los usuarios, pero también pueden integrar la intervención humana, especialmente en escenarios donde existen incertidumbres o excepciones.

¿Cómo funcionan los agentes?

Se han creado muchos marcos para respaldar el avance de los agentes, siendo algunos de los más populares AutoGPT y LangChain . Generalmente, los agentes siguen un patrón similar: el marco ReAct para razonar y actuar en modelos lingüísticos .

Este marco consta de una serie de pasos:

  1. El usuario proporciona información.
  2. El agente “piensa” en la respuesta adecuada
  3. El agente determina la acción, selecciona la herramienta relevante y decide la entrada para esa herramienta.
  4. La herramienta ofrece un resultado.
  5. El proceso recorre los pasos 2 a 4 hasta que el agente determina que la tarea está completa

Este proceso es el que empieza a hacer autónomo al agente. Al confiar en el LLM para pensar en la respuesta y determinar las acciones apropiadas necesarias, actúa por sí solo para crear el resultado deseado.

Usando LangChain como ejemplo, digamos que queremos crear una aplicación que permita a un cliente gestionar sus pedidos. Primero, podríamos darle a la aplicación acceso a nuestra base de datos de pedidos, base de datos de clientes y API de socios de envío. Luego, configuraríamos una serie de herramientas a las que puede acceder la aplicación para consultar datos, actualizarlos y utilizar IA generativa para redactar una respuesta.

Este agente de gestión de pedidos dispone de seis herramientas que puede utilizar “dentro de su dominio de conocimiento”:

  1. Query Orders es una herramienta que puede consultar pedidos desde una base de datos a través de una API conectada a una base de datos PostgreSQL.
  2. Update Order es una herramienta que puede actualizar un único pedido desde una base de datos a través de una API conectada a una base de datos PostgreSQL.
  3. Manage Tracking Info es una herramienta que puede gestionar un envío a través de una API proporcionada por una empresa de envío
  4. Get Customer es una herramienta que puede consultar datos de clientes desde una API conectada a un sistema CRM
  5. Update Customer es una herramienta que puede actualizar los datos de los clientes a través de una API conectada a un sistema CRM
  6. Compose Response es una herramienta que puede pasar indicaciones a un LLM y devolver una respuesta.

Veamos ahora cómo un agente podría manejar casos de uso relacionados con la gestión de pedidos. Por ejemplo, ¿cómo puede el agente ayudar a un usuario a obtener una actualización sobre el estado de su pedido?

  1. El usuario solicita la información más reciente de su pedido a través de un chatbot
  2. El agente “piensa” y determina la acción correcta que debe tomar
    1. El agente primero utiliza la herramienta Consultar cliente para consultar los detalles del cliente.
    2. Luego, el agente utiliza la herramienta Consultar pedidos para consultar pedidos desde una base de datos.
    3. Luego, el agente utiliza la herramienta Administrar información de seguimiento para obtener la información de envío más reciente de su socio de envío.
    4. Luego, el agente toma ambos resultados y utiliza la herramienta Redactar respuesta para generar una respuesta.
  3. La respuesta se devuelve al usuario.

En este escenario, el agente pudo tomar las herramientas que le proporcionamos y determinar el pedido y los parámetros que necesitan para crear el resultado correcto para el usuario, en este caso, toda su información de pedido y envío. Lo que es importante tener en cuenta aquí es que el usuario puede hacerle al agente cualquier pregunta sobre su pedido y el agente puede usar IA para razonar y usar las herramientas en el orden que necesite.

Como desarrollador, su función se centra más en crear las herramientas y permitir que el agente administre la orquestación.

Mantener a un humano informado

El desafío ético con los agentes autónomos es que no hay ningún ser humano involucrado cuando se trata de ejecutar las acciones. En Salesforce, estamos comprometidos con el uso ético de la IA y queremos dejarlo claro en nuestras implementaciones de este tipo de tecnología. Ciertas reglas exigen que una persona sea responsable de tomar la decisión final en asuntos con consecuencias legales o de impacto comparable, incluida la contratación laboral, la aprobación de préstamos, las admisiones educativas y las sugerencias en justicia penal. Esta insistencia en la supervisión humana, en lugar de decisiones automatizadas, tiene como objetivo identificar y reducir mejor los posibles sesgos y daños.

¿Qué significa esto para el futuro de Salesforce?

En Dreamforce este año, les dimos una idea de cómo será el futuro de Salesforce y la IA autónoma en la plataforma Einstein 1. Einstein Copilot es nuestra respuesta a un asistente conversacional de IA generativa basado en agentes que utiliza habilidades y acciones para guiar a los usuarios a través de la interacción con Salesforce. Esto introduce un paradigma de desarrollo completamente nuevo para Salesforce, uno en el que estamos creando piezas de funcionalidad más pequeñas que pueden ser orquestadas por Einstein Copilot.

¿Cómo se compara Einstein Copilot con un agente de IA?

Si bien existen varias similitudes entre Copilot y un marco de agente de código abierto, la verdadera diferencia es el acceso de Copilot a toda la plataforma de metadatos de Salesforce. No sólo eso, sino que el alcance es mucho mayor. En lugar de agentes individuales, tienes muchas habilidades , y en lugar de herramientas tienes acciones .

Por ejemplo, si desea actualizar un pedido utilizando Copilot, deberá crear una habilidad de gestión de pedidos. Con otros marcos, necesitarías crear un agente completo para la gestión de pedidos.

Cuando se trata de acciones, usted tiene el poder de la Plataforma Einstein 1 detrás de usted. Podrá utilizar Apex, Flow, las numerosas API de plataforma, SOQL y mucho más para brindarle a su habilidad la capacidad de reunir datos desde cualquier lugar. También tiene acceso directo a los datos de toda la plataforma.

Estudio Einstein Copiloto

Estas habilidades y acciones se reúnen en Einstein Copilot Studio , que le permite ensamblar flujos, indicaciones, Apex y más en colecciones de funcionalidades.

Actualmente existen tres herramientas dentro de Einstein Copilot Studio:

  • Prompt Builder le permite crear plantillas de mensajes utilizando campos de combinación de registros y datos proporcionados por Flow y Data Cloud.
  • Skills Builder le permite ensamblar acciones, como métodos invocables de Apex, flujos y llamadas de API de MuleSoft, y otorgárselas a un agente.
  • Model Builder le permite traer sus propios modelos de IA a Salesforce

Juntos, podrán crear agentes potentes en Salesforce que puedan usar su código para responder preguntas y ayudar a los usuarios.

La capa de confianza de Einstein

Una gran ventaja de Einstein Copilot es Einstein Trust Layer. Trust Layer proporciona un entorno seguro para el procesamiento de datos a través de un modelo de lenguaje grande, lo que garantiza que los datos del usuario permanezcan confidenciales al enmascarar información de identificación personal, verificar la salida en busca de contenido inapropiado y garantizar que no haya persistencia de datos fuera de Salesforce.

Trust Layer se ejecuta a través de un proceso de varios pasos para garantizar que los datos estén fundamentados y enmascarados antes de ser procesados por un proveedor de LLM externo, y proporciona una puerta de enlace segura para interactuar con dichos LLM. Una vez que se ha generado una respuesta, la verifica en busca de contenido tóxico y desenmascara los datos antes de presentárselos al usuario. Puede ver más de cerca la capa de confianza en nuestra publicación de blog Dentro de la capa de confianza de Einstein .

Resumen

La IA autónoma se hace realidad mucho más cerca a través de agentes, lo que marca el comienzo de una nueva era de tecnología en la que el razonamiento y la toma de decisiones se potencian con herramientas y memoria. Einstein Copilot de Salesforce introduce este enfoque impulsado por agentes en la plataforma, ofreciendo un asistente de IA conversacional que guía a los usuarios, aprovecha los vastos metadatos de Salesforce y garantiza la integridad de los datos a través de Einstein Trust Layer. Este cambio transformador significa no sólo una evolución en las interacciones de IA, sino también una promesa de experiencias seguras, eficientes y fluidas para los usuarios de Salesforce.

Sobre el Autor

Stephan Chandler-García es el director de contenido estratégico de Salesforce. Ha estado en el ecosistema de Salesforce durante más de 10 años como cliente, socio e ISV. Puede encontrar a Stephan en persona en un grupo comunitario Trailblazer o en una de nuestras conferencias en todo el mundo. Alternativamente, sígalo en X (Twitter) o GitHub .

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/10/an-introduction-to-autonomous-agents.html

Categories
Developers Tutoriales de Salesforce

Diseñe una API Swagger con código para traer datos a 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.

Diseñe una API de Swagger con código para llevar datos a Salesforce | Blog de desarrolladores de Salesforce

La integración de una API externa con su organización de Salesforce puede ser una tarea sencilla que no requiere código si utilizaCredenciales con nombre y Servicios externos . Deberá crear una credencial con nombre que apunte a la API y configurar un servicio externo en la interfaz de usuario de configuración. La clave aquí es proporcionar una especificación OpenAPI para la API. Si la API no tiene una, puede diseñarla usted mismo manualmente usando YAML o JSON, usar MuleSoft Anypoint Platform o aprovechar las herramientas y el código de código abierto.

En esta publicación, le presentaremos la especificación OpenAPI y Swagger, discutiremos los elementos principales de la especificación y lo guiaremos a través del diseño e implementación de una API con código. Usaremos Node.js y Swagger dentro del marco Fastify para esta tarea. Finalmente, integraremos esta API con Salesforce.

OpenAPI y Swagger

OpenAPI es una especificación para diseñar y construir API. Proporciona una forma estandarizada de definir su API para otros, brindando una forma estructurada que incluye puntos finales, tipos de solicitud/respuesta, definiciones de esquema, métodos de autenticación y más. Las especificaciones de OpenAPI están escritas en formatos YAML o JSON, ambos fáciles de leer y escribir. Esta especificación es ampliamente adoptada y respaldada por una variedad de herramientas, lo que la convierte en una opción popular para diseñar y documentar API. De hecho, si desea importar una API a Salesforce utilizando servicios externos, deberá especificarse con OpenAPI. Además, Salesforce es miembro de la Iniciativa OpenAPI .

Nota: A la fecha de esta publicación, la versión actual de la especificación OpenAPI es 3.1.0.

Swagger , por otro lado, es un conjunto de herramientas ( la mayoría de código abierto ) para implementar la especificación OpenAPI. Incluye la interfaz de usuario de Swagger, que proporciona una interfaz gráfica para comprender y probar las API, y Swagger Codegen, que genera código SDK de cliente y apéndices de servidor a partir de una especificación OpenAPI.

La especificación OpenAPI v2 también se conoce como Swagger, pero su nombre cambió cuando se convirtió en parte de la iniciativa OpenAPI en 2016.

Estructura básica de la especificación OpenAPI

La especificación OpenAPI está organizada en las siguientes secciones clave:

API abierta Define el documento raíz y combina la lista de recursos y la declaración de la API. Requerido
Información Proporciona metadatos sobre la API, como el título, la descripción, los términos del servicio, la información de contacto, etc. Obligatorio
Servidores Especifica una o más URL base para su API, como producción o preparación.
Seguridad Define un esquema de seguridad que pueden utilizar las operaciones de la API.
Caminos Describe las rutas y operaciones disponibles para la API. Cada ruta tiene un método HTTP con los detalles de la operación.
Etiquetas Agrega metadatos a una sola etiqueta que utiliza el objeto de operación.
Documentos externos Proporciona una descripción y una URL para la documentación externa.
Componentes Define un conjunto de objetos reutilizables para diferentes aspectos de la API. Esto puede incluir esquemas, respuestas, parámetros, ejemplos, cuerpos de solicitud, encabezados, esquemas de seguridad, etc.

Para obtener una explicación más detallada de cada sección y sus correspondientes definiciones de objeto, consulte la documentación oficial de la especificación OpenAPI .

Para fines de demostración, crearemos una API para administrar una librería. Esta API contará con dos métodos HTTP: uno para enumerar los libros disponibles y otro para agregar nuevos libros. A continuación, encontrará una definición básica de esta API, centrándose en el método para listar libros ( GET /books ) y sus objetos de respuesta.

Tenga en cuenta que estamos usando tres secciones principales aquí: Información , Rutas y Componentes . Como se mencionó anteriormente, describiremos esta API a medida que la implementemos mediante código. Para este propósito, utilizaremos Fastify y Fastify Swagger.

Fastify y Fastify Swagger

Fastify es un marco web altamente eficiente y flexible para Node.js. Está diseñado para facilitar su uso y ofrecer la máxima velocidad sin comprometer la personalización. Fastify proporciona una base sólida para las aplicaciones web y las API, con funciones como la validación de solicitudes y respuestas basadas en esquemas, ganchos, complementos y registro automático. Una de sus principales ventajas radica en su ecosistema, que incluye numerosos complementos centrales y mantenidos por la comunidad.

Uno de estos complementos es fastify-swagger . Este complemento nos permite ofrecer definiciones de Swagger (OpenAPI v2) u OpenAPI v3, que se generan automáticamente a partir de sus esquemas de ruta o de una definición existente de Swagger/OpenAPI. Además, utilizará fastify-swagger-ui , un complemento que sirve una instancia de Swagger UI dentro de su aplicación.

Nota: La siguiente demostración requiere la instalación de Node.js LTS y, a la fecha de esta publicación de blog, la última versión es v18.16.0.

Comencemos a crear la API de su librería instalando Fastify CLI y generando un nuevo proyecto ejecutando:

Luego, vayamos a la carpeta del proyecto e instalemos las dependencias fastify-swagger y fastify-swagger-ui .

Nota: En esta demostración, se centrará en tres aspectos principales: agregar compatibilidad con Swagger a Fastify, definir rutas de API y delinear esquemas y tipos de respuesta. No explicaremos cómo integrar la API con una base de datos. Si está interesado en explorar la fuente completa del proyecto, está disponible en el repositorio de ejemplos de codeLive.

Agreguemos compatibilidad con Swagger a Fastify editando el archivo app.js , luego importemos Swagger y SwaggerUI y registrémoslos como complementos.

aplicación.js

En la configuración del complemento de Swagger, tiene la opción de pasar toda la definición de especificación de OpenAPI, o puede aprovechar el enfoque dinámico que ofrece el complemento. Para esta demostración, utilizará el enfoque dinámico. Dado que el único campo obligatorio es info , definirá los metadatos de su API allí, además, la sección refResolver se encarga de nombrar las referencias de definición de esquema.

Y para SwaggerUI, solo especifica la ruta donde se alojará el sitio de documentación.

Ahora vamos a crear una carpeta schemas . Aquí es donde definirá los esquemas de su API. Para esta demostración, definirá un esquema book y un esquema error .

esquemas/index.js

Los esquemas representan la estructura de los objetos con los que trabajará, tanto para los cuerpos de solicitud como para los de respuesta. Para la especificación OpenAPI, el complemento Swagger agregará automáticamente estos objetos en el campo components .

Finalmente, definamos las rutas API para GET /books y POST /books usando Fastify. Primero, deberá registrar los esquemas dentro de Fastify. Luego, especificará los objetos de respuesta y solicitud para cada ruta que haga referencia a esos esquemas.

rutas/root.js

{ // … look at the code repository for a complete implementation } ) // POST /books fastify.post( ‘/books’, { schema: { description: "Create a book", body: { $ref: ‘book#’, required: [‘author’, ‘title’] }, response: { 201: { description: ‘Returns the book that has been created’, $ref: ‘book#’ }, 500: { description: ‘Returns an error’, $ref: ‘error#’ } } } }, async (request, reply) => { const { title, author } = request.body const id = randomUUID() const client = await fastify.pg.connect() try { const { rows: books } = await client.query( ‘INSERT INTO books(id, title, author) VALUES($1, $2, $3) RETURNING *’, [id, title, author] ) const [newBook] = books reply.code(201).send(newBook) } catch (error) { reply .status(500) .send({ code: 500, message: `An error ocurred: ${error.message}` }) } finally { client.release() } } ) // GET / fastify.get(‘/’, { schema: { hide: true } }, async function (request, reply) { reply.status(301).redirect(‘/api-docs’) })
} «>

Analicemos la ruta POST /books :

  • La función fastify.post define el método HTTP.
  • El primer argumento especifica la ruta: /books.
  • El segundo argumento especifica el schema , que incluye el body : el objeto de carga útil que espera la API. (Tenga en cuenta que es una referencia al esquema del book ). También incluye varios objetos response para esa ruta, que se asignan a los códigos de estado HTTP correspondientes 201 y 500 .
  • El tercer argumento es la implementación de la ruta. En este caso, está insertando el objeto en la base de datos y devolviendo el nuevo objeto. Si este proceso falla, devolverá un objeto de error. Es importante tener en cuenta que está utilizando los mismos esquemas que definió anteriormente.

Nota: También tiene la opción de excluir ciertas rutas de la documentación pasando hide: true en el objeto de esquema de esa ruta específica, como se demuestra en GET / route.

Su API está lista, así que ejecútela localmente para echar un vistazo a la interfaz de SwaggerUI ejecutando:

Y navegue a http://localhost:3000/api-docs para ver las diferentes rutas, su documentación y tener una forma de probarlas directamente desde la interfaz.

Si desea probarlo e implementarlo en Heroku, asegúrese de actualizar el script start en el archivo package.json con lo siguiente.

Además, asegúrese de tener acceso a una base de datos Heroku PostgreSQL y cree el esquema de la base de datos ejecutando:

<dx-code-block title language code-block="heroku pg:psql

Nota: El archivo database.sql está disponible en el repositorio de ejemplos de codeLive.

Luego puede implementarlo ejecutando:

Si desea ver cómo se ve implementado, vea mi versión que se ejecuta en Heroku .

Integración de una API externa con Salesforce

Ahora que tiene una API de acceso público, integrémosla con Salesforce como un servicio externo.

Primero, deberá crear una credencial con nombre para esta API. En la interfaz de usuario de configuración, vaya a Seguridad > Credenciales con nombre y cree una credencial externa con un protocolo de autenticación personalizado y una entidad de seguridad.

Asegúrese de que la credencial externa tenga una entidad principal a la que le haya asignado permisos en Acceso principal de credenciales externas en su conjunto de permisos.

Luego, cree una credencial con nombre que haga referencia a la credencial externa con la URL que apunta a la API pública.

A continuación, vaya a Integraciones > Servicios externos y agregue un nuevo servicio externo desde una especificación de API, seleccione la credencial con nombre y configure la ruta relativa a la ruta de especificación de OpenAPI. En su demostración, será /api-docs/json .

Después de eso, guarde sus cambios y seleccione las operaciones que desea importar a Salesforce, revise las operaciones y finalice.

Como puede ver, las operaciones que ha seleccionado se han importado correctamente, especificando tanto los parámetros de entrada como los de salida.

Ahora podrá invocar este servicio externo desde Flow, Apex, Einstein Bots y OmniStudio.

Conclusión

OpenAPI y los servicios externos de Salesforce brindan una poderosa combinación para integrar API externas en su organización de Salesforce. Al aprovechar el enfoque estandarizado de OpenAPI para definir las API y la capacidad de Salesforce para consumir fácilmente estas definiciones e invocarlas desde soluciones de código bajo y pro-código, los desarrolladores como usted pueden optimizar el proceso de conexión a servicios externos y mejorar las capacidades de sus aplicaciones de Salesforce.

Si está interesado en obtener más información sobre los servicios externos , puede encontrar una lista de recursos de aprendizaje a continuación, incluidos videos que muestran cómo invocarlos desde Flow y Apex.

Recursos de aprendizaje

Sobre el Autor

Julián Duque es un defensor principal de desarrolladores en Salesforce, donde se enfoca en Node.js, JavaScript y desarrollo backend. Le apasiona la educación y el intercambio de conocimientos y ha estado involucrado en la organización de comunidades tecnológicas y de desarrolladores desde 2001.

Sígalo en Twitter @julian_duque, @julianduque.co en Bluesky social o LinkedIn.

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

Agregar a Slack Suscríbete a RSS

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2023/06/design-a-swagger-api-with-code-to-bring-data-into-salesforce.html

Categories
Developers Tutoriales de Salesforce

Recetas para acceder a los datos de Heroku desde las funciones 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.

Recetas para acceder a los datos de Heroku desde las funciones de Salesforce | Blog de desarrolladores de Salesforce

En marzo de 2022, anunciamos una nueva función, Heroku Data en Salesforce Functions , que le permite acceder de forma segura a Heroku Postgres, Heroku Data para Redis y Apache Kafka en Heroku directamente desde su función. Hoy, lanzamos un nuevo conjunto de recetas en nuestra aplicación de muestra Functions Recipes que le muestra cómo escribir código en Java y Node.js para acceder a los recursos de Postgres y Redis desde una función, y cómo escribir pruebas unitarias para ellos.

Postgres de Heroku

Nodo.js

Para acceder a Heroku Postgres desde una función de Node.js, usamos el paquete node-postgres npm . No hay restricciones para usar uno diferente o depender de un generador de consultas u ORM, si eso es lo que necesita.

Dos cosas a tener en cuenta:

  • Instale la dependencia en su proyecto de funciones ejecutando npm install
  • Acceda al recurso de Heroku Data mediante la variable de entorno DATABASE_URL , que se puede configurar manualmente en la experiencia de desarrollo local, o adjuntando el recurso al entorno informático.

Puede encontrar el código fuente completo de la receta de Postgres con Node.js en el repositorio de GitHub de recetas de funciones.

Java

Para Java, estamos usando el controlador org.postgresql JDBC . Similar a la receta de Node.js, necesitaremos agregar esta dependencia al archivo pom.xml y confiar en DATABASE_URL para crear la conexión a la base de datos.

Puede encontrar el código fuente completo de la receta de Postgres con Java en el repositorio de GitHub de recetas de funciones.

Datos de Heroku para Redis

Nodo.js

Para acceder a Heroku Data for Redis desde una función de Node.js, estamos usando el paquete npm oficial node-redis , pero no hay restricciones para usar cualquier otra biblioteca del ecosistema npm, por ejemplo, el popular cliente ioredis .

Asegúrese de instalar la dependencia de su elección y conéctese usando la variable de entorno REDIS_URL proporcionada por Heroku Data.

Puede encontrar el código fuente completo de la receta de Redis con Node.js en el repositorio de GitHub de recetas de funciones.

Java

Para Java, estamos usando el cliente Jedis , pero puede confiar en cualquier otro cliente de su elección ( vea una lista de clientes disponibles por lenguaje de programación ). Solo asegúrese de hacer referencia a la biblioteca en su archivo pom.xml .

true; connection = new Jedis(URI.create(this.url), sslContext.getSocketFactory(), sslContext.getDefaultSSLParameters(), bogusHostnameVerifier); return connection; } catch (NoSuchAlgorithmException | KeyManagementException e) { throw new RuntimeException(e); } } «>

Puede encontrar el código fuente completo de la receta de Redis con Java en elrepositorio de GitHub de recetas de funciones.

Bono: ¡Exámenes!

¡Hemos implementado una nueva función en la aplicación de ejemplo Recetas de funciones! Ahora podrá ver el código fuente de todos los archivos de prueba dentro de la aplicación. Recuerde, es una buena práctica escribir siempre pruebas para su código. Con estas recetas, ahora tiene una buena manera de ver cómo se pueden probar las funciones y cómo se pueden simular los recursos externos, como las conexiones de la base de datos, utilizando las herramientas recomendadas por el equipo de Funciones de Salesforce.

¿Que sigue?

Obtenga más información sobre las funciones de Salesforce en nuestro Centro de desarrolladores con contenido seleccionado y recursos creados por nuestro equipo y otras personas en Salesforce.

También presenté una serie de videos sobre cómo conectarse a Heroku Data desde Functions, incluido Apache Kafka. Echa un vistazo para obtener más información:

Sobre el Autor

Julián Duque es Defensor Principal de Desarrolladores en Salesforce. Es desarrollador y educador y pasa su tiempo ejecutando juegos TTRPG en línea, además de jugar y entrenar a su Mini Aussie, Cumbia.

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/recipes-for-accessing-heroku-data-from-salesforce-functions.html

Categories
Developers Tutoriales de Salesforce

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

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

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

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

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

Convierta las aplicaciones en experiencias conectadas

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

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

Escale de forma nativa en la plataforma de Salesforce

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

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

Libere el poder de las nubes conectadas

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

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

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

Construye más rápido, a tu manera

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

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

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

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

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

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

Hoja de ruta y próximos pasos

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

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

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

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

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

Sobre los autores

Alba Rivas trabaja como Principal Developer Advocate en Salesforce. Actualmente se enfoca en el desarrollo de Lightning Web Components y Slack. Puedes seguirla en Twitter o Linkedin .

Srini Nirmalgandhi es directora de marketing de productos en Salesforce y se centra en productos para desarrolladores para la plataforma Salesforce. Puede comunicarse con él en Twitter o Linkedin .

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

Agregar a Slack Suscríbete a RSS

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

Categories
Developers Tutoriales de Salesforce

Accediendo a una base de datos PostgreSQL desde Node.js ☁️

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.

Si ha estado siguiendo nuestra serie de blogs, "Introducción a Node.js para desarrolladores de Salesforce", habrá aprendido mucho hasta ahora sobre este popular tiempo de ejecución de JavaScript de código abierto. Nuestras dos publicaciones anteriores discutieron por qué Node.js es importante para los desarrolladores de Salesforce y lo guiaron a través de cómo construir su primera aplicación web usando Node.js.

En esta tercera publicación de la serie, aprenderá cómo acceder a una base de datos PostgreSQL usando Heroku Postgres y Node.js. Al hacerlo, utilizará la base de datos relacional de código abierto más avanzada dentro de sus aplicaciones y podrá sincronizar fácilmente los datos con Salesforce utilizando productos como Heroku Connect .


Arquitectura de invocación

Trabajaremos con la aplicación conference-lwc-app de la publicación anterior del blog , así que asegúrese de leerla. He insertado el código fuente en el repositorio heroku-examples / conference-api en GitHub; puedes clonarlo usando Git ejecutando:

 clon de git https://github.com/heroku-examples/conference-api

Introducción a npm

Antes de comenzar este proyecto, echemos un vistazo a npm , la puerta de entrada al ecosistema de Node y JavaScript. Npm es el registro de paquetes de JavaScript; es donde puede encontrar todas las bibliotecas y herramientas que necesita para desarrollar aplicaciones con JavaScript y Node.js. ¿Sabía que LWC y las CLI de Salesforce y Heroku se publican en npm? ¡Ahora lo sabes!

Con cada instalación de Node.js, también obtienes el npm , que se usa para instalar dependencias en tus proyectos, como en la publicación anterior del blog donde instalamos fastify y fastify-cors . Para este nuevo proyecto, instalaremos pg , el controlador de PostgreSQL para Node.js.

Creando una base de datos de Heroku Postgres

Usaremos una instancia de PostgreSQL de Heroku, lo que significa que no es necesario instalar el servidor en su máquina de desarrollo local. Sin embargo, se recomienda instalar psql , el cliente PostgreSQL, para que pueda interactuar con la base de datos desde la CLI. El Centro de desarrollo de Heroku proporciona instrucciones sobre cómo configurar PostgreSQL en su entorno local.

Para tener una instancia de Heroku Postgres, necesitará una aplicación. Entonces, creemos uno ejecutando el siguiente comando desde la carpeta de su proyecto conference-api

 heroku create <your-app-name>

Nota: asegúrese de reemplazar <your-app-name> con un nombre de aplicación único.

A continuación, agregue un complemento de Heroku Postgres a su aplicación ejecutando:

 complemento heroku: crea heroku-postgresql: hobby-dev

Aquí está utilizando el hobby-dev , que es gratuito y perfecto para el desarrollo, pero tiene algunas limitaciones para los entornos de producción. Si desea obtener más información sobre los planes disponibles, consulte la página de complementos de Heroku Postgres .

Puede confirmar que tiene acceso ejecutando psql través de la CLI de Heroku ejecutando:

 heroku pg: psql

Ahora, puede ejecutar una consulta SQL y hacer algo como SELECT now(); para obtener la fecha y hora actuales.

Nota: Para usar heroku pg:psql , necesitará instalar el cliente PostgreSQL en su máquina local.

La principal ventaja de usar el complemento Heroku CLI pg es que no necesita preocuparse por los detalles de autenticación; la CLI se encargará de ello por usted.

Crear un esquema de base de datos

Se ha conectado a la instancia de PostgreSQL; ahora necesita crear algunas tablas para almacenar información. Echemos un vistazo al esquema de datos que necesita crear para la aplicación conference-api

La API construida en la publicación anterior del blog devuelve una estructura JSON compuesta por sesiones y sus hablantes , así que creemos las tablas de estas dos entidades y su tabla de relaciones usando SQL CREATE TABLE (consulte los documentos para obtener más información).

Copie el siguiente código SQL en un schema.sql en la carpeta de su proyecto. Lo cargará en la base de datos mediante la CLI de Heroku.

 CREAR sesiones de TABLA
( id bigserial NO NULO, carácter del nombre que varía NOT NULL, carácter de descripción que varía NOT NULL, carácter de la habitación que varía NOT NULL, marca de tiempo de fecha y hora con zona horaria NO NULO, LLAVE PRIMARIA (id)
); CREAR altavoces de mesa
( id bigserial NO NULO, carácter del nombre que varía NOT NULL, carácter bio que varía NOT NULL, carácter de correo electrónico que varía NOT NULL, imagen_url carácter variable NOT NULL, LLAVE PRIMARIA (id)
); CREAR TABLA session_speakers
( session_id bigserial NO NULO, speaker_id bigserial NOT NULL
); ALTER TABLE session_speakers AÑADIR CONSTRAINT FK_sessions_TO_sessions_speakers LLAVE EXTRANJERA (session_id) REFERENCIAS sesiones (id); ALTER TABLE session_speakers AÑADIR CONSTRAINT FK_speakers_TO_sessions_speakers LLAVE EXTRANJERA (speaker_id) REFERENCIAS altavoces (id);

archivo schema.sql

Después de guardarlo, puede copiarlo directamente al heroku pg:psql , o puede ejecutar el siguiente comando para importar el archivo completo:

 heroku pg: psql <schema.sql

Nota: El comando anterior solo funcionará en MacOS, Linux o WSL. Si está utilizando Windows, le recomiendo que copie el contenido del archivo en el heroku pg:psql lugar.

Ahora es el momento de la refactorización. En las siguientes secciones, hará dos cosas:

  • Cree un script de migración para cargar los sessions.json en la base de datos.
  • Modifique la /api/sessions para consultar estos datos y devolverlos en formato JSON.

Insertar datos en la base de datos

Su próximo trabajo es insertar los datos del data/sessions.json en la base de datos. ¡Ingrese node-postgres !

Node-postgres, o pg , es el controlador de PostgreSQL para Node.js. Necesita esto para interactuar con la base de datos PostgreSQL de Node.js, y dado que se trata de una dependencia externa, deberá instalarlo en su proyecto usando npm:

 npm install pg

Para conectarse a una base de datos de Postgres, necesitará la información de conexión y las credenciales. Dado que este servicio es administrado por Heroku y está adjunto a su aplicación, puede usar la CLI de Heroku para obtener la DATABASE_URL y almacenarla en un .env ejecutando:

 heroku config --shell> .env

Una aplicación de Heroku sigue la metodología de aplicación de 12 factores , que establece que cualquier valor de configuración debe almacenarse en el entorno . Es por eso que la aplicación usa un archivo .env esos archivos se utilizan para configurar las variables de entorno localmente por proyecto.

Nota: No olvide agregar el .env a su .gitignore . Esto evitará que sus credenciales se filtren a su sistema de control de versiones.

Utilizará el dotenv para cargar el .env automáticamente cada vez que ejecute un script. Asegúrese de instalar esto también ejecutando:

 npm instalar dotenv

Después de esto, podrá acceder a las variables de entorno almacenadas en el .env accediendo a la process.env en Node.js.

Ahora, creemos una instancia del cliente PostgreSQL usando la cadena de conexión del entorno:

 // Carga el archivo `.env`
require ('dotenv'). config () // Requiere el cliente PostgreSQL
const {Cliente} = require ('pg') // Crea una instancia de cliente
cliente const = nuevo cliente ({ connectionString: process.env.DATABASE_URL, ssl: { rechazar Sin autorización: falso }
})

Nota: Dado que se está conectando a la base de datos localmente y en Heroku, se recomienda configurar el rejectUnauthorized propiedad a false para evitar problemas con el certificado TLS durante la conexión PostgreSQL.

La creación de una Client es buena para conexiones únicas. Para esta sección, vamos a crear un migrate.js script que va a cargar el sessions.json archivo en la base de datos. Los dos métodos que utilizará aquí son: client.connect() para establecer una conexión a la base de datos y client.query para realizar consultas SQL.

 esperar client.connect ()
...
aguardar cliente.query (` INSERT INTO sesiones (id, nombre, descripción, sala, fecha y hora VALORES ($ 1, $ 2, $ 3, $ 4, $ 5)
`, [sessionId, sessionName, description, room, dateTime])

Echemos un vistazo al script migrate.js Puede copiarlo en el data de su proyecto.

 require ('dotenv'). config () // Requiere cliente PostgreSQL
const {Cliente} = require ('pg') // Cargar sesiones desde un archivo JSON
ruta constante = require ('ruta')
sesiones const = require (path.join (__ dirname, './sessions.json')) // Crea un cliente de base de datos
cliente const = nuevo cliente ({ connectionString: process.env.DATABASE_URL, ssl: { rechazar Sin autorización: falso }
}) función asíncrona migrate () { tratar { // Conectarse a la base de datos esperar client.connect () // Recorre cada sesión para (sesión const de sesiones.datos) { // Insertar sesión en la base de datos const {id: sessionId, name: sessionName, description, room, dateTime} = sesión console.log (`Creando sesión: $ {sessionName}`) aguardar cliente.query (` INSERT INTO sesiones (id, nombre, descripción, sala, fecha y hora) VALORES ($ 1, $ 2, $ 3, $ 4, $ 5) SOBRE EL CONFLICTO NO HACER NADA `, [sessionId, sessionName, description, room, dateTime] ) .catch (err => console.error (err)) // Comprueba si la sesión tiene ponentes if (Array.isArray (session.speakers)) { // Bucle a través de cada altavoz para (const speaker of session.speakers) { // Insertar altavoz en la base de datos const {id: speakerId, name: speakerName, bio, email, pictureUrl} = speaker console.log (`Añadiendo altavoz: $ {speakerName}`) aguardar cliente.query (` INSERT INTO Speakers (id, name, bio, email, picture_url) VALORES ($ 1, $ 2, $ 3, $ 4, $ 5) SOBRE EL CONFLICTO NO HACER NADA `, [speakerId, speakerName, bio, email, pictureUrl] ) // Agregar relación entre la sesión y el orador aguardar cliente.query (` INSERT INTO session_speakers (session_id, speaker_id) VALORES ($ 1, $ 2) SOBRE EL CONFLICTO NO HACER NADA `, [sessionId, speakerId] ) } } } console.log ('Datos migrados correctamente') process.exit (0) } atrapar (err) { console.error (err) process.exit (1) }
} // Ejecuta la migración
emigrar()

Consultar datos de la base de datos

En el script de migración, usó el Client para realizar la conexión a la base de datos. Tiene sentido en ese contexto porque será solo una conexión, pero en un servidor web real como la API que está escribiendo, es mejor usar un grupo de conexiones para manejar mejor los recursos.

Va a volver a escribir la /api/sessions ruta en server.js utilizar un cliente Pool en su lugar. Los parámetros de las conexiones son los mismos que con el Client . También puede definir el número máximo de clientes en el grupo, pero usemos el predeterminado para este ejemplo. Si desea obtener más información sobre la Pool , consulte la documentación.

 const {Pool} = require ('pg')
const client = new Pool ({ connectionString: process.env.DATABASE_URL, ssl: { rechazar Sin autorización: falso }
})
...
const {filas} = aguardar cliente.query (`SELECCIONAR ID, nombre, descripción DE las sesiones`)

Ahora puede realizar consultas utilizando el cliente. Esto podría ser algo simple como un SELECT normal de una tabla específica o algo más complejo como la consulta que necesita para la ruta de la API. Como puede ver, aquí estamos aprovechando el poder de PostgreSQL para construir objetos JSON a partir de una consulta usando las funciones JSON (compatibles con Postgres 9.6) y disponibles en Heroku Postgres.

 fastify.get ('/ api / sessions', async (solicitud, respuesta) => { const {filas} = aguardar cliente.query (` SELECCIONAR json_build_object ( 'id', t.id, 'nombre', t.nombre, 'descripción', t.description, 'habitación', t.room, 'dateTime', t.datetime, 'altavoces', json_agg (json_build_object ( 'id', s.id, 'nombre', s.nombre, 'bio', s.bio, 'pictureUrl', s.picture_url )) ) como sesión DESDE sesiones t INNER JOIN session_speakers ts ON ts.session_id = t.id INNER JOIN oradores s ON ts.speaker_id = s.id GRUPO POR t.id PEDIR POR t.id `) devolver filas
})

Y eso es; después de volver a escribir la ruta, lo último que deberá hacer es confirmar sus cambios en Git e implementarlos en Heroku ejecutando:

 git push heroku principal

Ahora ha aprendido cómo acceder a una base de datos PostgreSQL desde Node.js usando node-postgres. Asegúrese de consultar la documentación para conocer más funciones y opciones de configuración.

Además, si prefiere un formato de video, eche un vistazo a Using PostgreSQL with Node.js , un video que publicamos en nuestro canal de YouTube de Salesforce Developers (¡y no olvide suscribirse!).

¿Que sigue?

En la siguiente y última publicación del blog de nuestra serie Node.js, aprenderá cómo integrar esta aplicación Node.js con una aplicación Salesforce usando Heroku Connect.

Sobre el Autor


Julián Duque es un defensor de desarrolladores líder en Salesforce. Si quieres ponerte en contacto con él, simplemente ejecuta:

 npx julianduque

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://developer.salesforce.com/blogs/2021/11/accessing-a-postgresql-database-from-node-js.html

Categories
Developers Tutoriales de Salesforce

Slack 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.

Con la adquisición de Slack por parte de Salesforce, Salesforce está logrando un objetivo importante: ayudar a las personas a trabajar desde cualquier lugar en este nuevo mundo totalmente digital. Los desarrolladores de Salesforce tienen la oportunidad de estar a la vanguardia de este mundo utilizando Slack para mostrar la información que sus clientes necesitan en el momento que la necesitan.

Los desarrolladores pueden ampliar sus aplicaciones y permitir que los usuarios utilicen Slack como su centro de colaboración y actúen sobre los datos de Salesforce y otros sistemas comerciales. Si se pregunta qué puede construir con Slack y Salesforce juntos, y cómo hacerlo, esta publicación es para usted. Exploraremos cómo crear aplicaciones de Slack integradas con datos de Salesforce.

Puede pensar en Slack como una aplicación de mensajería. Sin embargo, lo que me entusiasma como desarrollador de Salesforce es la plataforma Slack, que le permite ampliar, expandir y automatizar el trabajo de su organización.

¿Qué es una aplicación de Slack?

Slack permite a los desarrolladores crear experiencias personalizadas mediante el uso de las API de Slack. Se denominan "aplicaciones de Slack" y tienen varios componentes:

  • Una configuración de la aplicación (esta configuración se realiza en api.slack.com ) que define cómo su aplicación se comunicará con Slack
  • Un servicio que maneja la realización de llamadas a la API y puede recibir y enrutar eventos; puede utilizar la infraestructura de su elección para alojar este servicio
  • Una interfaz de usuario de Slack, que podría estar en un mensaje de Slack, en la página de inicio de la aplicación o incluso en un modo emergente.

Puede escribir aplicaciones de Slack solo para su equipo o publicarlas en el directorio de aplicaciones de Slack para permitir que otros las instalen. Al crear aplicaciones de Slack, puede escribir código en el idioma que elija para integrarlo con varios servicios de terceros, incluido Salesforce.

Crear una aplicación de Slack

El primer paso para integrar Slack con Salesforce implica crear una aplicación Slack. Puedes hacer esto manualmente o usando un YML de manifiesto (consulta la documentación de la API de Slack ). Usar el manifiesto YML es la forma recomendada de comenzar y simplifica la clonación de sus aplicaciones de producción para probar las necesidades o corregir errores.

Nota: deberá iniciar sesión en su cuenta de Slack para crear una aplicación de Slack. Si aún no tiene el espacio de trabajo de Slack, puede registrarse de forma gratuita .

Una vez que haya creado su aplicación Slack, puede usar el panel para ver o configurar:

  • Credenciales de la aplicación que permiten que sus aplicaciones accedan a las API de Slack. Estas credenciales deben almacenarse de forma segura y protegida.
  • Una interfaz de usuario para configurar los alcances de la aplicación de Slack, que rigen las capacidades y los permisos de la aplicación.
  • URL de webhook que le permiten conectarse a Slack a través de HTTP POST a la URL
  • Configuraciones relacionadas con la aplicación, como:
    • Comandos y atajos de barra: puede configurar su aplicación para que responda a la entrada del usuario usando el botón del rayo en el redactor (un atajo) o un comando basado en texto que comienza con / (un comando de barra) . Piense en / giphy para buscar un GIF o / polly para lanzar una encuesta.
    • URL para suscribirse a la API de eventos de Slack . Las aplicaciones de Slack pueden suscribirse a varias actividades en Slack, como el canal creado, el canal archivado y muchos más tipos de eventos .
    • Desarrollo de la marca de la aplicación, miniaturas y descripciones
    • Distribución de la aplicación: esto es aplicable si está publicando su aplicación en el directorio de aplicaciones de Slack.

¿Qué es un bot de Slack?

Un bot de Slack es un usuario único de su aplicación Slack que puede esperar su comando, interpretar su comando y realizar acciones, como encontrar lo que necesita.

Todas las solicitudes a las API de Slack deben firmarse con un token. Slack tiene diferentes tipos de tokens como se explica a continuación:

    • Token de bot: los tokens de bot representan un bot asociado con la aplicación instalada en un espacio de trabajo. Los tokens de bot están vinculados a su aplicación. Dado que actuar de forma independiente permite que su aplicación permanezca instalada, incluso cuando un usuario de instalación está desactivado, usar tokens de bot suele ser lo mejor.
    • Token de usuario: los tokens de usuario representan miembros del espacio de trabajo. Se emiten para el usuario que instaló la aplicación y para los usuarios que autentican la aplicación. Puede utilizar estos tokens para realizar acciones en nombre de los usuarios.
    • Tokens de nivel de aplicación: los tokens de nivel de aplicación representan su aplicación en todas las organizaciones, incluidas las instalaciones de todos los usuarios individuales en todos los espacios de trabajo de una organización determinada.

La imagen a continuación muestra el panel donde creará y configurará una aplicación de Slack.

Creación y configuración de aplicaciones de Slack.

Conexión a Slack desde Salesforce

Un patrón típico que los desarrolladores necesitan al integrar Slack y Salesforce es un método para enviar mensajes (que contienen datos de Salesforce) desde Salesforce sobre un evento o una acción en Salesforce.

Por ejemplo, imaginemos que desea crear una integración que notifique automáticamente a su equipo de marketing en Slack cada vez que se cree un nuevo cliente potencial en Salesforce.

El caso de uso anterior se puede resolver utilizando uno de los enfoques que se enumeran a continuación:

  1. Usando herramientas de bajo código como Mulesoft Composer: puede aprender más sobre esto usando este módulo de inicio de ruta
  2. Uso de servicios externos y flujos de Salesforce: Slack proporciona especificaciones de OpenAPI que se utilizan para generar acciones de flujo en Salesforce para invocar las API web de Slack.
  3. Usar un flujo o desencadenador de Salesforce llamando a un método de Apex que invoca Webhooks entrantes y varias API web de Slack

Todos los enfoques anteriores requieren primero la creación de una credencial con nombre para autorizar que la aplicación Slack se conecte a Salesforce. Consulte las instrucciones paso a paso para configurar credenciales con nombre y un proveedor de autenticación.

A continuación, se muestra una implementación de solución de alto nivel para el caso de uso anterior.

Envío de mensajes de Slack desde Salesforce al crear un cliente potencial.

Generador de flujo de trabajo de Slack

Otra interesante herramienta de bajo código de Slack es Workflow Builder , que te permite automatizar procesos de rutina en flujos de trabajo en tu espacio de trabajo de Slack . Puede invocar un flujo de trabajo de Slack desde Salesforce invocando la URL de webhook de solicitud , que Slack genera automáticamente.

Conexión a Salesforce desde Slack

Otro patrón típico que los desarrolladores necesitan al crear aplicaciones de Slack integradas con Salesforce es la capacidad de la aplicación para iniciar sesión en Salesforce, obtener datos y realizar operaciones DML en datos de la interfaz de Slack.

Por ejemplo, imaginemos que sus usuarios necesitan una aplicación de Slack que se pueda instalar en un espacio de trabajo de Slack para realizar las siguientes funciones:

  • Inicie sesión en Salesforce desde Slack mediante un comando de barra (escribiendo / sf-login ) en Slack. Tras la ejecución del comando, los usuarios son enviados a la página de inicio de sesión de Salesforce para usar sus credenciales de Salesforce para autenticarse en Salesforce.
  • Encuentre casos de Salesforce dentro de Slack mediante un comando de barra (escribiendo / show-my-cases ) en Slack.
  • Actualice el estado del caso directamente desde Slack abriendo un modal al hacer clic en el registro del caso.
  • Tome medidas para actualizar el caso en Salesforce a través de un botón en la interfaz modal.

Aquí está la arquitectura de alto nivel para que la aplicación Slack sea compatible con el caso de uso anterior.

Aplicación de Slack que se conecta a Salesforce.

Slack ofrece a los desarrolladores la flexibilidad de elegir su infraestructura y lenguaje preferidos para crear aplicaciones de Slack. Existen SDK de código abierto para Java, JavaScript y Python conocidos como Bolt , que Slack proporciona y mantiene para facilitar el desarrollo de aplicaciones y cumplir con los estándares de seguridad.

Como desarrollador de Salesforce, estoy más familiarizado con JavaScript, por lo que elegiría el SDK de JavaScript de Slack. Pero puede elegir el SDK que desee según su comodidad con el idioma. Ahora, si eres aventurero y quieres aprender un nuevo idioma en el proceso de creación de tu nueva aplicación Slack, ¡adelante!

Para alojar aplicaciones de Slack, prefiero usar Heroku. El tiempo de ejecución elástico de Heroku, la disponibilidad de paquetes de compilación para varios lenguajes de código abierto y la experiencia de desarrollador de primera clase lo hacen ideal para alojar y escalar aplicaciones de Slack.

Para nuestro caso de uso anterior, la aplicación Slack alojada en Heroku actúa como un puente (intermediario) entre Salesforce y Slack y conecta ambos sistemas. Lo importante a observar en el diagrama de arquitectura anterior es que Salesforce es la única fuente de verdad para todos los datos.

Autorización y autenticación a Salesforce

Para iniciar sesión y obtener una sesión de Salesforce de forma segura, deberá utilizar una aplicación conectada en Salesforce. Puede configurar los secretos en las variables de entorno de la aplicación Heroku. Si está utilizando Node.js, puede aprovechar una biblioteca de código abierto como JSForce para autenticar, consultar y actualizar registros en Salesforce.

Si está obteniendo datos de Salesforce a través de la aplicación Heroku como usuario de integración, puede aprovechar el flujo de JWT de servidor a servidor para administrar la autenticación. Con este flujo, puede evitar tener que pedir a todos los usuarios que pasen por el flujo de OAuth.

Si necesita conservar el contexto de usuario de Salesforce, proporcione un comando de barra inclinada para que los usuarios realicen un baile de OAuth con Salesforce.

Autorización y autenticación en Slack

Gracias al SDK de Bolt , la mayor parte de la autenticación y autorización se proporciona de forma inmediata. Sin embargo, una cosa que el SDK no incluye es la implementación de la base de datos para preservar los tokens. Puede usar Heroku Postgres con conexiones de base de datos cifradas o cualquier otro complemento de Heroku equivalente para implementar esto en sus aplicaciones.

SDK de Bolt

Las aplicaciones de Slack tienen requisitos especiales para mantener la aplicación segura y funcionando. Algunos de los importantes incluyen:

Bolt SDK proporciona estas funciones listas para usar, lo que facilita este paso a los desarrolladores. Aparte de estos, Bolt SDK también simplifica OAuth, proporciona métodos para API web y API de eventos, y mucho más.

Kit de bloques

Block Kit proporciona a los desarrolladores componentes de IU utilizando un formato de datos JSON. Es único porque no tiene que escribir marcado HTML o CSS, a diferencia de las aplicaciones web. Si eres un desarrollador centrado en back-end, ¡no puede ser más fácil que esto!

Con el generador de interfaz de usuario del kit de bloques , los desarrolladores, los especialistas en marketing y los diseñadores pueden diseñar y crear prototipos de bloques de mensajes. The Builder también puede enviar los mensajes directamente a su espacio de trabajo de Slack.

A continuación, se muestra un ejemplo de JSON para el mensaje de IU de bloque que muestra casos recientes de Salesforce. Para ver esto en acción, simplemente copie este JSON y péguelo en Block Kit UI Builder .

 { "bloques": [ { "tipo": "sección", "texto": { "tipo": "mrkdwn", "text": "Encontramos * 5 nuevos casos * asignados a usted hoy" } }, { "tipo": "divisor" }, { "tipo": "sección", "texto": { "tipo": "mrkdwn", "text": "* <https://cmpaura-dev-ed.lightning.force.com/lightning/r/Case/5003t00001Ah6vmAAB/view|Case - 00001002> * nn * Asunto *: Buscando orientación sobre la instalación del cableado eléctrico para GC5060 " } }, { "tipo": "contexto", "elementos": [ { "type": "plain_text", "emoji": cierto, "text": "Contacto: Stella Pavlova" } ] }, { "tipo": "divisor" }, { "tipo": "sección", "texto": { "tipo": "mrkdwn", "text": "* <https://cmpaura-dev-ed.lightning.force.com/lightning/r/Case/5003t00001Ah6w0AAB/view|Case - 00001002> * nn * Asunto *: Las pautas de mantenimiento para el generador no están claras" } }, { "tipo": "contexto", "elementos": [ { "type": "plain_text", "emoji": cierto, "text": "Contacto: Edna Frank" } ] }, { "tipo": "divisor" }, { "tipo": "sección", "texto": { "tipo": "mrkdwn", "text": "* <https: //cmpaura-dev-ed.lightning.force.com/lightning/r/Case/5003t00001Ah6w8AAB/view | Case - 00001024> * nn * Asunto *: Problema de diseño con rotor mecánico" } }, { "tipo": "contexto", "elementos": [ { "type": "plain_text", "emoji": cierto, "text": "Contacto: Lauren Boyle" } ] }, { "tipo": "divisor" }, { "tipo": "acciones", "elementos": [ { "tipo": "botón", "texto": { "type": "plain_text", "emoji": cierto, "text": "Próximos 2 resultados" }, "valor": "click_me_123" } ] } ]
}

El bloque JSON produce un componente de interfaz de usuario, como se muestra a continuación.

Casos recientes de Salesforce en Slack con Block UI utilizados para construir el mensaje.

Directorio de aplicaciones de Slack

Al igual que Salesforce AppExchange (donde los desarrolladores pueden distribuir aplicaciones de Salesforce), Slack permite a los desarrolladores crear y distribuir sus aplicaciones de Slack a través del directorio de aplicaciones de Slack .

Herramientas para desarrolladores de Slack

Slack proporciona una serie de útiles herramientas para desarrolladores . Mi favorito personal es la aplicación de herramientas Slack Developer. Es una aplicación de Slack que se puede instalar en cualquier espacio de trabajo y permite a los desarrolladores inspeccionar el código detrás de un mensaje de Slack, así como explorar los documentos de la API de Slack dentro de Slack.

Lo que está por venir para los desarrolladores con Salesforce y Slack

Hemos estado ocupados investigando lo que podría significar unir a Slack y Salesforce desde que Salesforce firmó un acuerdo definitivo para adquirir Slack. Sin embargo, dado que la transacción aún no se completó, nuestros equipos tuvieron que trabajar de forma independiente. Durante este tiempo, hemos estado planificando servicios que hacen que las aplicaciones que integran Slack y Salesforce sean más fáciles de implementar. También hemos estado sentando las bases para la experiencia Slack-First Customer 360 que ahora lanzamos. Con la adquisición ahora completa, los equipos de Slack y Salesforce pueden trabajar juntos para ejecutar los planes, lo que significa que tanto los desarrolladores de Slack como los de Salesforce tienen mucho que esperar en las próximas semanas y meses.

Conclusión

Combinando las capacidades de bajo código de Salesforce, el tiempo de ejecución elástico de Heroku y la interfaz de usuario, los conjuntos de herramientas para desarrolladores y los servicios API de Slack, los desarrolladores de Salesforce se encuentran en una posición única para crear aplicaciones que pueden proporcionar una experiencia conectada para empleados y clientes.

Finalmente, existe la oportunidad de integrar sus herramientas de desarrollo favoritas, como GitHub, servidores de integración continua, IDE y herramientas de línea de comandos (CLI) con Slack para aumentar su productividad diaria.

Para comenzar con su viaje de desarrollo de Slack, visite los recursos a continuación en los documentos de Trailhead y Slack:

Sobre el Autor

Pegue lo siguiente en Slack Block Kit Builder para obtener más información sobre Mohith Shrivastava .

 { "bloques": [ { "tipo": "sección", "texto": { "tipo": "mrkdwn", "text": "* Mohith Shrivastava * trabaja como promotor principal de desarrolladores en Salesforce. Mohith es * Desarrollador certificado por Slack *. Actualmente se centra en" } }, { "tipo": "sección", "texto": { "tipo": "mrkdwn", "text": "• Integración de Slack y Salesforce n • Heroku n • Herramientas para desarrolladores" } }, { "tipo": "sección", "texto": { "tipo": "mrkdwn", "text": "Puedes seguirlo en Twitter * <https://twitter.com/msrivastav13 | @ msrivastav13> *" } } ]
}

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

Categories
Developers Salesforce

Preguntas de la entrevista en profundidad sobre los objetos y la relación de Salesforce

P. ¿Podemos establecer el campo propietario en el objeto de detalle?

El campo Propietario del objeto de detalle no está disponible y se establece automáticamente en el propietario de su registro maestro asociado.

P. ¿Podemos permitir la re-crianza en la relación maestro-detalle de forma predeterminada?

De forma predeterminada, los registros no se pueden volver a crear en relaciones maestro-detalle . Sin embargo, los administradores pueden permitir que los registros secundarios en las relaciones maestro-detalle en objetos personalizados se vuelvan a comparar con diferentes registros principales seleccionando la opción Permitir reparenting en la definición de la relación maestro-detalle.

P. ¿Puede el objeto estándar estar en el lado de los detalles de la relación con el objeto personalizado?

El objeto estándar no puede estar en el lado de los detalles de una relación con un objeto personalizado.

P. ¿Para qué objetos estándar podemos tener una relación maestro-detalle?

No podemos crear una relación maestro-detalle en la que los objetos Usuario o Cliente potencial sean el maestro.

P. ¿Cuál es el efecto del objeto maestro primario en el objeto de unión?

  • Apariencia: las páginas de edición y detalle del objeto de unión utilizan el color y cualquier icono asociado del objeto principal principal.
  • Propiedad del registro: los registros del objeto de unión heredan el valor del campo Propietario de su registro maestro principal asociado . Debido a que los objetos en el lado del detalle de una relación no tienen un campo Propietario visible, esto solo es relevante si luego borra ambas relaciones maestro-detalle en su objeto de unión.
  • División: si su organización utiliza divisiones para segmentar datos, los registros de objeto de unión heredan su división de su registro maestro principal asociado. De manera similar a la propiedad del registro, esto solo es relevante si luego elimina ambas relaciones maestro-detalle.

P ¿Qué sucede si elimina el detalle principal principal o lo convierte en una búsqueda en muchos -many?

Si elimina la relación principal principal-detalle o la convierte en una relación de búsqueda, el objeto principal secundario se convierte en principal.

P. ¿Podemos tener una relación de búsqueda de maestro a objeto de unión para muchas a muchas relaciones?

P. ¿Podemos convertir maestro-detalle en una relación de búsqueda?

Puede convertir una relación maestro-detalle en una relación de búsqueda siempre que no existan campos de resumen acumulados en el objeto maestro.

P. Cuando convertimos la relación maestro-detalle en la búsqueda de un objeto personalizado en el lado del detalle, ¿qué sucede con el OWD de ese objeto?

Al convertir una relación maestro-detalle en una búsqueda de un objeto personalizado en el lado «detalle», cambia el valor predeterminado de toda la organización para el objeto a lectura / escritura pública .

P. ¿Podemos convertir la búsqueda en una relación de detalle maestro?

Puede convertir una relación de búsqueda en una relación maestro-detalle si el campo de búsqueda en todos los registros contiene un valor.

P. Cuando convertimos la búsqueda en la relación maestro-detalle de un objeto personalizado en el lado de los detalles, ¿qué sucede con el OWD de ese objeto?

La conversión de una búsqueda en una relación maestro-detalle cambia el valor predeterminado de toda la organización a Controlado por los padres y el modelo de uso compartido se actualiza a lectura / escritura pública.

P. ¿Explica las relaciones con uno mismo?

Puede crear una relación de un objeto a sí mismo, pero debe ser una relación de búsqueda y un solo registro no se puede vincular a sí mismo. Sin embargo, un registro puede relacionarse indirectamente consigo mismo.

Por ejemplo, la campaña Promoción de vacaciones puede tener la campaña de correo directo seleccionada en la relación de búsqueda y la campaña de correo directo puede tener seleccionada la campaña de promoción de vacaciones en la relación de búsqueda.

P: ¿Cuáles son las consideraciones para la relación maestro-detalle multinivel?

Para crear relaciones maestro-detalle multinivel, necesita el permiso de usuario «Personalizar aplicación».

Puede tener hasta tres niveles de detalle personalizados.

Un objeto puede aparecer una vez en relaciones maestro-detalle multinivel.

Las relaciones maestro-detalle multinivel no admiten transferencias de división.

Puede utilizar relaciones maestro-detalle de varios niveles en tipos de informes personalizados.

Los tipos de informes personalizados creados para relaciones maestro-detalle multinivel cuentan para el límite de tipos de informes personalizados de la organización y no se generan informes si se excede este límite.

P. Si el objeto personalizado ya contiene los datos, ¿cómo podemos establecer una relación maestro-detalle?

No puede crear una relación maestro-detalle si el objeto personalizado ya contiene datos. Sin embargo, puede crear la relación como una búsqueda y luego convertirla en detalles maestros si el campo de búsqueda en todos los registros contiene un valor.

P: ¿Puede el objeto de unión personalizado convertirse en maestro en una relación maestro-detalle multinivel?

El objeto de unión personalizado no puede convertirse en el objeto maestro en una relación maestro-detalle de varios niveles.

P. ¿Podemos eliminar el objeto personalizado en el lado maestro de la relación maestro-detalle?

No puede eliminar un objeto personalizado si está en el lado principal de una relación principal-detalle.

P. ¿Qué sucede si eliminamos un objeto personalizado en el lado del detalle de la relación maestro-detalle?

Si elimina un objeto personalizado que está en el lado del detalle de una relación maestro-detalle, la relación se convierte en una relación de búsqueda.

Eliminar un registro de detalle lo mueve a la Papelera de reciclaje y deja el registro maestro intacto

P. Si borra un registro de detalle y luego borra el registro maestro en la relación maestro-detalle. Más tarde, recupera el registro maestro y luego, ¿qué sucede?

Si borra un registro de detalle y luego, por separado, borra su registro maestro, no puede recuperar el registro de detalle, ya que ya no tiene un registro maestro con el que relacionarse.

P. ¿Qué sucede cuando se elimina cualquiera de los objetos maestros en muchas o muchas relaciones?

Los registros de objetos de unión se eliminan cuando se elimina cualquier registro maestro asociado y se coloca en la Papelera de reciclaje.

Si se eliminan ambos registros maestros asociados, el registro del objeto de unión se elimina de forma permanente y no se puede restaurar.

P. En muchas a muchas relaciones, ¿qué objeto maestro controla el uso compartido del objeto de unión?

El acceso compartido a un registro de objeto de unión está determinado por el acceso compartido de un usuario a los registros maestros asociados y la opción Configuración de uso compartido en el campo de relación.

P. ¿Qué sucede cuando intentamos eliminar el registro principal si hay más de 200 objetos de unión asociados a él?

En una relación de varios a varios, un usuario no puede eliminar un registro principal si hay más de 200 registros de objetos de unión asociados a él.

si el objeto de unión tiene un campo de resumen acumulativo que se acumula en el otro padre. Para eliminar este objeto, elimine manualmente los registros del objeto de unión hasta que el recuento sea inferior a 200.

P. ¿Podemos crear un resumen acumulativo en el maestro secundario en una relación de muchos a muchos?

Los campos de resumen acumulados que resumen los datos del objeto de unión se pueden crear en ambos objetos maestros.

Puede definir desencadenadores de Apex tanto en objetos maestros como en el objeto de unión.

P. ¿Puede el objeto de unión estar en el lado maestro de cualquier relación maestro-detalle?

Un objeto de unión no puede estar en el lado principal de otra relación principal-detalle.

P ¿Cuáles son las consideraciones al eliminar a un padre?

No se permite eliminar un registro que tiene registros secundarios, excepto cuando los registros secundarios se eliminan temporalmente (se envían a la Papelera de reciclaje). Si todos los registros secundarios de un registro principal se eliminan temporalmente, el registro principal se elimina. Además, todos los elementos secundarios eliminados temporalmente se eliminan de la papelera de reciclaje y se eliminan permanentemente.

P. En el escenario donde el campo A es la búsqueda de destino del campo B, que a su vez es la búsqueda de destino del campo C, puede especificar que A puede eliminar B, pero B no se puede eliminar porque está en una relación con C. Si intentas borrar A, ¿qué pasará?

Si intenta eliminar A, obtendrá un error que indica que B no se puede eliminar porque está vinculado a C.

P. Si se elimina el registro principal en la relación de búsqueda, ¿qué se muestra en el campo de seguimiento del historial del registro secundario?

Si se elimina el registro principal en una relación de búsqueda, el seguimiento del historial de campo para el registro secundario no registra la eliminación. Por ejemplo, si se elimina una cuenta principal, la lista relacionada Historial de la cuenta de la cuenta secundaria no muestra la eliminación.

P. ¿Qué tipo de relación admiten los objetos externos?

Solo las relaciones de búsqueda, búsqueda externa y búsqueda indirecta están disponibles para objetos externos. No se admiten otros tipos de relaciones.

P. ¿Está disponible la eliminación en cascada en los objetos externos?

La eliminación en cascada no está disponible para las relaciones de objetos externos.

P. ¿Qué sucede con los informes personalizados cuando se convierte una relación de búsqueda a detalle maestro o viceversa?

Convertir una relación de búsqueda a maestro-detalle o viceversa puede hacer que los informes personalizados existentes se vuelvan inutilizables debido a los diferentes tipos de informes estándar disponibles para cada tipo de relación.

Le recomendamos que pruebe sus informes personalizados inmediatamente después de convertir el tipo de relación. Si revierte su relación al tipo original, los informes se restauran y se pueden volver a utilizar.

P: ¿Existe algún objeto estándar que también actúe como objeto de unión?

Sí, hay algunos objetos estándar que actúan como un objeto de unión.

Por ejemplo, el objeto estándar OpportunityContactRole actúa como un objeto de unión entre los objetos Opportunity y Contact.

P. ¿Qué son los objetos externos?

Los objetos externos son similares a los objetos personalizados en Salesforce, pero los datos del registro de objetos externos se almacenan fuera de su organización de Salesforce. Los datos almacenados en sistemas externos como Oracle, SAP, Heroku Postgres, etc. Cada objeto externo está asociado con una definición de fuente de datos externa en su organización de Salesforce. Una fuente de datos externa especifica cómo acceder a un sistema externo.

  • Cada organización puede tener hasta 100 objetos externos . Los objetos externos no cuentan para la cantidad de objetos personalizados.

Al usar objetos externos, no tiene que administrar una copia de esos datos en Salesforce, por lo que no está desperdiciando almacenamiento y recursos manteniendo los datos sincronizados y puede acceder a los datos a pedido.

Los objetos externos se utilizan mejor cuando tiene una gran cantidad de datos que no puede o no desea almacenar en su organización de Salesforce, y necesita usar solo una pequeña cantidad de datos a la vez.

cada objeto externo termina con » __x «.

EJEMPLO

Si sincroniza el objeto Cuenta de la organización del proveedor, la organización del suscriptor crea:

  • Un objeto externo con el nombre de API Account__x
  • Campos personalizados, incluido uno con el nombre de API Name__c

Si sincroniza el objeto CustObj__c de la organización del proveedor, la organización del suscriptor crea:

  • Un objeto externo con el nombre de API CustObj_c__x
  • Campos personalizados, incluido uno con el nombre de API Name__c

Si el objeto de la organización del proveedor tiene un campo personalizado, la organización del suscriptor crea el campo personalizado en el objeto externo equivalente, por ejemplo:

  • MyCustField_c__c
  • MyOtherCustField_c__c

Si sincroniza el objeto externo Account__x de la organización del proveedor, la organización del suscriptor crea:

  • Un objeto externo con el nombre de API Account_x__x
  • Campos personalizados, incluido uno con el nombre de API Name_c__c

Los objetos externos están disponibles con Salesforce Connect y Files Connect . Cada objeto externo está asociado con una definición de fuente de datos externa en su organización de Salesforce.

P. ¿Qué es una fuente de datos externa?

Una fuente de datos externa especifica cómo acceder a un sistema externo . Salesforce Connect utiliza fuentes de datos externas para acceder a los datos almacenados fuera de su organización de Salesforce.

Files Connect utiliza fuentes de datos externas para acceder a sistemas de contenido de terceros . Las fuentes de datos externas tienen objetos externos asociados, que sus usuarios y la Plataforma Lightning utilizan para interactuar con los datos y el contenido externos.

Al acceder a los datos de registro a pedido, los objetos externos siempre reflejan el estado actual de los datos externos. No tiene que administrar una copia de esos datos en Salesforce, por lo que no está desperdiciando almacenamiento y recursos manteniendo los datos sincronizados.

Los objetos externos se utilizan mejor cuando tiene una gran cantidad de datos que no puede o no desea almacenar en su organización de Salesforce, y necesita usar solo una pequeña cantidad de datos a la vez.

P. ¿Qué es la búsqueda externa?

Una relación de búsqueda externa vincula un objeto secundario, personalizado o externo con un objeto externo principal.

Los valores del campo ID externo estándar en el objeto externo principal se comparan con los valores del campo de relación de búsqueda externa. Para un objeto externo secundario, los valores del campo de relación de búsqueda externa provienen del Nombre de columna externa especificado.

Página de detalles del registro de objeto externo con el objeto estándar Lista relacionada con la cuenta y el objeto externo Lista relacionada Sales_Order

P. ¿Qué es la búsqueda indirecta?

Una relación de búsqueda indirecta vincula un objeto externo secundario a un objeto estándar o personalizado principal. Cuando crea un campo de relación de búsqueda indirecta en un objeto externo, especifica el campo del objeto principal y el campo del objeto secundario para que coincidan entre sí.

P. ¿Qué es un objeto grande?

Un gran objeto almacena y gestiona grandes cantidades de datos en la plataforma Salesforce . Puede archivar datos de otros objetos o llevar conjuntos de datos masivos de sistemas externos a un gran objeto para obtener una vista completa de sus clientes . Los clientes y los sistemas externos utilizan un conjunto estándar de API para acceder a los datos de Big Object. Un objeto grande proporciona un rendimiento constante, ya sea que tenga 1 millón de registros, 100 millones o incluso mil millones. Esta escala le da a un objeto grande su poder y define sus características.

P: ¿Cuáles son los tipos de objetos grandes?

Hay dos tipos de objetos grandes.

  • Grandes objetos estándar: objetos definidos por Salesforce e incluidos en los productos de Salesforce. Los objetos grandes estándar están disponibles de fábrica y no se pueden personalizar.
  • Grandes objetos personalizados: nuevos objetos que crea para almacenar información exclusiva de su organización. Por ejemplo, si está creando una aplicación para rastrear el inventario de productos, cree un objeto grande personalizado llamado HistoricalInventoryLevels para rastrear los niveles históricos de inventario para análisis y optimizaciones futuras

P. ¿Cuáles son algunos casos de uso de objetos grandes personalizados?

  • Vista de 360 ° del cliente: amplíe su modelo de datos de Salesforce para incluir información detallada de programas de lealtad, feeds, clics, información de facturación y aprovisionamiento, y más.
  • Auditoría y seguimiento: realice un seguimiento y mantenga una visión a largo plazo del uso de Salesforce o del producto con fines de análisis o cumplimiento.
  • Archivo histórico: mantenga el acceso a los datos históricos para fines de análisis o cumplimiento mientras optimiza el rendimiento de sus aplicaciones centrales de CRM o plataforma Lightning.

P. ¿Cuáles son las diferencias entre los objetos grandes y otros objetos?

Debido a que un objeto grande puede almacenar datos en una escala ilimitada, tiene características diferentes a otros objetos, como sObjects. Los objetos grandes también se almacenan en una parte diferente de la plataforma Lightning.

Objetos grandes sObjects
Base de datos distribuida escalable horizontalmente Base de datos relacional
Base de datos no transaccional Base de datos transaccional
Cientos de millones o incluso miles de millones de registros Millones de registros
  • Los objetos grandes solo admiten permisos de objetos y campos, no reglas de uso compartido estándar o estándar .
  • Las funciones como disparadores, flujos, procesos y la aplicación móvil Salesforce no son compatibles con los objetos grandes.
  1. ¿Qué tipo de objetos grandes son?
  • Objetos grandes estándar : los define Salesforce y se incluyen en los productos de Salesforce. Ej .: FieldHistoryArchive (que le permite almacenar hasta 10 años de datos de historial de campo archivados)
  • Objetos grandes personalizados : no puede crear objetos grandes a través de la interfaz de usuario estándar de Salesforce. Sin embargo, puede crear objetos grandes siguiendo dos formas.
  1. Mediante el uso de la API de metadatos : Usted define e implementa los Big Objects personalizados a través de la API de metadatos. Para definir un objeto grande personalizado, crea un archivo de objeto que contiene su definición, campos e índice, junto con un conjunto de permisos para definir los permisos para cada campo y un archivo de paquete para definir el contenido de los metadatos del objeto. Después de insertar el archivo de metadatos a través del banco de trabajo, puede verificar que el nombre de la API de Big Object termine con «__b» en org .
  2. Creador de Big Object personalizado : Hay otra forma de crear Big Object mediante la instalación del paquete administrado «Custom Big Object Creator » de Salesforce Labs. Podemos crear Big Object usando la pestaña Lightning del creador de Big Object personalizado. En Big Objects OWD, CRUD, la seguridad de nivel de campo se puede configurar según el requisito. Como estos objetos se utilizan para almacenamiento, solo admitirá 5 tipos de datos que son » Texto, área de texto largo, fecha y hora, número y búsqueda «
  1. ¿Cómo puedo insertar registros en Big Objects?

Hay diferentes formas de crear un registro de BigObject, como usar un archivo csv, usar API como Bulk API o incluso Async SOQL o database.insertImmediate (record) apex method

Usando la API REST:

Puede insertar los datos en el objeto utilizando el método de publicación rest api a través del banco de trabajo:

«/Service/Data/v40.0/sObjects/CustomObjHistory__b»

Puede exponer los datos utilizando la página de fuerza visual o el componente Lightning.

Q. ¿Cómo podemos consultar objetos grandes?

Si sabemos que está consultando una pequeña cantidad de registros, puede usar SOQL

Y la otra forma es » Async SOQL »

AsyncSOQL : para administrar millones y millones de registros en sus grandes objetos personalizados, Salesforce presentó AsyncSOQL. Pero Async SOQL se incluye solo con la licencia de capacidad adicional de big object

P: ¿Cuáles son algunas de las consideraciones sobre objetos grandes?

  • Puede crear solo 100 objetos grandes por organización. Los límites para los campos de objetos grandes son similares a los límites de los objetos personalizados y dependen del tipo de licencia de su organización.
  • Big Objects solo admite seguridad a nivel de objeto y campo
  • Los Big Objects se pueden utilizar en el análisis de Einstein, pero no para el generador de informes y la búsqueda.
  • No podemos rastrear el historial de campo en Big Objects
  • Big Objects no admite transacciones que incluyen grandes objetos, objetos estándar y objetos personalizados.
  • No puede escribir disparadores, flujos, procesos en objetos grandes.
  • No puede utilizar objetos externos de Salesforce Connect para acceder a objetos grandes en otra organización.
  • La mejor práctica al escribir en un objeto grande es tener un mecanismo de reintento. (Por ejemplo, vuelva a intentar el lote hasta que obtenga un resultado exitoso de la API o el método Apex)
  • Puede eliminar los datos en Big Objects usando el método de vértice “deleteImmediate ()”.

P. ¿Cuándo usar Salesforce Connect?

  1. Cuando Acceso en tiempo real a los datos más recientes: ambos sistemas se mantienen sincronizados con los datos en tiempo real
  2. Cuando el sistema externo es confiable: Cuando el sistema externo es, Sistema de registro y casi libre de mantenimiento
  3. Operación CRUD bidireccional: para sincronizar los datos entre 2 sistemas wrt Crear / Actualizar / Eliminar
  4. Cuando el sistema externo tiene millones de datos: cuando está integrando otro sistema a Salesforce y no necesita replicar una cantidad sustancial de datos.

P: ¿Cuáles son algunas consideraciones relacionadas con el objeto externo?

  • Los datos de Extrenal no se almacenan en Salesforce y se accederá a ellos cuando ejecutemos el informe.
  • Cuando ejecuta un informe, Salesforce realiza una llamada de solicitud al objeto externo
  • Los informes de tendencias históricas y los campos de depósitos y depósitos no son compatibles con los informes de objetos externos
  • Si el informe incluye campos de resumen y fórmulas, esos valores agregados reflejan solo un subconjunto de sus datos. Para mejorar la precisión de los valores agregados, intente personalizar el informe para obtener datos más relevantes
  • El informe puede recuperar hasta 2000 registros si tiene objetos secundarios, el total de registros puede ser mayor o menor que 2000 según la cantidad de registros secundarios obtenidos.
  • No se admiten los campos Fórmula y Resumen de lista completa.
  • No se admite el seguimiento del historial de campo.
  • No se admiten notas ni archivos adjuntos.
  • Los metadatos de objetos externos son controlados por un sistema externo.
  • No es compatible con Salesforce Automations.

10,000 llamadas de OData por hora para las ediciones Enterprise, Performance y Unlimited.

P: ¿Qué es Salesforce Connect?

Salesforce Connect es un marco de trabajo estándar de Salesforce que le permite crear, ver, editar, eliminar y buscar datos fuera de Salesforce (fuentes externas), ya sea en las instalaciones o en la nube, o desde Salesforce.

Para obtener acceso a los datos en tiempo real almacenados en un sistema externo, es necesario crear una fuente de datos externa en Salesforce.

Configuración -> Fuente de datos externa -> Nueva fuente de datos externa

Q. ¿Qué pasará si recuperamos el objeto de unión y el objeto normal de la papelera de reciclaje?

Los tipos de datos Master – Detail Relación se convertirán para buscar tipos de datos de relación.

Si recuperamos cualquier objeto de la papelera de reciclaje, entonces toda la relación de detalle maestro se cambiará a la relación de búsqueda.

P: ¿Cuáles son los campos indexados predeterminados en Salesforce?

Tenemos algunos campos que están indexados por defecto en Salesforce, que son:

  • Nombre
  • IDENTIFICACIÓN
  • Campos de propietario
  • Campos de relación maestro-detalle
  • Campos de búsqueda
  • Últimas fechas de modificación
  • Fechas de auditoría

P. ¿Qué son los objetos de configuración?

Los objetos de configuración son aquellos que interactúan con los metadatos. Todos los demás objetos (estándar y personalizados) son objetos que no son de configuración.

Esta es una traducción realizada por EGA Futura, y este es el link a la publicación original: https://www.sfdcamplified.com/2021/04/interview-questions-on-salesforce-objects-and-relationship.html#utm_source=rss&utm_medium=rss&utm_campaign=interview-questions-on-salesforce-objects-and-relationship